diff --git a/.babelrc b/.babelrc index 5a7bc07..7853057 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,4 @@ { - "presets": [ "es2015", "stage-0" ] + "presets": [ "es2015", "stage-0" ], + "plugins": [ "istanbul" ] } diff --git a/.ebextensions/nginx.config b/.ebextensions/nginx.config new file mode 100644 index 0000000..0756782 --- /dev/null +++ b/.ebextensions/nginx.config @@ -0,0 +1,8 @@ +files: + "/etc/security/limits.conf": + content: | + * soft nofile 32144 + * hard nofile 32144 +container_commands: + 01-worker-connections: + command: "/bin/sed -i 's/worker_connections 1024/worker_connections 32144/g' /tmp/deployment/config/#etc#nginx#nginx.conf" diff --git a/.gitignore b/.gitignore index c3d83c2..597873d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,4 @@ /node_modules *.log -package-lock.json +jsdoc/ diff --git a/.travis.yml b/.travis.yml index 8440081..bef97cc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,17 @@ -dist: precise +dist: trusty language: node_js node_js: - - "6.10.0" + - "8.1.4" sudo: true +notifications: + slack: miturbanrisklab:4y7wfdHde8dtfb00wTfNZfTA + addons: postgresql: "9.5" -# apt: -# packages: -# - postgresql-9.5-postgis-2.3 + apt: + packages: + - postgresql-9.5-postgis-2.3 branches: only: @@ -18,7 +21,7 @@ branches: - report-archive before_install: - - if [[ `npm -v` != 3* ]]; then ~/.nvm/versions/node/v4.1.1/bin/npm install -g npm@3.10.10; fi + - npm i -g npm@5.0.3 - if [[ $TRAVIS_BRANCH != 'master' ]]; then BRANCH='dev'; else BRANCH='master'; fi; - export PGDATABASE=cognicity_server_testing ; git clone -b $BRANCH https://github.com/urbanriskmap/cognicity-schema.git urbanriskmap/cognicity-schema && cd urbanriskmap/cognicity-schema && bash build/run.sh && cd - diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c69951..b5e8f76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,11 @@ API Server for CogniCity * Added integration tests on Travis, including against cognicity-schema * Extended data format of cards data object to collect different types of data * Merged changes from Chennai deployment, for better deployment in new cities -* Image upload changed to use AWS S3 signed links ### v3.0.2 +* Updated to use Node v8.1.4 with npm 5.0.3 +* Pushed image url assignment to server +* Updated cards/ patch endpoint to stop potential overwriting of image url +* Card IDs generated as UUID by Postgres +* Added schema version to / endpoint +* Image upload changed to use AWS S3 signed links diff --git a/README.md b/README.md index 3d10409..ef8788e 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,11 @@ -## cognicity-server -API Server for CogniCity - -[![Build Status](https://travis-ci.org/urbanriskmap/cognicity-server.svg?branch=master)](https://travis-ci.org/urbanriskmap/cognicity-server) - -[![Coverage Status](https://coveralls.io/repos/github/urbanriskmap/cognicity-server/badge.svg?branch=server-object-refactor)](https://coveralls.io/github/urbanriskmap/cognicity-server?branch=server-object-refactor) +[![Build Status](https://travis-ci.org/urbanriskmap/cognicity-server.svg?branch=master)](https://travis-ci.org/urbanriskmap/cognicity-server) [![Coverage Status](https://coveralls.io/repos/github/urbanriskmap/cognicity-server/badge.svg?branch=server-object-refactor)](https://coveralls.io/github/urbanriskmap/cognicity-server?branch=server-object-refactor) DOI for current stable release [v3.0.1](https://github.com/urbanriskmap/cognicity-server/releases/tag/v3.0.1) [![DOI](https://zenodo.org/badge/73803254.svg)](https://zenodo.org/badge/latestdoi/73803254) +## cognicity-server +API Server for CogniCity ### Summary @@ -118,6 +115,8 @@ in the jsdoc/ folder. To build documentation do: npm run jsdoc ``` +Docs are hosted at https://urbanriskmap.github.io/cognicity-server/jsdoc/ + ### Package management Before deployment: * Use NVM to switch to node and NPM versions specified in package.json for production diff --git a/jsdoc/api_index.js.html b/jsdoc/api_index.js.html deleted file mode 100644 index 9af4a07..0000000 --- a/jsdoc/api_index.js.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - JSDoc: Source: api/index.js - - - - - - - - - - -
- -

Source: api/index.js

- - - - - - -
-
-
/**
- * CogniCity Server Data API
- * @module src/api/index
- **/
-import {Router} from 'express';
-
-// Import the dependencies we need to handle the request
-import errorHandler from 'api-error-handler';
-
-// Import validation dependencies
-import validate from 'celebrate';
-
-// Get the current version
-import {version} from '../../package.json';
-
-// Import our routes
-import cards from './routes/cards';
-import cities from './routes/cities';
-import feeds from './routes/feeds';
-import floodgauges from './routes/floodgauges';
-import floods from './routes/floods';
-import infrastructure from './routes/infrastructure';
-import reports from './routes/reports';
-
-/**
-* Build CogniCity Server Data API
-* @alias module:src/api/index
-* @param {Object} config Server configuration
-* @param {Object} db PG Promise database instance
-* @param {Object} logger Configured Winston logger instance
-* @return {Object} api Express router object for API routes
-**/
-export default ({config, db, logger}) => {
-	let api = Router(); // eslint-disable-line new-cap
-
-	// Return the API version
-	api.get('/', (req, res) => {
-		res.status(200).json({version});
-	});
-
-	// Mount the various endpoints
-	// api.use('/areas', cards({ config, db, logger }));// TODO: local_areas
-	api.use('/cards', cards({config, db, logger}));
-	api.use('/cities', cities({config, db, logger}));
-	api.use('/feeds', feeds({config, db, logger}));
-	api.use('/floodgauges', floodgauges({config, db, logger}));
-	api.use('/floods', floods({config, db, logger}));
-	api.use('/infrastructure', infrastructure({config, db, logger}));
-	api.use('/reports', reports({config, db, logger}));
-
-	// Handle validation errors (wording can be overridden using err.isJoi)
-	api.use(validate.errors());
-
-	// Handle not found errors
-	api.use((req, res) => {
-		res.status(404).json({message: 'URL not found', url: req.url});
-	});
-
-	// Handle errors gracefully returning nicely formatted json
-	api.use(errorHandler());
-
-	return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_cards_index.js.html b/jsdoc/api_routes_cards_index.js.html deleted file mode 100644 index 97c2171..0000000 --- a/jsdoc/api_routes_cards_index.js.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - JSDoc: Source: api/routes/cards/index.js - - - - - - - - - - -
- -

Source: api/routes/cards/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /cards endpoint
- * @module src/api/cards/index
- **/
-import {Router} from 'express';
-
-// Import our data model
-import cards from './model';
-
-// Import any required utility functions
-import {cacheResponse, handleResponse} from '../../../lib/util';
-
-// Import validation dependencies
-import Joi from 'joi';
-import validate from 'celebrate';
-
-// Import ID generator
-import shortid from 'shortid';
-
-// Import image upload capabilities
-import AWS from 'aws-sdk';
-
-// Caching
-import apicache from 'apicache';
-const CACHE_GROUP_CARDS = '/cards';
-
-// Function to clear out the cache
-const clearCache = () => {
-  apicache.clear(CACHE_GROUP_CARDS);
-};
-
-/**
-* CogniCity Server /cards endpoint
-* @alias module:src/api/cards/index
-* @param {Object} config Server configuration
-* @param {Object} db PG Promise database instance
-* @param {Object} logger Configured Winston logger instance
-* @return {Object} api Express router object for cards route
-**/
-export default ({config, db, logger}) => {
-  // Router
-  let api = Router(); // eslint-disable-line new-cap
-
-  // Create an S3 object
-  let s3 = new AWS.S3(
-    {
-      accessKeyId: config.AWS_S3_ACCESS_KEY_ID,
-      secretAccessKey: config.AWS_S3_SECRET_ACCESS_KEY,
-      signatureVersion: config.AWS_S3_SIGNATURE_VERSION,
-      region: config.AWS_REGION,
-    });
-
-  // Create a new card and if successful return generated cardId
-  api.post('/',
-    validate({
-      body: Joi.object().keys({
-        username: Joi.string().required(),
-        network: Joi.string().required(),
-        language: Joi.string().valid(config.LANGUAGES).required(),
-      }),
-    }),
-    (req, res, next) => {
-      let cardId = shortid.generate();
-      cards(config, db, logger).create(cardId, req.body)
-        .then((data) => data ? res.status(200)
-          .json({cardId: cardId, created: true}) :
-          next(new Error('Failed to create card')))
-        .catch((err) => {
-          /* istanbul ignore next */
-          logger.error(err);
-          /* istanbul ignore next */
-          next(err);
-        });
-    }
-  );
-
-  // Check for the existence of a card
-  api.head('/:cardId', cacheResponse(config.CACHE_DURATION_CARDS),
-    validate({
-      params: {cardId: Joi.string().required()},
-    }),
-    (req, res, next) => {
-      req.apicacheGroup = CACHE_GROUP_CARDS;
-      cards(config, db, logger).byCardId(req.params.cardId)
-        .then((data) => data ? res.status(200).end() : res.status(404).end())
-        .catch((err) => {
-          /* istanbul ignore next */
-          logger.error(err);
-          /* istanbul ignore next */
-          next(err);
-        });
-    }
-  );
-
-  // Return a card
-  api.get('/:cardId', cacheResponse(config.CACHE_DURATION_CARDS),
-    validate({
-      params: {cardId: Joi.string().min(7).max(14).required()},
-    }),
-    (req, res, next) => {
-      req.apicacheGroup = CACHE_GROUP_CARDS;
-      cards(config, db, logger).byCardId(req.params.cardId)
-        .then((data) => handleResponse(data, req, res, next))
-        .catch((err) => {
-          /* istanbul ignore next */
-          logger.error(err);
-          /* istanbul ignore next */
-          next(err);
-        });
-    }
-  );
-
-  // Update a card record with a report
-  api.put('/:cardId', validate({
-    params: {cardId: Joi.string().min(7).max(14).required()},
-    body: Joi.object().keys({
-      disaster_type: Joi.string().valid(config.DISASTER_TYPES).required(),
-      card_data: Joi.object()
-        .keys({
-            flood_depth: Joi.number(),
-            report_type: Joi.string().valid(config.REPORT_TYPES).required(),
-        })
-        .required()
-        .when('disaster_type', {
-            is: 'flood',
-            then: Joi.object({flood_depth: Joi.number().integer().min(0)
-              .max(200).required()}),    // b.c is required only when a is true
-        }),
-      text: Joi.string().allow(''),
-      image_url: Joi.string().allow(''),
-      created_at: Joi.date().iso().required(),
-      location: Joi.object().required().keys({
-        lat: Joi.number().min(-90).max(90).required(),
-        lng: Joi.number().min(-180).max(180).required(),
-      }),
-    }),
-  }),
-  (req, res, next) => {
-    try {
-      // First get the card we wish to update
-      cards(config, db, logger).byCardId(req.params.cardId)
-        .then((card) => {
-          // If the card does not exist then return an error message
-          if (!card) {
-            res.status(404).json({statusCode: 404, cardId: req.params.cardId,
-            message: `No card exists with id '${req.params.cardId}'`});
-          } else if (card && card.received) {
-            // If card already has received status then return an error message
-            res.status(409).json({statusCode: 409,
-            cardId: req.params.cardId, message: `Report already received for '+
-              ' card '${req.params.cardId}'`});
-          } else {
-            // We have a card and it has not yet had a report received
-            // Try and submit the report and update the card
-            cards(config, db, logger).submitReport(card, req.body)
-              .then((data) => {
-                clearCache();
-                res.status(200).json({statusCode: 200,
-                  cardId: req.params.cardId, created: true});
-              })
-              .catch((err) => {
-                /* istanbul ignore next */
-                logger.error(err);
-                /* istanbul ignore next */
-                next(err);
-              });
-          }
-        });
-      } catch (err) {
-        /* istanbul ignore next */
-        logger.error(err);
-        /* istanbul ignore next */
-        next(err);
-      }
-    }
-  );
-
-  // Gives an s3 signed url for the frontend to upload an image to
-  api.get('/:cardId/images', validate({
-    params: {cardId: Joi.string().min(7).max(14).required()},
-  }),
-  (req, res, next) => {
-    let s3params = {
-      Bucket: config.IMAGES_BUCKET,
-      Key: 'originals/' + req.params.cardId + '.jpg',
-      ContentType: req.query.file_type,
-    };
-    s3.getSignedUrl('putObject', s3params, (err, data) => {
-      if (err) {
-        /* istanbul ignore next */
-        logger.error('could not get signed url from S3');
-        /* istanbul ignore next */
-        logger.error(err);
-      } else {
-        let returnData = {
-          signedRequest: data,
-          url: 'https://s3.'+config.AWS_REGION+'.amazonaws.com/'
-                + config.IMAGES_BUCKET+'/'+ s3params.Key,
-        };
-        // write the url into the db under image_url for this card
-
-        cards(config, db, logger).byCardId(req.params.cardId)
-          .then((card) => {
-            if (!card) {
-res.status(404).json({statusCode: 404, cardId: req.params.cardId,
-              message: `No card exists with id '${req.params.cardId}'`});
-} else {
-              // Try and submit the report and update the card
-              cards(config, db, logger).updateReport(card,
-                { //image_url: 'https://'+config.IMAGES_HOST+'/'
-                  //+req.params.cardId+'.jpg'}
-                  //TODO decide on where url is created, here or DB
-                image_url: req.params.cardId + '.jpg'})
-              .then((data) => {
-                clearCache();
-                logger.debug( 's3 signed request: ' + returnData.signedRequest);
-                res.write(JSON.stringify(returnData));
-                res.end();
-              })
-              .catch((err) => {
-                /* istanbul ignore next */
-                logger.error(err);
-                /* istanbul ignore next */
-                next(err);
-              });
-            }
-          });
-      }
-    });
-  });
-
-  // Update a card report with new details including the image URL
-  api.patch('/:cardId', validate({
-    params: {cardId: Joi.string().min(7).max(14).required()},
-    body: Joi.object().keys({
-      image_url: Joi.string().required(),
-    }),
-  }),
-  (req, res, next) => {
-    try {
-      // First get the card we wish to update
-      cards(config, db, logger).byCardId(req.params.cardId)
-        .then((card) => {
-          // If the card does not exist then return an error message
-          if (!card) {
-res.status(404).json({statusCode: 404, cardId: req.params.cardId,
-            message: `No card exists with id '${req.params.cardId}'`});
-          } else { // We have a card
-            // Try and submit the report and update the card
-            cards(config, db, logger).updateReport(card, req.body)
-              .then((data) => {
-                clearCache();
-                res.status(200).json({statusCode: 200,
-                  cardId: req.params.cardId, updated: true});
-              })
-              .catch((err) => {
-                /* istanbul ignore next */
-                logger.error(err);
-                /* istanbul ignore next */
-                next(err);
-              });
-          }
-        });
-      } catch (err) {
-        /* istanbul ignore next */
-        logger.error(err);
-        /* istanbul ignore next */
-        next(err);
-      }
-    }
-  );
-
-  return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_cards_model.js.html b/jsdoc/api_routes_cards_model.js.html deleted file mode 100644 index 3b31733..0000000 --- a/jsdoc/api_routes_cards_model.js.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - JSDoc: Source: api/routes/cards/model.js - - - - - - - - - - -
- -

Source: api/routes/cards/model.js

- - - - - - -
-
-
/**
- * CogniCity Server /cards data model
- * @module src/api/cards/model
- **/
-import Promise from 'bluebird';
-
-/**
-* Database interaction for Cards objects
-* @alias module:src/api/cards/model
-* @param {Object} config Server configuration
-* @param {Object} db PG Promise database instance
-* @param {Object} logger Configured Winston logger instance
-* @return {Object} data Query methods
-**/
-export default (config, db, logger) => ({
-  // Create a new card entry with the given cardId
-  create: (cardId, body) => new Promise((resolve, reject) => {
-    // Setup query
-    let query = `INSERT INTO ${config.TABLE_GRASP_CARDS}
-      (card_id, username, network, language, received)
-      VALUES ($1, $2, $3, $4, $5) RETURNING pkey`;
-
-    // Setup values
-    let values = [cardId, body.username, body.network, body.language, false];
-
-    // Execute
-    logger.debug(query, values);
-    db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
-      .then((data) => resolve(data))
-      /* istanbul ignore next */
-      .catch((err) => {
-        /* istanbul ignore next */
-        reject(err);
-}
-      );
-  }),
-
-  // Return specific card by id
-  byCardId: (cardId) => new Promise((resolve, reject) => {
-    // Setup query
-    let query = `SELECT c.card_id, c.username, c.network, c.language,
-      c.received, CASE WHEN r.card_id IS NOT NULL THEN
-        json_build_object('created_at', r.created_at, 'disaster_type',
-        r.disaster_type, 'text', r.text, 'card_data', r.card_data, 'image_url',
-        r.image_url, 'status', r.status)
-      ELSE null END AS report
-      FROM ${config.TABLE_GRASP_CARDS} c
-      LEFT JOIN ${config.TABLE_GRASP_REPORTS} r USING (card_id)
-      WHERE c.card_id = $1
-      LIMIT 1`;
-
-    // Setup values
-    let values = [cardId];
-
-    // Execute
-    logger.debug(query, values);
-    db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
-      .then((data) => resolve(data))
-      /* istanbul ignore next */
-      .catch((err) => {
-        /* istanbul ignore next */
-        reject(err);
-      });
-  }),
-
-  // Add entry to the reports table and then update the card record accordingly
-  submitReport: (card, body) => new Promise((resolve, reject) => {
-    // Setup our queries
-    let queries = [
-      {
-        query: `INSERT INTO ${config.TABLE_GRASP_REPORTS}
-          (card_id, card_data, text, created_at, disaster_type, status,
-            the_geom)
-          VALUES ($1, $2, COALESCE($3,''), $4, $5, $6,
-          ST_SetSRID(ST_Point($7,$8),4326))`,
-        values: [card.card_id, body.card_data, body.text,
-          body.created_at, body.disaster_type, 'Confirmed', body.location.lng,
-          body.location.lat],
-      },
-      {
-        query: `UPDATE ${config.TABLE_GRASP_CARDS}
-          SET received = TRUE WHERE card_id = $1`,
-        values: [card.card_id],
-      },
-      {
-        query: `INSERT INTO ${config.TABLE_GRASP_LOG}
-              (card_id, event_type)
-              VALUES ($1, $2)`,
-        values: [card.card_id, 'REPORT SUBMITTED'],
-      },
-    ];
-
-    // Log queries to debugger
-    for (let query of queries) logger.debug(query.query, query.values);
-
-    // Execute in a transaction as both INSERT and UPDATE must happen together
-    db.tx((t) => {
-      return t.batch(queries.map((query) => t.none(query.query, query.values)));
-    }).timeout(config.PGTIMEOUT)
-      .then((data) => resolve(data))
-      /* istanbul ignore next */
-      .catch((err) => {
-        /* istanbul ignore next */
-        reject(err);
-      });
-  }),
-
-  // Update the reports table with new report details
-  updateReport: (card, body) => new Promise((resolve, reject) => {
-    // Setup our queries
-    let queries = [
-      {
-        query: `UPDATE ${config.TABLE_GRASP_REPORTS} SET
-          image_url = COALESCE($2, image_url)
-          WHERE card_id = $1`,
-        values: [card.card_id, body.image_url],
-      },
-      {
-        query: `INSERT INTO ${config.TABLE_GRASP_LOG}
-              (card_id, event_type)
-              VALUES ($1, $2)`,
-        values: [card.card_id, 'REPORT UPDATES'],
-      },
-    ];
-
-    // Log queries to debugger
-    for (let query of queries) logger.debug(query.query, query.values);
-
-    // Execute in a transaction as both INSERT and UPDATE must happen together
-    db.tx((t) => {
-      return t.batch(queries.map((query) => t.none(query.query, query.values)));
-    }).timeout(config.PGTIMEOUT)
-      .then((data) => resolve(data))
-      /* istanbul ignore next */
-      .catch((err) => {
-        /* istanbul ignore next */
-        reject(err);
-      });
-  }),
-
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_cities_index.js.html b/jsdoc/api_routes_cities_index.js.html deleted file mode 100644 index 602d436..0000000 --- a/jsdoc/api_routes_cities_index.js.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - JSDoc: Source: api/routes/cities/index.js - - - - - - - - - - -
- -

Source: api/routes/cities/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /cities endpoint
- * @module src/api/cities/index
- **/
-import {Router} from 'express';
-
-// Import our data model
-import cities from './model';
-
-// Import any required utility functions
-import {cacheResponse, handleGeoResponse} from '../../../lib/util';
-
-// Import validation dependencies
-import Joi from 'joi';
-import validate from 'celebrate';
-
-/**
- * Endpoint specification for cities data
- * @alias module:src/api/cities/index
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} api Express router object for reports route
- */
-export default ({config, db, logger}) => {
-	let api = Router(); // eslint-disable-line new-cap
-
-	// Get a list of infrastructure by type for a given city
-	api.get('/', cacheResponse('1 day'),
-		validate({
-			query: {
-				format: Joi.any().valid(config.FORMATS)
-					.default(config.FORMAT_DEFAULT),
-				geoformat: Joi.any().valid(config.GEO_FORMATS)
-					.default(config.GEO_FORMAT_DEFAULT),
-			},
-		}),
-		(req, res, next) => cities(config, db, logger).all()
-			.then((data) => handleGeoResponse(data, req, res, next))
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-	return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_cities_model.js.html b/jsdoc/api_routes_cities_model.js.html deleted file mode 100644 index 492a76e..0000000 --- a/jsdoc/api_routes_cities_model.js.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - JSDoc: Source: api/routes/cities/model.js - - - - - - - - - - -
- -

Source: api/routes/cities/model.js

- - - - - - -
-
-
/**
- * CogniCity Server /cities data model
- * @module src/api/cities/model
- **/
-import Promise from 'bluebird';
-
-/**
-* Methods to get cities data from database
- * @alias module:src/api/cities/model
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} Query methods
- */
-export default (config, db, logger) => ({
-	// A list of all infrastructure matching a given type
-	all: () => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT code, name, the_geom
-			FROM cognicity.instance_regions`;
-
-		// Execute
-		logger.debug(query);
-		db.any(query).timeout(config.PGTIMEOUT)
-			.then((data) => resolve(data))
-			.catch((err) => reject(err));
-	}),
-
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_feeds_index.js.html b/jsdoc/api_routes_feeds_index.js.html deleted file mode 100644 index bd17720..0000000 --- a/jsdoc/api_routes_feeds_index.js.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - JSDoc: Source: api/routes/feeds/index.js - - - - - - - - - - -
- -

Source: api/routes/feeds/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /feeds endpoint
- * @module src/api/feeds/index
- **/
- import {Router} from 'express';
-
-// Import our data model
-import feeds from './model';
-
-// Import validation dependencies
-import Joi from 'joi';
-import validate from 'celebrate';
-
-/**
- * Endpoint specification for feeds
- * @alias module:src/api/feeds/index
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} api Express router object for reports route
- */
-export default ({config, db, logger}) => {
-	let api = Router(); // eslint-disable-line new-cap
-
-	// Create a new qlue record in the database
-	// TODO: What is mandatory around title / text, any rules AND/OR?
-	// TODO: Bulk endpoint for multiple POSTs
-	api.post('/qlue', validate({
-			body: Joi.object().keys({
-				post_id: Joi.number().integer().required(),
-				created_at: Joi.date().iso().required(),
-				title: Joi.string().allow(''),
-				text: Joi.string().allow('').required(),
-				image_url: Joi.string(),
-				qlue_city: Joi.string().valid(config.API_FEEDS_QLUE_CITIES).required(),
-				disaster_type: Joi.string().valid(config.API_FEEDS_QLUE_DISASTER_TYPES)
-					.required(),
-				location: Joi.object().required().keys({
-					lat: Joi.number().min(-90).max(90).required(),
-					lng: Joi.number().min(-180).max(180).required(),
-				}),
-			}),
-		}),
-		(req, res, next) => feeds(config, db, logger).addQlueReport(req.body)
-			.then((data) => res.json(data))
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-	// Create a new detik record in the database
-	// TODO: What is mandatory around title / text, any rules AND/OR?
-	// TODO: Bulk endpoint for multiple POSTs
-	api.post('/detik', validate({
-			body: Joi.object().keys({
-				contribution_id: Joi.number().integer().required(),
-				created_at: Joi.date().iso().required(),
-				title: Joi.string().allow(''),
-				text: Joi.string().allow('').required(),
-				url: Joi.string().allow(''),
-				image_url: Joi.string(),
-				disaster_type: Joi.string().valid(config.API_FEEDS_DETIK_DISASTER_TYPES)
-					.required(),
-				location: Joi.object().required().keys({
-					latitude: Joi.number().min(-90).max(90).required(),
-					longitude: Joi.number().min(-180).max(180).required(),
-				}),
-			}),
-		}),
-		(req, res, next) => feeds(config, db, logger).addDetikReport(req.body)
-			.then((data) => res.json(data))
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-	return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_feeds_model.js.html b/jsdoc/api_routes_feeds_model.js.html deleted file mode 100644 index 132bd71..0000000 --- a/jsdoc/api_routes_feeds_model.js.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - JSDoc: Source: api/routes/feeds/model.js - - - - - - - - - - -
- -

Source: api/routes/feeds/model.js

- - - - - - -
-
-
/**
- * CogniCity Server /feeds data model
- * @module src/api/feeds/model
- **/
- import Promise from 'bluebird';
-
- /**
- * Methods to interact with feeds layers in database
-  * @alias module:src/api/feeds/model
-  * @param {Object} config Server configuration
-  * @param {Object} db PG Promise database instance
-  * @param {Object} logger Configured Winston logger instance
-  * @return {Object} Query methods
-  */
-export default (config, db, logger) => ({
-
-  // Add a new qlue report
-  addQlueReport: (body) => new Promise((resolve, reject) => {
-    // Setup query
-    let query = `INSERT INTO ${config.TABLE_FEEDS_QLUE}
-       (post_id, created_at, disaster_type, text, image_url, title, qlue_city,
-         the_geom)
-      VALUES ($1, $2, $3, $4, $5, $6, $7, ST_SetSRID(ST_Point($8,$9),4326))`;
-
-    // Setup values
-    let values = [body.post_id, body.created_at, body.disaster_type, body.text,
-      body.image_url, body.title, body.qlue_city, body.location.lng,
-      body.location.lat];
-
-    // Execute
-    logger.debug(query, values);
-    db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
-      .then(() => resolve({post_id: body.post_id, created: true}))
-      .catch((err) => {
-        if (err.constraint === 'reports_post_id_key') {
-          resolve({post_id: body.post_id, created: false,
-            message: `${body.post_id} already exists in reports table`});
-        } else {
-          reject(err);
-        }
-        });
-    }),
-
-  // Add a detik report
-  addDetikReport: (body) => new Promise((resolve, reject) => {
-    // Setup query
-    let query = `INSERT INTO ${config.TABLE_FEEDS_DETIK}
-    (contribution_id, created_at, disaster_type, title, text, url, image_url,
-      the_geom)
-    VALUES ($1, $2, $3, $4, $5, $6, $7, ST_SetSRID(ST_POINT($8, $9),4326))`;
-
-    // Setup values
-    let values = [body.contribution_id, body.created_at, body.disaster_type,
-      body.title, body.text, body.url, body.image_url, body.location.longitude,
-      body.location.latitude];
-
-    // Execute
-    logger.debug(query, values);
-    db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
-      .then(() => resolve({contribution_id: body.contribution_id,
-        created: true}))
-      .catch((err) => {
-        if (err.constraint === 'reports_contribution_id_key') {
-          resolve({contribution_id: body.contribution_id, created: false,
-            message: `${body.contribution_id}`
-            + ` already exists in reports table`});
-        } else {
-        /* istanbul ignore next */
-        reject(err);
-        }
-      });
-  }),
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_floodgauges_index.js.html b/jsdoc/api_routes_floodgauges_index.js.html deleted file mode 100644 index 6e813e6..0000000 --- a/jsdoc/api_routes_floodgauges_index.js.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - JSDoc: Source: api/routes/floodgauges/index.js - - - - - - - - - - -
- -

Source: api/routes/floodgauges/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /floodgauges endpoint
- * @module src/api/floodgauges/index
- **/
- import {Router} from 'express';
-
-// Import our data model
-import floodgauges from './model';
-
-// Import any required utility functions
-import {cacheResponse, handleGeoResponse} from '../../../lib/util';
-
-// Import validation dependencies
-import Joi from 'joi';
-import validate from 'celebrate';
-
-/**
- * Endpoint specification for floodgauges data
- * @alias module:src/api/floodgauges/index
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} api Express router object for reports route
- */
-export default ({config, db, logger}) => {
-  let api = Router(); // eslint-disable-line new-cap
-
-  // Get a list of all flood gauge reports
-  api.get('/', cacheResponse('1 minute'),
-    validate({
-      query: {
-        city: Joi.any().valid(config.REGION_CODES),
-        format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT),
-        geoformat: Joi.any().valid(config.GEO_FORMATS)
-          .default(config.GEO_FORMAT_DEFAULT),
-      },
-    }),
-    (req, res, next) => floodgauges(config, db, logger).all()
-      .then((data) => handleGeoResponse(data, req, res, next))
-      .catch((err) => {
-        /* istanbul ignore next */
-        logger.error(err);
-        /* istanbul ignore next */
-        next(err);
-      })
-  );
-
-  // Get a single flood gauge report
-  api.get('/:id', cacheResponse('1 minute'),
-    validate({
-      params: {id: Joi.number().integer().required()},
-      query: {
-        format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT),
-        geoformat: Joi.any().valid(config.GEO_FORMATS)
-          .default(config.GEO_FORMAT_DEFAULT),
-      },
-    }),
-    (req, res, next) => floodgauges(config, db, logger).byId(req.params.id)
-      .then((data) => handleGeoResponse(data, req, res, next))
-      .catch((err) => {
-        /* istanbul ignore next */
-        logger.error(err);
-        /* istanbul ignore next */
-        next(err);
-      })
-  );
-
-  return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_floodgauges_model.js.html b/jsdoc/api_routes_floodgauges_model.js.html deleted file mode 100644 index 31867b7..0000000 --- a/jsdoc/api_routes_floodgauges_model.js.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - JSDoc: Source: api/routes/floodgauges/model.js - - - - - - - - - - -
- -

Source: api/routes/floodgauges/model.js

- - - - - - -
-
-
/**
-* CogniCity Server /floodgauges data model
-* @module src/api/floodgauges/model
-**/
-import Promise from 'bluebird';
-
-/**
-* Methods to get floodgauges layers from database
-* @alias module:src/api/floodgauges/model
-* @param {Object} config Server configuration
-* @param {Object} db PG Promise database instance
-* @param {Object} logger Configured Winston logger instance
-* @return {Object} Query methods
-*/
-export default (config, db, logger) => ({
-	// Return all flood gauge reports within the defined max period
-	// Optional: city (Petabencana.id Instance Region 3 letter code)
-	all: (city) => new Promise((resolve, reject) => {
-		let query = `SELECT gaugeid, gaugenameid, the_geom,
-			array_to_json(array_agg((measuredatetime, depth, warninglevel,
-					warningnameid) ORDER BY measuredatetime ASC)) as observations
-			FROM ${config.TABLE_FLOODGAUGE_REPORTS}
-			WHERE measuredatetime >= to_timestamp($1)
-			AND ($2 IS NULL OR tags->>'instance_region_code'=$2)
-			GROUP BY gaugeid, the_geom, gaugenameid LIMIT $3`;
-
-		// Setup values
-		let timeWindow = (Date.now() / 1000) -
-			config.API_FLOODGAUGE_REPORTS_TIME_WINDOW;
-		let values = [timeWindow, city, config.API_FLOODGAUGE_REPORTS_LIMIT];
-
-		// Execute
-		logger.debug(query, values);
-		db.any(query, values).timeout(config.PGTIMEOUT)
-			.then((data) => resolve(data))
-			/* istanbul ignore next */
-			.catch((err) => reject(err));
-	}),
-
-	// Return specific flood gauge report by id
-	byId: (id) => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT gaugeid, gaugenameid, the_geom,
-			array_to_json(array_agg((measuredatetime, depth, warninglevel,
-					warningnameid) ORDER BY measuredatetime ASC)) as observations
-			FROM ${config.TABLE_FLOODGAUGE_REPORTS}
-			WHERE pkey = $1
-			GROUP BY gaugeid, the_geom, gaugenameid`;
-
-		// Setup values
-		let values = [id];
-
-		// Execute
-		logger.debug(query, values);
-		db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
-			/* istanbul ignore next */
-			.then((data) => resolve(data))
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				reject(err);
-			});
-	}),
-
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_floods_index.js.html b/jsdoc/api_routes_floods_index.js.html deleted file mode 100644 index 12e93b8..0000000 --- a/jsdoc/api_routes_floods_index.js.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - JSDoc: Source: api/routes/floods/index.js - - - - - - - - - - -
- -

Source: api/routes/floods/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /floods endpoint
- * @module src/api/floods/index
- **/
-import {Router} from 'express';
-
-// Import our data model
-import floods from './model';
-
-// Import any required utility functions
-import {cacheResponse, formatGeo, jwtCheck} from '../../../lib/util';
-
-// Caching
-import apicache from 'apicache';
-const CACHE_GROUP_FLOODS = '/floods';
-const CACHE_GROUP_FLOODS_STATES = '/floods/states';
-
-// Cap formatter helper
-import Cap from '../../../lib/cap';
-
-// Import validation dependencies
-import Joi from 'joi';
-import validate from 'celebrate';
-
-// Rem status codes
-const REM_STATES = {
-	1: {
-		severity: 'Unknown',
-		levelDescription: 'AN UNKNOWN LEVEL OF FLOODING - USE CAUTION -',
-	},
-	2: {
-		severity: 'Minor',
-		levelDescription: 'FLOODING OF BETWEEN 10 and 70 CENTIMETERS',
-	},
-	3: {
-		severity: 'Moderate',
-		levelDescription: 'FLOODING OF BETWEEN 71 and 150 CENTIMETERS',
-	},
-	4: {
-		severity: 'Severe',
-		levelDescription: 'FLOODING OF OVER 150 CENTIMETERS',
-	},
-};
-
-// Function to clear out the cache
-const clearCache = () => {
-	apicache.clear(CACHE_GROUP_FLOODS);
-	apicache.clear(CACHE_GROUP_FLOODS_STATES);
-};
-
-/**
- * Endpoint specification for floods data
- * @alias module:src/api/floods/index
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} api Express router object for reports route
- */
-export default ({config, db, logger}) => {
-	let api = Router(); // eslint-disable-line new-cap
-	const cap = new Cap(logger); // Setup our cap formatter
-
-	// Get a list of all floods
-	api.get('/', cacheResponse(config.CACHE_DURATION_FLOODS),
-		validate({
-			query: {
-				city: Joi.any().valid(config.REGION_CODES),
-				format: Joi.any().valid(['xml'].concat(config.FORMATS))
-								.default(config.FORMAT_DEFAULT),
-				geoformat: Joi.any().valid(['cap'].concat(config.GEO_FORMATS))
-								.default(config.GEO_FORMAT_DEFAULT),
-				minimum_state: Joi.number().integer().valid(Object.keys(REM_STATES)),
-			},
-		}),
-		(req, res, next) => {
-			req.apicacheGroup = CACHE_GROUP_FLOODS;
-			if (req.query.geoformat === 'cap' && req.query.format !== 'xml') {
-				res.status(400).json({statusCode: 400,
-										message: 'format must be \'xml\' when geoformat=\'cap\''});
-			}	else if (config.GEO_FORMATS.indexOf(req.query.geoformat) > -1
-				&& req.query.format !== 'json') {
-					res.status(400).json({statusCode: 400,
-						message: 'format must be \'json\' when geoformat '
-											+'IN (\'geojson\',\'topojson\')'});
-			} else {
-floods(config, db, logger).allGeo(req.query.city, req.query.minimum_state)
-				.then((data) =>
-					req.query.geoformat === 'cap' ?
-						// If CAP format has been required convert to geojson then to CAP
-						formatGeo(data, 'geojson')
-							.then((formatted) => res.status(200)
-								.set('Content-Type', 'text/xml')
-								.send(cap.geoJsonToAtomCap(formatted.features)))
-							/* istanbul ignore next */
-							.catch((err) => next(err)) :
-						// Otherwise hand off to geo formatter
-						formatGeo(data, req.query.geoformat)
-							.then((formatted) => res.status(200)
-								.json({statusCode: 200, result: formatted}))
-							/* istanbul ignore next */
-							.catch((err) => next(err))
-				)
-				.catch((err) => {
-					/* istanbul ignore next */
-					logger.error(err);
-					/* istanbul ignore next */
-					next(err);
-				});
-}
-		}
-  );
-
-	// Just get the states without the geographic boundaries
-	api.get('/states', cacheResponse(config.CACHE_DURATION_FLOODS_STATES),
-		validate({
-			query: {
-				city: Joi.any().valid(config.REGION_CODES),
-				format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT),
-				minimum_state: Joi.number().integer().valid(Object.keys(REM_STATES)),
-			},
-		}),
-		(req, res, next) => {
-			req.apicacheGroup = CACHE_GROUP_FLOODS_STATES;
-			floods(config, db, logger).all(req.query.city, req.query.minimum_state)
-				.then((data) => res.status(200).json({statusCode: 200, result: data}))
-				.catch((err) => {
-					/* istanbul ignore next */
-					logger.error(err);
-					/* istanbul ignore next */
-					next(err);
-				});
-		}
-  );
-
-	// Update the flood status of a local area
-	api.put('/:localAreaId', jwtCheck,
-		validate({
-			params: {localAreaId: Joi.number().integer().required()},
-			body: Joi.object().keys({
-				state: Joi.number().integer()
-					.valid(Object.keys(REM_STATES).map((state) => parseInt(state)))
-					.required(),
-			}),
-			query: {
-				username: Joi.string().required(),
-			},
-		}),
-		(req, res, next) => floods(config, db, logger)
-		.updateREMState(req.params.localAreaId, req.body.state, req.query.username)
-			.then(() => {
-				clearCache();
-				res.status(200).json({localAreaId: req.params.localAreaId,
-					state: req.body.state, updated: true});
-			})
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-  );
-
-	// Remove the flood status of a local and add a log entry for audit
-	api.delete('/:localAreaId', jwtCheck,
-		validate({
-			params: {localAreaId: Joi.number().integer().required()},
-			query: {
-				username: Joi.string().required(),
-			},
-		}),
-		(req, res, next) => floods(config, db, logger)
-			.clearREMState(req.params.localAreaId, req.query.username)
-			.then(() => {
-				clearCache();
-				res.status(200).json({localAreaId: req.params.localAreaId,
-					state: null, updated: true});
-			})
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-	return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_floods_model.js.html b/jsdoc/api_routes_floods_model.js.html deleted file mode 100644 index 70cac58..0000000 --- a/jsdoc/api_routes_floods_model.js.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - JSDoc: Source: api/routes/floods/model.js - - - - - - - - - - -
- -

Source: api/routes/floods/model.js

- - - - - - -
-
-
/**
- * CogniCity Server /floods data model
- * @module src/api/floods/model
- **/
- import Promise from 'bluebird';
-
- /**
- * Methods to interact with flood layers in database
-  * @alias module:src/api/floods/model
-  * @param {Object} config Server configuration
-  * @param {Object} db PG Promise database instance
-  * @param {Object} logger Configured Winston logger instance
-  * @return {Object} Query methods
-  */
-export default (config, db, logger) => ({
-
-	// Get all flood reports for a given city
-	all: (city, minimumState) => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT local_area as area_id, state, last_updated
-			FROM ${config.TABLE_REM_STATUS} status, ${config.TABLE_LOCAL_AREAS} area
-			WHERE status.local_area = area.pkey
-			AND state IS NOT NULL AND ($2 IS NULL OR state >= $2)
-			AND ($1 IS NULL OR area.instance_region_code=$1)`;
-
-		// Setup values
-		let values = [city, minimumState];
-
-		// Execute
-		logger.debug(query, values);
-		db.any(query, values).timeout(config.PGTIMEOUT)
-			.then((data) => {
-				resolve(data);
-			})
-			.catch((err) => {
-				/* istanbul ignore next */
-				reject(err);
-			});
-	}),
-
-	// Get all flood reports for a given city
-	allGeo: (city, minimumState) => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT la.the_geom, la.pkey as area_id, la.geom_id,
-			la.area_name, la.parent_name, la.city_name, rs.state, rs.last_updated
-			FROM ${config.TABLE_LOCAL_AREAS} la
-			${minimumState ? 'JOIN' : 'LEFT JOIN'}
-			(SELECT local_area, state, last_updated FROM ${config.TABLE_REM_STATUS}
-			WHERE state IS NOT NULL AND ($2 IS NULL OR state >= $2)) rs
-			ON la.pkey = rs.local_area
-			WHERE $1 IS NULL OR instance_region_code = $1`;
-
-		// Setup values
-		let values = [city, minimumState];
-
-		// Execute
-		logger.debug(query, values);
-		db.any(query, values).timeout(config.PGTIMEOUT)
-			.then((data) => {
-				resolve(data);
-			})
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				reject(err);
-			});
-	}),
-
-	// Update the REM state and append to the log
-	updateREMState: (localAreaId, state, username) =>
-		new Promise((resolve, reject) => {
-			// Setup a timestamp with current date/time in ISO format
-			let timestamp = (new Date()).toISOString();
-
-			// Setup our queries
-			let queries = [
-				{
-					query: `INSERT INTO ${config.TABLE_REM_STATUS}
-						( local_area, state, last_updated )
-						VALUES ( $1, $2, $3 )
-						ON CONFLICT (local_area) DO
-						UPDATE SET state=$2, last_updated=$3`,
-					values: [localAreaId, state, timestamp],
-				},
-				{
-					query: `INSERT INTO ${config.TABLE_REM_STATUS_LOG}
-						( local_area, state, changed, username )
-						VALUES ( $1, $2, $3, $4 )`,
-					values: [localAreaId, state, timestamp, username],
-				},
-			];
-
-			// Log queries to debugger
-			for (let query of queries) logger.debug(query.query, query.values);
-
-			// Execute in a transaction as both INSERT and UPDATE must happen together
-			db.tx((t) => {
-				return t.batch(queries.map((query) =>
-				t.none(query.query, query.values)));
-			}).timeout(config.PGTIMEOUT)
-				.then((data) => {
-					resolve(data);
-				})
-				/* istanbul ignore next */
-				.catch((err) => {
-					/* istanbul ignore next */
-					reject(err);
-				});
-		}),
-
-	// Remove the REM state record and append to the log
-	clearREMState: (localAreaId, username) => new Promise((resolve, reject) => {
-		// Setup a timestamp with current date/time in ISO format
-		let timestamp = (new Date()).toISOString();
-
-		// Setup our queries
-		let queries = [
-			{
-				query: `DELETE FROM ${config.TABLE_REM_STATUS}
-					WHERE local_area = $1`,
-				values: [localAreaId],
-			},
-			{
-				query: `INSERT INTO ${config.TABLE_REM_STATUS_LOG}
-					( local_area, state, changed, username )
-					VALUES ( $1, $2, $3, $4 )`,
-				values: [localAreaId, null, timestamp, username],
-			},
-		];
-
-		// Log queries to debugger
-		for (let query of queries) logger.debug(query.query, query.values);
-
-		// Execute in a transaction as both INSERT and UPDATE must happen together
-		db.tx((t) => {
-			return t.batch(queries.map((query) => t.none(query.query, query.values)));
-		}).timeout(config.PGTIMEOUT)
-			.then((data) => {
-				resolve(data);
-			})
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				reject(err);
-			});
-	}),
-
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_infrastructure_index.js.html b/jsdoc/api_routes_infrastructure_index.js.html deleted file mode 100644 index 6eb831a..0000000 --- a/jsdoc/api_routes_infrastructure_index.js.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - JSDoc: Source: api/routes/infrastructure/index.js - - - - - - - - - - -
- -

Source: api/routes/infrastructure/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /infrastructure endpoint
- * @module src/api/infrastructure/index
- **/
-import {Router} from 'express';
-
-// Import our data model
-import infrastructure from './model';
-
-// Import any required utility functions
-import {cacheResponse, handleGeoResponse} from '../../../lib/util';
-
-// Import validation dependencies
-import Joi from 'joi';
-import validate from 'celebrate';
-
-/**
- * Endpoint specification for infrastructrue data
- * @alias module:src/api/infrastructure/index
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} api Express router object for reports route
- */
-export default ({config, db, logger}) => {
-	let api = Router(); // eslint-disable-line new-cap
-
-	// Get a list of infrastructure by type for a given city
-	api.get('/:type', cacheResponse(config.CACHE_DURATION_INFRASTRUCTURE),
-		validate({
-			params: {type: Joi.any().valid(config.INFRASTRUCTURE_TYPES)},
-			query: {
-				city: Joi.any().valid(config.REGION_CODES),
-				format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT),
-				geoformat: Joi.any().valid(config.GEO_FORMATS)
-									.default(config.GEO_FORMAT_DEFAULT),
-			},
-		}),
-		(req, res, next) => infrastructure(config, db, logger)
-			.all(req.query.city, req.params.type)
-			.then((data) => handleGeoResponse(data, req, res, next))
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-	return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_infrastructure_model.js.html b/jsdoc/api_routes_infrastructure_model.js.html deleted file mode 100644 index 2b8cb5c..0000000 --- a/jsdoc/api_routes_infrastructure_model.js.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - JSDoc: Source: api/routes/infrastructure/model.js - - - - - - - - - - -
- -

Source: api/routes/infrastructure/model.js

- - - - - - -
-
-
/**
- * CogniCity Server /infrastructure data model
- * @module src/api/infrastructure/model
- **/
-import Promise from 'bluebird';
-
-/**
-* Methods to get infrastructure layers from database
- * @alias module:src/api/infrastructure/model
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} Query methods
- */
-export default (config, db, logger) => ({
-	// A list of all infrastructure matching a given type
-	all: (city, type) => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT name, the_geom
-			FROM infrastructure.${type}
-			WHERE ($1 IS NULL OR tags->>'instance_region_code'=$1)`;
-
-		// Setup values
-		let values = [city];
-
-		// Execute
-		logger.debug(query, values);
-		db.any(query, values).timeout(config.PGTIMEOUT)
-			.then((data) => resolve(data))
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				reject(err);
-			});
-	}),
-
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_reports_archive_index.js.html b/jsdoc/api_routes_reports_archive_index.js.html deleted file mode 100644 index 066f2f7..0000000 --- a/jsdoc/api_routes_reports_archive_index.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - JSDoc: Source: api/routes/reports/archive/index.js - - - - - - - - - - -
- -

Source: api/routes/reports/archive/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /reports/archive endpoint
- * @module src/api/reports/archive/index
- **/
-import {Router} from 'express';
-
-// Import our data model
-import archive from './model';
-
-// Import any required utility functions
-import {cacheResponse, handleGeoResponse} from '../../../../lib/util';
-
-// Import validation dependencies
-import BaseJoi from 'joi';
-import Extension from 'joi-date-extensions';
-const Joi = BaseJoi.extend(Extension);
-
-import validate from 'celebrate';
-/**
- * Methods to get historic flood reports from database
- * @alias module:src/api/reports/archive/index
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} api Express router object for reports route
- */
-export default ({config, db, logger}) => {
-	let api = Router(); // eslint-disable-line new-cap
-
-	// Get a list of all reports
-	api.get('/', cacheResponse('1 minute'),
-
-		validate({
-			query: {
-				city: Joi.any().valid(config.REGION_CODES),
-        start: Joi.date().format('YYYY-MM-DDTHH:mm:ssZ').required(),
-				end: Joi.date().format('YYYY-MM-DDTHH:mm:ssZ')
-					.min(Joi.ref('start')).required(),
-				format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT),
-				geoformat: Joi.any().valid(config.GEO_FORMATS)
-					.default(config.GEO_FORMAT_DEFAULT),
-			},
-		}),
-		(req, res, next) => archive(config, db, logger)
-			.all(req.query.start, req.query.end, req.query.city)
-			.then((data) => handleGeoResponse(data, req, res, next))
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-	return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_reports_archive_model.js.html b/jsdoc/api_routes_reports_archive_model.js.html deleted file mode 100644 index 2eb2e0a..0000000 --- a/jsdoc/api_routes_reports_archive_model.js.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - JSDoc: Source: api/routes/reports/archive/model.js - - - - - - - - - - -
- -

Source: api/routes/reports/archive/model.js

- - - - - - -
-
-
/**
- * CogniCity Server /reports/archive data model
- * @module src/api/reports/archive/model
- **/
-import Promise from 'bluebird';
-
-/**
- * Interact with historic report objects
- * @alias module:src/api/reports/archive/model
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} Query methods
- */
-export default (config, db, logger) => ({
-	all: (start, end, city) => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT pkey, created_at, source,
-			status, url, image_url, disaster_type, report_data, tags, title, text,
-			the_geom FROM ${config.TABLE_REPORTS}
-			WHERE created_at >= $1::timestamp with time zone
-      AND created_at <= $2::timestamp with time zone
-			AND ($3 IS NULL OR tags->>'instance_region_code'=$3)
-			ORDER BY created_at DESC LIMIT $4`;
-
-		// var timeWindow = (Date.now() / 1000) - timeperiod;
-
-		let values = [start, end, city, config.API_REPORTS_LIMIT];
-
-		// Execute
-		logger.debug(query, values);
-		db.any(query, values).timeout(config.PGTIMEOUT)
-			.then((data) => resolve(data))
-			.catch((err) => reject(err));
-	}),
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_reports_index.js.html b/jsdoc/api_routes_reports_index.js.html deleted file mode 100644 index fc08297..0000000 --- a/jsdoc/api_routes_reports_index.js.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - JSDoc: Source: api/routes/reports/index.js - - - - - - - - - - -
- -

Source: api/routes/reports/index.js

- - - - - - -
-
-
/**
- * CogniCity Server /reports endpoint
- * @module src/api/reports/index
- **/
- import {Router} from 'express';
-
-// Import our data model
-import reports from './model';
-
-import archive from './archive';
-
-// Import any required utility functions
-import {cacheResponse, handleGeoResponse} from '../../../lib/util';
-
-// Import validation dependencies
-import Joi from 'joi';
-import validate from 'celebrate';
-
-/**
- * Methods to get current flood reports from database
- * @alias module:src/api/reports/index
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} api Express router object for reports route
- */
-export default ({config, db, logger}) => {
-	let api = Router(); // eslint-disable-line new-cap
-
-	// Get a list of all reports
-	api.get('/', cacheResponse('1 minute'),
-		validate({
-			query: {
-				city: Joi.any().valid(config.REGION_CODES),
-				timeperiod: Joi.number().integer().positive()
-					.max(config.API_REPORTS_TIME_WINDOW_MAX)
-					.default(config.API_REPORTS_TIME_WINDOW),
-				format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT),
-				geoformat: Joi.any().valid(config.GEO_FORMATS)
-					.default(config.GEO_FORMAT_DEFAULT),
-			},
-		}),
-		(req, res, next) => reports(config, db, logger)
-													.all(req.query.timeperiod, req.query.city)
-			.then((data) => handleGeoResponse(data, req, res, next))
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-	// to get all reports between two dates
-	api.use('/archive', archive({config, db, logger}));
-
-	// Get a single report
-	api.get('/:id', cacheResponse('1 minute'),
-		validate({
-			params: {id: Joi.number().integer().required()},
-			query: {
-				format: Joi.any().valid(config.FORMATS)
-					.default(config.FORMAT_DEFAULT),
-				geoformat: Joi.any().valid(config.GEO_FORMATS)
-					.default(config.GEO_FORMAT_DEFAULT),
-			},
-		}),
-		(req, res, next) => reports(config, db, logger).byId(req.params.id)
-			.then((data) => handleGeoResponse(data, req, res, next))
-			.catch((err) => {
-				/* istanbul ignore next */
-				logger.error(err);
-				/* istanbul ignore next */
-				next(err);
-			})
-	);
-
-
-	return api;
-};
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/api_routes_reports_model.js.html b/jsdoc/api_routes_reports_model.js.html deleted file mode 100644 index 87b7981..0000000 --- a/jsdoc/api_routes_reports_model.js.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - JSDoc: Source: api/routes/reports/model.js - - - - - - - - - - -
- -

Source: api/routes/reports/model.js

- - - - - - -
-
-
/**
- * CogniCity Server /reports data model
- * @module src/api/reports/model
- **/
- import Promise from 'bluebird';
-
-/**
- * Methods to get current flood reports from database
- * @alias module:src/api/reports/model
- * @param {Object} config Server configuration
- * @param {Object} db PG Promise database instance
- * @param {Object} logger Configured Winston logger instance
- * @return {Object} Query methods
- */
-export default (config, db, logger) => ({
-	all: (timeperiod, city) => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT pkey, created_at, source,
-			status, url, image_url, disaster_type, report_data, tags, title, text,
-			the_geom FROM ${config.TABLE_REPORTS}
-			WHERE created_at >= to_timestamp($1)
-			AND ($2 IS NULL OR tags->>'instance_region_code'=$2)
-			ORDER BY created_at DESC LIMIT $3`;
-
-		let timeWindow = (Date.now() / 1000) - timeperiod;
-
-		let values = [timeWindow, city, config.API_REPORTS_LIMIT];
-
-		// Execute
-		logger.debug(query, values);
-		db.any(query, values).timeout(config.PGTIMEOUT)
-			.then((data) => resolve(data))
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				reject(err);
-			});
-	}),
-
-	// Return specific report by id
-	byId: (id) => new Promise((resolve, reject) => {
-		// Setup query
-		let query = `SELECT pkey, created_at, source,
-			status, url, image_url, disaster_type, report_data, tags, title, text,
-			the_geom FROM ${config.TABLE_REPORTS}
-			WHERE pkey = $1`;
-
-		// Setup values
-		let values = [id];
-
-		// Execute
-		logger.debug(query, values);
-		db.oneOrNone(query, values).timeout(config.PGTIMEOUT)
-			.then((data) => resolve(data))
-			/* istanbul ignore next */
-			.catch((err) => {
-				/* istanbul ignore next */
-				reject(err);
-			});
-	}),
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/cognicity-server/3.0.1/db%0ADatabase%20initializermodule_.html b/jsdoc/cognicity-server/3.0.1/db%0ADatabase%20initializermodule_.html deleted file mode 100644 index 4d5f4bf..0000000 --- a/jsdoc/cognicity-server/3.0.1/db%0ADatabase%20initializermodule_.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - JSDoc: Module: db -Database initializer - - - - - - - - - - -
- -

Module: db -Database initializer

- - - - - - -
- -
- -
- -
-
- - -
CogniCity Server Database
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/db.js.html b/jsdoc/cognicity-server/3.0.1/db.js.html deleted file mode 100644 index baace49..0000000 --- a/jsdoc/cognicity-server/3.0.1/db.js.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - JSDoc: Source: db.js - - - - - - - - - - -
- -

Source: db.js

- - - - - - -
-
-
/**
- * CogniCity Server Database
- * @module db
- * Database initializer
- **/
-import Promise from 'bluebird';
-
-// Import DB library
-const pgp = require('pg-promise')({
-  // Initialization Options
-  promiseLib: Promise, // Use bluebird for enhanced Promises
-});
-
-/**
- * @alias module:db
- * @param {Object} config - configuration
- * @param {Object} logger - logger
- * @return {Object} db - PG Promise database
- **/
-export default (config, logger) => new Promise((resolve, reject) => {
-	// Build the connection string
-	const cn = `postgres://${config.PGUSER}:${config.PGPASSWORD}@${config.PGHOST}:${config.PGPORT}/${config.PGDATABASE}?ssl=${config.PGSSL}`;
-  logger.debug(cn);
-
-	// Setup the connection
-	let db = pgp(cn);
-
-	// Make sure we can connect, if so resolve, if not reject
-	db.proc('version').timeout(config.PGTIMEOUT)
-		.then(() => resolve(db))
-		.catch((err) => {
-			logger.error(err);
-			reject(err);
-		});
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.eot b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.eot deleted file mode 100644 index 5d20d91..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.eot and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.svg b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.svg deleted file mode 100644 index 3ed7be4..0000000 --- a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.woff b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.woff deleted file mode 100644 index 1205787..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Bold-webfont.woff and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.eot b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.eot deleted file mode 100644 index 1f639a1..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.eot and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.svg b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.svg deleted file mode 100644 index 6a2607b..0000000 --- a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.woff b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.woff deleted file mode 100644 index ed760c0..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-BoldItalic-webfont.woff and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.eot b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.eot deleted file mode 100644 index 0c8a0ae..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.eot and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.svg b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.svg deleted file mode 100644 index e1075dc..0000000 --- a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.woff b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.woff deleted file mode 100644 index ff652e6..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Italic-webfont.woff and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.eot b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.eot deleted file mode 100644 index 1486840..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.eot and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.svg b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.svg deleted file mode 100644 index 11a472c..0000000 --- a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.woff b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.woff deleted file mode 100644 index e786074..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Light-webfont.woff and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.eot b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.eot deleted file mode 100644 index 8f44592..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.eot and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.svg b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.svg deleted file mode 100644 index 431d7e3..0000000 --- a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.svg +++ /dev/null @@ -1,1835 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.woff b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.woff deleted file mode 100644 index 43e8b9e..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-LightItalic-webfont.woff and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.eot b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.eot deleted file mode 100644 index 6bbc3cf..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.eot and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.svg b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.svg deleted file mode 100644 index 25a3952..0000000 --- a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.woff b/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.woff deleted file mode 100644 index e231183..0000000 Binary files a/jsdoc/cognicity-server/3.0.1/fonts/OpenSans-Regular-webfont.woff and /dev/null differ diff --git a/jsdoc/cognicity-server/3.0.1/index.html b/jsdoc/cognicity-server/3.0.1/index.html deleted file mode 100644 index a3f15c3..0000000 --- a/jsdoc/cognicity-server/3.0.1/index.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - JSDoc: Home - - - - - - - - - - -
- -

Home

- - - - - - - - -

cognicity-server 3.0.1

- - - - - - - - - - - - - - - -
-

cognicity-server

API Server for CogniCity

-

Build Status

-

Coverage Status

-

DOI for current stable release v3.0.0

-

DOI

-

Summary

This is the NodeJS server which runs the CogniCity Data API used by Urban Risk Map instances, such as PetaBencana.id site.

-

Run

ES6 Support is provided by Babel.

-
    -
  1. Install requirements from the provided package.json by doing npm install.

    -
  2. -
  3. Copy the sample.env file to a local .env and fill-in the required parameters. This local file will be ignored by Git and so should be secret safe. Further details on configuration are described below.

    -
  4. -
  5. To run a local development instance of the server do npm run dev

    -
  6. -
-

Configuration

Server configuration parameters are stored in a configuration file which is parsed by index.js on startup. Local configuration parameters are imported from the .env into src/config.js. See config.js for full details example configuration. Any variable not defined in .env will pickup the default value below (also see config.js)—note that local environment variables will override both .env and config.js. The following environment variables are currently supported by the configurtion:

-
    -
  • APP_NAME: Name of the application (default: cognicity-server)
  • -
  • API_FEEDS_QLUE_CITIES: Names of cities used by the Qlue data feed
  • -
  • API_FEEDS_QLUE_DISASTER_TYPES: Names of disaster types used by the Qlue data feed
  • -
  • API_FEEDS_DETIK_DISASTER_TYPES: Names of disaster types used by the Detik data feed
  • -
  • API_REPORTS_TIME_WINDOW: Time window for report data queries (default 1 hour)
  • -
  • API_REPORTS_TIME_WINDOW_MAX: Maximum limit for time window (default 1 week)
  • -
  • API_REPORTS_LIMIT: Total maximum number of reports to return in a single request
  • -
  • API_FLOODGAUGE_REPORTS_TIME_WINDOW: Time window for flood data (normally 12 hours)
  • -
  • API_FLOODGAUGE_REPORTS_TIME_WINDOW: Total maximum number of flood gauge records to return in a single request
  • -
  • AUTH0_AUDIENCE: Data API to be authenticated
  • -
  • AUTH0_CLIENT_ID: Auth0 client ID (NOTE: this is mandatory and no default value)
  • -
  • AUTH0_ISSUER: Web address of Auth0 instance
  • -
  • AWS_REGION: Region for AWS Infrastructure
  • -
  • AWS_S3_ACCESS_KEY_ID: Access key ID for AWS S3 bucket
  • -
  • AWS_S3_SECRET_ACCESS_KEY: Access key secret for AWS S3 bucket
  • -
  • AWS_S3_SIGNATURE_VERSION: Version of AWS S3 signature to use
  • -
  • AUTH0_SECRET: Auth0 secret (NOTE: this is mandatory and no default value)
  • -
  • BODY_LIMIT: Maximum body size POST/PUT/PATCH (default: 100kb)
  • -
  • CACHE: Should caching be enabled? (default: false)
  • -
  • CACHE_DURATION_CARDS: How long should cards be cached for? (default: '1 minute')
  • -
  • CACHE_DURATION_FLOODS: How long should floods be cached for? (default: '1 hour')
  • -
  • CACHE_DURATION_FLOODS_STATES: How long should flood states be cached for? (default: '1 hour')
  • -
  • CACHE_DURATION_INFRASTRUCTURE: How long should infrastructure be cached for? (default: '1 hour')
  • -
  • COMPRESS: Should the server gzip compress results? Only works if CACHE is disabled. (default: false)
  • -
  • CORS: Should Cross Object Resource Sharing (CORS) be enabled (default: false)
  • -
  • CORS_HEADERS: CORS headers to use (default: [Link])
  • -
  • DISASTER_TYPES: Disaster type keywords for report classification (default: flood,prep)
  • -
  • FORMAT_DEFAULT: Which format to return results in by default (default: json)
  • -
  • FORMATS: Formats supported by the system (as comma separated list) (default: json,xml)
  • -
  • GEO_FORMAT_DEFAULT: Which format to return geographic results in by default (default: topojson)
  • -
  • GEO_FORMATS: Geographic formats supported by the system (as comma separated list) (default: topojson,geojson,cap)
  • -
  • GEO_PRECISION: Precision to use when rounding geographic coordinates (default: 10)
  • -
  • IMAGES_BUCKET: AWS S3 bucket for image uploads (default: testing-riskmap-image-uploads)
  • -
  • IMAGES_HOST: Endpoint for image hosting (default: images.petabencana.id),
  • -
  • INFRASTRUCTURE_TYPES: Infrastructure types supported (as comma separated list) (default: floodgates,pumps,waterways)
  • -
  • LANGUAGES: Supported languages
  • -
  • LOG_CONSOLE: In development mode we log to the console by default, in other environments this must be enabled if required by setting this parameter to true (default: false)
  • -
  • LOG_DIR: Which directory should logs be written to. If blank, not supplied or the directory is not writable by the application this will default to the current directory
  • -
  • LOG_JSON: Should json format be used for logging (default: false)
  • -
  • LOG_LEVEL: What level to log at. Levels are: silly, debug, verbose, info, warn, error. debug level is recommended for development. (default: error)
  • -
  • LOG_MAX_FILE_SIZE: Maximum size of log file in bytes before rotating (default: 1024 * 1024 * 100 i.e. 100mb)
  • -
  • LOG_MAX_FILES: Maximum number of log files before rotation (default: 10)
  • -
  • NODE_ENV: Which environment are we in. Environments are: development, test, staging, production (default: development)
  • -
  • PGHOST: Postgres DB hostname (default: 127.0.0.1)
  • -
  • PGDATABASE: Postgres DB database name (default: cognicity)
  • -
  • PGPASSWORD: Postgres DB password (default: p@ssw0rd)
  • -
  • PGPORT: Postgres DB port (default: 5432)
  • -
  • PGSSL: SSL enabled on Postgres DB connection? (default: false)
  • -
  • PGTIMEOUT: Max duration on DB calls before timeout (in milliseconds) (default: 5000 i.e. 5 seconds)
  • -
  • PGUSER: Postgres DB username (default: postgres)
  • -
  • PORT: Which port should the application run on (default: 8001)
  • -
  • REGION_CODES: Which region codes are supported (as comma separated list) (default: jbd,bdg,sby)
  • -
  • REPORT_TYPES: Classifiers for report types (default: drain,desilting,canalrepair,treeclearing,flood)
  • -
  • RESPONSE_TIME: Should the server return an X-Response-Time header detailing the time taken to process the request. This is useful for both development to identify latency impact on testing and production for performance / health monitoring (default: false)
  • -
  • SECURE_AUTH0: Whether Auth0 JWT token security should be applied to secure routes (default: false)
  • -
  • TABLE_FLOODGAUGE_REPORTS: Postgres table name for flood-gauge reports
  • -
  • TABLE_FEEDS_QLUE: Postgres table name for Qlue feed
  • -
  • TABLE_FEEDS_DETIK: Postgres table name for Detik feed
  • -
  • TABLE_GRASP_CARDS: Postgres table name for Grasp Cards
  • -
  • TABLE_GRASP_LOG: Postgres table name for Grasp activity
  • -
  • TABLE_GRASP_REPORTS: Postgres table name for Grasp reports
  • -
  • TABLE_INSTANCE_REGIONS: Postgres table for operating regions
  • -
  • TABLE_LOCAL_AREAS: Postgres table for local areas data for each operating region
  • -
  • TABLE_REM_STATUS: Postgres table for current flood states from REM
  • -
  • TABLE_REM_STATUS_LOG: Postgres table for REM log
  • -
  • TABLE_REPORTS: Postgres table for reports
  • -
-

A few points to note on config:

-
    -
  • AWS Beanstalk: If you're deploying to AWS Elastic Beanstalk you may need to configure environment variables for each of the above under Configuration -> Software configuration.
  • -
-

Building

Run npm run -s build to build.

-

Testing

Testing is run by Travis. ESLint runs to check syntax. Integration tests, formed by chaining unit tests, are used to check the API. Coverage is provided by Istanbul and Coveralls. See src/test/ for scripts. Beware that integration tests may pollute tables (e.g. user tables in feeds), it is not recommended to run tests against prod databases with live data. The default database (used for testing) is cognicity. Travis-ci creates a new schema instance for testing using https://github.com/urbanriskmap/cognicity-schema, see .travis.yml for more details.

-

To run tests locally a new database "cognicity_server_testing" is required on localhost.

-

Code follows the Google JavaScript style.ESLint is run with tests to enfoce style.

-

Issue Tracking

Issues are tracked using GitHub

-

Release

The release procedure is as follows:

-
    -
  • Update the CHANGELOG.md file with the newly released version, date, and a high-level overview of changes. Commit the change.
  • -
  • Create a tag in git from the current head of master. The tag version should be the same as the version specified in the package.json file - this is the release version.
  • -
  • Update the version in the package.json file and commit the change.
  • -
  • Further development is now on the updated version number until the release process begins again.
  • -
-

API Notes

Full API documentation at https://docs.petabencana.id. This documentation is stored in the petabencana-docs repository.

-
    -
  • The dbgeo library expects timestamps from database to be in UTC (i.e. not a local timezone)
  • -
-

License

See LICENSE.md

-
- - - - - - - - - -
- -
- -

src/index.js

- - -
- -
-
- - -
Run CogniCity Data Server
- - - - - -
- - - - - - - - - - - - - - - - - - -
Author:
-
-
    -
  • Urban Risk Lab, 2017
  • -
-
- - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/cognicity-server/3.0.1/index.js.html b/jsdoc/cognicity-server/3.0.1/index.js.html deleted file mode 100644 index 4a1a37f..0000000 --- a/jsdoc/cognicity-server/3.0.1/index.js.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - JSDoc: Source: index.js - - - - - - - - - - -
- -

Source: index.js

- - - - - - -
-
-
/**
- * @file Run CogniCity Data Server
- * @author Urban Risk Lab, 2017
- **/
-// Import express, fs and http
-import fs from 'fs';
-import path from 'path';
-
-// Import config
-import config from './config';
-
-// Import DB initializer
-import initializeDb from './db';
-
-// Import the routes
-import routes from './api';
-
-// Import server
-import {init} from './server.js';
-
-// Import logging libraries
-import logger from 'winston'; // Application logging
-
-// Set the default logging level
-logger.level = config.LOG_LEVEL;
-
-// Check that log file directory can be written to
-try {
-	if (config.LOG_DIR !== '') {
-		fs.accessSync(config.LOG_DIR, fs.W_OK);
-	}
-	logger.info(`Logging to ${config.LOG_DIR !== '' ? config.LOG_DIR :
-							'current working directory' }`);
-} catch (e) {
-	// If we cannot write to the desired directory then log tocurrent directory
-	logger.info(`Cannot log to '${config.LOG_DIR}',
-							logging to current working directory instead`);
-	config.LOG_DIR = '';
-}
-
-// Configure the logger
-logger.add(logger.transports.File, {
-	filename: path.join(config.LOG_DIR, `${config.APP_NAME}.log`),
-	json: config.LOG_JSON, // Log in json or plain text
-	maxsize: config.LOG_MAX_FILE_SIZE, // Max size of each file
-	maxFiles: config.LOG_MAX_FILES, // Max number of files
-	level: config.LOG_LEVEL, // Level of log messages
-});
-
-// If we are not in development and console logging not requested then remove it
-if (config.NODE_ENV !== 'development' && !config.LOG_CONSOLE) {
-	logger.remove(logger.transports.Console);
-}
-
-// If we exit immediately winston does not get chance to write last log message
-const exitWithStatus = (status) => {
-	logger.info(`Exiting with status ${status}`);
-	setTimeout(() => process.exit(status), 500);
-};
-
-// Catch kill and interrupt signals and log a clean exit status
-process
-	.on('SIGTERM', () => {
-		logger.info('SIGTERM: Application shutting down');
-		exitWithStatus(0);
-	})
-	.on('SIGINT', () => {
-		logger.info('SIGINT: Application shutting down');
-		exitWithStatus(0);
-	});
-
-// Try and start the server
-init(config, initializeDb, routes, logger).then((app) => {
-	// All good to go, start listening for requests
-	app.server.listen(config.PORT);
-	logger.info(`Application started,`
-		+ `listening on port ${app.server.address().port}`);
-}).catch((err) => {
-	// Error has occurred, log and shutdown
-	logger.error('Error starting server: ' + err.message + ', ' + err.stack);
-	logger.error('Fatal error: Application shutting down');
-	exitWithStatus(1);
-});
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/jsdoc/cognicity-server/3.0.1/scripts/linenumber.js b/jsdoc/cognicity-server/3.0.1/scripts/linenumber.js deleted file mode 100644 index 8d52f7e..0000000 --- a/jsdoc/cognicity-server/3.0.1/scripts/linenumber.js +++ /dev/null @@ -1,25 +0,0 @@ -/*global document */ -(function() { - var source = document.getElementsByClassName('prettyprint source linenums'); - var i = 0; - var lineNumber = 0; - var lineId; - var lines; - var totalLines; - var anchorHash; - - if (source && source[0]) { - anchorHash = document.location.hash.substring(1); - lines = source[0].getElementsByTagName('li'); - totalLines = lines.length; - - for (; i < totalLines; i++) { - lineNumber++; - lineId = 'line' + lineNumber; - lines[i].id = lineId; - if (lineId === anchorHash) { - lines[i].className += ' selected'; - } - } - } -})(); diff --git a/jsdoc/cognicity-server/3.0.1/scripts/prettify/Apache-License-2.0.txt b/jsdoc/cognicity-server/3.0.1/scripts/prettify/Apache-License-2.0.txt deleted file mode 100644 index d645695..0000000 --- a/jsdoc/cognicity-server/3.0.1/scripts/prettify/Apache-License-2.0.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. diff --git a/jsdoc/cognicity-server/3.0.1/scripts/prettify/lang-css.js b/jsdoc/cognicity-server/3.0.1/scripts/prettify/lang-css.js deleted file mode 100644 index 041e1f5..0000000 --- a/jsdoc/cognicity-server/3.0.1/scripts/prettify/lang-css.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", -/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/jsdoc/cognicity-server/3.0.1/scripts/prettify/prettify.js b/jsdoc/cognicity-server/3.0.1/scripts/prettify/prettify.js deleted file mode 100644 index eef5ad7..0000000 --- a/jsdoc/cognicity-server/3.0.1/scripts/prettify/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p - - - - JSDoc: Module: server -Core server module - - - - - - - - - - -
- -

Module: server -Core server module

- - - - - - -
- -
- -
- -
-
- - -
CogniCity Data Server Module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 15:29:31 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/cognicity-server/3.0.1/server.js.html b/jsdoc/cognicity-server/3.0.1/server.js.html deleted file mode 100644 index 603ab98..0000000 --- a/jsdoc/cognicity-server/3.0.1/server.js.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - JSDoc: Source: server.js - - - - - - - - - - -
- -

Source: server.js

- - - - - - -
-
-
/**
- * CogniCity Data Server Module
- * @module server
- * Core server module
- **/
-// Import
-import Promise from 'bluebird';
-
-// Express middleware and http
-import express from 'express';
-import http from 'http';
-
-// Import express middlewares
-import bodyParser from 'body-parser';
-import cors from 'cors';
-import compression from 'compression';
-import responseTime from 'response-time';
-import morgan from 'morgan'; // Express logging
-
-/**
- * @alias module:server
- * @param {Object} config - configuration
- * @param {Object} initializeDb - database initialization
- * @param {Object} routes - routes
- * @param {Object} logger - logger
- * @return {Object} - Express server application
- **/
-// Function to initialize the api server
-const init = (config, initializeDb, routes, logger) =>
-	new Promise((resolve, reject) => {
-	// Create the server
-	let app = express();
-	app.server = http.createServer(app);
-
-	// Winston stream function for express so we can capture logs
-	const winstonStream = {
-		write: function(message) {
-			logger.info(message.slice(0, -1));
-		},
-	};
-
-	// Setup express logger
-	app.use(morgan('combined', {stream: winstonStream}));
-
-	// Compress responses if required but only if caching is disabled
-	if (config.COMPRESS && !config.CACHE) {
-		app.use(compression());
-	}
-
-	// Provide CORS support (not required if behind API gateway)
-	if (config.CORS) {
-		app.use(cors({exposedHeaders: config.CORS_HEADERS}));
-	}
-
-	// Provide response time header in response
-	if (config.RESPONSE_TIME) {
-		app.use(responseTime());
-	}
-
-	// Parse body messages into json
-	app.use(bodyParser.json({limit: config.BODY_LIMIT}));
-
-	// Try and connect to the db
-	initializeDb(config, logger)
-		.then((db) => {
-			// Log debug message
-			logger.debug('Successfully connected to DB');
-
-			// Mount the routes
-			app.use('/', routes({config, db, logger}));
-
-			// App is ready to go, resolve the promise
-			resolve(app);
-		})
-		.catch((err) => {
-			/* istanbul ignore next */
-			logger.error('DB Connection error: ' + err);
-			/* istanbul ignore next */
-			logger.error('Fatal error: Application shutting down');
-			/* istanbul ignore next */
-			// We cannot continue without a DB, reject
-			reject(err);
-		});
-});
-
-// Export the init function for use externally
-
-module.exports = {init};
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 15:29:31 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/cognicity-server/3.0.1/styles/jsdoc-default.css b/jsdoc/cognicity-server/3.0.1/styles/jsdoc-default.css deleted file mode 100644 index ede1919..0000000 --- a/jsdoc/cognicity-server/3.0.1/styles/jsdoc-default.css +++ /dev/null @@ -1,354 +0,0 @@ -@font-face { - font-family: 'Open Sans'; - font-weight: normal; - font-style: normal; - src: url('../fonts/OpenSans-Regular-webfont.eot'); - src: - local('Open Sans'), - local('OpenSans'), - url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Regular-webfont.woff') format('woff'), - url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg'); -} - -@font-face { - font-family: 'Open Sans Light'; - font-weight: normal; - font-style: normal; - src: url('../fonts/OpenSans-Light-webfont.eot'); - src: - local('Open Sans Light'), - local('OpenSans Light'), - url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Light-webfont.woff') format('woff'), - url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg'); -} - -html -{ - overflow: auto; - background-color: #fff; - font-size: 14px; -} - -body -{ - font-family: 'Open Sans', sans-serif; - line-height: 1.5; - color: #4d4e53; - background-color: white; -} - -a, a:visited, a:active { - color: #0095dd; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -header -{ - display: block; - padding: 0px 4px; -} - -tt, code, kbd, samp { - font-family: Consolas, Monaco, 'Andale Mono', monospace; -} - -.class-description { - font-size: 130%; - line-height: 140%; - margin-bottom: 1em; - margin-top: 1em; -} - -.class-description:empty { - margin: 0; -} - -#main { - float: left; - width: 70%; -} - -article dl { - margin-bottom: 40px; -} - -section -{ - display: block; - background-color: #fff; - padding: 12px 24px; - border-bottom: 1px solid #ccc; - margin-right: 30px; -} - -.variation { - display: none; -} - -.signature-attributes { - font-size: 60%; - color: #aaa; - font-style: italic; - font-weight: lighter; -} - -nav -{ - display: block; - float: right; - margin-top: 28px; - width: 30%; - box-sizing: border-box; - border-left: 1px solid #ccc; - padding-left: 16px; -} - -nav ul { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; - font-size: 100%; - line-height: 17px; - padding: 0; - margin: 0; - list-style-type: none; -} - -nav ul a, nav ul a:visited, nav ul a:active { - font-family: Consolas, Monaco, 'Andale Mono', monospace; - line-height: 18px; - color: #4D4E53; -} - -nav h3 { - margin-top: 12px; -} - -nav li { - margin-top: 6px; -} - -footer { - display: block; - padding: 6px; - margin-top: 12px; - font-style: italic; - font-size: 90%; -} - -h1, h2, h3, h4 { - font-weight: 200; - margin: 0; -} - -h1 -{ - font-family: 'Open Sans Light', sans-serif; - font-size: 48px; - letter-spacing: -2px; - margin: 12px 24px 20px; -} - -h2, h3.subsection-title -{ - font-size: 30px; - font-weight: 700; - letter-spacing: -1px; - margin-bottom: 12px; -} - -h3 -{ - font-size: 24px; - letter-spacing: -0.5px; - margin-bottom: 12px; -} - -h4 -{ - font-size: 18px; - letter-spacing: -0.33px; - margin-bottom: 12px; - color: #4d4e53; -} - -h5, .container-overview .subsection-title -{ - font-size: 120%; - font-weight: bold; - letter-spacing: -0.01em; - margin: 8px 0 3px 0; -} - -h6 -{ - font-size: 100%; - letter-spacing: -0.01em; - margin: 6px 0 3px 0; - font-style: italic; -} - -table -{ - border-spacing: 0; - border: 0; - border-collapse: collapse; -} - -td, th -{ - border: 1px solid #ddd; - margin: 0px; - text-align: left; - vertical-align: top; - padding: 4px 6px; - display: table-cell; -} - -thead tr -{ - background-color: #ddd; - font-weight: bold; -} - -th { border-right: 1px solid #aaa; } -tr > th:last-child { border-right: 1px solid #ddd; } - -.ancestors { color: #999; } -.ancestors a -{ - color: #999 !important; - text-decoration: none; -} - -.clear -{ - clear: both; -} - -.important -{ - font-weight: bold; - color: #950B02; -} - -.yes-def { - text-indent: -1000px; -} - -.type-signature { - color: #aaa; -} - -.name, .signature { - font-family: Consolas, Monaco, 'Andale Mono', monospace; -} - -.details { margin-top: 14px; border-left: 2px solid #DDD; } -.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; } -.details dd { margin-left: 70px; } -.details ul { margin: 0; } -.details ul { list-style-type: none; } -.details li { margin-left: 30px; padding-top: 6px; } -.details pre.prettyprint { margin: 0 } -.details .object-value { padding-top: 0; } - -.description { - margin-bottom: 1em; - margin-top: 1em; -} - -.code-caption -{ - font-style: italic; - font-size: 107%; - margin: 0; -} - -.prettyprint -{ - border: 1px solid #ddd; - width: 80%; - overflow: auto; -} - -.prettyprint.source { - width: inherit; -} - -.prettyprint code -{ - font-size: 100%; - line-height: 18px; - display: block; - padding: 4px 12px; - margin: 0; - background-color: #fff; - color: #4D4E53; -} - -.prettyprint code span.line -{ - display: inline-block; -} - -.prettyprint.linenums -{ - padding-left: 70px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.prettyprint.linenums ol -{ - padding-left: 0; -} - -.prettyprint.linenums li -{ - border-left: 3px #ddd solid; -} - -.prettyprint.linenums li.selected, -.prettyprint.linenums li.selected * -{ - background-color: lightyellow; -} - -.prettyprint.linenums li * -{ - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} - -.params .name, .props .name, .name code { - color: #4D4E53; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 100%; -} - -.params td.description > p:first-child, -.props td.description > p:first-child -{ - margin-top: 0; - padding-top: 0; -} - -.params td.description > p:last-child, -.props td.description > p:last-child -{ - margin-bottom: 0; - padding-bottom: 0; -} - -.disabled { - color: #454545; -} diff --git a/jsdoc/cognicity-server/3.0.1/styles/prettify-jsdoc.css b/jsdoc/cognicity-server/3.0.1/styles/prettify-jsdoc.css deleted file mode 100644 index 5a2526e..0000000 --- a/jsdoc/cognicity-server/3.0.1/styles/prettify-jsdoc.css +++ /dev/null @@ -1,111 +0,0 @@ -/* JSDoc prettify.js theme */ - -/* plain text */ -.pln { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* string content */ -.str { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a keyword */ -.kwd { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a comment */ -.com { - font-weight: normal; - font-style: italic; -} - -/* a type name */ -.typ { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a literal value */ -.lit { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* punctuation */ -.pun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp open bracket */ -.opn { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp close bracket */ -.clo { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a markup tag name */ -.tag { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute name */ -.atn { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute value */ -.atv { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a declaration */ -.dec { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a variable name */ -.var { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a function name */ -.fun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; -} diff --git a/jsdoc/cognicity-server/3.0.1/styles/prettify-tomorrow.css b/jsdoc/cognicity-server/3.0.1/styles/prettify-tomorrow.css deleted file mode 100644 index b6f92a7..0000000 --- a/jsdoc/cognicity-server/3.0.1/styles/prettify-tomorrow.css +++ /dev/null @@ -1,132 +0,0 @@ -/* Tomorrow Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* Pretty printing styles. Used with prettify.js. */ -/* SPAN elements with the classes below are added by prettyprint. */ -/* plain text */ -.pln { - color: #4d4d4c; } - -@media screen { - /* string content */ - .str { - color: #718c00; } - - /* a keyword */ - .kwd { - color: #8959a8; } - - /* a comment */ - .com { - color: #8e908c; } - - /* a type name */ - .typ { - color: #4271ae; } - - /* a literal value */ - .lit { - color: #f5871f; } - - /* punctuation */ - .pun { - color: #4d4d4c; } - - /* lisp open bracket */ - .opn { - color: #4d4d4c; } - - /* lisp close bracket */ - .clo { - color: #4d4d4c; } - - /* a markup tag name */ - .tag { - color: #c82829; } - - /* a markup attribute name */ - .atn { - color: #f5871f; } - - /* a markup attribute value */ - .atv { - color: #3e999f; } - - /* a declaration */ - .dec { - color: #f5871f; } - - /* a variable name */ - .var { - color: #c82829; } - - /* a function name */ - .fun { - color: #4271ae; } } -/* Use higher contrast and text-weight for printable form. */ -@media print, projection { - .str { - color: #060; } - - .kwd { - color: #006; - font-weight: bold; } - - .com { - color: #600; - font-style: italic; } - - .typ { - color: #404; - font-weight: bold; } - - .lit { - color: #044; } - - .pun, .opn, .clo { - color: #440; } - - .tag { - color: #006; - font-weight: bold; } - - .atn { - color: #404; } - - .atv { - color: #060; } } -/* Style */ -/* -pre.prettyprint { - background: white; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 12px; - line-height: 1.5; - border: 1px solid #ccc; - padding: 10px; } -*/ - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; } - -/* IE indents via margin-left */ -li.L0, -li.L1, -li.L2, -li.L3, -li.L4, -li.L5, -li.L6, -li.L7, -li.L8, -li.L9 { - /* */ } - -/* Alternate shading for lines */ -li.L1, -li.L3, -li.L5, -li.L7, -li.L9 { - /* */ } diff --git a/jsdoc/config.js.html b/jsdoc/config.js.html deleted file mode 100644 index d2b4cf9..0000000 --- a/jsdoc/config.js.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - JSDoc: Source: config.js - - - - - - - - - - -
- -

Source: config.js

- - - - - - -
-
-
/**
- * CogniCity Server configuration
- * @file config
- * @return {Object} Server configuration
-*/
-/* eslint-disable max-len */
-require('dotenv').config({silent: true});
-
-export default {
-  APP_NAME: process.env.APP_NAME || 'cognicity-server',
-  API_FEEDS_QLUE_CITIES: (process.env.API_FEEDS_QLUE_CITIES || 'jabodetabek,bandung,surabaya').split(','),
-  API_FEEDS_QLUE_DISASTER_TYPES: (process.env.API_FEEDS_QLUE_DISASTER_TYPES || 'flood').split(','),
-  API_FEEDS_DETIK_DISASTER_TYPES: (process.env.API_FEEDS_DEIK_DISASTER_TYPES || 'flood').split(','),
-  API_REPORTS_TIME_WINDOW: process.env.API_REPORTS_TIME_WINDOW || 3600,
-  API_REPORTS_TIME_WINDOW_MAX: process.env.API_REPORTS_TIME_WINDOW_MAX || 604800, // 1w
-  API_REPORTS_LIMIT: process.env.API_REPORTS_LIMIT,
-  API_FLOODGAUGE_REPORTS_TIME_WINDOW: process.env.API_FLOODGAUGE_REPORTS_TIME_WINDOW || 43200,
-  API_FLOODGAUGE_REPORTS_LIMIT: process.env.API_FLOODGAUGE_REPORTS_LIMIT,
-  AUTH0_AUDIENCE: process.env.AUTH0_AUDIENCE || 'https://data.petabencana.id',
-  AUTH0_CLIENT_ID: process.env.AUTH0_CLIENT_ID || 'auth0_client_id',
-  AUTH0_ISSUER: process.env.AUTH0_ISSUER || 'https://petabencana.au.auth0.com',
-  AUTH0_SECRET: process.env.AUTH0_SECRET || 'secret',
-  AWS_REGION: process.env.AWS_REGION || 'ap-southeast-1',
-  AWS_S3_ACCESS_KEY_ID: process.env.AWS_S3_ACCESS_KEY_ID || '',
-  AWS_S3_SECRET_ACCESS_KEY: process.env.AWS_S3_SECRET_ACCESS_KEY || '',
-  AWS_S3_SIGNATURE_VERSION: process.env.AWS_SIGNATURE_VERSION || 'v4',
-  BODY_LIMIT: process.env.BODY_LIMIT || '100kb',
-  CACHE: process.env.CACHE === 'true' || false,
-  CACHE_DURATION_CARDS: process.env.CACHE_DURATION_CARDS || '1 minute',
-  CACHE_DURATION_FLOODS: process.env.CACHE_DURATION_FLOODS || '1 hour',
-  CACHE_DURATION_FLOODS_STATES: process.env.CACHE_DURATION_FLOODS_STATES || '1 hour',
-  CACHE_DURATION_INFRASTRUCTURE: process.env.CACHE_DURATION_INFRASTRUCTURE || '1 hour',
-  COMPRESS: process.env.COMPRESS === 'true' || false,
-  CORS: process.env.CORS === 'true' || false,
-  CORS_HEADERS: process.env.CORS_HEADERS || ['Link'],
-  DISASTER_TYPES: (process.env.DISASTER_TYPES || 'flood,prep').split(','),
-  FORMAT_DEFAULT: process.env.FORMAT_DEFAULT || 'json',
-  FORMATS: (process.env.FORMATS || 'json').split(','),
-  GEO_FORMAT_DEFAULT: process.env.GEO_FORMAT_DEFAULT || 'topojson',
-  GEO_FORMATS: (process.env.GEO_FORMATS || 'geojson,topojson').split(','),
-  GEO_PRECISION: process.env.GEO_PRECISION || 10,
-  IMAGES_BUCKET: process.env.IMAGES_BUCKET || 'petabencana-image-uploads',
-  IMAGES_HOST: process.env.IMAGES_HOST || 'images.petabencana.id',
-  INFRASTRUCTURE_TYPES: (process.env.INFRASTRUCTURE_TYPES || 'floodgates,pumps,waterways').split(','),
-  LANGUAGES: (process.env.LANGUAGES || 'en,id').split(','),
-  LOG_CONSOLE: process.env.LOG_CONSOLE === 'true' || false,
-  LOG_DIR: process.env.LOG_DIR || '',
-  LOG_JSON: process.env.LOG_JSON === 'true' || false,
-  LOG_LEVEL: process.env.LOG_LEVEL || 'error',
-  LOG_MAX_FILE_SIZE: process.env.LOG_MAX_FILE_SIZE || 1024 * 1024 * 100,
-  LOG_MAX_FILES: process.env.LOG_MAX_FILES || 10,
-  NODE_ENV: process.env.NODE_ENV || 'development',
-  PGHOST: process.env.PGHOST || '127.0.0.1',
-  PGDATABASE: process.env.PGDATABASE || 'cognicity',
-  PGPASSWORD: process.env.PGPASSWORD || 'p@ssw0rd',
-  PGPORT: process.env.PGPORT || 5432,
-  PGSSL: process.env.PGSSL === 'true' || false,
-  PGTIMEOUT: process.env.PGTIMEOUT || 10000,
-  PGUSER: process.env.PGUSER || 'postgres',
-  PORT: process.env.PORT || 8001,
-  REGION_CODES: (process.env.REGION_CODES || 'jbd,bdg,sby').split(','),
-  REPORT_TYPES: (process.env.REPORT_TYPES || 'drain,desilting,canalrepair,treeclearing,flood').split(','),
-  RESPONSE_TIME: process.env.RESPONSE_TIME === 'true' || false,
-  SECURE_AUTH0: process.env.SECURE_AUTH0 === 'true' || false,
-  TABLE_FLOODGAUGE_REPORTS: process.env.TABLE_FLOODGAUGE_REPORTS || 'floodgauge.reports',
-  TABLE_FEEDS_QLUE: process.env.TABLE_FEEDS_QLUE || 'qlue.reports',
-  TABLE_FEEDS_DETIK: process.env.TABLE_FEEDS_DETIK || 'detik.reports',
-  TABLE_GRASP_CARDS: process.env.TABLE_GRASP_CARDS || 'grasp.cards',
-  TABLE_GRASP_LOG: process.env.TABLE_GRASP_LOG || 'grasp.log',
-  TABLE_GRASP_REPORTS: process.env.TABLE_GRASP_REPORTS || 'grasp.reports',
-  TABLE_INSTANCE_REGIONS: process.env.TABLE_INSTANCE_REGIONS || 'cognicity.instance_regions',
-  TABLE_LOCAL_AREAS: process.env.TABLE_LOCAL_AREAS || 'cognicity.local_areas',
-  TABLE_REM_STATUS: process.env.TABLE_REM_STATUS || 'cognicity.rem_status',
-  TABLE_REM_STATUS_LOG: process.env.TABLE_REM_STATUS_LOG || 'cognicity.rem_status_log',
-  TABLE_REPORTS: process.env.TABLE_REPORTS || 'cognicity.all_reports',
-};
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/db%0ADatabase%20initializermodule_.html b/jsdoc/db%0ADatabase%20initializermodule_.html deleted file mode 100644 index 308aa58..0000000 --- a/jsdoc/db%0ADatabase%20initializermodule_.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - JSDoc: Module: db -Database initializer - - - - - - - - - - -
- -

Module: db -Database initializer

- - - - - - -
- -
- -
- -
-
- - -
CogniCity Server Database
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) db(config, logger) → {Object}

- - - - - -
- Database interaction for Cards objects -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - configuration
logger - - -Object - - - - logger
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- db - PG Promise database -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/db.js.html b/jsdoc/db.js.html deleted file mode 100644 index 7add579..0000000 --- a/jsdoc/db.js.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - JSDoc: Source: db.js - - - - - - - - - - -
- -

Source: db.js

- - - - - - -
-
-
/**
- * CogniCity Server Database
- * @module db
- * Database initializer
- **/
-import Promise from 'bluebird';
-
-// Import DB library
-const pgp = require('pg-promise')({
-  // Initialization Options
-  promiseLib: Promise, // Use bluebird for enhanced Promises
-});
-
-/**
- * Database interaction for Cards objects
- * @function db
- * @param {Object} config - configuration
- * @param {Object} logger - logger
- * @return {Object} db - PG Promise database
- **/
-export default (config, logger) => new Promise((resolve, reject) => {
-	// Build the connection string
-	const cn = `postgres://${config.PGUSER}:${config.PGPASSWORD}@${config.PGHOST}:${config.PGPORT}/${config.PGDATABASE}?ssl=${config.PGSSL}`;
-  logger.debug(cn);
-
-	// Setup the connection
-	let db = pgp(cn);
-
-	// Make sure we can connect, if so resolve, if not reject
-	db.proc('version').timeout(config.PGTIMEOUT)
-		.then(() => resolve(db))
-		.catch((err) => {
-			logger.error(err);
-			reject(err);
-		});
-});
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/fonts/OpenSans-Bold-webfont.eot b/jsdoc/fonts/OpenSans-Bold-webfont.eot deleted file mode 100644 index 5d20d91..0000000 Binary files a/jsdoc/fonts/OpenSans-Bold-webfont.eot and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-Bold-webfont.svg b/jsdoc/fonts/OpenSans-Bold-webfont.svg deleted file mode 100644 index 3ed7be4..0000000 --- a/jsdoc/fonts/OpenSans-Bold-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/fonts/OpenSans-Bold-webfont.woff b/jsdoc/fonts/OpenSans-Bold-webfont.woff deleted file mode 100644 index 1205787..0000000 Binary files a/jsdoc/fonts/OpenSans-Bold-webfont.woff and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-BoldItalic-webfont.eot b/jsdoc/fonts/OpenSans-BoldItalic-webfont.eot deleted file mode 100644 index 1f639a1..0000000 Binary files a/jsdoc/fonts/OpenSans-BoldItalic-webfont.eot and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-BoldItalic-webfont.svg b/jsdoc/fonts/OpenSans-BoldItalic-webfont.svg deleted file mode 100644 index 6a2607b..0000000 --- a/jsdoc/fonts/OpenSans-BoldItalic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/fonts/OpenSans-BoldItalic-webfont.woff b/jsdoc/fonts/OpenSans-BoldItalic-webfont.woff deleted file mode 100644 index ed760c0..0000000 Binary files a/jsdoc/fonts/OpenSans-BoldItalic-webfont.woff and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-Italic-webfont.eot b/jsdoc/fonts/OpenSans-Italic-webfont.eot deleted file mode 100644 index 0c8a0ae..0000000 Binary files a/jsdoc/fonts/OpenSans-Italic-webfont.eot and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-Italic-webfont.svg b/jsdoc/fonts/OpenSans-Italic-webfont.svg deleted file mode 100644 index e1075dc..0000000 --- a/jsdoc/fonts/OpenSans-Italic-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/fonts/OpenSans-Italic-webfont.woff b/jsdoc/fonts/OpenSans-Italic-webfont.woff deleted file mode 100644 index ff652e6..0000000 Binary files a/jsdoc/fonts/OpenSans-Italic-webfont.woff and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-Light-webfont.eot b/jsdoc/fonts/OpenSans-Light-webfont.eot deleted file mode 100644 index 1486840..0000000 Binary files a/jsdoc/fonts/OpenSans-Light-webfont.eot and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-Light-webfont.svg b/jsdoc/fonts/OpenSans-Light-webfont.svg deleted file mode 100644 index 11a472c..0000000 --- a/jsdoc/fonts/OpenSans-Light-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/fonts/OpenSans-Light-webfont.woff b/jsdoc/fonts/OpenSans-Light-webfont.woff deleted file mode 100644 index e786074..0000000 Binary files a/jsdoc/fonts/OpenSans-Light-webfont.woff and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-LightItalic-webfont.eot b/jsdoc/fonts/OpenSans-LightItalic-webfont.eot deleted file mode 100644 index 8f44592..0000000 Binary files a/jsdoc/fonts/OpenSans-LightItalic-webfont.eot and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-LightItalic-webfont.svg b/jsdoc/fonts/OpenSans-LightItalic-webfont.svg deleted file mode 100644 index 431d7e3..0000000 --- a/jsdoc/fonts/OpenSans-LightItalic-webfont.svg +++ /dev/null @@ -1,1835 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/fonts/OpenSans-LightItalic-webfont.woff b/jsdoc/fonts/OpenSans-LightItalic-webfont.woff deleted file mode 100644 index 43e8b9e..0000000 Binary files a/jsdoc/fonts/OpenSans-LightItalic-webfont.woff and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-Regular-webfont.eot b/jsdoc/fonts/OpenSans-Regular-webfont.eot deleted file mode 100644 index 6bbc3cf..0000000 Binary files a/jsdoc/fonts/OpenSans-Regular-webfont.eot and /dev/null differ diff --git a/jsdoc/fonts/OpenSans-Regular-webfont.svg b/jsdoc/fonts/OpenSans-Regular-webfont.svg deleted file mode 100644 index 25a3952..0000000 --- a/jsdoc/fonts/OpenSans-Regular-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsdoc/fonts/OpenSans-Regular-webfont.woff b/jsdoc/fonts/OpenSans-Regular-webfont.woff deleted file mode 100644 index e231183..0000000 Binary files a/jsdoc/fonts/OpenSans-Regular-webfont.woff and /dev/null differ diff --git a/jsdoc/global.html b/jsdoc/global.html deleted file mode 100644 index a0e5187..0000000 --- a/jsdoc/global.html +++ /dev/null @@ -1,5005 +0,0 @@ - - - - - JSDoc: Global - - - - - - - - - - -
- -

Global

- - - - - - -
- -
- -

- - -
- -
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

module:db(config, logger) → {Object}

- - - - - -
- Database interaction for Cards objects -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - configuration
logger - - -Object - - - - logger
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- db - PG Promise database -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/cards/index(config, db, logger) → {Object}

- - - - - -
- CogniCity Server /cards endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for cards route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/cards/model(config, db, logger) → {Object}

- - - - - -
- Database interaction for Cards objects -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- data Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/cities/index(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for cities data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/cities/model(config, db, logger) → {Object}

- - - - - -
- Methods to get cities data from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/feeds/index(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for feeds -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/feeds/model(config, db, logger) → {Object}

- - - - - -
- Methods to interact with feeds layers in database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/floodgauges/index(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for floodgauges data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/floodgauges/model(config, db, logger) → {Object}

- - - - - -
- Methods to get floodgauges layers from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/floods/index(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for floods data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/floods/model(config, db, logger) → {Object}

- - - - - -
- Methods to interact with flood layers in database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/index(config, db, logger) → {Object}

- - - - - -
- Build CogniCity Server Data API -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for API routes -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/infrastructure/index(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for infrastructrue data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/infrastructure/model(config, db, logger) → {Object}

- - - - - -
- Methods to get infrastructure layers from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/reports/archive/index(config, db, logger) → {Object}

- - - - - -
- Methods to get historic flood reports from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/reports/archive/model(config, db, logger) → {Object}

- - - - - -
- Interact with historic report objects -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/reports/index(config, db, logger) → {Object}

- - - - - -
- Methods to get current flood reports from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:src/api/reports/model(config, db, logger) → {Object}

- - - - - -
- Methods to get current flood reports from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - -

module:test/testCities(app)

- - - - - -
- Test cities endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testDB()

- - - - - -
- Test db utility module -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testFeeds(app)

- - - - - -
- Test feeds endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testFloods(app, jwt)

- - - - - -
- Test infrastructure endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
jwt - - -Object - - - - Sample JSON Web Token for testing endpoint auth
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testFloodsgauges(app)

- - - - - -
- Test floodgauges endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testInfrastructure(app)

- - - - - -
- Test infrastructure endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testReports(app, reportid)

- - - - - -
- Test reports endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
reportid - - -Number - - - - CogniCity report ID to test against
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testReportsArchive(app)

- - - - - -
- Test reports archive endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

module:test/testServer(app)

- - - - - -
- Test top-level server routes -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

testCards(app)

- - - - - -
- Test cards endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 16:57:38 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/index.html b/jsdoc/index.html deleted file mode 100644 index 68a66fc..0000000 --- a/jsdoc/index.html +++ /dev/null @@ -1,570 +0,0 @@ - - - - - JSDoc: Home - - - - - - - - - - -
- -

Home

- - - - - - - - -

- - - - - - - - - - - - - - - -
-

cognicity-server

API Server for CogniCity

-

Build Status

-

Coverage Status

-

DOI for current stable release v3.0.0

-

DOI

-

Summary

This is the NodeJS server which runs the CogniCity Data API used by Urban Risk Map instances, such as PetaBencana.id site.

-

Run

ES6 Support is provided by Babel.

-
    -
  1. Install requirements from the provided package.json by doing npm install.

    -
  2. -
  3. Copy the sample.env file to a local .env and fill-in the required parameters. This local file will be ignored by Git and so should be secret safe. Further details on configuration are described below.

    -
  4. -
  5. To run a local development instance of the server do npm run dev

    -
  6. -
-

Configuration

Server configuration parameters are stored in a configuration file which is parsed by index.js on startup. Local configuration parameters are imported from the .env into src/config.js. See config.js for full details example configuration. Any variable not defined in .env will pickup the default value below (also see config.js)—note that local environment variables will override both .env and config.js. The following environment variables are currently supported by the configurtion:

-
    -
  • APP_NAME: Name of the application (default: cognicity-server)
  • -
  • API_FEEDS_QLUE_CITIES: Names of cities used by the Qlue data feed
  • -
  • API_FEEDS_QLUE_DISASTER_TYPES: Names of disaster types used by the Qlue data feed
  • -
  • API_FEEDS_DETIK_DISASTER_TYPES: Names of disaster types used by the Detik data feed
  • -
  • API_REPORTS_TIME_WINDOW: Time window for report data queries (default 1 hour)
  • -
  • API_REPORTS_TIME_WINDOW_MAX: Maximum limit for time window (default 1 week)
  • -
  • API_REPORTS_LIMIT: Total maximum number of reports to return in a single request
  • -
  • API_FLOODGAUGE_REPORTS_TIME_WINDOW: Time window for flood data (normally 12 hours)
  • -
  • API_FLOODGAUGE_REPORTS_TIME_WINDOW: Total maximum number of flood gauge records to return in a single request
  • -
  • AUTH0_AUDIENCE: Data API to be authenticated
  • -
  • AUTH0_CLIENT_ID: Auth0 client ID (NOTE: this is mandatory and no default value)
  • -
  • AUTH0_ISSUER: Web address of Auth0 instance
  • -
  • AWS_REGION: Region for AWS Infrastructure
  • -
  • AWS_S3_ACCESS_KEY_ID: Access key ID for AWS S3 bucket
  • -
  • AWS_S3_SECRET_ACCESS_KEY: Access key secret for AWS S3 bucket
  • -
  • AWS_S3_SIGNATURE_VERSION: Version of AWS S3 signature to use
  • -
  • AUTH0_SECRET: Auth0 secret (NOTE: this is mandatory and no default value)
  • -
  • BODY_LIMIT: Maximum body size POST/PUT/PATCH (default: 100kb)
  • -
  • CACHE: Should caching be enabled? (default: false)
  • -
  • CACHE_DURATION_CARDS: How long should cards be cached for? (default: '1 minute')
  • -
  • CACHE_DURATION_FLOODS: How long should floods be cached for? (default: '1 hour')
  • -
  • CACHE_DURATION_FLOODS_STATES: How long should flood states be cached for? (default: '1 hour')
  • -
  • CACHE_DURATION_INFRASTRUCTURE: How long should infrastructure be cached for? (default: '1 hour')
  • -
  • COMPRESS: Should the server gzip compress results? Only works if CACHE is disabled. (default: false)
  • -
  • CORS: Should Cross Object Resource Sharing (CORS) be enabled (default: false)
  • -
  • CORS_HEADERS: CORS headers to use (default: [Link])
  • -
  • DISASTER_TYPES: Disaster type keywords for report classification (default: flood,prep)
  • -
  • FORMAT_DEFAULT: Which format to return results in by default (default: json)
  • -
  • FORMATS: Formats supported by the system (as comma separated list) (default: json,xml)
  • -
  • GEO_FORMAT_DEFAULT: Which format to return geographic results in by default (default: topojson)
  • -
  • GEO_FORMATS: Geographic formats supported by the system (as comma separated list) (default: topojson,geojson,cap)
  • -
  • GEO_PRECISION: Precision to use when rounding geographic coordinates (default: 10)
  • -
  • IMAGES_BUCKET: AWS S3 bucket for image uploads (default: testing-riskmap-image-uploads)
  • -
  • IMAGES_HOST: Endpoint for image hosting (default: images.petabencana.id),
  • -
  • INFRASTRUCTURE_TYPES: Infrastructure types supported (as comma separated list) (default: floodgates,pumps,waterways)
  • -
  • LANGUAGES: Supported languages
  • -
  • LOG_CONSOLE: In development mode we log to the console by default, in other environments this must be enabled if required by setting this parameter to true (default: false)
  • -
  • LOG_DIR: Which directory should logs be written to. If blank, not supplied or the directory is not writable by the application this will default to the current directory
  • -
  • LOG_JSON: Should json format be used for logging (default: false)
  • -
  • LOG_LEVEL: What level to log at. Levels are: silly, debug, verbose, info, warn, error. debug level is recommended for development. (default: error)
  • -
  • LOG_MAX_FILE_SIZE: Maximum size of log file in bytes before rotating (default: 1024 * 1024 * 100 i.e. 100mb)
  • -
  • LOG_MAX_FILES: Maximum number of log files before rotation (default: 10)
  • -
  • NODE_ENV: Which environment are we in. Environments are: development, test, staging, production (default: development)
  • -
  • PGHOST: Postgres DB hostname (default: 127.0.0.1)
  • -
  • PGDATABASE: Postgres DB database name (default: cognicity)
  • -
  • PGPASSWORD: Postgres DB password (default: p@ssw0rd)
  • -
  • PGPORT: Postgres DB port (default: 5432)
  • -
  • PGSSL: SSL enabled on Postgres DB connection? (default: false)
  • -
  • PGTIMEOUT: Max duration on DB calls before timeout (in milliseconds) (default: 5000 i.e. 5 seconds)
  • -
  • PGUSER: Postgres DB username (default: postgres)
  • -
  • PORT: Which port should the application run on (default: 8001)
  • -
  • REGION_CODES: Which region codes are supported (as comma separated list) (default: jbd,bdg,sby)
  • -
  • REPORT_TYPES: Classifiers for report types (default: drain,desilting,canalrepair,treeclearing,flood)
  • -
  • RESPONSE_TIME: Should the server return an X-Response-Time header detailing the time taken to process the request. This is useful for both development to identify latency impact on testing and production for performance / health monitoring (default: false)
  • -
  • SECURE_AUTH0: Whether Auth0 JWT token security should be applied to secure routes (default: false)
  • -
  • TABLE_FLOODGAUGE_REPORTS: Postgres table name for flood-gauge reports
  • -
  • TABLE_FEEDS_QLUE: Postgres table name for Qlue feed
  • -
  • TABLE_FEEDS_DETIK: Postgres table name for Detik feed
  • -
  • TABLE_GRASP_CARDS: Postgres table name for Grasp Cards
  • -
  • TABLE_GRASP_LOG: Postgres table name for Grasp activity
  • -
  • TABLE_GRASP_REPORTS: Postgres table name for Grasp reports
  • -
  • TABLE_INSTANCE_REGIONS: Postgres table for operating regions
  • -
  • TABLE_LOCAL_AREAS: Postgres table for local areas data for each operating region
  • -
  • TABLE_REM_STATUS: Postgres table for current flood states from REM
  • -
  • TABLE_REM_STATUS_LOG: Postgres table for REM log
  • -
  • TABLE_REPORTS: Postgres table for reports
  • -
-

A few points to note on config:

-
    -
  • AWS Beanstalk: If you're deploying to AWS Elastic Beanstalk you may need to configure environment variables for each of the above under Configuration -> Software configuration.
  • -
-

Building

Run npm run -s build to build.

-

Testing

Testing is run by Travis. ESLint runs to check syntax. Integration tests, formed by chaining unit tests, are used to check the API. Coverage is provided by Istanbul and Coveralls. See src/test/ for scripts. Beware that integration tests may pollute tables (e.g. user tables in feeds), it is not recommended to run tests against prod databases with live data. The default database (used for testing) is cognicity. Travis-ci creates a new schema instance for testing using https://github.com/urbanriskmap/cognicity-schema, see .travis.yml for more details.

-

To run tests locally a new database "cognicity_server_testing" is required on localhost.

-

Code follows the Google JavaScript style.ESLint is run with tests to enfoce style.

-

Issue Tracking

Issues are tracked using GitHub

-

Code documentation

Internal code documentation is in the JSDoc format. Generated documentation is -in the jsdoc/ folder. To build documentation do:

-
npm run jsdoc

Package management

Before deployment:

-
    -
  • Use NVM to switch to node and NPM versions specified in package.json for production
  • -
  • Run npm install
  • -
  • Run npm shrinkwrap --dev
  • -
  • Commit changes to npm-shrinkwrap.json
  • -
-

Release

The release procedure is as follows:

-
    -
  • Update the CHANGELOG.md file with the newly released version, date, and a high-level overview of changes. Commit the change.
  • -
  • Build code documentation and commit changes.
  • -
  • Create a tag in git from the current head of master. The tag version should be the same as the version specified in the package.json file - this is the release version.
  • -
  • Update the version in the package.json file and commit the change.
  • -
  • Further development is now on the updated version number until the release process begins again.
  • -
-

API Notes

Full API documentation at https://docs.petabencana.id. This documentation is stored in the petabencana-docs repository.

-

swagger-api.json describes the API in swagger format (with AWS API Gateway extensions).

-
    -
  • The dbgeo library expects timestamps from database to be in UTC (i.e. not a local timezone)
  • -
-

License

See LICENSE.md

-
- - - - - - - - - -
- -
- -

config.js

- - -
- -
-
- - -
config
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - - - - -
- -
- -

index.js

- - -
- -
-
- - -
Run CogniCity Data Server
- - - - - -
- - - - - - - - - - - - - - - - - - -
Author:
-
-
    -
  • Urban Risk Lab, 2017
  • -
-
- - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - - - - -
- -
- -

lib/util.js

- - -
- -
-
- - -
CogniCity Server Utility file
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - - - - -
- -
- -

test/index.js

- - -
- -
-
- - -
Runs unit tests in sequence against live app and database instance - -Tomas Holderness June 2017
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/index.js.html b/jsdoc/index.js.html deleted file mode 100644 index 479462a..0000000 --- a/jsdoc/index.js.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - JSDoc: Source: index.js - - - - - - - - - - -
- -

Source: index.js

- - - - - - -
-
-
/**
- * CogniCity Data Server
- * @file Run CogniCity Data Server
- * @author Urban Risk Lab, 2017
- **/
-// Import express, fs and http
-import fs from 'fs';
-import path from 'path';
-
-// Import config
-import config from './config';
-
-// Import DB initializer
-import initializeDb from './db';
-
-// Import the routes
-import routes from './api';
-
-// Import server
-import {init} from './server.js';
-
-// Import logging libraries
-import logger from 'winston'; // Application logging
-
-// Set the default logging level
-logger.level = config.LOG_LEVEL;
-
-// Check that log file directory can be written to
-try {
-	if (config.LOG_DIR !== '') {
-		fs.accessSync(config.LOG_DIR, fs.W_OK);
-	}
-	logger.info(`Logging to ${config.LOG_DIR !== '' ? config.LOG_DIR :
-							'current working directory' }`);
-} catch (e) {
-	// If we cannot write to the desired directory then log tocurrent directory
-	logger.info(`Cannot log to '${config.LOG_DIR}',
-							logging to current working directory instead`);
-	config.LOG_DIR = '';
-}
-
-// Configure the logger
-logger.add(logger.transports.File, {
-	filename: path.join(config.LOG_DIR, `${config.APP_NAME}.log`),
-	json: config.LOG_JSON, // Log in json or plain text
-	maxsize: config.LOG_MAX_FILE_SIZE, // Max size of each file
-	maxFiles: config.LOG_MAX_FILES, // Max number of files
-	level: config.LOG_LEVEL, // Level of log messages
-});
-
-// If we are not in development and console logging not requested then remove it
-if (config.NODE_ENV !== 'development' && !config.LOG_CONSOLE) {
-	logger.remove(logger.transports.Console);
-}
-
-// If we exit immediately winston does not get chance to write last log message
-const exitWithStatus = (status) => {
-	logger.info(`Exiting with status ${status}`);
-	setTimeout(() => process.exit(status), 500);
-};
-
-// Catch kill and interrupt signals and log a clean exit status
-process
-	.on('SIGTERM', () => {
-		logger.info('SIGTERM: Application shutting down');
-		exitWithStatus(0);
-	})
-	.on('SIGINT', () => {
-		logger.info('SIGINT: Application shutting down');
-		exitWithStatus(0);
-	});
-
-// Try and start the server
-init(config, initializeDb, routes, logger).then((app) => {
-	// All good to go, start listening for requests
-	app.server.listen(config.PORT);
-	logger.info(`Application started,`
-		+ `listening on port ${app.server.address().port}`);
-}).catch((err) => {
-	// Error has occurred, log and shutdown
-	logger.error('Error starting server: ' + err.message + ', ' + err.stack);
-	logger.error('Fatal error: Application shutting down');
-	exitWithStatus(1);
-});
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/lib_cap.js.html b/jsdoc/lib_cap.js.html deleted file mode 100644 index e4a1c25..0000000 --- a/jsdoc/lib_cap.js.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - JSDoc: Source: lib/cap.js - - - - - - - - - - -
- -

Source: lib/cap.js

- - - - - - -
-
-
'use strict';
-/**
- * CogniCity CAP data format utility
- * @module lib/cap
- * @param {Object} logger Configured Winston logger instance
- **/
-
-// XML builder used to create XML output
-import builder from 'xmlbuilder';
-// moment module, JS date/time manipulation library
-import moment from 'moment-timezone';
-// Cap class
-module.exports = class Cap {
-  /**
-   * Setup the CAP object to user specified logger
-   * @alias module:lib/cap
-   * @param {Object} logger Configured Winston logger instance
-   */
-  constructor(logger) {
-    this.logger = logger;
-  }
-  /**
-   * Transform GeoJSON data to ATOM feed of CAP format XML data.
-   * See {@link https://tools.ietf.org/html/rfc4287|ATOM syndication format}
-   * @param {Object} features Peta Jakarta GeoJSON features object
-   * @return {String} XML CAP data describing all areas
-   **/
-  geoJsonToAtomCap(features) {
-    let self = this;
-    let feed = {
-      '@xmlns': 'http://www.w3.org/2005/Atom',
-      'id': 'https://data.petabencana.id/floods',
-      'title': 'petabencana.id Flood Affected Areas',
-      'updated': moment().tz('Asia/Jakarta').format(),
-      'author': {
-        name: 'petabencana.id',
-        uri: 'https://petabencana.id/',
-      },
-    };
-
-    for (let feature of features) {
-      let alert = self.createAlert( feature );
-      // If alert creation failed, don't create the entry
-      if (!alert) {
-        continue;
-      }
-
-      if (!feed.entry) feed.entry = [];
-
-      feed.entry.push({
-        // Note, this ID does not resolve to a real resource
-        // - but enough information is contained in the URL
-        // that we could resolve the flooded report at the same point in time
-        id: 'https://data.petabencana.id/floods?parent_name='
-        +encodeURI(feature.properties.parent_name)
-        +'&area_name='
-        +encodeURI(feature.properties.area_name)
-        +'&time='
-        +encodeURI(moment.tz(feature.properties.last_updated, 'Asia/Jakarta'
-                    ).format('YYYY-MM-DDTHH:mm:ssZ')),
-        title: alert.identifier + ' Flood Affected Area',
-        updated: moment.tz(feature.properties.last_updated, 'Asia/Jakarta'
-                    ).format('YYYY-MM-DDTHH:mm:ssZ'),
-        content: {
-          '@type': 'text/xml',
-          'alert': alert,
-        },
-      });
-    }
-
-    return builder.create( {feed: feed} ).end();
-  }
-
-  /**
-   * Create CAP ALERT object.
-   * See {@link `http://docs.oasis-open.org/emergency/cap/v1.2/`
-                  + `CAP-v1.2-os.html#_Toc97699527|`
-                  + `CAP specification 3.2.1 "alert" Element and Sub-elements`}
-   * @param {Object} feature petabencana.id GeoJSON feature
-   * @return {Object} Object representing ALERT element for xmlbuilder
-   */
-  createAlert(feature) {
-    let self = this;
-
-    let alert = {};
-
-    alert['@xmlns'] = 'urn:oasis:names:tc:emergency:cap:1.2';
-
-    let identifier = feature.properties.parent_name + '.'
-      + feature.properties.area_name + '.'
-      + moment.tz(feature.properties.last_updated, 'Asia/Jakarta'
-        ).format('YYYY-MM-DDTHH:mm:ssZ');
-    identifier = identifier.replace(/ /g, '_');
-    alert.identifier = encodeURI(identifier);
-
-    alert.sender = 'BPBD.JAKARTA.GOV.ID';
-    alert.sent = moment.tz(feature.properties.last_updated, 'Asia/Jakarta'
-                  ).format('YYYY-MM-DDTHH:mm:ssZ');
-    alert.status = 'Actual';
-    alert.msgType = 'Alert';
-    alert.scope = 'Public';
-
-    alert.info = self.createInfo( feature );
-    // If info creation failed, don't create the alert
-    if (!alert.info) {
-      return;
-    }
-
-    return alert;
-  }
-
-  /**
-   * Create a CAP INFO object.
-   * See {@link `http://docs.oasis-open.org/emergency/cap/v1.2/`
-                  + `CAP-v1.2-os.html#_Toc97699542|`
-                  + `CAP specification 3.2.2 "info" Element and Sub-elements`}
-   * @param {Object} feature petabencana.id GeoJSON feature
-   * @return {Object} Object representing INFO element suitable for xmlbuilder
-   */
-  createInfo(feature) {
-    let self = this;
-
-    let info = {};
-
-    info.category = 'Met';
-    info.event = 'FLOODING';
-    info.urgency = 'Immediate';
-
-    let severity = '';
-    let levelDescription = '';
-    if ( feature.properties.state === 1 ) {
-      severity = 'Unknown';
-      levelDescription = 'AN UNKNOWN LEVEL OF FLOODING - USE CAUTION -';
-    } else if ( feature.properties.state === 2 ) {
-      severity = 'Minor';
-      levelDescription = 'FLOODING OF BETWEEN 10 and 70 CENTIMETERS';
-    } else if ( feature.properties.state === 3 ) {
-      severity = 'Moderate';
-      levelDescription = 'FLOODING OF BETWEEN 71 and 150 CENTIMETERS';
-    } else if ( feature.properties.state === 4 ) {
-      severity = 'Severe';
-      levelDescription = 'FLOODING OF OVER 150 CENTIMETERS';
-    } else {
-      self.logger.silly('Cap: createInfo(): State '
-        + feature.properties.state
-        + ' cannot be resolved to a severity');
-      return;
-    }
-    info.severity = severity;
-
-    info.certainty = 'Observed';
-    info.senderName = 'JAKARTA EMERGENCY MANAGEMENT AGENCY';
-    info.headline = 'FLOOD WARNING';
-
-    let descriptionTime = moment(feature.properties.last_updated
-                            ).tz('Asia/Jakarta').format('HH:mm z');
-    let descriptionArea = feature.properties.parent_name
-                          + ', ' + feature.properties.area_name;
-    info.description = 'AT '
-                        + descriptionTime
-                        + ' THE JAKARTA EMERGENCY MANAGEMENT AGENCY OBSERVED '
-                        + levelDescription + ' IN ' + descriptionArea + '.';
-
-    info.web = 'https://petabencana.id/';
-
-    info.area = self.createArea( feature );
-    // If area creation failed, don't create the info
-    if (!info.area) {
-      return;
-    }
-
-    return info;
-  }
-
-  /**
-   * Create a CAP AREA object.
-   * See {@link `http://docs.oasis-open.org/emergency/cap/v1.2/`
-                + `CAP-v1.2-os.html#_Toc97699550|`
-                + `CAP specification 3.2.4 "area" Element and Sub-elements`}
-   * @param {Object} feature petabencana.id GeoJSON feature
-   * @return {Object} Object representing AREA element for XML xmlbuilder
-   */
-  createArea(feature) {
-    let self = this;
-
-    let area = {};
-
-    area.areaDesc = feature.properties.area_name
-                    + ', ' + feature.properties.parent_name;
-
-    // Collate array of polygon-describing strings from different geometry types
-    area.polygon = [];
-    let featurePolygons;
-    if ( feature.geometry.type === 'Polygon' ) {
-      featurePolygons = [feature.geometry.coordinates];
-    } else if ( feature.geometry.type === 'MultiPolygon' ) {
-      featurePolygons = feature.geometry.coordinates;
-    } else {
-      /* istanbul ignore next */
-      self.logger.error( 'Cap: createInfo(): Geometry type \''
-                          + feature.geometry.type + '\' not supported' );
-      /* istanbul ignore next */
-      return;
-    }
-
-    // Construct CAP suitable polygon strings
-    // (whitespace-delimited WGS84 coordinate pairs - e.g. "lat,lon lat,lon")
-    // See: `http://docs.oasis-open.org/emergency/cap/v1.2/`
-    //          + `CAP-v1.2-os.html#_Toc97699550 - polygon`
-    // See: `http://docs.oasis-open.org/emergency/cap/v1.2/`
-    //          + `CAP-v1.2-os.html#_Toc520973440`
-    self.logger.debug( 'Cap: createInfo(): '
-                        + featurePolygons.length
-                        + ' polygons detected for '
-                        + area.areaDesc );
-    for (let polygonIndex=0; polygonIndex < featurePolygons.length;
-      polygonIndex++) {
-      // Assume all geometries to be simple Polygons of single LineString
-      if ( featurePolygons[polygonIndex].length > 1 ) {
-        /* istanbul ignore next */
-        self.logger.error( `Cap: createInfo(): Polygon with interior rings is
-                            not supported` );
-        /* istanbul ignore next */
-        return;
-      }
-
-      let polygon = '';
-      self.logger.debug( 'Cap: createInfo(): '
-                        + featurePolygons[polygonIndex][0].length
-                        + ' points detected in polygon '
-                        + polygonIndex );
-      for (let pointIndex=0; pointIndex <
-        featurePolygons[polygonIndex][0].length; pointIndex++) {
-          let point = featurePolygons[polygonIndex][0][pointIndex];
-          polygon += point[1] + ',' + point[0] + ' ';
-        }
-      area.polygon.push( polygon );
-    }
-
-    return area;
-  }
-
-};
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/lib_util.js.html b/jsdoc/lib_util.js.html deleted file mode 100644 index 341491a..0000000 --- a/jsdoc/lib_util.js.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - JSDoc: Source: lib/util.js - - - - - - - - - - -
- -

Source: lib/util.js

- - - - - - -
-
-
/**
- * Server utility functions
- * @file CogniCity Server Utility file
- **/
-
-// Import dependencies
-import Promise from 'bluebird';
-import jwt from 'express-jwt';
-// import jwks from 'jwks-rsa'; // See TODO below regarding Auth0 mechanism
-import dbgeo from 'dbgeo';
-
-// Import config
-import config from '../config';
-
-// Caching
-import apicache from 'apicache';
-apicache.options({debug: config.LOG_LEVEL === 'debug',
-                  statusCodes: {include: [200]}});
-let cache = apicache.middleware;
-
-// Cache response if enabled
-const cacheResponse = (duration) => cache(duration, config.CACHE);
-
-// Configure our JWT checker
-const jwtCheck = jwt({
-  secret: new Buffer(config.AUTH0_SECRET),
-  audience: config.AUTH0_CLIENT_ID,
-});
-// TODO: Move to single auth0 mechanism once they support SPA auth using API
-/* const jwtCheck = jwt({
-  credentialsRequired: config.SECURE_AUTH0,
-  secret: jwks.expressJwtSecret({
-      cache: true,
-      rateLimit: true,
-      jwksRequestsPerMinute: 5,
-      jwksUri: `${config.AUTH0_ISSUER}/.well-known/jwks.json`
-  }),
-  audience: config.AUTH0_AUDIENCE,
-  issuer: config.AUTH0_ISSUER,
-  algorithms: ['RS256']
-});*/
-
-// Setup dbgeo
-dbgeo.defaults = {
-  outputFormat: config.GEO_FORMAT_DEFAULT,
-  geometryColumn: 'the_geom',
-  geometryType: 'wkb',
-  precision: config.GEO_PRECISION,
-};
-
-// Format the geographic response with the required geo format
-const formatGeo = (body, outputFormat) => new Promise((resolve, reject) => {
-  // Check that body is an array, required by dbgeo.parse
-  if (Object.prototype.toString.call( body ) !== '[object Array]') {
-    body = [body]; // Force to array
-  }
-	dbgeo.parse(body, {outputFormat}, (err, formatted) => {
-		if (err) reject(err);
-		resolve(formatted);
-	});
-});
-
-// Handle a geo response, send back a correctly formatted json object with
-// status 200 or not found 404, catch and forward any errors in the process
-const handleGeoResponse = (data, req, res, next) => {
-  return !data ?
-    res.status(404).json({statusCode: 404, found: false, result: null}) :
-      formatGeo(data, req.query.geoformat)
-        .then((formatted) => res.status(200).json({statusCode: 200,
-          result: formatted}))
-        /* istanbul ignore next */
-        .catch((err) => {
-          /* istanbul ignore next */
-          next(err);
-        });
-};
-
-// Handle a regular response, send back result or 404
-const handleResponse = (data, req, res) => {
-  return !data ?
-    res.status(404).json({statusCode: 404, found: false, result: null}) :
-    res.status(200).json({statusCode: 200, result: data});
-};
-
-module.exports = {
-  cacheResponse, formatGeo, handleResponse, handleGeoResponse, jwtCheck,
-};
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/module-lib_cap.html b/jsdoc/module-lib_cap.html deleted file mode 100644 index 6ccfc2d..0000000 --- a/jsdoc/module-lib_cap.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - JSDoc: Class: module:lib/cap - - - - - - - - - - -
- -

Class: module:lib/cap

- - - - - - -
- -
- -

module:lib/cap

- - -
- -
-
- - - - - -

new module:lib/cap(logger)

- - - - - -
- Setup the CAP object to user specified logger -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_cards_index.html b/jsdoc/module-src_api_cards_index.html deleted file mode 100644 index 86b7b20..0000000 --- a/jsdoc/module-src_api_cards_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/cards/index - - - - - - - - - - -
- -

Module: src/api/cards/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /cards endpoint
- - - - - - - -

(require("src/api/cards/index"))(config, db, logger) → {Object}

- - - - - -
- CogniCity Server /cards endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for cards route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_cards_model.html b/jsdoc/module-src_api_cards_model.html deleted file mode 100644 index 60436c8..0000000 --- a/jsdoc/module-src_api_cards_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/cards/model - - - - - - - - - - -
- -

Module: src/api/cards/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /cards data model
- - - - - - - -

(require("src/api/cards/model"))(config, db, logger) → {Object}

- - - - - -
- Database interaction for Cards objects -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- data Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_cities_index.html b/jsdoc/module-src_api_cities_index.html deleted file mode 100644 index ea37872..0000000 --- a/jsdoc/module-src_api_cities_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/cities/index - - - - - - - - - - -
- -

Module: src/api/cities/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /cities endpoint
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/cities/index"))(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for cities data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_cities_model.html b/jsdoc/module-src_api_cities_model.html deleted file mode 100644 index e958fa5..0000000 --- a/jsdoc/module-src_api_cities_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/cities/model - - - - - - - - - - -
- -

Module: src/api/cities/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /cities data model
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/cities/model"))(config, db, logger) → {Object}

- - - - - -
- Methods to get cities data from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_feeds_index.html b/jsdoc/module-src_api_feeds_index.html deleted file mode 100644 index b60c1a7..0000000 --- a/jsdoc/module-src_api_feeds_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/feeds/index - - - - - - - - - - -
- -

Module: src/api/feeds/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /feeds endpoint
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/feeds/index"))(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for feeds -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_feeds_model.html b/jsdoc/module-src_api_feeds_model.html deleted file mode 100644 index 8975432..0000000 --- a/jsdoc/module-src_api_feeds_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/feeds/model - - - - - - - - - - -
- -

Module: src/api/feeds/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /feeds data model
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/feeds/model"))(config, db, logger) → {Object}

- - - - - -
- Methods to interact with feeds layers in database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_floodgauge_model.html b/jsdoc/module-src_api_floodgauge_model.html deleted file mode 100644 index d93ed05..0000000 --- a/jsdoc/module-src_api_floodgauge_model.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - JSDoc: Module: src/api/floodgauge/model - - - - - - - - - - -
- -

Module: src/api/floodgauge/model

- - - - - - -
- -
- - - - - -
- -
-
- - -
CogniCity Server /floodgauges data model
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 16:31:03 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_floodgauges_index.html b/jsdoc/module-src_api_floodgauges_index.html deleted file mode 100644 index f3c9df2..0000000 --- a/jsdoc/module-src_api_floodgauges_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/floodgauges/index - - - - - - - - - - -
- -

Module: src/api/floodgauges/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /floodgauges endpoint
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/floodgauges/index"))(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for floodgauges data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_floodgauges_model.html b/jsdoc/module-src_api_floodgauges_model.html deleted file mode 100644 index 39c5570..0000000 --- a/jsdoc/module-src_api_floodgauges_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/floodgauges/model - - - - - - - - - - -
- -

Module: src/api/floodgauges/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /floodgauges data model
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/floodgauges/model"))(config, db, logger) → {Object}

- - - - - -
- Methods to get floodgauges layers from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_floods_index.html b/jsdoc/module-src_api_floods_index.html deleted file mode 100644 index 629e8cd..0000000 --- a/jsdoc/module-src_api_floods_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/floods/index - - - - - - - - - - -
- -

Module: src/api/floods/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /floods endpoint
- - - - - - - -

(require("src/api/floods/index"))(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for floods data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_floods_model.html b/jsdoc/module-src_api_floods_model.html deleted file mode 100644 index f60a07f..0000000 --- a/jsdoc/module-src_api_floods_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/floods/model - - - - - - - - - - -
- -

Module: src/api/floods/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /floods data model
- - - - - - - -

(require("src/api/floods/model"))(config, db, logger) → {Object}

- - - - - -
- Methods to interact with flood layers in database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_index.html b/jsdoc/module-src_api_index.html deleted file mode 100644 index 925e30a..0000000 --- a/jsdoc/module-src_api_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/index - - - - - - - - - - -
- -

Module: src/api/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server Data API
- - - - - - - -

(require("src/api/index"))(config, db, logger) → {Object}

- - - - - -
- Build CogniCity Server Data API -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for API routes -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_infrastructure_index.html b/jsdoc/module-src_api_infrastructure_index.html deleted file mode 100644 index 3602931..0000000 --- a/jsdoc/module-src_api_infrastructure_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/infrastructure/index - - - - - - - - - - -
- -

Module: src/api/infrastructure/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /infrastructure endpoint
- - - - - - - -

(require("src/api/infrastructure/index"))(config, db, logger) → {Object}

- - - - - -
- Endpoint specification for infrastructrue data -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_infrastructure_model.html b/jsdoc/module-src_api_infrastructure_model.html deleted file mode 100644 index 8cd59d0..0000000 --- a/jsdoc/module-src_api_infrastructure_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/infrastructure/model - - - - - - - - - - -
- -

Module: src/api/infrastructure/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /infrastructure data model
- - - - - - - -

(require("src/api/infrastructure/model"))(config, db, logger) → {Object}

- - - - - -
- Methods to get infrastructure layers from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_reports_archive_index.html b/jsdoc/module-src_api_reports_archive_index.html deleted file mode 100644 index 5492ede..0000000 --- a/jsdoc/module-src_api_reports_archive_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/reports/archive/index - - - - - - - - - - -
- -

Module: src/api/reports/archive/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /reports/archive endpoint
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/reports/archive/index"))(config, db, logger) → {Object}

- - - - - -
- Methods to get historic flood reports from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_reports_archive_model.html b/jsdoc/module-src_api_reports_archive_model.html deleted file mode 100644 index 6a9795d..0000000 --- a/jsdoc/module-src_api_reports_archive_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/reports/archive/model - - - - - - - - - - -
- -

Module: src/api/reports/archive/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /reports/archive data model
- - - - - - - -

(require("src/api/reports/archive/model"))(config, db, logger) → {Object}

- - - - - -
- Interact with historic report objects -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_reports_index.html b/jsdoc/module-src_api_reports_index.html deleted file mode 100644 index 65f9fb8..0000000 --- a/jsdoc/module-src_api_reports_index.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/reports/index - - - - - - - - - - -
- -

Module: src/api/reports/index

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /reports endpoint
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -

(require("src/api/reports/index"))(config, db, logger) → {Object}

- - - - - -
- Methods to get current flood reports from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- api Express router object for reports route -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_reports_model.html b/jsdoc/module-src_api_reports_model.html deleted file mode 100644 index 531a8ea..0000000 --- a/jsdoc/module-src_api_reports_model.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - JSDoc: Module: src/api/reports/model - - - - - - - - - - -
- -

Module: src/api/reports/model

- - - - - - -
- -
- - - - - - - -
- -
-
- - -
CogniCity Server /reports data model
- - - - - - - -

(require("src/api/reports/model"))(config, db, logger) → {Object}

- - - - - -
- Methods to get current flood reports from database -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - Server configuration
db - - -Object - - - - PG Promise database instance
logger - - -Object - - - - Configured Winston logger instance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- Query methods -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/module-src_api_reports_model_archive_model.html b/jsdoc/module-src_api_reports_model_archive_model.html deleted file mode 100644 index e7fa714..0000000 --- a/jsdoc/module-src_api_reports_model_archive_model.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - JSDoc: Module: src/api/reports/model/archive/model - - - - - - - - - - -
- -

Module: src/api/reports/model/archive/model

- - - - - - -
- -
- - - - - -
- -
-
- - -
CogniCity Server /reports/archive data model
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 16:01:56 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/scripts/linenumber.js b/jsdoc/scripts/linenumber.js deleted file mode 100644 index 8d52f7e..0000000 --- a/jsdoc/scripts/linenumber.js +++ /dev/null @@ -1,25 +0,0 @@ -/*global document */ -(function() { - var source = document.getElementsByClassName('prettyprint source linenums'); - var i = 0; - var lineNumber = 0; - var lineId; - var lines; - var totalLines; - var anchorHash; - - if (source && source[0]) { - anchorHash = document.location.hash.substring(1); - lines = source[0].getElementsByTagName('li'); - totalLines = lines.length; - - for (; i < totalLines; i++) { - lineNumber++; - lineId = 'line' + lineNumber; - lines[i].id = lineId; - if (lineId === anchorHash) { - lines[i].className += ' selected'; - } - } - } -})(); diff --git a/jsdoc/scripts/prettify/Apache-License-2.0.txt b/jsdoc/scripts/prettify/Apache-License-2.0.txt deleted file mode 100644 index d645695..0000000 --- a/jsdoc/scripts/prettify/Apache-License-2.0.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. diff --git a/jsdoc/scripts/prettify/lang-css.js b/jsdoc/scripts/prettify/lang-css.js deleted file mode 100644 index 041e1f5..0000000 --- a/jsdoc/scripts/prettify/lang-css.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", -/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/jsdoc/scripts/prettify/prettify.js b/jsdoc/scripts/prettify/prettify.js deleted file mode 100644 index eef5ad7..0000000 --- a/jsdoc/scripts/prettify/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p - - - - JSDoc: Module: server -Core server module -Initialize the server - - - - - - - - - - -
- -

Module: server -Core server module -Initialize the server

- - - - - - -
- -
- -
- -
-
- - -
CogniCity Data Server Module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 16:33:50 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/server%0ACore%20server%20modulemodule_.html b/jsdoc/server%0ACore%20server%20modulemodule_.html deleted file mode 100644 index a5c9e8c..0000000 --- a/jsdoc/server%0ACore%20server%20modulemodule_.html +++ /dev/null @@ -1,368 +0,0 @@ - - - - - JSDoc: Module: server -Core server module - - - - - - - - - - -
- -

Module: server -Core server module

- - - - - - -
- -
- -
- -
-
- - -
CogniCity Data Server Module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) init(config, initializeDb, routes, logger) → {Object}

- - - - - -
- Initialize the server -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -Object - - - - configuration
initializeDb - - -Object - - - - database initialization
routes - - -Object - - - - routes
logger - - -Object - - - - logger
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - -
Returns:
- - -
- - Express server application -
- - - -
-
- Type -
-
- -Object - - -
-
- - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/server.js.html b/jsdoc/server.js.html deleted file mode 100644 index 83de514..0000000 --- a/jsdoc/server.js.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - JSDoc: Source: server.js - - - - - - - - - - -
- -

Source: server.js

- - - - - - -
-
-
/**
-	* CogniCity Data Server Module
-	* @module server
-	* Core server module
-	**/
-// Import
-import Promise from 'bluebird';
-
-// Express middleware and http
-import express from 'express';
-import http from 'http';
-
-// Import express middlewares
-import bodyParser from 'body-parser';
-import cors from 'cors';
-import compression from 'compression';
-import responseTime from 'response-time';
-import morgan from 'morgan'; // Express logging
-
-/**
- * Initialize the server
- * @function init
- * @param {Object} config - configuration
- * @param {Object} initializeDb - database initialization
- * @param {Object} routes - routes
- * @param {Object} logger - logger
- * @return {Object} - Express server application
- **/
-const init = (config, initializeDb, routes, logger) =>
-	new Promise((resolve, reject) => {
-	// Create the server
-	let app = express();
-	app.server = http.createServer(app);
-
-	// Winston stream function for express so we can capture logs
-	const winstonStream = {
-		write: function(message) {
-			logger.info(message.slice(0, -1));
-		},
-	};
-
-	// Setup express logger
-	app.use(morgan('combined', {stream: winstonStream}));
-
-	// Compress responses if required but only if caching is disabled
-	if (config.COMPRESS && !config.CACHE) {
-		app.use(compression());
-	}
-
-	// Provide CORS support (not required if behind API gateway)
-	if (config.CORS) {
-		app.use(cors({exposedHeaders: config.CORS_HEADERS}));
-	}
-
-	// Provide response time header in response
-	if (config.RESPONSE_TIME) {
-		app.use(responseTime());
-	}
-
-	// Parse body messages into json
-	app.use(bodyParser.json({limit: config.BODY_LIMIT}));
-
-	// Try and connect to the db
-	initializeDb(config, logger)
-		.then((db) => {
-			// Log debug message
-			logger.debug('Successfully connected to DB');
-
-			// Mount the routes
-			app.use('/', routes({config, db, logger}));
-
-			// App is ready to go, resolve the promise
-			resolve(app);
-		})
-		.catch((err) => {
-			/* istanbul ignore next */
-			logger.error('DB Connection error: ' + err);
-			/* istanbul ignore next */
-			logger.error('Fatal error: Application shutting down');
-			/* istanbul ignore next */
-			// We cannot continue without a DB, reject
-			reject(err);
-		});
-});
-
-// Export the init function for use externally
-module.exports = {init};
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/src_test_testCAP%0AA%20module%20to%20test%20the%20CAP%20data%20format%20utilitymodule_.html b/jsdoc/src_test_testCAP%0AA%20module%20to%20test%20the%20CAP%20data%20format%20utilitymodule_.html deleted file mode 100644 index 68e5c71..0000000 --- a/jsdoc/src_test_testCAP%0AA%20module%20to%20test%20the%20CAP%20data%20format%20utilitymodule_.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - JSDoc: Module: src/test/testCAP -A module to test the CAP data format utility - - - - - - - - - - -
- -

Module: src/test/testCAP -A module to test the CAP data format utility

- - - - - - -
- -
- -
- -
-
- - -
testCAP module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testCAP(logger)

- - - - - -
- Test CAP data format utility -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
logger - - -Object - - - - CogniCity Server logger object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/src_test_testCards%0AA%20module%20to%20test%20the%20_cards%20endpointmodule_.html b/jsdoc/src_test_testCards%0AA%20module%20to%20test%20the%20_cards%20endpointmodule_.html deleted file mode 100644 index bfdc464..0000000 --- a/jsdoc/src_test_testCards%0AA%20module%20to%20test%20the%20_cards%20endpointmodule_.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - JSDoc: Module: src/test/testCards -A module to test the /cards endpoint - - - - - - - - - - -
- -

Module: src/test/testCards -A module to test the /cards endpoint

- - - - - - -
- -
- -
- -
-
- - -
testCards module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testCards(app, createdAt)

- - - - - -
- Test cards endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
createdAt - - -String - - - - Sample date as ISO 8601 string
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/styles/jsdoc-default.css b/jsdoc/styles/jsdoc-default.css deleted file mode 100644 index ede1919..0000000 --- a/jsdoc/styles/jsdoc-default.css +++ /dev/null @@ -1,354 +0,0 @@ -@font-face { - font-family: 'Open Sans'; - font-weight: normal; - font-style: normal; - src: url('../fonts/OpenSans-Regular-webfont.eot'); - src: - local('Open Sans'), - local('OpenSans'), - url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Regular-webfont.woff') format('woff'), - url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg'); -} - -@font-face { - font-family: 'Open Sans Light'; - font-weight: normal; - font-style: normal; - src: url('../fonts/OpenSans-Light-webfont.eot'); - src: - local('Open Sans Light'), - local('OpenSans Light'), - url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Light-webfont.woff') format('woff'), - url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg'); -} - -html -{ - overflow: auto; - background-color: #fff; - font-size: 14px; -} - -body -{ - font-family: 'Open Sans', sans-serif; - line-height: 1.5; - color: #4d4e53; - background-color: white; -} - -a, a:visited, a:active { - color: #0095dd; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -header -{ - display: block; - padding: 0px 4px; -} - -tt, code, kbd, samp { - font-family: Consolas, Monaco, 'Andale Mono', monospace; -} - -.class-description { - font-size: 130%; - line-height: 140%; - margin-bottom: 1em; - margin-top: 1em; -} - -.class-description:empty { - margin: 0; -} - -#main { - float: left; - width: 70%; -} - -article dl { - margin-bottom: 40px; -} - -section -{ - display: block; - background-color: #fff; - padding: 12px 24px; - border-bottom: 1px solid #ccc; - margin-right: 30px; -} - -.variation { - display: none; -} - -.signature-attributes { - font-size: 60%; - color: #aaa; - font-style: italic; - font-weight: lighter; -} - -nav -{ - display: block; - float: right; - margin-top: 28px; - width: 30%; - box-sizing: border-box; - border-left: 1px solid #ccc; - padding-left: 16px; -} - -nav ul { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; - font-size: 100%; - line-height: 17px; - padding: 0; - margin: 0; - list-style-type: none; -} - -nav ul a, nav ul a:visited, nav ul a:active { - font-family: Consolas, Monaco, 'Andale Mono', monospace; - line-height: 18px; - color: #4D4E53; -} - -nav h3 { - margin-top: 12px; -} - -nav li { - margin-top: 6px; -} - -footer { - display: block; - padding: 6px; - margin-top: 12px; - font-style: italic; - font-size: 90%; -} - -h1, h2, h3, h4 { - font-weight: 200; - margin: 0; -} - -h1 -{ - font-family: 'Open Sans Light', sans-serif; - font-size: 48px; - letter-spacing: -2px; - margin: 12px 24px 20px; -} - -h2, h3.subsection-title -{ - font-size: 30px; - font-weight: 700; - letter-spacing: -1px; - margin-bottom: 12px; -} - -h3 -{ - font-size: 24px; - letter-spacing: -0.5px; - margin-bottom: 12px; -} - -h4 -{ - font-size: 18px; - letter-spacing: -0.33px; - margin-bottom: 12px; - color: #4d4e53; -} - -h5, .container-overview .subsection-title -{ - font-size: 120%; - font-weight: bold; - letter-spacing: -0.01em; - margin: 8px 0 3px 0; -} - -h6 -{ - font-size: 100%; - letter-spacing: -0.01em; - margin: 6px 0 3px 0; - font-style: italic; -} - -table -{ - border-spacing: 0; - border: 0; - border-collapse: collapse; -} - -td, th -{ - border: 1px solid #ddd; - margin: 0px; - text-align: left; - vertical-align: top; - padding: 4px 6px; - display: table-cell; -} - -thead tr -{ - background-color: #ddd; - font-weight: bold; -} - -th { border-right: 1px solid #aaa; } -tr > th:last-child { border-right: 1px solid #ddd; } - -.ancestors { color: #999; } -.ancestors a -{ - color: #999 !important; - text-decoration: none; -} - -.clear -{ - clear: both; -} - -.important -{ - font-weight: bold; - color: #950B02; -} - -.yes-def { - text-indent: -1000px; -} - -.type-signature { - color: #aaa; -} - -.name, .signature { - font-family: Consolas, Monaco, 'Andale Mono', monospace; -} - -.details { margin-top: 14px; border-left: 2px solid #DDD; } -.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; } -.details dd { margin-left: 70px; } -.details ul { margin: 0; } -.details ul { list-style-type: none; } -.details li { margin-left: 30px; padding-top: 6px; } -.details pre.prettyprint { margin: 0 } -.details .object-value { padding-top: 0; } - -.description { - margin-bottom: 1em; - margin-top: 1em; -} - -.code-caption -{ - font-style: italic; - font-size: 107%; - margin: 0; -} - -.prettyprint -{ - border: 1px solid #ddd; - width: 80%; - overflow: auto; -} - -.prettyprint.source { - width: inherit; -} - -.prettyprint code -{ - font-size: 100%; - line-height: 18px; - display: block; - padding: 4px 12px; - margin: 0; - background-color: #fff; - color: #4D4E53; -} - -.prettyprint code span.line -{ - display: inline-block; -} - -.prettyprint.linenums -{ - padding-left: 70px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.prettyprint.linenums ol -{ - padding-left: 0; -} - -.prettyprint.linenums li -{ - border-left: 3px #ddd solid; -} - -.prettyprint.linenums li.selected, -.prettyprint.linenums li.selected * -{ - background-color: lightyellow; -} - -.prettyprint.linenums li * -{ - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} - -.params .name, .props .name, .name code { - color: #4D4E53; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 100%; -} - -.params td.description > p:first-child, -.props td.description > p:first-child -{ - margin-top: 0; - padding-top: 0; -} - -.params td.description > p:last-child, -.props td.description > p:last-child -{ - margin-bottom: 0; - padding-bottom: 0; -} - -.disabled { - color: #454545; -} diff --git a/jsdoc/styles/prettify-jsdoc.css b/jsdoc/styles/prettify-jsdoc.css deleted file mode 100644 index 5a2526e..0000000 --- a/jsdoc/styles/prettify-jsdoc.css +++ /dev/null @@ -1,111 +0,0 @@ -/* JSDoc prettify.js theme */ - -/* plain text */ -.pln { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* string content */ -.str { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a keyword */ -.kwd { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a comment */ -.com { - font-weight: normal; - font-style: italic; -} - -/* a type name */ -.typ { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a literal value */ -.lit { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* punctuation */ -.pun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp open bracket */ -.opn { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp close bracket */ -.clo { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a markup tag name */ -.tag { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute name */ -.atn { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute value */ -.atv { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a declaration */ -.dec { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a variable name */ -.var { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a function name */ -.fun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; -} diff --git a/jsdoc/styles/prettify-tomorrow.css b/jsdoc/styles/prettify-tomorrow.css deleted file mode 100644 index b6f92a7..0000000 --- a/jsdoc/styles/prettify-tomorrow.css +++ /dev/null @@ -1,132 +0,0 @@ -/* Tomorrow Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* Pretty printing styles. Used with prettify.js. */ -/* SPAN elements with the classes below are added by prettyprint. */ -/* plain text */ -.pln { - color: #4d4d4c; } - -@media screen { - /* string content */ - .str { - color: #718c00; } - - /* a keyword */ - .kwd { - color: #8959a8; } - - /* a comment */ - .com { - color: #8e908c; } - - /* a type name */ - .typ { - color: #4271ae; } - - /* a literal value */ - .lit { - color: #f5871f; } - - /* punctuation */ - .pun { - color: #4d4d4c; } - - /* lisp open bracket */ - .opn { - color: #4d4d4c; } - - /* lisp close bracket */ - .clo { - color: #4d4d4c; } - - /* a markup tag name */ - .tag { - color: #c82829; } - - /* a markup attribute name */ - .atn { - color: #f5871f; } - - /* a markup attribute value */ - .atv { - color: #3e999f; } - - /* a declaration */ - .dec { - color: #f5871f; } - - /* a variable name */ - .var { - color: #c82829; } - - /* a function name */ - .fun { - color: #4271ae; } } -/* Use higher contrast and text-weight for printable form. */ -@media print, projection { - .str { - color: #060; } - - .kwd { - color: #006; - font-weight: bold; } - - .com { - color: #600; - font-style: italic; } - - .typ { - color: #404; - font-weight: bold; } - - .lit { - color: #044; } - - .pun, .opn, .clo { - color: #440; } - - .tag { - color: #006; - font-weight: bold; } - - .atn { - color: #404; } - - .atv { - color: #060; } } -/* Style */ -/* -pre.prettyprint { - background: white; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 12px; - line-height: 1.5; - border: 1px solid #ccc; - padding: 10px; } -*/ - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; } - -/* IE indents via margin-left */ -li.L0, -li.L1, -li.L2, -li.L3, -li.L4, -li.L5, -li.L6, -li.L7, -li.L8, -li.L9 { - /* */ } - -/* Alternate shading for lines */ -li.L1, -li.L3, -li.L5, -li.L7, -li.L9 { - /* */ } diff --git a/jsdoc/test_index.js.html b/jsdoc/test_index.js.html deleted file mode 100644 index e83b5a6..0000000 --- a/jsdoc/test_index.js.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - JSDoc: Source: test/index.js - - - - - - - - - - -
- -

Source: test/index.js

- - - - - - -
-
-
/* eslint-disable no-console */
-/**
- * Integration testing for CogniCity Server API
- * @file Runs unit tests in sequence against live app and database instance
- *
- * Tomas Holderness June 2017
- */
-
-// Import config
-import config from '../config';
-config.PGDATABASE = 'cognicity_server_testing';
-
-// Import DB initializer
-import initializeDb from '../db';
-
-// Import the routes
-import routes from '../api';
-
-// Import server object
-import {init} from '../server.js';
-
-// Mock logger object for app
-const winston = require('winston');
-const logger = new (winston.Logger)({
-  transports: [
-    new (winston.transports.Console)({raw: true, level: 'debug'}),
-  ],
-});
-
-
-// Import tests
-import testServer from './testServer.js';
-import testCards from './testCards.js';
-import testCities from './testCities.js';
-import testFeeds from './testFeeds.js';
-import testFloodgauges from './testFloodgauges.js';
-import testInfrastructure from './testInfrastructure.js';
-import testFloods from './testFloods.js';
-import testReports from './testReports.js';
-import testReportsArchive from './testReportsArchive';
-import testCAP from './testCAP.js';
-import testDB from './testDB.js';
-
-// Put some sample data in the database
-import Promise from 'bluebird';
-const pgp = require('pg-promise')({
-  promiseLib: Promise, // Use bluebird for enhanced promises
-});
-
-// Create a top-level testing harness
-describe('Cognicity Server Testing Harness', function() {
-// PG config string for dummy data inserts
-const PG_CONFIG_STRING = 'postgres://'+config.PGUSER+'@'+config.PGHOST+':'+config.PGPORT+'/'+config.PGDATABASE;
-
-// Global report value
-let reportid = '1';
-let createdAt = new Date().toISOString();
-
-// Auth JWT support
-const jwt = require('jsonwebtoken');
-let token = jwt.sign({},
-  new Buffer(config.AUTH0_SECRET),
-  {audience: config.AUTH0_CLIENT_ID});
-
- it('Server starts', function(done) {
-   // Test optional server params
-  config.COMPRESS = true;
-  config.CORS = true;
-  config.RESPONSE_TIME = true;
-
-  // Initialise
-  init(config, initializeDb, routes, logger).then((app) => {
-    testServer(app);
-    testCards(app, createdAt);
-    testCities(app);
-    testFeeds(app);
-    testFloodgauges(app);
-    testInfrastructure(app);
-    testFloods(app, token);
-    testReports(app, reportid, createdAt);
-    testReportsArchive(app, createdAt);
-    testCAP(logger);
-    testDB();
-
-    // Removes dummy data
-    describe('Cleans up', function() {
-     let db = pgp(PG_CONFIG_STRING);
-     it('Removes dummy report data', function(done) {
-     let query = `DELETE FROM ${config.TABLE_REPORTS}
-          WHERE source = 'grasp'
-          AND text = 'integration testing';`;
-
-       db.none(query)
-        .then(() => {
-          done();
-        })
-        .catch((error) => console.log(error));
-     });
-
-     it('Removes dummy cards data', function(done) {
-       let query = `DELETE FROM ${config.TABLE_GRASP_CARDS}
-          WHERE username = 'testuser'
-          AND network = 'test network';`;
-
-        db.none(query)
-          .then(() => {
-            done();
-          })
-          .catch((error) => console.log(error));
-     });
-
-     it('Removes dummy cards data', function(done) {
-       let query = `DELETE FROM ${config.TABLE_GRASP_REPORTS}
-          WHERE text = 'integration testing';`;
-
-      db.none(query)
-        .then(() => {
-          done();
-        })
-        .catch((error) => console.log(error));
-     });
-
-     // Remove dummy data from REM floods table
-     it('Removes dummy flood data', function(done) {
-      let query = `DELETE FROM ${config.TABLE_REM_STATUS} WHERE local_area = 5`;
-
-      db.none(query)
-        .then(() => {
-          done();
-        })
-        .catch((error) => console.log(error));
-     });
-
-     // Remove dummy data from REM floods table
-     it('Removes dummy flood data from log', function(done) {
-      let query = `DELETE FROM ${config.TABLE_REM_STATUS_LOG}
-                    WHERE username = 'testing'`;
-        db.none(query)
-          .then(() => {
-            done();
-          })
-          .catch((error) => console.log(error));
-       });
-
-
-     // Remove dummy data from qlue table
-     it('Removes dummy qlue data', function(done) {
-      let query =`DELETE FROM ${config.TABLE_FEEDS_QLUE} WHERE pkey = 9999`;
-      db.none(query)
-        .then(() => {
-          done();
-        })
-        .catch((error) => console.log(error));
-     });
-
-     // Remove dummy qlue data from all reports table
-     it('Removes dummy qlue data', function(done) {
-      let query = `DELETE FROM ${config.TABLE_REPORTS}
-          WHERE fkey = 9999 AND source = 'qlue'`;
-      db.none(query)
-        .then(() => {
-          done();
-        })
-        .catch((error) => console.log(error));
-     });
-
-     // Remove dummy data from detik table
-     it('Removes dummy detik data', function(done) {
-      let query = `DELETE FROM ${config.TABLE_FEEDS_DETIK} WHERE pkey = 9999`;
-      db.none(query)
-        .then(() => {
-          done();
-        })
-        .catch((error) => console.log(error));
-       });
-
-     // Remove dummy detik data from all reports table
-     it('Removes dummy detik data', function(done) {
-      let query = `DELETE FROM ${config.TABLE_REPORTS}
-          WHERE fkey = 9999 AND source = 'detik'`;
-      db.none(query)
-        .then(() => {
-          done();
-        })
-        .catch((error) => console.log(error));
-     });
-     return (done());
-   });
- });
-  });
-});
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testCAP%0AA%20module%20to%20test%20the%20CAP%20data%20format%20utilitymodule_.html b/jsdoc/test_testCAP%0AA%20module%20to%20test%20the%20CAP%20data%20format%20utilitymodule_.html deleted file mode 100644 index be1e3a1..0000000 --- a/jsdoc/test_testCAP%0AA%20module%20to%20test%20the%20CAP%20data%20format%20utilitymodule_.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - JSDoc: Module: test/testCAP -A module to test the CAP data format utility - - - - - - - - - - -
- -

Module: test/testCAP -A module to test the CAP data format utility

- - - - - - -
- -
- -
- -
-
- - -
testCAP module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 16:38:52 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testCAP.js.html b/jsdoc/test_testCAP.js.html deleted file mode 100644 index 634c4b6..0000000 --- a/jsdoc/test_testCAP.js.html +++ /dev/null @@ -1,261 +0,0 @@ - - - - - JSDoc: Source: test/testCAP.js - - - - - - - - - - -
- -

Source: test/testCAP.js

- - - - - - -
-
-
/**
- * testCAP module
- * @module src/test/testCAP
- * A module to test the CAP data format utility
- */
-
-import * as test from 'unit.js'; // Unit testing module
-import Cap from '../lib/cap';    // Cap formatter helper
-
-
-/**
- * Test CAP data format utility
- * @function testCAP
- * @param {Object} logger - CogniCity Server logger object
- */
-export default function(logger) {
-  describe('CAP Utility', function() {
-    const cap = new Cap(logger); // Setup our cap formatter
-
-    // dummy data (polygon)
-    let feature = {'type': 'Feature',
-                  'geometry':
-                    {'type': 'Polygon',
-                    'coordinates': [
-                      [[106.8367359996, -6.2305420003],
-                      [106.8367039999, -6.2307239997],
-                      [106.8367995401, -6.2301399095],
-                      [106.8367359996, -6.2305420003]]]},
-                    'properties':
-                      {'area_id': '1346',
-                      'geom_id': '3171100002004000',
-                      'area_name': 'RW 04',
-                      'parent_name': 'KUNINGAN TIMUR',
-                      'city_name': 'Jakarta',
-                      'state': 4,
-                      'last_updated': '2017-03-31T02:45:52.574Z',
-                    },
-                  };
-
-    // Test geometry string creation
-    it('Can create polygon strings from geojson features', function(done) {
-      cap.createArea(feature);
-      let result = cap.createArea(feature);
-      test.value(typeof(result.polygon[0])).is('string');
-      done();
-    });
-
-    // dummy data (multipolygon)
-    feature = {'type': 'Feature',
-              'geometry':
-                {'type': 'MultiPolygon',
-                'coordinates': [
-                  [[[106.8367359996, -6.2305420003],
-                  [106.8367039999, -6.2307239997],
-                  [106.8367995401, -6.2301399095],
-                  [106.8367359996, -6.2305420003]]]]},
-                'properties':
-                  {'area_id': '1346',
-                  'geom_id': '3171100002004000',
-                  'area_name': 'RW 04',
-                  'parent_name': 'KUNINGAN TIMUR',
-                  'city_name': 'Jakarta',
-                  'state': 4,
-                  'last_updated': '2017-03-31T02:45:52.574Z',
-                },
-              };
-
-    // Test multigeometry string creation
-    it('Will operate on multipolygon objects', function(done) {
-      let result = cap.createArea(feature);
-      test.value(typeof(result.polygon[0])).is('string');
-      done();
-    });
-
-    // Test level severe
-    it('Create the correct severity levels', function(done) {
-      // dummy data (polygon)
-      let feature = {'type': 'Feature',
-                    'geometry':
-                      {'type': 'Polygon',
-                      'coordinates': [
-                        [[106.8367359996, -6.2305420003],
-                        [106.8367039999, -6.2307239997],
-                        [106.8367995401, -6.2301399095],
-                        [106.8367359996, -6.2305420003]]]},
-                      'properties':
-                        {'area_id': '1346',
-                        'geom_id': '3171100002004000',
-                        'area_name': 'RW 04',
-                        'parent_name': 'KUNINGAN TIMUR',
-                        'city_name': 'Jakarta',
-                        'state': 4,
-                        'last_updated': '2017-03-31T02:45:52.574Z',
-                      },
-                    };
-
-      let result = cap.createInfo(feature);
-      test.value(result.severity).is('Severe');
-      done();
-    });
-
-    // Test level moderate
-    it('Create the correct severity levels', function(done) {
-      // dummy data (polygon)
-      let feature = {'type': 'Feature',
-                    'geometry':
-                      {'type': 'Polygon', 'coordinates': [
-                        [[106.8367359996, -6.2305420003],
-                        [106.8367039999, -6.2307239997],
-                        [106.8367995401, -6.2301399095],
-                        [106.8367359996, -6.2305420003]]]},
-                    'properties': {'area_id': '1346',
-                                  'geom_id': '3171100002004000',
-                                  'area_name': 'RW 04',
-                                  'parent_name': 'KUNINGAN TIMUR',
-                                  'city_name': 'Jakarta',
-                                  'state': 3,
-                                  'last_updated': '2017-03-31T02:45:52.574Z',
-                      },
-                    };
-
-      let result = cap.createInfo(feature);
-      test.value(result.severity).is('Moderate');
-      done();
-    });
-
-    // Test level minor
-    it('Create the correct severity levels', function(done) {
-      // dummy data (polygon)
-      let feature = {'type': 'Feature',
-                    'geometry': {'type': 'Polygon', 'coordinates': [
-                      [[106.8367359996, -6.2305420003],
-                      [106.8367039999, -6.2307239997],
-                      [106.8367995401, -6.2301399095],
-                      [106.8367359996, -6.2305420003]]]},
-                    'properties': {'area_id': '1346',
-                                  'geom_id': '3171100002004000',
-                                  'area_name': 'RW 04',
-                                  'parent_name': 'KUNINGAN TIMUR',
-                                  'city_name': 'Jakarta',
-                                  'state': 2,
-                                  'last_updated': '2017-03-31T02:45:52.574Z',
-                                },
-                    };
-
-      let result = cap.createInfo(feature);
-      test.value(result.severity).is('Minor');
-      done();
-    });
-
-    // Test level Unknown
-    it('Create the correct severity levels', function(done) {
-      // dummy data (polygon)
-      let feature = {'type': 'Feature',
-                    'geometry': {'type': 'Polygon', 'coordinates': [
-                      [[106.8367359996, -6.2305420003],
-                      [106.8367039999, -6.2307239997],
-                      [106.8367995401, -6.2301399095],
-                      [106.8367359996, -6.2305420003]]]},
-                    'properties': {'area_id': '1346',
-                     'geom_id': '3171100002004000',
-                     'area_name': 'RW 04',
-                     'parent_name': 'KUNINGAN TIMUR',
-                     'city_name': 'Jakarta',
-                     'state': 1,
-                     'last_updated': '2017-03-31T02:45:52.574Z',
-                   },
-                 };
-
-      let result = cap.createInfo(feature);
-      test.value(result.severity).is('Unknown');
-      done();
-    });
-
-    // Test bad geometry will bubble up internall within CAP module
-    it('Catch unsupported complex polygon geometry', function(done) {
-      // dummy data (polygon)
-      let feature = {'type': 'Feature',
-                    'geometry': {'type': 'Polygon', 'coordinates': [
-                      [[0, 0], [3, 6], [6, 1], [0, 0]],
-                      [[2, 2], [3, 3], [4, 2], [2, 2]]]},
-                    'properties': {'area_id': '1346',
-                      'geom_id': '3171100002004000',
-                      'area_name': 'RW 04',
-                      'parent_name': 'KUNINGAN TIMUR',
-                      'city_name': 'Jakarta',
-                      'state': 1,
-                      'last_updated': '2017-03-31T02:45:52.574Z',
-                    },
-                  };
-
-      let result = cap.createInfo(feature);
-      test.value(result).is(undefined);
-      done();
-    });
-  });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testCards%0AA%20module%20to%20test%20the%20_cards%20endpointmodule_.html b/jsdoc/test_testCards%0AA%20module%20to%20test%20the%20_cards%20endpointmodule_.html deleted file mode 100644 index 4a5acda..0000000 --- a/jsdoc/test_testCards%0AA%20module%20to%20test%20the%20_cards%20endpointmodule_.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - JSDoc: Module: test/testCards -A module to test the /cards endpoint - - - - - - - - - - -
- -

Module: test/testCards -A module to test the /cards endpoint

- - - - - - -
- -
- -
- -
-
- - -
testCards module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Thu Jun 29 2017 16:51:57 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testCards.js.html b/jsdoc/test_testCards.js.html deleted file mode 100644 index 6741381..0000000 --- a/jsdoc/test_testCards.js.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - JSDoc: Source: test/testCards.js - - - - - - - - - - -
- -

Source: test/testCards.js

- - - - - - -
-
-
/**
- * testCards module
- * @module src/test/testCards
- * A module to test the /cards endpoint
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test cards endpoint
- * @function testCards
- * @param {Object} app - CogniCity server app object
- * @param {String} createdAt - Sample date as ISO 8601 string
- */
-export default function(app, createdAt) {
-  // Cards endpoint
-  describe('Cards endpoint', function() {
-    // Cards
-    it('Return 404 if card requested without ID (GET /cards)', function(done) {
-        test.httpAgent(app)
-          .get('/cards')
-          .expect(404)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    // Can get reports
-    it('Return 400 if card ID is invalid (GET /cards/:id)', function(done) {
-        test.httpAgent(app)
-          .get('/cards/1')
-          .expect(400)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-   });
-
-   // Cards end to end test
-   describe('End-to-end card test', function() {
-     let cardId = '0';
-
-     // Request a card, submit and get resulting card details
-     it('Get card one time link', function(done) {
-         test.httpAgent(app)
-           .post('/cards')
-           .send({
-               'username': 'testuser',
-               'network': 'test network',
-               'language': 'en',
-           })
-           .expect(200)
-           .expect('Content-Type', /json/)
-           .end(function(err, res) {
-             if (err) {
-               test.fail(err.message + ' ' + JSON.stringify(res));
-             } else {
-               cardId = res.body.cardId;
-               test.value(res.body.created).is(true);
-               done();
-             }
-          });
-       });
-
-       // Check HEAD request on cardId
-       it('Check HEAD request on cardId', function(done) {
-           test.httpAgent(app)
-             .head('/cards/'+cardId)
-             .expect(200)
-             .end(function(err, res) {
-               if (err) {
-                 test.fail(err.message + ' ' + JSON.stringify(res));
-               } else {
-                 done();
-               }
-            });
-         });
-
-       // Request a card, submit and get resulting report
-       it('Put card data', function(done) {
-           test.httpAgent(app)
-             .put('/cards/'+cardId)
-             .send({
-                 'disaster_type': 'flood',
-                 'card_data': {
-                   'flood_depth': 20,
-                   'report_type': 'flood',
-                 },
-                 'text': 'integration testing',
-                 'created_at': createdAt,
-                 'location': {
-                   'lat': -6.4,
-                   'lng': 106.6,
-                 },
-             })
-             .expect(200)
-             .expect('Content-Type', /json/)
-             .end(function(err, res) {
-               if (err) {
-                 test.fail(err.message + ' ' + JSON.stringify(res));
-               } else {
-                 done();
-               }
-            });
-         });
-
-         // Get signed URL for card image
-         it('Get card image link', (done) => {
-             test.httpAgent(app)
-               .get('/cards/'+cardId+'/images')
-               .expect(200)
-               .end(function(err, res) {
-                 if (err) {
-                   test.fail(err.message + ' ' + JSON.stringify(res));
-                 } else {
-                   done();
-                 }
-              });
-           }).timeout(150000);
-
-         // Request a card, submit and get resulting report
-         it('Get card data', function(done) {
-             test.httpAgent(app)
-               .get('/cards/'+cardId)
-               .expect(200)
-               .expect('Content-Type', /json/)
-               .end(function(err, res) {
-                 if (err) {
-                   test.fail(err.message + ' ' + JSON.stringify(res));
-                 } else {
-                   test.value(res.body.result.card_id).is(cardId);
-                   test.value(res.body.result.username).is('testuser');
-                   test.value(res.body.result.network).is('test network');
-                   test.value(res.body.result.language).is('en');
-                   test.value(res.body.result.report.text)
-                    .is('integration testing');
-                   done();
-                 }
-              });
-           });
-
-           // Update a card
-           it('Update card data', function(done) {
-               test.httpAgent(app)
-                 .patch('/cards/'+cardId)
-                 .send({
-                     'image_url': 'image',
-                 })
-                 .expect(200)
-                 .expect('Content-Type', /json/)
-                 .end(function(err, res) {
-                   if (err) {
-                     test.fail(err.message + ' ' + JSON.stringify(res));
-                   } else {
-                     done();
-                   }
-                });
-             });
-   });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testCities%0AA%20module%20to%20test%20the%20_cities%20endpointmodule_.html b/jsdoc/test_testCities%0AA%20module%20to%20test%20the%20_cities%20endpointmodule_.html deleted file mode 100644 index 11f6ac5..0000000 --- a/jsdoc/test_testCities%0AA%20module%20to%20test%20the%20_cities%20endpointmodule_.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - JSDoc: Module: test/testCities -A module to test the /cities endpoint - - - - - - - - - - -
- -

Module: test/testCities -A module to test the /cities endpoint

- - - - - - -
- -
- -
- -
-
- - -
testCities module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testCities(app)

- - - - - -
- Test cities endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testCities.js.html b/jsdoc/test_testCities.js.html deleted file mode 100644 index 135e5c2..0000000 --- a/jsdoc/test_testCities.js.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - JSDoc: Source: test/testCities.js - - - - - - - - - - -
- -

Source: test/testCities.js

- - - - - - -
-
-
/**
- * testCities module
- * @module test/testCities
- * A module to test the /cities endpoint
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test cities endpoint
- * @function testCities
- * @param {Object} app - CogniCity server app object
- */
-export default function(app) {
-  // Cities endpoint
-  describe('Cities endpoint', function() {
-    // Can get cities
-    it('Return 200 for cities list', function(done) {
-        test.httpAgent(app)
-          .get('/cities')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-  });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testDB%0AA%20module%20to%20test%20the%20db%20utility%20modulemodule_.html b/jsdoc/test_testDB%0AA%20module%20to%20test%20the%20db%20utility%20modulemodule_.html deleted file mode 100644 index 3450388..0000000 --- a/jsdoc/test_testDB%0AA%20module%20to%20test%20the%20db%20utility%20modulemodule_.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - JSDoc: Module: test/testDB -A module to test the db utility module - - - - - - - - - - -
- -

Module: test/testDB -A module to test the db utility module

- - - - - - -
- -
- -
- -
-
- - -
testDB module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testDB()

- - - - - -
- Test db utility module -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testDB.js.html b/jsdoc/test_testDB.js.html deleted file mode 100644 index 4a56904..0000000 --- a/jsdoc/test_testDB.js.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - JSDoc: Source: test/testDB.js - - - - - - - - - - -
- -

Source: test/testDB.js

- - - - - - -
-
-
/* eslint-disable no-console */
-/**
- * testDB module
- * @module test/testDB
- * A module to test the db utility module
- */
-
-import * as test from 'unit.js';  // Unit testing module
-import initializeDb from '../db'; // Database utility
-
-/**
- * Test db utility module
- * @function testDB
- */
-export default function() {
-  describe('Test CogniCity Server Database Module', function() {
-   it('Catches errors on startup', function(done) {
-     // Try and connect to the db
-     let config = {};
-     let logger = {};
-     logger.error = function(err) {
-       console.log(err);
-     };
-     logger.debug = function(err) {
-       console.log(err);
-     };
-     initializeDb(config, logger)
-      .then((db) => {
-        test.value(db).is(null);
-        // done(); do nothing here, an error should be forced by empty config
-      })
-      .catch((err) => {
-        console.log(err);
-        done();
-      });
-   });
-  });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testFeeds%0AA%20module%20to%20test%20the%20_feeds%20endpointmodule_.html b/jsdoc/test_testFeeds%0AA%20module%20to%20test%20the%20_feeds%20endpointmodule_.html deleted file mode 100644 index 9a4cc97..0000000 --- a/jsdoc/test_testFeeds%0AA%20module%20to%20test%20the%20_feeds%20endpointmodule_.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - JSDoc: Module: test/testFeeds -A module to test the /feeds endpoint - - - - - - - - - - -
- -

Module: test/testFeeds -A module to test the /feeds endpoint

- - - - - - -
- -
- -
- -
-
- - -
testFeeds module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testFeeds(app)

- - - - - -
- Test feeds endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testFeeds.js.html b/jsdoc/test_testFeeds.js.html deleted file mode 100644 index a934fa8..0000000 --- a/jsdoc/test_testFeeds.js.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - JSDoc: Source: test/testFeeds.js - - - - - - - - - - -
- -

Source: test/testFeeds.js

- - - - - - -
-
-
/**
- * testFeeds module
- * @module test/testFeeds
- * A module to test the /feeds endpoint
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test feeds endpoint
- * @function testFeeds
- * @param {Object} app - CogniCity server app object
- */
-export default function(app) {
-  // Feeds endpoint
-  describe('Feeds endpoint', function() {
-    // Can post to qlue
-    it('Return 200 for post to feeds/qlue', function(done) {
-        test.httpAgent(app)
-          .post('/feeds/qlue')
-          .send({
-              'post_id': '9999',
-              'created_at': '2017-06-07T14:32+0700',
-              'qlue_city': 'surabaya',
-              'disaster_type': 'flood',
-              'text': 'test report',
-              'location': {
-                'lat': 45,
-                'lng': 45,
-              },
-          })
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    // Catch duplicate post to qlue
-    it('Catch duplicate entry to feeds/qlue', function(done) {
-        test.httpAgent(app)
-          .post('/feeds/qlue')
-          .send({
-              'post_id': '9999',
-              'created_at': '2017-06-07T14:32+0700',
-              'qlue_city': 'surabaya',
-              'disaster_type': 'flood',
-              'text': 'test report',
-              'location': {
-                'lat': 45,
-                'lng': 45,
-              },
-          })
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              test.value(res.body.created).is(false);
-              done();
-            }
-         });
-      });
-
-    // Can post to detik
-    it('Return 200 for post to feeds/detik', function(done) {
-        test.httpAgent(app)
-          .post('/feeds/detik')
-          .send({
-              'contribution_id': '9999',
-              'created_at': '2017-06-07T14:32+0700',
-              'disaster_type': 'flood',
-              'location': {
-                'latitude': 45,
-                'longitude': 45,
-              },
-              'text': 'test report',
-          })
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-      // Catch duplicate post to detik
-      it('Return 200 for post to feeds/detik', function(done) {
-          test.httpAgent(app)
-            .post('/feeds/detik')
-            .send({
-                'contribution_id': '9999',
-                'created_at': '2017-06-07T14:32+0700',
-                'disaster_type': 'flood',
-                'location': {
-                  'latitude': 45,
-                  'longitude': 45,
-                },
-                'text': 'test report',
-            })
-            .expect(200)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                test.value(res.body.created).is(false);
-                done();
-              }
-           });
-        });
-  });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testFloodgauges.js.html b/jsdoc/test_testFloodgauges.js.html deleted file mode 100644 index 99838b5..0000000 --- a/jsdoc/test_testFloodgauges.js.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - JSDoc: Source: test/testFloodgauges.js - - - - - - - - - - -
- -

Source: test/testFloodgauges.js

- - - - - - -
-
-
/**
- * testFloodsgauges module
- * @module test/testFloodsgauges
- * A module to test the /floodgauges endpoint
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test floodgauges endpoint
- * @function testFloodsgauges
- * @param {Object} app - CogniCity server app object
- */
-export default function(app) {
-  // Flood gauges endpoint
-  describe('Flood gauges endpoint', function() {
-    // Can get flood gauge data
-    it('Return 200 for get /floodgauges', function(done) {
-        test.httpAgent(app)
-          .get('/floodgauges')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-      // Catch invalid city in floodgauge
-      it('Return 400 for get /floodgauges?city=xxx', function(done) {
-          test.httpAgent(app)
-            .get('/floodgauges?city=xxx')
-            .expect(400)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                done();
-              }
-           });
-        });
-
-      // Catch invalid floodgauge id
-      it('Return 404 for get /floodgauges/:id', function(done) {
-          test.httpAgent(app)
-            .get('/floodgauges/0')
-            .expect(404)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                done();
-              }
-           });
-        });
-  });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testFloods%0AA%20module%20to%20test%20the%20_floods%20endpointmodule_.html b/jsdoc/test_testFloods%0AA%20module%20to%20test%20the%20_floods%20endpointmodule_.html deleted file mode 100644 index 4a4ba7b..0000000 --- a/jsdoc/test_testFloods%0AA%20module%20to%20test%20the%20_floods%20endpointmodule_.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - JSDoc: Module: test/testFloods -A module to test the /floods endpoint - - - - - - - - - - -
- -

Module: test/testFloods -A module to test the /floods endpoint

- - - - - - -
- -
- -
- -
-
- - -
testFloods module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testFloods(app, jwt)

- - - - - -
- Test infrastructure endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
jwt - - -Object - - - - Sample JSON Web Token for testing endpoint auth
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testFloods.js.html b/jsdoc/test_testFloods.js.html deleted file mode 100644 index 5eacb01..0000000 --- a/jsdoc/test_testFloods.js.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - JSDoc: Source: test/testFloods.js - - - - - - - - - - -
- -

Source: test/testFloods.js

- - - - - - -
-
-
/**
- * testFloods module
- * @module test/testFloods
- * A module to test the /floods endpoint
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test infrastructure endpoint
- * @function testFloods
- * @param {Object} app - CogniCity server app object
- * @param {Object} jwt - Sample JSON Web Token for testing endpoint auth
- */
-export default function(app, jwt) {
-// Floods endpoint
-describe('Flood areas endpoint', function() {
-    // Test put flood auth
-    it('Catch bad auth for put a flood (PUT /floods/:id)', function(done) {
-      test.httpAgent(app)
-        .put('/floods/5')
-        .send({
-            'state': '2',
-        })
-        .expect(401)
-        .expect('Content-Type', /json/)
-        .end(function(err, res) {
-          if (err) {
-            test.fail(err.message + ' ' + JSON.stringify(res));
-          } else {
-            done();
-          }
-        });
-    });
-
-    // Test delete flood auth
-    it('Catch bad auth for delete a flood (PUT /floods/:id)', function(done) {
-      test.httpAgent(app)
-        .delete('/floods/5')
-        .send({
-            'username': 'testing',
-        })
-        .expect(401)
-        .expect('Content-Type', /json/)
-        .end(function(err, res) {
-          if (err) {
-            test.fail(err.message + ' ' + JSON.stringify(res));
-          } else {
-            done();
-          }
-        });
-    });
-
-    // Test put flood auth
-    it('Put a flood  with auth(PUT /floods/:id)', function(done) {
-      test.httpAgent(app)
-        .put('/floods/5?username=testing')
-        .set({'Authorization': 'Bearer ' + jwt})
-        .send({
-            'state': '2',
-        })
-        .expect(200)
-        .expect('Content-Type', /json/)
-        .end(function(err, res) {
-          if (err) {
-            test.fail(err.message + ' ' + JSON.stringify(res));
-          } else {
-            done();
-          }
-        });
-    });
-
-    // Test delete flood auth
-    it('Delete a flood (PUT /floods/:id)', function(done) {
-      test.httpAgent(app)
-        .delete('/floods/5?username=testing')
-        .set({'Authorization': 'Bearer ' + jwt})
-        .expect(200)
-        .expect('Content-Type', /json/)
-        .end(function(err, res) {
-          if (err) {
-            test.fail(err.message + ' ' + JSON.stringify(res));
-          } else {
-            done();
-          }
-        });
-    });
-
-    // Get floods
-    it('Get floods (GET /floods)', (done) => {
-        test.httpAgent(app)
-          .get('/floods')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      }).timeout(15000); // a lot of data is returned
-
-      // Get floods
-      it('Get severe floods (GET /floods?minimum_state=3)', function(done) {
-          test.httpAgent(app)
-            .get('/floods?minimum_state=3')
-            .expect(200)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                done();
-              }
-           });
-        }).timeout(15000); // a lot of data is returned
-
-
-      // Just get flood states
-      it('Get flood states without geo (GET /floods/states)', function(done) {
-          test.httpAgent(app)
-            .get('/floods/states')
-            .expect(200)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                done();
-              }
-           });
-        });
-
-      // Get geographic floods
-      it('Get floods in geojson format', (done) => {
-          test.httpAgent(app)
-            .get('/floods/?format=json&geoformat=geojson')
-            .expect(200)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                done();
-              }
-           });
-        }).timeout(15000); // a lot of data is returned
-
-    // Can get reports in CAP format
-    it('Get all reports in CAP format', (done) => {
-        test.httpAgent(app)
-          .get('/floods?format=xml&geoformat=cap')
-          .expect(200)
-          .expect('Content-Type', /text/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      }).timeout(15000); // a lot of data is returned;
-    });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testFloodsgauges%0AA%20module%20to%20test%20the%20_floodgauges%20endpointmodule_.html b/jsdoc/test_testFloodsgauges%0AA%20module%20to%20test%20the%20_floodgauges%20endpointmodule_.html deleted file mode 100644 index 8dc0b38..0000000 --- a/jsdoc/test_testFloodsgauges%0AA%20module%20to%20test%20the%20_floodgauges%20endpointmodule_.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - JSDoc: Module: test/testFloodsgauges -A module to test the /floodgauges endpoint - - - - - - - - - - -
- -

Module: test/testFloodsgauges -A module to test the /floodgauges endpoint

- - - - - - -
- -
- -
- -
-
- - -
testFloodsgauges module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testFloodsgauges(app)

- - - - - -
- Test floodgauges endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testInfrastructure%0AA%20module%20to%20test%20the%20_infrastructure%20endpointmodule_.html b/jsdoc/test_testInfrastructure%0AA%20module%20to%20test%20the%20_infrastructure%20endpointmodule_.html deleted file mode 100644 index 1b27174..0000000 --- a/jsdoc/test_testInfrastructure%0AA%20module%20to%20test%20the%20_infrastructure%20endpointmodule_.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - JSDoc: Module: test/testInfrastructure -A module to test the /infrastructure endpoint - - - - - - - - - - -
- -

Module: test/testInfrastructure -A module to test the /infrastructure endpoint

- - - - - - -
- -
- -
- -
-
- - -
testInfrastructure module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testInfrastructure(app)

- - - - - -
- Test infrastructure endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testInfrastructure.js.html b/jsdoc/test_testInfrastructure.js.html deleted file mode 100644 index cb118eb..0000000 --- a/jsdoc/test_testInfrastructure.js.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - JSDoc: Source: test/testInfrastructure.js - - - - - - - - - - -
- -

Source: test/testInfrastructure.js

- - - - - - -
-
-
/**
- * testInfrastructure module
- * @module test/testInfrastructure
- * A module to test the /infrastructure endpoint
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test infrastructure endpoint
- * @function testInfrastructure
- * @param {Object} app - CogniCity server app object
- */
-export default function(app) {
-  // Infrastructure endpoint
-  describe('Infrastructure endpoint', function() {
-    // Catch invalid top-level infrastructure endpoint
-    it('Return 404 for get /infrastructure', function(done) {
-        test.httpAgent(app)
-          .get('/infrastructure')
-          .expect(404)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-      // Return waterways infrastructure
-      it('Return 200 for get /infrastructure/waterways', function(done) {
-          test.httpAgent(app)
-            .get('/infrastructure/waterways')
-            .expect(200)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                done();
-              }
-           });
-        });
-  });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testReports%0AA%20module%20to%20test%20the%20_reports%20endpointmodule_.html b/jsdoc/test_testReports%0AA%20module%20to%20test%20the%20_reports%20endpointmodule_.html deleted file mode 100644 index 37babae..0000000 --- a/jsdoc/test_testReports%0AA%20module%20to%20test%20the%20_reports%20endpointmodule_.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - JSDoc: Module: test/testReports -A module to test the /reports endpoint - - - - - - - - - - -
- -

Module: test/testReports -A module to test the /reports endpoint

- - - - - - -
- -
- -
- -
-
- - -
testReports module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testReports(app, reportid, createdAt)

- - - - - -
- Test reports endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
reportid - - -Number - - - - CogniCity report ID to test against
createdAt - - -String - - - - Sample timestamp in ISO 8601 format
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testReports.js.html b/jsdoc/test_testReports.js.html deleted file mode 100644 index d5085c5..0000000 --- a/jsdoc/test_testReports.js.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - JSDoc: Source: test/testReports.js - - - - - - - - - - -
- -

Source: test/testReports.js

- - - - - - -
-
-
/**
- * testReports module
- * @module test/testReports
- * A module to test the /reports endpoint
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test reports endpoint
- * @function testReports
- * @param {Object} app - CogniCity server app object
- * @param {Number} reportid - CogniCity report ID to test against
- * @param {String} createdAt - Sample timestamp in ISO 8601 format
- */
-export default function(app, reportid, createdAt) {
-  // Reports endpoint
-  describe('Reports endpoint', function() {
-    // Can get reports
-    it('Get all reports (GET /reports)', function(done) {
-        test.httpAgent(app)
-          .get('/reports')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    // Can get reports as geojson
-    it('Get all reports as geojson', function(done) {
-        test.httpAgent(app)
-          .get('/reports?format=json&geoformat=geojson')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    // Can get reports as geojson
-    it('Get all reports as topojson', function(done) {
-        test.httpAgent(app)
-          .get('/reports?format=json&geoformat=topojson')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    // Can get reports by city
-    it('Get reports by city /reports?city=jbd', function(done) {
-        test.httpAgent(app)
-          .get('/reports?city=jbd')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    // Catch report by city error
-    it('Get reports by city /reports?city=xxx', function(done) {
-        test.httpAgent(app)
-          .get('/reports?city=xxx')
-          .expect(400)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-      // Can report by id
-      it('Get reports/:id endpoint', function(done) {
-          test.httpAgent(app)
-            .get('/reports/'+reportid+'?format=json&geoformat=geojson')
-            .expect(200)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                test.value(res.body.result.features[0].properties.pkey)
-                  .is(reportid);
-                test.value(res.body.result.features[0].properties.source)
-                  .is('grasp');
-                test.value(res.body.result.features[0].properties.created_at)
-                  .is(createdAt);
-                test.value(res.body.result.features[0].properties.status)
-                  .is('confirmed');
-                test.value(res.body.result.features[0].properties.image_url)
-                  .is('https://images.petabencana.id/image');
-                test.value(res.body.result.features[0].properties.disaster_type)
-                  .is('flood');
-                test.value(res.body.result.features[0].properties.report_data
-                  .flood_depth).is(20);
-                done();
-              }
-           });
-        });
-   });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testReportsArchive%0AA%20module%20to%20test%20the%20_reports_archive%20endpointmodule_.html b/jsdoc/test_testReportsArchive%0AA%20module%20to%20test%20the%20_reports_archive%20endpointmodule_.html deleted file mode 100644 index 9faed40..0000000 --- a/jsdoc/test_testReportsArchive%0AA%20module%20to%20test%20the%20_reports_archive%20endpointmodule_.html +++ /dev/null @@ -1,300 +0,0 @@ - - - - - JSDoc: Module: test/testReportsArchive -A module to test the /reports/archive endpoint - - - - - - - - - - -
- -

Module: test/testReportsArchive -A module to test the /reports/archive endpoint

- - - - - - -
- -
- -
- -
-
- - -
testReportsArchive module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testReportsArchive(app, createdAt)

- - - - - -
- Test reports archive endpoint -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
createdAt - - -String - - - - Sample ISO 8601 timestamp of report to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testReportsArchive.js.html b/jsdoc/test_testReportsArchive.js.html deleted file mode 100644 index c230552..0000000 --- a/jsdoc/test_testReportsArchive.js.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - JSDoc: Source: test/testReportsArchive.js - - - - - - - - - - -
- -

Source: test/testReportsArchive.js

- - - - - - -
-
-
/* eslint-disable max-len */
-/**
- * testReportsArchive module
- * @module test/testReportsArchive
- * A module to test the /reports/archive endpoint
- */
-
-import * as test from 'unit.js';
-
-// TODO
-// - test against an actual time in the database
-// - Entered through cards.js (or add a new call to cards here)
-
-/**
- * Test reports archive endpoint
- * @function testReportsArchive
- * @param {Object} app - CogniCity server app object
- * @param {String} createdAt - Sample ISO 8601 timestamp of report to test
- */
-export default function(app, createdAt) {
-  // Reports endpoint
-  describe('Reports Archive Endpoint', function() {
-    // Can get reports between given timestamps
-
-    let end = new Date().toISOString().slice(0, -5)+'Z';
-
-    it('Can get reports between given timestamps', function(done) {
-        test.httpAgent(app)
-          .get('/reports/archive?start=2017-06-07T00:00:00%2B0700&end=2017-06-08T23:00:00%2B0700')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    it('Can get reports between given timestamps as geojson', function(done) {
-        test.httpAgent(app)
-          .get('/reports/archive?start=2017-06-07T00:00:00%2B0700&end='+end+'&format=json&geoformat=geojson')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              test.value(res.body.result.type).is('FeatureCollection');
-              test.value(res.body.result.features[0].properties.status)
-                .is('confirmed');
-              test.value(res.body.result.features[0].properties.disaster_type)
-                .is('flood');
-              done();
-            }
-         });
-      });
-
-    it('Can get reports between timestamps as topojson', function(done) {
-        test.httpAgent(app)
-          .get('/reports/archive?start=2017-06-07T00:00:00%2B0700&end=2017-06-08T23:00:00%2B0700&format=json&geoformat=topojson')
-          .expect(200)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              test.value(res.body.result.type).is('Topology');
-              done();
-            }
-         });
-      });
-
-    // Can catch no start parameter
-    it('Required start parameter by default', function(done) {
-        test.httpAgent(app)
-          .get('/reports/archive?end=2017-02-22T07:00:00%2B0700')
-          .expect(400)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-    // Can catch no end parameter
-    it('Required end parameter by default', function(done) {
-        test.httpAgent(app)
-          .get('/reports/archive?start=2017-02-22T07:00:00%2B0700')
-          .expect(400)
-          .expect('Content-Type', /json/)
-          .end(function(err, res) {
-            if (err) {
-              test.fail(err.message + ' ' + JSON.stringify(res));
-            } else {
-              done();
-            }
-         });
-      });
-
-      // Catch end time before start time
-      it('Required end time to be after start time', function(done) {
-          test.httpAgent(app)
-            .get('/reports/archive?start=2017-02-21T07:00:00%2B0700&end=2017-02-20T07:00:00')
-            .expect(400)
-            .expect('Content-Type', /json/)
-            .end(function(err, res) {
-              if (err) {
-                test.fail(err.message + ' ' + JSON.stringify(res));
-              } else {
-                done();
-              }
-           });
-        });
-
-        // Can catch no UTC offset in start parameter
-        it('Required start parameter to have a UTC offset', function(done) {
-            test.httpAgent(app)
-              .get('/reports/archive?start=2017-02-21T07:00:00')
-              .expect(400)
-              .expect('Content-Type', /json/)
-              .end(function(err, res) {
-                if (err) {
-                  test.fail(err.message + ' ' + JSON.stringify(res));
-                } else {
-                  done();
-                }
-             });
-          });
-
-        // Can catch no UTC offset in start parameter
-        it('Catches badly formed time stamp', function(done) {
-            test.httpAgent(app)
-              .get('/reports/archive?start=2017-02-21')
-              .expect(400)
-              .expect('Content-Type', /json/)
-              .end(function(err, res) {
-                if (err) {
-                  test.fail(err.message + ' ' + JSON.stringify(res));
-                } else {
-                  done();
-                }
-             });
-          });
-   });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/jsdoc/test_testServer%0AA%20module%20to%20test%20top-level%20API%20routes%20from%20the%20servermodule_.html b/jsdoc/test_testServer%0AA%20module%20to%20test%20top-level%20API%20routes%20from%20the%20servermodule_.html deleted file mode 100644 index 0dd4925..0000000 --- a/jsdoc/test_testServer%0AA%20module%20to%20test%20top-level%20API%20routes%20from%20the%20servermodule_.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - JSDoc: Module: test/testServer -A module to test top-level API routes from the server - - - - - - - - - - -
- -

Module: test/testServer -A module to test top-level API routes from the server

- - - - - - -
- -
- -
- -
-
- - -
testServer module
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - -

Methods

- - - - - - -

(inner) testServer(app)

- - - - - -
- Test top-level server routes -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
app - - -Object - - - - CogniCity server app object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - \ No newline at end of file diff --git a/jsdoc/test_testServer.js.html b/jsdoc/test_testServer.js.html deleted file mode 100644 index 2d31f4f..0000000 --- a/jsdoc/test_testServer.js.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - JSDoc: Source: test/testServer.js - - - - - - - - - - -
- -

Source: test/testServer.js

- - - - - - -
-
-
/**
- * testServer module
- * @module test/testServer
- * A module to test top-level API routes from the server
- */
-
-import * as test from 'unit.js';
-
-/**
- * Test top-level server routes
- * @function testServer
- * @param {Object} app - CogniCity server app object
- */
-export default function(app) {
-  describe('Top level API endpoint', function() {
-    it('Gets current API version', function(done) {
-      test.httpAgent(app)
-        .get('/')
-        .expect(200)
-        .expect('Content-Type', /json/)
-        .end(function(err, res) {
-          if (err) {
-            test.fail(err.message + ' ' + JSON.stringify(res));
-          } else {
-            done();
-          }
-        });
-    });
-
-    it('Can handle unknown routes', function(done) {
-      test.httpAgent(app)
-        .get('/moon')
-        .expect(404)
-        .expect('Content-Type', /json/)
-        .end(function(err, res) {
-          if (err) {
-            test.fail(err.message + ' ' + JSON.stringify(res));
-          } else {
-            done();
-          }
-        });
-    });
-  });
-}
-
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.4.3 on Fri Aug 25 2017 10:30:13 GMT-0400 (EDT) -
- - - - - diff --git a/npm-shrinkwrap.json b/package-lock.json similarity index 61% rename from npm-shrinkwrap.json rename to package-lock.json index daef8ea..6cdd350 100644 --- a/npm-shrinkwrap.json +++ b/package-lock.json @@ -1,1745 +1,1776 @@ { "name": "cognicity-server", "version": "3.0.1", + "lockfileVersion": 1, "dependencies": { "@types/express": { - "version": "4.0.36", - "from": "@types/express@*", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.36.tgz" + "version": "4.0.37", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.0.37.tgz", + "integrity": "sha512-tIULTLzQpFFs5/PKnFIAFOsXQxss76glppbVKR3/jddPK26SBsD5HF5grn5G2jOGtpRWSBvYmDYoduVv+3wOXg==" }, "@types/express-jwt": { "version": "0.0.34", - "from": "@types/express-jwt@0.0.34", - "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz" + "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz", + "integrity": "sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI=" }, "@types/express-serve-static-core": { - "version": "4.0.48", - "from": "@types/express-serve-static-core@*", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.0.48.tgz" + "version": "4.0.50", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.0.50.tgz", + "integrity": "sha512-0n1YgeUfZEIaMMu82LuOFIFDyMtFtcEP0yjQKihJlNjpCiygDVri7C26DC7jaUOwFXL6ZU2x4tGtNYNEgeO3tw==" }, "@types/express-unless": { - "version": "0.0.30", - "from": "@types/express-unless@*", - "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.0.30.tgz" + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.0.31.tgz", + "integrity": "sha512-OxRKfsqgqzbdjXDgXLZzFQcd+zazpOvykCYhsMQL2naPouUDcEnnIg5tybj1kNPFTg/CpjQ/H9j/ebdS9esVKQ==" }, "@types/mime": { "version": "1.3.1", - "from": "@types/mime@*", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.1.tgz" + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.1.tgz", + "integrity": "sha512-rek8twk9C58gHYqIrUlJsx8NQMhlxqHzln9Z9ODqiNgv3/s+ZwIrfr+djqzsnVM12xe9hL98iJ20lj2RvCBv6A==" }, "@types/node": { - "version": "8.0.7", - "from": "@types/node@*", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.7.tgz" + "version": "8.0.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.25.tgz", + "integrity": "sha512-zT+t9841g1HsjLtPMCYxmb1U4pcZ2TOegAKiomlmj6bIziuaEYHUavxLE9NRwdntY0vOCrgHho6OXjDX7fm/Kw==" }, "@types/serve-static": { - "version": "1.7.31", - "from": "@types/serve-static@*", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.7.31.tgz" + "version": "1.7.32", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.7.32.tgz", + "integrity": "sha512-WpI0g7M1FiOmJ/a97Qrjafq2I938tjAZ3hZr9O7sXyA6oUhH3bqUNZIt7r1KZg8TQAKxcvxt6JjQ5XuLfIBFvg==" }, "abbrev": { "version": "1.1.0", - "from": "abbrev@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" }, "accepts": { - "version": "1.3.3", - "from": "accepts@>=1.3.3 <1.4.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz" + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=" }, "acorn": { - "version": "1.2.2", - "from": "acorn@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", + "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==" }, "acorn-jsx": { "version": "3.0.1", - "from": "acorn-jsx@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "dependencies": { "acorn": { "version": "3.3.0", - "from": "acorn@>=3.0.4 <4.0.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } } }, "ajv": { "version": "4.11.8", - "from": "ajv@>=4.9.1 <5.0.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz" + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=" }, "ajv-keywords": { "version": "1.5.1", - "from": "ajv-keywords@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", "dev": true }, "amdefine": { "version": "1.0.1", - "from": "amdefine@>=0.0.4", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "optional": true }, "ansi-escapes": { "version": "1.4.0", - "from": "ansi-escapes@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", "dev": true }, "ansi-regex": { "version": "2.1.1", - "from": "ansi-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", - "from": "ansi-styles@>=2.2.1 <3.0.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "anymatch": { - "version": "1.3.0", - "from": "anymatch@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true }, - "ap": { - "version": "0.2.0", - "from": "ap@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/ap/-/ap-0.2.0.tgz" - }, "api-error-handler": { "version": "1.0.0", - "from": "api-error-handler@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/api-error-handler/-/api-error-handler-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/api-error-handler/-/api-error-handler-1.0.0.tgz", + "integrity": "sha1-MEQD1/KXVHO55LeaA9+4//1axWE=" }, "apicache": { "version": "0.8.7", - "from": "apicache@>=0.8.4 <0.9.0", - "resolved": "https://registry.npmjs.org/apicache/-/apicache-0.8.7.tgz" + "resolved": "https://registry.npmjs.org/apicache/-/apicache-0.8.7.tgz", + "integrity": "sha512-mmM0i/78l1EiEXa6VHXeJ11t0Zd4NpRbNBB6KAFCNPnIjBl3DVlJC7OlrcDe89pqEqEQNeGCQX6wRO1/m9Lhrg==" }, "aproba": { "version": "1.1.2", - "from": "aproba@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==" }, "are-we-there-yet": { "version": "1.1.4", - "from": "are-we-there-yet@>=1.1.2 <1.2.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz" + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=" }, "argparse": { "version": "1.0.9", - "from": "argparse@>=1.0.7 <2.0.0", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true }, "arr-diff": { "version": "2.0.0", - "from": "arr-diff@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true }, "arr-flatten": { - "version": "1.0.3", - "from": "arr-flatten@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, "array-flatten": { "version": "1.1.1", - "from": "array-flatten@1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-union": { "version": "1.0.2", - "from": "array-union@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true }, "array-uniq": { "version": "1.0.3", - "from": "array-uniq@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { "version": "0.2.1", - "from": "array-unique@>=0.2.1 <0.3.0", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, "arrify": { "version": "1.0.1", - "from": "arrify@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "asn1": { "version": "0.2.3", - "from": "asn1@>=0.2.3 <0.3.0", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz" + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "assert-plus": { "version": "0.2.0", - "from": "assert-plus@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, "async": { "version": "1.5.2", - "from": "async@>=1.5.0 <2.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz" + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "async-each": { "version": "1.0.1", - "from": "async-each@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, "asynckit": { "version": "0.4.0", - "from": "asynckit@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sdk": { - "version": "2.81.0", - "from": "aws-sdk@>=2.7.24 <3.0.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.81.0.tgz", + "version": "2.103.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.103.0.tgz", + "integrity": "sha1-gJtzG+tlg/OmwLZYeMMso6aloRE=", "dependencies": { "xmlbuilder": { "version": "4.2.1", - "from": "xmlbuilder@4.2.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz" + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=" } } }, "aws-sign2": { "version": "0.6.0", - "from": "aws-sign2@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz" + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" }, "aws4": { "version": "1.6.0", - "from": "aws4@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz" + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, "babel-cli": { - "version": "6.24.1", - "from": "babel-cli@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "dependencies": { "source-map": { - "version": "0.5.6", - "from": "source-map@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "babel-code-frame": { - "version": "6.22.0", - "from": "babel-code-frame@>=6.22.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true }, "babel-core": { - "version": "6.25.0", - "from": "babel-core@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "dev": true, "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true + }, "source-map": { - "version": "0.5.6", - "from": "source-map@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "babel-generator": { - "version": "6.25.0", - "from": "babel-generator@>=6.25.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", "dev": true, "dependencies": { "source-map": { - "version": "0.5.6", - "from": "source-map@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "babel-helper-bindify-decorators": { "version": "6.24.1", - "from": "babel-helper-bindify-decorators@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true }, "babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", - "from": "babel-helper-builder-binary-assignment-operator-visitor@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true }, "babel-helper-call-delegate": { "version": "6.24.1", - "from": "babel-helper-call-delegate@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true }, "babel-helper-define-map": { - "version": "6.24.1", - "from": "babel-helper-define-map@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true }, "babel-helper-explode-assignable-expression": { "version": "6.24.1", - "from": "babel-helper-explode-assignable-expression@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true }, "babel-helper-explode-class": { "version": "6.24.1", - "from": "babel-helper-explode-class@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true }, "babel-helper-function-name": { "version": "6.24.1", - "from": "babel-helper-function-name@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true }, "babel-helper-get-function-arity": { "version": "6.24.1", - "from": "babel-helper-get-function-arity@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true }, "babel-helper-hoist-variables": { "version": "6.24.1", - "from": "babel-helper-hoist-variables@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true }, "babel-helper-optimise-call-expression": { "version": "6.24.1", - "from": "babel-helper-optimise-call-expression@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true }, "babel-helper-regex": { - "version": "6.24.1", - "from": "babel-helper-regex@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true }, "babel-helper-remap-async-to-generator": { "version": "6.24.1", - "from": "babel-helper-remap-async-to-generator@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true }, "babel-helper-replace-supers": { "version": "6.24.1", - "from": "babel-helper-replace-supers@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true }, "babel-helpers": { "version": "6.24.1", - "from": "babel-helpers@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true }, "babel-messages": { "version": "6.23.0", - "from": "babel-messages@>=6.23.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true }, "babel-plugin-check-es2015-constants": { "version": "6.22.0", - "from": "babel-plugin-check-es2015-constants@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true + }, + "babel-plugin-istanbul": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz", + "integrity": "sha1-GN3oS/POMp/d8/QQP66SFFbY5Yc=", "dev": true }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", - "from": "babel-plugin-syntax-async-functions@>=6.8.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", - "from": "babel-plugin-syntax-async-generators@>=6.5.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", "dev": true }, "babel-plugin-syntax-class-constructor-call": { "version": "6.18.0", - "from": "babel-plugin-syntax-class-constructor-call@>=6.18.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", "dev": true }, "babel-plugin-syntax-class-properties": { "version": "6.13.0", - "from": "babel-plugin-syntax-class-properties@>=6.8.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", "dev": true }, "babel-plugin-syntax-decorators": { "version": "6.13.0", - "from": "babel-plugin-syntax-decorators@>=6.13.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", "dev": true }, "babel-plugin-syntax-do-expressions": { "version": "6.13.0", - "from": "babel-plugin-syntax-do-expressions@>=6.8.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", "dev": true }, "babel-plugin-syntax-dynamic-import": { "version": "6.18.0", - "from": "babel-plugin-syntax-dynamic-import@>=6.18.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", "dev": true }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", - "from": "babel-plugin-syntax-exponentiation-operator@>=6.8.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, "babel-plugin-syntax-export-extensions": { "version": "6.13.0", - "from": "babel-plugin-syntax-export-extensions@>=6.8.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", "dev": true }, "babel-plugin-syntax-function-bind": { "version": "6.13.0", - "from": "babel-plugin-syntax-function-bind@>=6.8.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", "dev": true }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "from": "babel-plugin-syntax-object-rest-spread@>=6.8.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", - "from": "babel-plugin-syntax-trailing-function-commas@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", "dev": true }, "babel-plugin-transform-async-generator-functions": { "version": "6.24.1", - "from": "babel-plugin-transform-async-generator-functions@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true }, "babel-plugin-transform-async-to-generator": { "version": "6.24.1", - "from": "babel-plugin-transform-async-to-generator@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true }, "babel-plugin-transform-class-constructor-call": { "version": "6.24.1", - "from": "babel-plugin-transform-class-constructor-call@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", "dev": true }, "babel-plugin-transform-class-properties": { "version": "6.24.1", - "from": "babel-plugin-transform-class-properties@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true }, "babel-plugin-transform-decorators": { "version": "6.24.1", - "from": "babel-plugin-transform-decorators@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true }, "babel-plugin-transform-do-expressions": { "version": "6.22.0", - "from": "babel-plugin-transform-do-expressions@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", + "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", "dev": true }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", - "from": "babel-plugin-transform-es2015-arrow-functions@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true }, "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", - "from": "babel-plugin-transform-es2015-block-scoped-functions@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true }, "babel-plugin-transform-es2015-block-scoping": { - "version": "6.24.1", - "from": "babel-plugin-transform-es2015-block-scoping@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true }, "babel-plugin-transform-es2015-classes": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-classes@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-computed-properties@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", - "from": "babel-plugin-transform-es2015-destructuring@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true }, "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-duplicate-keys@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", - "from": "babel-plugin-transform-es2015-for-of@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true }, "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-function-name@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", - "from": "babel-plugin-transform-es2015-literals@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true }, "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-modules-amd@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true }, "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.24.1", - "from": "babel-plugin-transform-es2015-modules-commonjs@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", "dev": true }, "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-modules-systemjs@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true }, "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-modules-umd@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true }, "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-object-super@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true }, "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-parameters@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-shorthand-properties@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true }, "babel-plugin-transform-es2015-spread": { "version": "6.22.0", - "from": "babel-plugin-transform-es2015-spread@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true }, "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-sticky-regex@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true }, "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", - "from": "babel-plugin-transform-es2015-template-literals@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true }, "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", - "from": "babel-plugin-transform-es2015-typeof-symbol@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true }, "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", - "from": "babel-plugin-transform-es2015-unicode-regex@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true }, "babel-plugin-transform-exponentiation-operator": { "version": "6.24.1", - "from": "babel-plugin-transform-exponentiation-operator@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true }, "babel-plugin-transform-export-extensions": { "version": "6.22.0", - "from": "babel-plugin-transform-export-extensions@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", "dev": true }, "babel-plugin-transform-function-bind": { "version": "6.22.0", - "from": "babel-plugin-transform-function-bind@>=6.22.0 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", + "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", "dev": true }, "babel-plugin-transform-object-rest-spread": { - "version": "6.23.0", - "from": "babel-plugin-transform-object-rest-spread@>=6.22.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true }, "babel-plugin-transform-regenerator": { - "version": "6.24.1", - "from": "babel-plugin-transform-regenerator@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", - "from": "babel-plugin-transform-strict-mode@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true }, "babel-polyfill": { - "version": "6.23.0", - "from": "babel-polyfill@>=6.23.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "dev": true + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } }, "babel-preset-es2015": { "version": "6.24.1", - "from": "babel-preset-es2015@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true }, "babel-preset-stage-0": { "version": "6.24.1", - "from": "babel-preset-stage-0@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", + "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", "dev": true }, "babel-preset-stage-1": { "version": "6.24.1", - "from": "babel-preset-stage-1@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", "dev": true }, "babel-preset-stage-2": { "version": "6.24.1", - "from": "babel-preset-stage-2@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true }, "babel-preset-stage-3": { "version": "6.24.1", - "from": "babel-preset-stage-3@>=6.24.1 <7.0.0", "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true }, "babel-register": { - "version": "6.24.1", - "from": "babel-register@>=6.24.1 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true }, "babel-runtime": { - "version": "6.23.0", - "from": "babel-runtime@>=6.22.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true }, "babel-template": { - "version": "6.25.0", - "from": "babel-template@>=6.25.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true }, "babel-traverse": { - "version": "6.25.0", - "from": "babel-traverse@>=6.25.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "dev": true + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true + } + } }, "babel-types": { - "version": "6.25.0", - "from": "babel-types@>=6.25.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true }, "babylon": { - "version": "6.17.4", - "from": "babylon@>=6.17.2 <7.0.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base64-js": { "version": "1.2.1", - "from": "base64-js@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz" + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" }, "base64url": { "version": "2.0.0", - "from": "base64url@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" }, "basic-auth": { "version": "1.1.0", - "from": "basic-auth@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" }, "bcrypt-pbkdf": { "version": "1.0.1", - "from": "bcrypt-pbkdf@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true }, "binary-extensions": { - "version": "1.8.0", - "from": "binary-extensions@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", "dev": true }, "block-stream": { "version": "0.0.9", - "from": "block-stream@*", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz" + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=" }, "bluebird": { "version": "3.5.0", - "from": "bluebird@>=3.5.0 <4.0.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz" + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, "body-parser": { "version": "1.17.2", - "from": "body-parser@>=1.17.1 <2.0.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz" + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=" }, "boom": { "version": "2.10.1", - "from": "boom@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=" }, "brace-expansion": { "version": "1.1.8", - "from": "brace-expansion@>=1.1.7 <2.0.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz" + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=" }, "braces": { "version": "1.8.5", - "from": "braces@>=1.8.2 <2.0.0", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true }, "brfs": { "version": "1.4.3", - "from": "brfs@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.4.3.tgz" + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.4.3.tgz", + "integrity": "sha1-22ddb16SPm3wh/ylhZyQkKrtMhY=" }, "browser-stdout": { "version": "1.3.0", - "from": "browser-stdout@1.3.0", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, "buffer": { "version": "4.9.1", - "from": "buffer@4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz" + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=" }, "buffer-equal": { "version": "0.0.1", - "from": "buffer-equal@0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" }, "buffer-equal-constant-time": { "version": "1.0.1", - "from": "buffer-equal-constant-time@1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, "buffer-writer": { "version": "1.0.1", - "from": "buffer-writer@1.0.1", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", + "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, "bytes": { "version": "2.4.0", - "from": "bytes@2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz" + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" }, "caller-path": { "version": "0.1.0", - "from": "caller-path@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true }, "callsites": { "version": "0.2.0", - "from": "callsites@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, "caseless": { "version": "0.12.0", - "from": "caseless@>=0.12.0 <0.13.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "catharsis": { - "version": "0.8.8", - "from": "catharsis@>=0.8.8 <0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.8.tgz", + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", "dev": true }, "celebrate": { - "version": "4.0.1", - "from": "celebrate@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-4.0.1.tgz" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/celebrate/-/celebrate-4.0.3.tgz", + "integrity": "sha512-vKRxnry1TBXyxHL4m5cDTy+g5v3tvDU8qMewRsVRhxCsI0pdwhtySqEQ8hl2pjfLciiMmsXnr8ZIkIeEz5Nq7A==" }, "chalk": { "version": "1.1.3", - "from": "chalk@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true }, "chokidar": { "version": "1.7.0", - "from": "chokidar@>=1.6.1 <2.0.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true }, "circular-json": { - "version": "0.3.1", - "from": "circular-json@>=0.3.1 <0.4.0", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, "cli-cursor": { "version": "1.0.2", - "from": "cli-cursor@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true }, "cli-width": { - "version": "2.1.0", - "from": "cli-width@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, "co": { "version": "4.6.0", - "from": "co@>=4.6.0 <5.0.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "code-point-at": { "version": "1.1.0", - "from": "code-point-at@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "colors": { "version": "1.0.3", - "from": "colors@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, "combined-stream": { "version": "1.0.5", - "from": "combined-stream@>=1.0.5 <1.1.0", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz" + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=" }, "commander": { "version": "2.11.0", - "from": "commander@>=2.4.0 <3.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" }, "component-emitter": { "version": "1.2.1", - "from": "component-emitter@>=1.2.0 <2.0.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "compressible": { - "version": "2.0.10", - "from": "compressible@>=2.0.8 <2.1.0", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz" + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", + "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=" }, "compression": { - "version": "1.6.2", - "from": "compression@>=1.6.2 <2.0.0", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", + "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", "dependencies": { "bytes": { - "version": "2.3.0", - "from": "bytes@2.3.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", + "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=" }, "debug": { - "version": "2.2.0", - "from": "debug@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz" - }, - "ms": { - "version": "0.7.1", - "from": "ms@0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" } } }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.0", - "from": "concat-stream@>=1.6.0 <1.7.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz" + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=" }, "configstore": { "version": "1.4.0", - "from": "configstore@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", + "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", "dev": true, "dependencies": { "uuid": { "version": "2.0.3", - "from": "uuid@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", "dev": true } } }, "console-control-strings": { "version": "1.1.0", - "from": "console-control-strings@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "content-disposition": { "version": "0.5.2", - "from": "content-disposition@0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, "content-type": { "version": "1.0.2", - "from": "content-type@>=1.0.2 <1.1.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" }, "convert-source-map": { "version": "1.5.0", - "from": "convert-source-map@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", "dev": true }, "cookie": { "version": "0.3.1", - "from": "cookie@0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz" + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" }, "cookie-signature": { "version": "1.0.6", - "from": "cookie-signature@1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { "version": "2.1.1", - "from": "cookiejar@>=2.0.6 <3.0.0", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", + "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", "dev": true }, "core-js": { - "version": "2.4.1", - "from": "core-js@>=2.4.0 <3.0.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", "dev": true }, "core-util-is": { "version": "1.0.2", - "from": "core-util-is@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cors": { - "version": "2.8.3", - "from": "cors@>=2.8.3 <3.0.0", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.3.tgz" + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=" }, "coveralls": { "version": "2.13.1", - "from": "coveralls@>=2.13.1 <3.0.0", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.1.tgz", + "integrity": "sha1-1wu5rMGDXsTwY/+drFQjwXsR8Xg=", "dev": true, "dependencies": { "caseless": { "version": "0.11.0", - "from": "caseless@>=0.11.0 <0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", "dev": true }, "har-validator": { "version": "2.0.6", - "from": "har-validator@>=2.0.6 <2.1.0", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true }, "qs": { "version": "6.3.2", - "from": "qs@>=6.3.0 <6.4.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", "dev": true }, "request": { "version": "2.79.0", - "from": "request@2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", "dev": true }, "tunnel-agent": { "version": "0.4.3", - "from": "tunnel-agent@>=0.4.1 <0.5.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", "dev": true } } }, "cryptiles": { "version": "2.0.5", - "from": "cryptiles@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz" + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=" }, "crypto-browserify": { "version": "1.0.9", - "from": "crypto-browserify@1.0.9", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz" + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-1.0.9.tgz", + "integrity": "sha1-zFRJaF37hesRyYKKzHy4erW7/MA=" }, "cycle": { "version": "1.0.3", - "from": "cycle@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, "d": { "version": "1.0.0", - "from": "d@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true }, "d3": { "version": "3.5.17", - "from": "d3@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz" + "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", + "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=" }, "d3-geo-projection": { "version": "0.2.16", - "from": "d3-geo-projection@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-0.2.16.tgz" + "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-0.2.16.tgz", + "integrity": "sha1-SZTs0QM92xUztsTFUoocgdzClCc=" }, "d3-queue": { "version": "2.0.3", - "from": "d3-queue@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-2.0.3.tgz", + "integrity": "sha1-B/vaOsrlNYqcUpmq+ICt8JU+0sI=" }, "dashdash": { "version": "1.14.1", - "from": "dashdash@>=1.12.0 <2.0.0", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "dbgeo": { "version": "1.1.0", - "from": "dbgeo@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/dbgeo/-/dbgeo-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/dbgeo/-/dbgeo-1.1.0.tgz", + "integrity": "sha1-nJV7jKBrdQzL9xeMEcK+1iURIow=" }, "debug": { "version": "2.6.7", - "from": "debug@2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz" + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" }, "deep-extend": { "version": "0.4.2", - "from": "deep-extend@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz" + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" }, "deep-is": { "version": "0.1.3", - "from": "deep-is@>=0.1.3 <0.2.0", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, "del": { "version": "2.2.2", - "from": "del@>=2.0.2 <3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true }, "delayed-stream": { "version": "1.0.0", - "from": "delayed-stream@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", - "from": "delegates@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { - "version": "1.1.0", - "from": "depd@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" }, "destroy": { "version": "1.0.4", - "from": "destroy@>=1.0.4 <1.1.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detect-indent": { "version": "4.0.0", - "from": "detect-indent@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true }, "diff": { "version": "3.2.0", - "from": "diff@3.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", "dev": true }, "doctrine": { "version": "2.0.0", - "from": "doctrine@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", + "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", "dev": true }, "dotenv": { "version": "4.0.0", - "from": "dotenv@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz" + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" }, "duplexer": { "version": "0.1.1", - "from": "duplexer@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, "duplexer2": { "version": "0.0.2", - "from": "duplexer2@>=0.0.2 <0.1.0", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dependencies": { "isarray": { "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "readable-stream": { "version": "1.1.14", - "from": "readable-stream@>=1.1.9 <1.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" }, "string_decoder": { "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, "duplexify": { - "version": "3.5.0", - "from": "duplexify@>=3.2.0 <4.0.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", + "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", "dev": true }, "ecc-jsbn": { "version": "0.1.1", - "from": "ecc-jsbn@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true }, "ecdsa-sig-formatter": { "version": "1.0.9", - "from": "ecdsa-sig-formatter@1.0.9", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz" + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", + "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=" }, "ee-first": { "version": "1.1.1", - "from": "ee-first@1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "encodeurl": { "version": "1.0.1", - "from": "encodeurl@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" }, "end-of-stream": { - "version": "1.0.0", - "from": "end-of-stream@1.0.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", - "dev": true, - "dependencies": { - "once": { - "version": "1.3.3", - "from": "once@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "dev": true - } - } + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true }, "es5-ext": { - "version": "0.10.23", - "from": "es5-ext@>=0.10.14 <0.11.0", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz", + "version": "0.10.30", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", "dev": true }, "es6-iterator": { "version": "2.0.1", - "from": "es6-iterator@>=2.0.1 <2.1.0", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", "dev": true }, "es6-map": { "version": "0.1.5", - "from": "es6-map@>=0.1.3 <0.2.0", "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true }, "es6-promise": { "version": "3.3.1", - "from": "es6-promise@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", "dev": true }, "es6-set": { "version": "0.1.5", - "from": "es6-set@>=0.1.5 <0.2.0", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true }, "es6-symbol": { "version": "3.1.1", - "from": "es6-symbol@>=3.1.1 <3.2.0", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true }, "es6-weak-map": { "version": "2.0.2", - "from": "es6-weak-map@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true }, "escape-html": { "version": "1.0.3", - "from": "escape-html@1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "1.0.5", - "from": "escape-string-regexp@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "escodegen": { "version": "1.3.3", - "from": "escodegen@>=1.3.2 <1.4.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz" + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz", + "integrity": "sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM=", + "dependencies": { + "estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=" + }, + "esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=" + } + } }, "escope": { "version": "3.6.0", - "from": "escope@>=3.6.0 <4.0.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true }, "eslint": { "version": "3.19.0", - "from": "eslint@>=3.19.0 <4.0.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "dev": true, "dependencies": { "user-home": { "version": "2.0.0", - "from": "user-home@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "dev": true } } }, "eslint-config-google": { - "version": "0.8.0", - "from": "eslint-config-google@>=0.8.0 <0.9.0", - "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.8.0.tgz", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.8.1.tgz", + "integrity": "sha512-pVRvIPElH6JivuOsvnMKIWhX3JCJNOZnY7f0G5dX43ha4ZL4KI7P2dOiPqfD+Pkft1TJSbm7SuTmEx0SpvFCxQ==", "dev": true }, "espree": { - "version": "3.4.3", - "from": "espree@>=3.4.0 <4.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz", - "dev": true, - "dependencies": { - "acorn": { - "version": "5.1.0", - "from": "acorn@>=5.0.1 <6.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.0.tgz", - "dev": true - } - } + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", + "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", + "dev": true }, "esprima": { "version": "1.1.1", - "from": "esprima@>=1.1.1 <1.2.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz", + "integrity": "sha1-W28VR/TRAuZw4UDFCb5ncdautUk=" }, "esquery": { "version": "1.0.0", - "from": "esquery@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", "dev": true }, "esrecurse": { "version": "4.2.0", - "from": "esrecurse@>=4.1.0 <5.0.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", "dev": true }, "estraverse": { "version": "4.2.0", - "from": "estraverse@>=4.2.0 <5.0.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, "esutils": { "version": "2.0.2", - "from": "esutils@>=2.0.2 <3.0.0", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, "etag": { "version": "1.8.0", - "from": "etag@>=1.8.0 <1.9.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz" + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=" }, "event-emitter": { "version": "0.3.5", - "from": "event-emitter@>=0.3.5 <0.4.0", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true }, "event-stream": { "version": "3.3.4", - "from": "event-stream@>=3.3.0 <3.4.0", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "dependencies": { "split": { "version": "0.3.3", - "from": "split@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true } } }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, "exit-hook": { "version": "1.1.1", - "from": "exit-hook@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", "dev": true }, "expand-brackets": { "version": "0.1.5", - "from": "expand-brackets@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true }, "expand-range": { "version": "1.8.2", - "from": "expand-range@>=1.8.1 <2.0.0", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true }, "express": { - "version": "4.15.3", - "from": "express@>=4.15.2 <5.0.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz" + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz", + "integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=", + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + }, + "qs": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" + } + } }, "express-jwt": { "version": "5.3.0", - "from": "express-jwt@>=5.3.0 <6.0.0", - "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.0.tgz" + "resolved": "https://registry.npmjs.org/express-jwt/-/express-jwt-5.3.0.tgz", + "integrity": "sha1-PZDNZYAuYzYlLxnmo98+FJ4MXqA=" }, "express-unless": { - "version": "0.3.0", - "from": "express-unless@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.0.tgz" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/express-unless/-/express-unless-0.3.1.tgz", + "integrity": "sha1-JVfBRudb65A+LSR/m1ugFFJpbiA=" }, "extend": { "version": "3.0.1", - "from": "extend@>=3.0.0 <3.1.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extglob": { "version": "0.3.2", - "from": "extglob@>=0.3.1 <0.4.0", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true }, "extsprintf": { - "version": "1.0.2", - "from": "extsprintf@1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "eyes": { "version": "0.1.8", - "from": "eyes@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, "falafel": { - "version": "1.2.0", - "from": "falafel@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz", + "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=", "dependencies": { "isarray": { "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" } } }, "fast-levenshtein": { "version": "2.0.6", - "from": "fast-levenshtein@>=2.0.4 <2.1.0", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fastseries": { "version": "1.7.2", - "from": "fastseries@1.7.2", - "resolved": "https://registry.npmjs.org/fastseries/-/fastseries-1.7.2.tgz" + "resolved": "https://registry.npmjs.org/fastseries/-/fastseries-1.7.2.tgz", + "integrity": "sha1-0izhO5Qz3/M4jZHb1ri9qbIaD0s=" }, "figures": { "version": "1.7.0", - "from": "figures@>=1.3.5 <2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true }, "file-entry-cache": { "version": "2.0.0", - "from": "file-entry-cache@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true }, "filename-regex": { "version": "2.0.1", - "from": "filename-regex@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true }, "fill-range": { "version": "2.2.3", - "from": "fill-range@>=2.1.0 <3.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true }, "finalhandler": { - "version": "1.0.3", - "from": "finalhandler@>=1.0.3 <1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", + "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true }, "flat-cache": { "version": "1.2.2", - "from": "flat-cache@>=1.2.1 <2.0.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", + "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", "dev": true }, "for-in": { "version": "1.0.2", - "from": "for-in@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, "for-own": { "version": "0.1.5", - "from": "for-own@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true }, "foreach": { "version": "2.0.5", - "from": "foreach@>=2.0.5 <3.0.0", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "forever-agent": { "version": "0.6.1", - "from": "forever-agent@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.1.4", - "from": "form-data@>=2.1.1 <2.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz" + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=" }, "formatio": { "version": "1.1.1", - "from": "formatio@1.1.1", "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", + "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", "dev": true }, "formidable": { "version": "1.1.1", - "from": "formidable@>=1.1.1 <2.0.0", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", + "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=", "dev": true }, "forwarded": { "version": "0.1.0", - "from": "forwarded@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz" + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", + "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" }, "fresh": { "version": "0.5.0", - "from": "fresh@0.5.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz" + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" }, "from": { "version": "0.1.7", - "from": "from@>=0.0.0 <1.0.0", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "dev": true }, "fs-readdir-recursive": { "version": "1.0.0", - "from": "fs-readdir-recursive@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz", + "integrity": "sha1-jNF0XItPiinIyuw5JHaSG6GV9WA=", "dev": true }, "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.1.2", - "from": "fsevents@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", "dev": true, "optional": true, "dependencies": { "abbrev": { "version": "1.1.0", - "from": "abbrev@1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "bundled": true, "dev": true, "optional": true }, "ajv": { "version": "4.11.8", - "from": "ajv@4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "bundled": true, "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "from": "ansi-regex@2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "bundled": true, "dev": true }, "aproba": { "version": "1.1.1", - "from": "aproba@1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "bundled": true, "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "from": "are-we-there-yet@1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "bundled": true, "dev": true, "optional": true }, "asn1": { "version": "0.2.3", - "from": "asn1@0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "bundled": true, "dev": true, "optional": true }, "assert-plus": { "version": "0.2.0", - "from": "assert-plus@0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "bundled": true, "dev": true, "optional": true }, "asynckit": { "version": "0.4.0", - "from": "asynckit@0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "bundled": true, "dev": true, "optional": true }, "aws-sign2": { "version": "0.6.0", - "from": "aws-sign2@0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "bundled": true, "dev": true, "optional": true }, "aws4": { "version": "1.6.0", - "from": "aws4@1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "bundled": true, "dev": true, "optional": true }, "balanced-match": { "version": "0.4.2", - "from": "balanced-match@0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "bundled": true, "dev": true }, "bcrypt-pbkdf": { "version": "1.0.1", - "from": "bcrypt-pbkdf@1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "block-stream": { "version": "0.0.9", - "from": "block-stream@0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "bundled": true, "dev": true }, "boom": { "version": "2.10.1", - "from": "boom@2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "bundled": true, "dev": true }, "brace-expansion": { "version": "1.1.7", - "from": "brace-expansion@1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "bundled": true, "dev": true }, "buffer-shims": { "version": "1.0.0", - "from": "buffer-shims@1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "bundled": true, "dev": true }, "caseless": { "version": "0.12.0", - "from": "caseless@0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "bundled": true, "dev": true, "optional": true }, "co": { "version": "4.6.0", - "from": "co@4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "bundled": true, "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "from": "code-point-at@1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "bundled": true, "dev": true }, "combined-stream": { "version": "1.0.5", - "from": "combined-stream@1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "bundled": true, "dev": true }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "bundled": true, "dev": true }, "console-control-strings": { "version": "1.1.0", - "from": "console-control-strings@1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "bundled": true, "dev": true }, "core-util-is": { "version": "1.0.2", - "from": "core-util-is@1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "bundled": true, "dev": true }, "cryptiles": { "version": "2.0.5", - "from": "cryptiles@2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "bundled": true, "dev": true, "optional": true }, "dashdash": { "version": "1.14.1", - "from": "dashdash@1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "bundled": true, "dev": true, "optional": true, "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bundled": true, "dev": true, "optional": true } @@ -1747,102 +1778,87 @@ }, "debug": { "version": "2.6.8", - "from": "debug@2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "bundled": true, "dev": true, "optional": true }, "deep-extend": { "version": "0.4.2", - "from": "deep-extend@0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "bundled": true, "dev": true, "optional": true }, "delayed-stream": { "version": "1.0.0", - "from": "delayed-stream@1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "bundled": true, "dev": true }, "delegates": { "version": "1.0.0", - "from": "delegates@1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "bundled": true, "dev": true, "optional": true }, "ecc-jsbn": { "version": "0.1.1", - "from": "ecc-jsbn@0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "bundled": true, "dev": true, "optional": true }, "extend": { "version": "3.0.1", - "from": "extend@3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "extsprintf": { "version": "1.0.2", - "from": "extsprintf@1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "bundled": true, "dev": true }, "forever-agent": { "version": "0.6.1", - "from": "forever-agent@0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "bundled": true, "dev": true, "optional": true }, "form-data": { "version": "2.1.4", - "from": "form-data@2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "bundled": true, "dev": true, "optional": true }, "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "bundled": true, "dev": true }, "fstream": { "version": "1.0.11", - "from": "fstream@1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "bundled": true, "dev": true }, "fstream-ignore": { "version": "1.0.5", - "from": "fstream-ignore@1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "bundled": true, "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "from": "gauge@2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "bundled": true, "dev": true, "optional": true }, "getpass": { "version": "0.1.7", - "from": "getpass@0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "bundled": true, "dev": true, "optional": true, "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bundled": true, "dev": true, "optional": true } @@ -1850,155 +1866,132 @@ }, "glob": { "version": "7.1.2", - "from": "glob@7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "bundled": true, "dev": true }, "graceful-fs": { "version": "4.1.11", - "from": "graceful-fs@4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "bundled": true, "dev": true }, "har-schema": { "version": "1.0.5", - "from": "har-schema@1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "bundled": true, "dev": true, "optional": true }, "har-validator": { "version": "4.2.1", - "from": "har-validator@4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "bundled": true, "dev": true, "optional": true }, "has-unicode": { "version": "2.0.1", - "from": "has-unicode@2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "hawk": { "version": "3.1.3", - "from": "hawk@3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "bundled": true, "dev": true, "optional": true }, "hoek": { "version": "2.16.3", - "from": "hoek@2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "bundled": true, "dev": true }, "http-signature": { "version": "1.1.1", - "from": "http-signature@1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "bundled": true, "dev": true, "optional": true }, "inflight": { "version": "1.0.6", - "from": "inflight@1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "bundled": true, "dev": true }, "inherits": { "version": "2.0.3", - "from": "inherits@2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "bundled": true, "dev": true }, "ini": { "version": "1.3.4", - "from": "ini@1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "bundled": true, "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "from": "is-fullwidth-code-point@1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "bundled": true, "dev": true }, "is-typedarray": { "version": "1.0.0", - "from": "is-typedarray@1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "bundled": true, "dev": true, "optional": true }, "isarray": { "version": "1.0.0", - "from": "isarray@1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "bundled": true, "dev": true }, "isstream": { "version": "0.1.2", - "from": "isstream@0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "bundled": true, "dev": true, "optional": true }, "jodid25519": { "version": "1.0.2", - "from": "jodid25519@1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "bundled": true, "dev": true, "optional": true }, "jsbn": { "version": "0.1.1", - "from": "jsbn@0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "bundled": true, "dev": true, "optional": true }, "json-schema": { "version": "0.2.3", - "from": "json-schema@0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "bundled": true, "dev": true, "optional": true }, "json-stable-stringify": { "version": "1.0.1", - "from": "json-stable-stringify@1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "json-stringify-safe": { "version": "5.0.1", - "from": "json-stringify-safe@5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "jsonify": { "version": "0.0.0", - "from": "jsonify@0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "bundled": true, "dev": true, "optional": true }, "jsprim": { "version": "1.4.0", - "from": "jsprim@1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "bundled": true, "dev": true, "optional": true, "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bundled": true, "dev": true, "optional": true } @@ -2006,153 +1999,130 @@ }, "mime-db": { "version": "1.27.0", - "from": "mime-db@1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "bundled": true, "dev": true }, "mime-types": { "version": "2.1.15", - "from": "mime-types@2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "bundled": true, "dev": true }, "minimatch": { "version": "3.0.4", - "from": "minimatch@3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "bundled": true, "dev": true }, "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "bundled": true, "dev": true }, "mkdirp": { "version": "0.5.1", - "from": "mkdirp@0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "bundled": true, "dev": true }, "ms": { "version": "2.0.0", - "from": "ms@2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "bundled": true, "dev": true, "optional": true }, "node-pre-gyp": { "version": "0.6.36", - "from": "node-pre-gyp@^0.6.36", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", + "bundled": true, "dev": true, "optional": true }, "nopt": { "version": "4.0.1", - "from": "nopt@4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "npmlog": { "version": "4.1.0", - "from": "npmlog@4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "bundled": true, "dev": true, "optional": true }, "number-is-nan": { "version": "1.0.1", - "from": "number-is-nan@1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "bundled": true, "dev": true }, "oauth-sign": { "version": "0.8.2", - "from": "oauth-sign@0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "bundled": true, "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "from": "object-assign@4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "bundled": true, "dev": true, "optional": true }, "once": { "version": "1.4.0", - "from": "once@1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "bundled": true, "dev": true }, "os-homedir": { "version": "1.0.2", - "from": "os-homedir@1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "bundled": true, "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "from": "os-tmpdir@1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "bundled": true, "dev": true, "optional": true }, "osenv": { "version": "0.1.4", - "from": "osenv@0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "bundled": true, "dev": true, "optional": true }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "bundled": true, "dev": true }, "performance-now": { "version": "0.2.0", - "from": "performance-now@0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "bundled": true, "dev": true, "optional": true }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "bundled": true, "dev": true }, "punycode": { "version": "1.4.1", - "from": "punycode@1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "bundled": true, "dev": true, "optional": true }, "qs": { "version": "6.4.0", - "from": "qs@6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "bundled": true, "dev": true, "optional": true }, "rc": { "version": "1.2.1", - "from": "rc@1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "bundled": true, "dev": true, "optional": true, "dependencies": { "minimist": { "version": "1.2.0", - "from": "minimist@1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "bundled": true, "dev": true, "optional": true } @@ -2160,68 +2130,58 @@ }, "readable-stream": { "version": "2.2.9", - "from": "readable-stream@2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "bundled": true, "dev": true }, "request": { "version": "2.81.0", - "from": "request@2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "bundled": true, "dev": true, "optional": true }, "rimraf": { "version": "2.6.1", - "from": "rimraf@2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "bundled": true, "dev": true }, "safe-buffer": { "version": "5.0.1", - "from": "safe-buffer@5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "bundled": true, "dev": true }, "semver": { "version": "5.3.0", - "from": "semver@5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "bundled": true, "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "from": "set-blocking@2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "bundled": true, "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "from": "signal-exit@3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "bundled": true, "dev": true, "optional": true }, "sntp": { "version": "1.0.9", - "from": "sntp@1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "bundled": true, "dev": true, "optional": true }, "sshpk": { "version": "1.13.0", - "from": "sshpk@1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", + "bundled": true, "dev": true, "optional": true, "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bundled": true, "dev": true, "optional": true } @@ -2229,1273 +2189,1277 @@ }, "string_decoder": { "version": "1.0.1", - "from": "string_decoder@1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "bundled": true, "dev": true }, "string-width": { "version": "1.0.2", - "from": "string-width@1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "bundled": true, "dev": true }, "stringstream": { "version": "0.0.5", - "from": "stringstream@0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "bundled": true, "dev": true, "optional": true }, "strip-ansi": { "version": "3.0.1", - "from": "strip-ansi@3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "bundled": true, "dev": true }, "strip-json-comments": { "version": "2.0.1", - "from": "strip-json-comments@2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "tar": { "version": "2.2.1", - "from": "tar@2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "bundled": true, "dev": true }, "tar-pack": { "version": "3.4.0", - "from": "tar-pack@3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "bundled": true, "dev": true, "optional": true }, "tough-cookie": { "version": "2.3.2", - "from": "tough-cookie@2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "bundled": true, "dev": true, "optional": true }, "tunnel-agent": { "version": "0.6.0", - "from": "tunnel-agent@0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "bundled": true, "dev": true, "optional": true }, "tweetnacl": { "version": "0.14.5", - "from": "tweetnacl@0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "bundled": true, "dev": true, "optional": true }, "uid-number": { "version": "0.0.6", - "from": "uid-number@0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "bundled": true, "dev": true, "optional": true }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "bundled": true, "dev": true }, "uuid": { "version": "3.0.1", - "from": "uuid@3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "bundled": true, "dev": true, "optional": true }, "verror": { "version": "1.3.6", - "from": "verror@1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "bundled": true, "dev": true, "optional": true }, "wide-align": { "version": "1.1.2", - "from": "wide-align@1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "bundled": true, "dev": true, "optional": true }, "wrappy": { "version": "1.0.2", - "from": "wrappy@1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "bundled": true, "dev": true } } }, "fstream": { "version": "1.0.11", - "from": "fstream@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz" + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=" }, "fstream-ignore": { "version": "1.0.5", - "from": "fstream-ignore@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz" + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=" }, "function-bind": { "version": "1.1.0", - "from": "function-bind@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=" }, "gauge": { "version": "2.7.4", - "from": "gauge@>=2.7.3 <2.8.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=" }, "generate-function": { "version": "2.0.0", - "from": "generate-function@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", "dev": true }, "generate-object-property": { "version": "1.2.0", - "from": "generate-object-property@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true }, "generic-pool": { - "version": "2.4.2", - "from": "generic-pool@2.4.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.3.tgz", + "integrity": "sha1-eAw29p360FpaBF3Te+etyhGk9v8=" }, "geojson-precision": { "version": "0.4.0", - "from": "geojson-precision@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/geojson-precision/-/geojson-precision-0.4.0.tgz" + "resolved": "https://registry.npmjs.org/geojson-precision/-/geojson-precision-0.4.0.tgz", + "integrity": "sha1-2O+k3xakpo5D8tHr9Nrf//EMidw=" }, "getpass": { "version": "0.1.7", - "from": "getpass@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "glob": { "version": "7.1.2", - "from": "glob@>=7.0.5 <8.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==" }, "glob-base": { "version": "0.3.0", - "from": "glob-base@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true }, "glob-parent": { "version": "2.0.0", - "from": "glob-parent@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true }, "globals": { "version": "9.18.0", - "from": "globals@>=9.0.0 <10.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, "globby": { "version": "5.0.0", - "from": "globby@>=5.0.0 <6.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true }, "got": { "version": "3.3.1", - "from": "got@>=3.2.0 <4.0.0", "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", + "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", "dev": true, "dependencies": { "object-assign": { "version": "3.0.0", - "from": "object-assign@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", "dev": true } } }, "graceful-fs": { "version": "4.1.11", - "from": "graceful-fs@>=4.1.2 <5.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "graceful-readlink": { "version": "1.0.1", - "from": "graceful-readlink@>=1.0.0", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, "growl": { "version": "1.9.2", - "from": "growl@1.9.2", "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", "dev": true }, "har-schema": { "version": "1.0.5", - "from": "har-schema@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz" + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" }, "har-validator": { "version": "4.2.1", - "from": "har-validator@>=4.2.1 <4.3.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz" + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=" }, "has": { "version": "1.0.1", - "from": "has@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=" }, "has-ansi": { "version": "2.0.0", - "from": "has-ansi@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true }, "has-flag": { "version": "1.0.0", - "from": "has-flag@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, "has-unicode": { "version": "2.0.1", - "from": "has-unicode@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "hawk": { "version": "3.1.3", - "from": "hawk@>=3.1.3 <3.2.0", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz" + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=" }, "hoek": { "version": "2.16.3", - "from": "hoek@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "home-or-tmp": { "version": "2.0.0", - "from": "home-or-tmp@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", "dev": true }, "http-errors": { - "version": "1.6.1", - "from": "http-errors@>=1.6.1 <1.7.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz" + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=" }, "http-signature": { "version": "1.1.1", - "from": "http-signature@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=" }, "iconv-lite": { "version": "0.4.15", - "from": "iconv-lite@0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz" + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" }, "ieee754": { "version": "1.1.8", - "from": "ieee754@>=1.1.4 <2.0.0", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz" + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" }, "ignore": { "version": "3.3.3", - "from": "ignore@>=3.2.0 <4.0.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", + "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", "dev": true }, "ignore-by-default": { "version": "1.0.1", - "from": "ignore-by-default@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, "imurmurhash": { "version": "0.1.4", - "from": "imurmurhash@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "infinity-agent": { "version": "2.0.3", - "from": "infinity-agent@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", + "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=", "dev": true }, "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" }, "inherits": { "version": "2.0.3", - "from": "inherits@2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.4", - "from": "ini@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" }, "inquirer": { "version": "0.12.0", - "from": "inquirer@>=0.12.0 <0.13.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true }, "interpret": { "version": "1.0.3", - "from": "interpret@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", "dev": true }, "invariant": { "version": "2.2.2", - "from": "invariant@>=2.2.0 <3.0.0", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true }, "ipaddr.js": { - "version": "1.3.0", - "from": "ipaddr.js@1.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-binary-path": { "version": "1.0.1", - "from": "is-binary-path@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true }, "is-buffer": { "version": "1.1.5", - "from": "is-buffer@>=1.1.5 <2.0.0", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true }, "is-dotfile": { "version": "1.0.3", - "from": "is-dotfile@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", "dev": true }, "is-equal-shallow": { "version": "0.1.3", - "from": "is-equal-shallow@>=0.1.3 <0.2.0", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true }, "is-extendable": { "version": "0.1.1", - "from": "is-extendable@>=0.1.1 <0.2.0", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { "version": "1.0.0", - "from": "is-extglob@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, "is-finite": { "version": "1.0.2", - "from": "is-finite@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" }, "is-glob": { "version": "2.0.1", - "from": "is-glob@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true }, "is-my-json-valid": { - "version": "2.16.0", - "from": "is-my-json-valid@>=2.12.4 <3.0.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", "dev": true }, "is-npm": { "version": "1.0.0", - "from": "is-npm@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", "dev": true }, "is-number": { "version": "2.1.0", - "from": "is-number@>=2.1.0 <3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true }, "is-path-cwd": { "version": "1.0.0", - "from": "is-path-cwd@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", "dev": true }, "is-path-in-cwd": { "version": "1.0.0", - "from": "is-path-in-cwd@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true }, "is-path-inside": { "version": "1.0.0", - "from": "is-path-inside@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", "dev": true }, "is-posix-bracket": { "version": "0.1.1", - "from": "is-posix-bracket@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true }, "is-primitive": { "version": "2.0.0", - "from": "is-primitive@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, "is-property": { "version": "1.0.2", - "from": "is-property@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", "dev": true }, "is-redirect": { "version": "1.0.0", - "from": "is-redirect@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", "dev": true }, "is-resolvable": { "version": "1.0.0", - "from": "is-resolvable@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", + "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", "dev": true }, "is-stream": { "version": "1.1.0", - "from": "is-stream@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-typedarray": { "version": "1.0.0", - "from": "is-typedarray@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "isarray": { "version": "1.0.0", - "from": "isarray@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isemail": { "version": "1.2.0", - "from": "isemail@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz" + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" }, "isobject": { "version": "2.1.0", - "from": "isobject@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true }, "isstream": { "version": "0.1.2", - "from": "isstream@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul-lib-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.5.tgz", + "integrity": "sha1-rbWW+PDLi5XnOSBjUaOKWGryGx4=", + "dev": true }, "items": { "version": "2.1.1", - "from": "items@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz" + "resolved": "https://registry.npmjs.org/items/-/items-2.1.1.tgz", + "integrity": "sha1-i9FtnIOxlSneWuoyGsqtp4NkoZg=" }, "jmespath": { "version": "0.15.0", - "from": "jmespath@0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz" + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, "joi": { "version": "10.6.0", - "from": "joi@>=10.4.1 <11.0.0", "resolved": "https://registry.npmjs.org/joi/-/joi-10.6.0.tgz", + "integrity": "sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==", "dependencies": { "hoek": { - "version": "4.1.1", - "from": "hoek@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.1.1.tgz" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" }, "isemail": { "version": "2.2.1", - "from": "isemail@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz" + "resolved": "https://registry.npmjs.org/isemail/-/isemail-2.2.1.tgz", + "integrity": "sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=" }, "topo": { "version": "2.0.2", - "from": "topo@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz" + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=" } } }, "joi-date-extensions": { "version": "1.0.2", - "from": "joi-date-extensions@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/joi-date-extensions/-/joi-date-extensions-1.0.2.tgz", + "integrity": "sha1-sLHbzNIHT7z3Ap0FYTUcTwCJch4=", "dependencies": { "hoek": { - "version": "4.1.1", - "from": "hoek@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.1.1.tgz" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" } } }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" + }, "js-tokens": { "version": "3.0.2", - "from": "js-tokens@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, "js-yaml": { "version": "3.6.1", - "from": "js-yaml@3.6.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", "dev": true, "dependencies": { "esprima": { "version": "2.7.3", - "from": "esprima@>=2.6.0 <3.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true } } }, "js2xmlparser": { - "version": "1.0.0", - "from": "js2xmlparser@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-1.0.0.tgz", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", "dev": true }, "jsbn": { "version": "0.1.1", - "from": "jsbn@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, "jsdoc": { - "version": "3.4.3", - "from": "jsdoc@>=3.4.3 <4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.4.3.tgz", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.4.tgz", + "integrity": "sha512-VmTw0J+2L16IxAe0JSDSAcH0F+DbZxaj8wN1AjHtKMQU/hO0ciIl5ZE93XqrrFIbknobuqHKJCXZj6+Hk57MjA==", "dev": true, "dependencies": { - "acorn": { - "version": "3.3.0", - "from": "acorn@>=3.3.0 <4.0.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "dev": true - }, - "bluebird": { - "version": "3.4.7", - "from": "bluebird@>=3.4.6 <3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "dev": true - }, - "espree": { - "version": "3.1.7", - "from": "espree@>=3.1.7 <3.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.7.tgz", + "babylon": { + "version": "7.0.0-beta.20", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.20.tgz", + "integrity": "sha512-kkMTbo/6QmDD+ggF4KaeMLNvf+RfHVtC4mZJcGDZsbQvRqUgG4yWdy6fh3FZbwwLX9BD6PGmAeKN08P5O8pGLQ==", "dev": true } } }, "jsesc": { "version": "1.3.0", - "from": "jsesc@>=1.3.0 <2.0.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "json-schema": { "version": "0.2.3", - "from": "json-schema@0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-stable-stringify": { "version": "1.0.1", - "from": "json-stable-stringify@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=" }, "json-stringify-safe": { "version": "5.0.1", - "from": "json-stringify-safe@>=5.0.1 <5.1.0", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { "version": "3.3.2", - "from": "json3@3.3.2", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", "dev": true }, "json5": { "version": "0.5.1", - "from": "json5@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, "jsonify": { "version": "0.0.0", - "from": "jsonify@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" }, "jsonpointer": { "version": "4.0.1", - "from": "jsonpointer@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", "dev": true }, "jsonwebtoken": { - "version": "7.4.1", - "from": "jsonwebtoken@>=7.3.0 <8.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", + "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", "dependencies": { "joi": { "version": "6.10.1", - "from": "joi@>=6.10.1 <7.0.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz" + "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=" } } }, "jsprim": { - "version": "1.4.0", - "from": "jsprim@>=1.2.2 <2.0.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "jwa": { "version": "1.1.5", - "from": "jwa@>=1.1.4 <2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz" + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", + "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=" }, "jwks-rsa": { "version": "1.2.0", - "from": "jwks-rsa@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.2.0.tgz" + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.2.0.tgz", + "integrity": "sha1-t+kluerAcirYY0rWp+l8fa7T1Mg=" }, "jws": { "version": "3.1.4", - "from": "jws@>=3.1.4 <4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz" + "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", + "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=" }, "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.0.2 <4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true }, "kindof": { "version": "1.0.0", - "from": "kindof@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/kindof/-/kindof-1.0.0.tgz", + "integrity": "sha1-ExiZqFJ1N6lNou3NXMSfxglgZWA=", "dev": true }, "klaw": { - "version": "1.3.1", - "from": "klaw@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", "dev": true }, "latest-version": { "version": "1.0.1", - "from": "latest-version@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", + "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", "dev": true }, "lcov-parse": { "version": "0.0.10", - "from": "lcov-parse@0.0.10", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, "levn": { "version": "0.3.0", - "from": "levn@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true }, "limiter": { "version": "1.1.2", - "from": "limiter@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.2.tgz" + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.2.tgz", + "integrity": "sha512-JIKZ0xb6fZZYa3deZ0BgXCgX6HgV8Nx3mFGeFHmFWW8Fb2c08e0CyE+G3nalpD0xGvGssjGb1UdFr+PprxZEbw==" + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true }, "lock": { - "version": "0.1.3", - "from": "lock@>=0.1.2 <0.2.0", - "resolved": "https://registry.npmjs.org/lock/-/lock-0.1.3.tgz" + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/lock/-/lock-0.1.4.tgz", + "integrity": "sha1-/sfervF+fDoKVeHaBCgD4l2RdF0=" }, "lodash": { "version": "4.17.4", - "from": "lodash@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, "lodash._baseassign": { "version": "3.2.0", - "from": "lodash._baseassign@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dev": true }, "lodash._basecopy": { "version": "3.0.1", - "from": "lodash._basecopy@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", "dev": true }, "lodash._basecreate": { "version": "3.0.3", - "from": "lodash._basecreate@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", "dev": true }, "lodash._bindcallback": { "version": "3.0.1", - "from": "lodash._bindcallback@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", "dev": true }, "lodash._createassigner": { "version": "3.1.1", - "from": "lodash._createassigner@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", "dev": true }, "lodash._getnative": { "version": "3.9.1", - "from": "lodash._getnative@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "dev": true }, "lodash._isiterateecall": { "version": "3.0.9", - "from": "lodash._isiterateecall@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", "dev": true }, "lodash.assign": { "version": "3.2.0", - "from": "lodash.assign@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", "dev": true }, "lodash.create": { "version": "3.1.1", - "from": "lodash.create@3.1.1", "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", "dev": true }, "lodash.defaults": { "version": "3.1.2", - "from": "lodash.defaults@>=3.1.2 <4.0.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", + "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", "dev": true }, "lodash.isarguments": { "version": "3.1.0", - "from": "lodash.isarguments@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", "dev": true }, "lodash.isarray": { "version": "3.0.4", - "from": "lodash.isarray@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "dev": true }, "lodash.keys": { "version": "3.1.2", - "from": "lodash.keys@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true }, "lodash.once": { "version": "4.1.1", - "from": "lodash.once@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, "lodash.restparam": { "version": "3.6.1", - "from": "lodash.restparam@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "dev": true }, "lodash.set": { "version": "4.3.2", - "from": "lodash.set@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz" + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" }, "log-driver": { "version": "1.2.5", - "from": "log-driver@1.2.5", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", "dev": true }, "lolex": { "version": "1.3.2", - "from": "lolex@1.3.2", "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", + "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", "dev": true }, "loose-envify": { "version": "1.3.1", - "from": "loose-envify@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true }, "lowercase-keys": { "version": "1.0.0", - "from": "lowercase-keys@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", "dev": true }, "lru-cache": { "version": "4.0.2", - "from": "lru-cache@>=4.0.0 <4.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz" + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=" }, "lru-memoizer": { "version": "1.11.1", - "from": "lru-memoizer@>=1.6.0 <2.0.0", "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-1.11.1.tgz", + "integrity": "sha1-BpP2EAWTkUwC4ZK/m42TiEy/UNM=", "dependencies": { "lodash": { "version": "4.5.1", - "from": "lodash@>=4.5.1 <4.6.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.1.tgz" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.5.1.tgz", + "integrity": "sha1-gOigdMpfOJOmscELKmNkktcQwxY=" } } }, "manakin": { - "version": "0.4.7", - "from": "manakin@>=0.4.7 <0.5.0", - "resolved": "https://registry.npmjs.org/manakin/-/manakin-0.4.7.tgz" + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/manakin/-/manakin-0.4.8.tgz", + "integrity": "sha1-/Wd53NY5nQ0Vgz7NYspPfJoTEZA=" }, "map-stream": { "version": "0.1.0", - "from": "map-stream@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, "marked": { "version": "0.3.6", - "from": "marked@>=0.3.6 <0.4.0", "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", + "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc=", "dev": true }, "media-typer": { "version": "0.3.0", - "from": "media-typer@0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "merge-descriptors": { "version": "1.0.1", - "from": "merge-descriptors@1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "methods": { "version": "1.1.2", - "from": "methods@>=1.1.2 <1.2.0", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { "version": "2.3.11", - "from": "micromatch@>=2.1.5 <3.0.0", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true }, "mime": { "version": "1.3.4", - "from": "mime@1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz" + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" }, "mime-db": { - "version": "1.27.0", - "from": "mime-db@>=1.27.0 <1.28.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" }, "mime-types": { - "version": "2.1.15", - "from": "mime-types@>=2.1.15 <2.2.0", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz" + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=" }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.4 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" }, "minimist": { "version": "1.2.0", - "from": "minimist@>=1.1.3 <2.0.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mkdirp": { "version": "0.5.1", - "from": "mkdirp@>=0.5.1 <0.6.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dependencies": { "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, "mocha": { - "version": "3.4.2", - "from": "mocha@>=3.3.0 <4.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz", + "integrity": "sha512-pIU2PJjrPYvYRqVpjXzj76qltO9uBYI7woYAMoxbSefsa+vqAfptjoeevd6bUgwD0mPIO+hv9f7ltvsNreL2PA==", "dev": true, "dependencies": { "commander": { "version": "2.9.0", - "from": "commander@2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true }, "debug": { - "version": "2.6.0", - "from": "debug@2.6.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", "dev": true }, "glob": { "version": "7.1.1", - "from": "glob@7.1.1", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "dev": true - }, - "ms": { - "version": "0.7.2", - "from": "ms@0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", "dev": true }, "supports-color": { "version": "3.1.2", - "from": "supports-color@3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", "dev": true } } }, "moment": { "version": "2.18.1", - "from": "moment@>=2.18.1 <3.0.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz" + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" }, "moment-timezone": { "version": "0.5.13", - "from": "moment-timezone@>=0.5.13 <0.6.0", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz" + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz", + "integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=" }, "morgan": { "version": "1.8.2", - "from": "morgan@>=1.8.1 <2.0.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.8.2.tgz", + "integrity": "sha1-eErHc05KRTqcbm6GgKkyknXItoc=", "dependencies": { "debug": { "version": "2.6.8", - "from": "debug@2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz" + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" } } }, "ms": { "version": "2.0.0", - "from": "ms@2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "must": { "version": "0.12.0", - "from": "must@>=0.12.0 <0.13.0", "resolved": "https://registry.npmjs.org/must/-/must-0.12.0.tgz", + "integrity": "sha1-V0HnKb7byLD+K8jFAGRZQVOD0F0=", "dev": true }, "mute-stream": { "version": "0.0.5", - "from": "mute-stream@0.0.5", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", "dev": true }, "nan": { "version": "2.6.2", - "from": "nan@>=2.3.0 <3.0.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", "dev": true, "optional": true }, "natural-compare": { "version": "1.4.0", - "from": "natural-compare@>=1.4.0 <2.0.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "negotiator": { "version": "0.6.1", - "from": "negotiator@0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz" + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "nested-error-stacks": { "version": "1.0.2", - "from": "nested-error-stacks@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", + "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", "dev": true }, "node-pre-gyp": { "version": "0.6.36", - "from": "node-pre-gyp@>=0.6.36 <0.7.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz" + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", + "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=" }, "nodemon": { "version": "1.11.0", - "from": "nodemon@>=1.11.0 <2.0.0", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz", + "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=", "dev": true }, "noder.io": { "version": "1.2.0", - "from": "noder.io@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/noder.io/-/noder.io-1.2.0.tgz", + "integrity": "sha1-rSvGxsP5RliR7bxtv16E3K4vqeY=", "dev": true }, "nopt": { "version": "4.0.1", - "from": "nopt@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz" + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=" + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true }, "normalize-path": { "version": "2.1.1", - "from": "normalize-path@>=2.0.1 <3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true }, "npmlog": { "version": "4.1.2", - "from": "npmlog@>=4.0.2 <5.0.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" }, "number-is-nan": { "version": "1.0.1", - "from": "number-is-nan@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nyc": { - "version": "11.0.3", - "from": "nyc@>=11.0.2 <12.0.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.0.3.tgz", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.1.0.tgz", + "integrity": "sha1-1rPF4WiSolr2MTi6SEZ2qooi7ac=", "dev": true, "dependencies": { "align-text": { "version": "0.1.4", - "from": "align-text@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "bundled": true, "dev": true }, "amdefine": { "version": "1.0.1", - "from": "amdefine@>=0.0.4", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "bundled": true, "dev": true }, "ansi-regex": { "version": "2.1.1", - "from": "ansi-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "bundled": true, "dev": true }, "ansi-styles": { "version": "2.2.1", - "from": "ansi-styles@>=2.2.1 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "bundled": true, "dev": true }, "append-transform": { "version": "0.4.0", - "from": "append-transform@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "bundled": true, "dev": true }, "archy": { "version": "1.0.0", - "from": "archy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "bundled": true, "dev": true }, "arr-diff": { "version": "2.0.0", - "from": "arr-diff@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "bundled": true, "dev": true }, "arr-flatten": { - "version": "1.0.3", - "from": "arr-flatten@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz", + "version": "1.1.0", + "bundled": true, "dev": true }, "array-unique": { "version": "0.2.1", - "from": "array-unique@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "bundled": true, "dev": true }, "arrify": { "version": "1.0.1", - "from": "arrify@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "bundled": true, "dev": true }, "async": { "version": "1.5.2", - "from": "async@>=1.4.0 <2.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "bundled": true, "dev": true }, "babel-code-frame": { "version": "6.22.0", - "from": "babel-code-frame@>=6.22.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", + "bundled": true, "dev": true }, "babel-generator": { "version": "6.25.0", - "from": "babel-generator@>=6.18.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "bundled": true, "dev": true }, "babel-messages": { "version": "6.23.0", - "from": "babel-messages@>=6.23.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "bundled": true, "dev": true }, "babel-runtime": { "version": "6.23.0", - "from": "babel-runtime@>=6.22.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", + "bundled": true, "dev": true }, "babel-template": { "version": "6.25.0", - "from": "babel-template@>=6.16.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", + "bundled": true, "dev": true }, "babel-traverse": { "version": "6.25.0", - "from": "babel-traverse@>=6.18.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", + "bundled": true, "dev": true }, "babel-types": { "version": "6.25.0", - "from": "babel-types@>=6.18.0 <7.0.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", + "bundled": true, "dev": true }, "babylon": { "version": "6.17.4", - "from": "babylon@>=6.17.4 <7.0.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", + "bundled": true, "dev": true }, "balanced-match": { "version": "1.0.0", - "from": "balanced-match@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "bundled": true, "dev": true }, "brace-expansion": { "version": "1.1.8", - "from": "brace-expansion@>=1.1.7 <2.0.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "bundled": true, "dev": true }, "braces": { "version": "1.8.5", - "from": "braces@>=1.8.2 <2.0.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "bundled": true, "dev": true }, "builtin-modules": { "version": "1.1.1", - "from": "builtin-modules@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "bundled": true, "dev": true }, "caching-transform": { "version": "1.0.1", - "from": "caching-transform@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", + "bundled": true, "dev": true }, "camelcase": { "version": "1.2.1", - "from": "camelcase@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "bundled": true, "dev": true, "optional": true }, "center-align": { "version": "0.1.3", - "from": "center-align@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "bundled": true, "dev": true, "optional": true }, "chalk": { "version": "1.1.3", - "from": "chalk@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "bundled": true, "dev": true }, "cliui": { "version": "2.1.0", - "from": "cliui@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "bundled": true, "dev": true, "optional": true, "dependencies": { "wordwrap": { "version": "0.0.2", - "from": "wordwrap@0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "bundled": true, "dev": true, "optional": true } @@ -3503,951 +3467,806 @@ }, "code-point-at": { "version": "1.1.0", - "from": "code-point-at@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "bundled": true, "dev": true }, "commondir": { "version": "1.0.1", - "from": "commondir@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "bundled": true, "dev": true }, "concat-map": { "version": "0.0.1", - "from": "concat-map@0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "bundled": true, "dev": true }, "convert-source-map": { "version": "1.5.0", - "from": "convert-source-map@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "bundled": true, "dev": true }, "core-js": { "version": "2.4.1", - "from": "core-js@>=2.4.0 <3.0.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", + "bundled": true, "dev": true }, "cross-spawn": { "version": "4.0.2", - "from": "cross-spawn@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "bundled": true, "dev": true }, "debug": { "version": "2.6.8", - "from": "debug@>=2.2.0 <3.0.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "bundled": true, "dev": true }, "debug-log": { "version": "1.0.1", - "from": "debug-log@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "bundled": true, "dev": true }, "decamelize": { "version": "1.2.0", - "from": "decamelize@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "bundled": true, "dev": true }, "default-require-extensions": { "version": "1.0.0", - "from": "default-require-extensions@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "bundled": true, "dev": true }, "detect-indent": { "version": "4.0.0", - "from": "detect-indent@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "bundled": true, "dev": true }, "error-ex": { "version": "1.3.1", - "from": "error-ex@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "bundled": true, "dev": true }, "escape-string-regexp": { "version": "1.0.5", - "from": "escape-string-regexp@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "bundled": true, "dev": true }, "esutils": { "version": "2.0.2", - "from": "esutils@>=2.0.2 <3.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "bundled": true, "dev": true }, "execa": { "version": "0.5.1", - "from": "execa@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.5.1.tgz", + "bundled": true, "dev": true }, "expand-brackets": { "version": "0.1.5", - "from": "expand-brackets@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "bundled": true, "dev": true }, "expand-range": { "version": "1.8.2", - "from": "expand-range@>=1.8.1 <2.0.0", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "bundled": true, "dev": true }, "extglob": { "version": "0.3.2", - "from": "extglob@>=0.3.1 <0.4.0", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "bundled": true, "dev": true }, "filename-regex": { "version": "2.0.1", - "from": "filename-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "bundled": true, "dev": true }, "fill-range": { "version": "2.2.3", - "from": "fill-range@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "bundled": true, "dev": true }, "find-cache-dir": { "version": "0.1.1", - "from": "find-cache-dir@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "bundled": true, "dev": true }, "find-up": { "version": "2.1.0", - "from": "find-up@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "bundled": true, "dev": true }, "for-in": { "version": "1.0.2", - "from": "for-in@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "bundled": true, "dev": true }, "for-own": { "version": "0.1.5", - "from": "for-own@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "bundled": true, "dev": true }, "foreground-child": { "version": "1.5.6", - "from": "foreground-child@>=1.5.3 <2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "bundled": true, "dev": true }, "fs.realpath": { "version": "1.0.0", - "from": "fs.realpath@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "bundled": true, "dev": true }, "get-caller-file": { "version": "1.0.2", - "from": "get-caller-file@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "bundled": true, "dev": true }, "get-stream": { "version": "2.3.1", - "from": "get-stream@>=2.2.0 <3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "bundled": true, "dev": true }, "glob": { "version": "7.1.2", - "from": "glob@>=7.0.6 <8.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "bundled": true, "dev": true }, "glob-base": { "version": "0.3.0", - "from": "glob-base@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "bundled": true, "dev": true }, "glob-parent": { "version": "2.0.0", - "from": "glob-parent@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "bundled": true, "dev": true }, "globals": { "version": "9.18.0", - "from": "globals@>=9.0.0 <10.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "bundled": true, "dev": true }, "graceful-fs": { "version": "4.1.11", - "from": "graceful-fs@>=4.1.11 <5.0.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "bundled": true, "dev": true }, "handlebars": { "version": "4.0.10", - "from": "handlebars@>=4.0.3 <5.0.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "bundled": true, "dev": true, "dependencies": { "source-map": { "version": "0.4.4", - "from": "source-map@>=0.4.4 <0.5.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "bundled": true, "dev": true } } }, "has-ansi": { "version": "2.0.0", - "from": "has-ansi@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "bundled": true, "dev": true }, "has-flag": { "version": "1.0.0", - "from": "has-flag@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "bundled": true, "dev": true }, "hosted-git-info": { - "version": "2.4.2", - "from": "hosted-git-info@>=2.1.4 <3.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.4.2.tgz", + "version": "2.5.0", + "bundled": true, "dev": true }, "imurmurhash": { "version": "0.1.4", - "from": "imurmurhash@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "bundled": true, "dev": true }, "inflight": { "version": "1.0.6", - "from": "inflight@>=1.0.4 <2.0.0", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "bundled": true, "dev": true }, "inherits": { "version": "2.0.3", - "from": "inherits@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "bundled": true, "dev": true }, "invariant": { "version": "2.2.2", - "from": "invariant@>=2.2.0 <3.0.0", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "bundled": true, "dev": true }, "invert-kv": { "version": "1.0.0", - "from": "invert-kv@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "bundled": true, "dev": true }, "is-arrayish": { "version": "0.2.1", - "from": "is-arrayish@>=0.2.1 <0.3.0", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "bundled": true, "dev": true }, "is-buffer": { "version": "1.1.5", - "from": "is-buffer@>=1.1.5 <2.0.0", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "bundled": true, "dev": true }, "is-builtin-module": { "version": "1.0.0", - "from": "is-builtin-module@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "bundled": true, "dev": true }, "is-dotfile": { "version": "1.0.3", - "from": "is-dotfile@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "bundled": true, "dev": true }, "is-equal-shallow": { "version": "0.1.3", - "from": "is-equal-shallow@>=0.1.3 <0.2.0", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "bundled": true, "dev": true }, "is-extendable": { "version": "0.1.1", - "from": "is-extendable@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "bundled": true, "dev": true }, "is-extglob": { "version": "1.0.0", - "from": "is-extglob@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "bundled": true, "dev": true }, "is-finite": { "version": "1.0.2", - "from": "is-finite@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "bundled": true, "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "from": "is-fullwidth-code-point@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "bundled": true, "dev": true }, "is-glob": { "version": "2.0.1", - "from": "is-glob@>=2.0.1 <3.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "bundled": true, "dev": true }, "is-number": { "version": "2.1.0", - "from": "is-number@>=2.1.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "bundled": true, "dev": true }, "is-posix-bracket": { "version": "0.1.1", - "from": "is-posix-bracket@>=0.1.0 <0.2.0", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "bundled": true, "dev": true }, "is-primitive": { "version": "2.0.0", - "from": "is-primitive@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "bundled": true, "dev": true }, "is-stream": { "version": "1.1.0", - "from": "is-stream@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "bundled": true, "dev": true }, "is-utf8": { "version": "0.2.1", - "from": "is-utf8@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "bundled": true, "dev": true }, "isarray": { "version": "1.0.0", - "from": "isarray@1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "bundled": true, "dev": true }, "isexe": { "version": "2.0.0", - "from": "isexe@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "bundled": true, "dev": true }, "isobject": { "version": "2.1.0", - "from": "isobject@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "bundled": true, "dev": true }, "istanbul-lib-coverage": { "version": "1.1.1", - "from": "istanbul-lib-coverage@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "bundled": true, "dev": true }, "istanbul-lib-hook": { "version": "1.0.7", - "from": "istanbul-lib-hook@>=1.0.7 <2.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", + "bundled": true, "dev": true }, "istanbul-lib-instrument": { - "version": "1.7.3", - "from": "istanbul-lib-instrument@>=1.7.3 <2.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.3.tgz", + "version": "1.7.4", + "bundled": true, "dev": true }, "istanbul-lib-report": { "version": "1.1.1", - "from": "istanbul-lib-report@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "bundled": true, "dev": true, "dependencies": { "supports-color": { "version": "3.2.3", - "from": "supports-color@>=3.1.2 <4.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "bundled": true, "dev": true } } }, "istanbul-lib-source-maps": { "version": "1.2.1", - "from": "istanbul-lib-source-maps@>=1.2.1 <2.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", + "bundled": true, "dev": true }, "istanbul-reports": { "version": "1.1.1", - "from": "istanbul-reports@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "bundled": true, "dev": true }, "js-tokens": { - "version": "3.0.1", - "from": "js-tokens@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", + "version": "3.0.2", + "bundled": true, "dev": true }, "jsesc": { "version": "1.3.0", - "from": "jsesc@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "bundled": true, "dev": true }, "kind-of": { "version": "3.2.2", - "from": "kind-of@>=3.0.2 <4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "bundled": true, "dev": true }, "lazy-cache": { "version": "1.0.4", - "from": "lazy-cache@>=1.0.3 <2.0.0", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "bundled": true, "dev": true, "optional": true }, "lcid": { "version": "1.0.0", - "from": "lcid@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "bundled": true, "dev": true }, "load-json-file": { "version": "1.1.0", - "from": "load-json-file@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "bundled": true, "dev": true }, "locate-path": { "version": "2.0.0", - "from": "locate-path@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "bundled": true, "dev": true, "dependencies": { "path-exists": { "version": "3.0.0", - "from": "path-exists@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "bundled": true, "dev": true } } }, "lodash": { "version": "4.17.4", - "from": "lodash@>=4.2.0 <5.0.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "bundled": true, "dev": true }, "longest": { "version": "1.0.1", - "from": "longest@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "bundled": true, "dev": true }, "loose-envify": { "version": "1.3.1", - "from": "loose-envify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "bundled": true, "dev": true }, "lru-cache": { "version": "4.1.1", - "from": "lru-cache@>=4.0.1 <5.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "bundled": true, "dev": true }, "md5-hex": { "version": "1.3.0", - "from": "md5-hex@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", + "bundled": true, "dev": true }, "md5-o-matic": { "version": "0.1.1", - "from": "md5-o-matic@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", + "bundled": true, "dev": true }, "mem": { "version": "1.1.0", - "from": "mem@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "bundled": true, "dev": true }, "merge-source-map": { "version": "1.0.4", - "from": "merge-source-map@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "bundled": true, "dev": true }, "micromatch": { "version": "2.3.11", - "from": "micromatch@>=2.3.11 <3.0.0", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "bundled": true, "dev": true }, "mimic-fn": { "version": "1.1.0", - "from": "mimic-fn@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "bundled": true, "dev": true }, "minimatch": { "version": "3.0.4", - "from": "minimatch@>=3.0.4 <4.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "bundled": true, "dev": true }, "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "bundled": true, "dev": true }, "mkdirp": { "version": "0.5.1", - "from": "mkdirp@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "bundled": true, "dev": true }, "ms": { "version": "2.0.0", - "from": "ms@2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "bundled": true, "dev": true }, "normalize-package-data": { - "version": "2.3.8", - "from": "normalize-package-data@>=2.3.2 <3.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.8.tgz", + "version": "2.4.0", + "bundled": true, "dev": true }, "normalize-path": { "version": "2.1.1", - "from": "normalize-path@>=2.0.1 <3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "bundled": true, "dev": true }, "npm-run-path": { "version": "2.0.2", - "from": "npm-run-path@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "bundled": true, "dev": true }, "number-is-nan": { "version": "1.0.1", - "from": "number-is-nan@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "bundled": true, "dev": true }, "object-assign": { "version": "4.1.1", - "from": "object-assign@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "bundled": true, "dev": true }, "object.omit": { "version": "2.0.1", - "from": "object.omit@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "bundled": true, "dev": true }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "bundled": true, "dev": true }, "optimist": { "version": "0.6.1", - "from": "optimist@>=0.6.1 <0.7.0", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "bundled": true, "dev": true }, "os-homedir": { "version": "1.0.2", - "from": "os-homedir@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "bundled": true, "dev": true }, "os-locale": { "version": "2.0.0", - "from": "os-locale@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.0.0.tgz", + "bundled": true, "dev": true }, "p-finally": { "version": "1.0.0", - "from": "p-finally@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "bundled": true, "dev": true }, "p-limit": { "version": "1.1.0", - "from": "p-limit@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "bundled": true, "dev": true }, "p-locate": { "version": "2.0.0", - "from": "p-locate@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "bundled": true, "dev": true }, "parse-glob": { "version": "3.0.4", - "from": "parse-glob@>=3.0.4 <4.0.0", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "bundled": true, "dev": true }, "parse-json": { "version": "2.2.0", - "from": "parse-json@>=2.2.0 <3.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "bundled": true, "dev": true }, "path-exists": { "version": "2.1.0", - "from": "path-exists@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "bundled": true, "dev": true }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "bundled": true, "dev": true }, "path-key": { "version": "2.0.1", - "from": "path-key@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "bundled": true, "dev": true }, "path-parse": { "version": "1.0.5", - "from": "path-parse@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "bundled": true, "dev": true }, "path-type": { "version": "1.1.0", - "from": "path-type@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "bundled": true, "dev": true }, "pify": { "version": "2.3.0", - "from": "pify@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "bundled": true, "dev": true }, "pinkie": { "version": "2.0.4", - "from": "pinkie@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "bundled": true, "dev": true }, "pinkie-promise": { "version": "2.0.1", - "from": "pinkie-promise@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "bundled": true, "dev": true }, "pkg-dir": { "version": "1.0.0", - "from": "pkg-dir@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "bundled": true, "dev": true, "dependencies": { "find-up": { "version": "1.1.2", - "from": "find-up@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "bundled": true, "dev": true } } }, "preserve": { "version": "0.2.0", - "from": "preserve@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "bundled": true, "dev": true }, "pseudomap": { "version": "1.0.2", - "from": "pseudomap@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "bundled": true, "dev": true }, "randomatic": { "version": "1.1.7", - "from": "randomatic@>=1.1.3 <2.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "bundled": true, "dev": true, "dependencies": { "is-number": { "version": "3.0.0", - "from": "is-number@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "bundled": true, "dev": true, "dependencies": { "kind-of": { "version": "3.2.2", - "from": "kind-of@^3.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "bundled": true, "dev": true } } }, "kind-of": { "version": "4.0.0", - "from": "kind-of@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "bundled": true, "dev": true } } }, "read-pkg": { "version": "1.1.0", - "from": "read-pkg@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "bundled": true, "dev": true }, "read-pkg-up": { "version": "1.0.1", - "from": "read-pkg-up@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "bundled": true, "dev": true, "dependencies": { "find-up": { "version": "1.1.2", - "from": "find-up@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "bundled": true, "dev": true } } }, "regenerator-runtime": { "version": "0.10.5", - "from": "regenerator-runtime@>=0.10.0 <0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "bundled": true, "dev": true }, "regex-cache": { "version": "0.4.3", - "from": "regex-cache@>=0.4.2 <0.5.0", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "bundled": true, "dev": true }, "remove-trailing-separator": { "version": "1.0.2", - "from": "remove-trailing-separator@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "bundled": true, "dev": true }, "repeat-element": { "version": "1.1.2", - "from": "repeat-element@>=1.1.2 <2.0.0", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "bundled": true, "dev": true }, "repeat-string": { "version": "1.6.1", - "from": "repeat-string@>=1.5.2 <2.0.0", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "bundled": true, "dev": true }, "repeating": { "version": "2.0.1", - "from": "repeating@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "bundled": true, "dev": true }, "require-directory": { "version": "2.1.1", - "from": "require-directory@>=2.1.1 <3.0.0", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "bundled": true, "dev": true }, "require-main-filename": { "version": "1.0.1", - "from": "require-main-filename@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "bundled": true, "dev": true }, "resolve-from": { "version": "2.0.0", - "from": "resolve-from@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "bundled": true, "dev": true }, "right-align": { "version": "0.1.3", - "from": "right-align@>=0.1.1 <0.2.0", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "bundled": true, "dev": true, "optional": true }, "rimraf": { "version": "2.6.1", - "from": "rimraf@>=2.5.4 <3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "bundled": true, "dev": true }, "semver": { "version": "5.3.0", - "from": "semver@>=5.3.0 <6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "bundled": true, "dev": true }, "set-blocking": { "version": "2.0.0", - "from": "set-blocking@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "bundled": true, "dev": true }, "signal-exit": { "version": "3.0.2", - "from": "signal-exit@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "bundled": true, "dev": true }, "slide": { "version": "1.1.6", - "from": "slide@>=1.1.5 <2.0.0", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "bundled": true, "dev": true }, "source-map": { "version": "0.5.6", - "from": "source-map@>=0.5.0 <0.6.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "bundled": true, "dev": true }, "spawn-wrap": { - "version": "1.3.7", - "from": "spawn-wrap@>=1.3.7 <2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.3.7.tgz", + "version": "1.3.8", + "bundled": true, "dev": true }, "spdx-correct": { "version": "1.0.2", - "from": "spdx-correct@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "bundled": true, "dev": true }, "spdx-expression-parse": { "version": "1.0.4", - "from": "spdx-expression-parse@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "bundled": true, "dev": true }, "spdx-license-ids": { "version": "1.2.2", - "from": "spdx-license-ids@>=1.0.2 <2.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "bundled": true, "dev": true }, "string-width": { - "version": "2.0.0", - "from": "string-width@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", + "version": "2.1.0", + "bundled": true, "dev": true, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", - "from": "is-fullwidth-code-point@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, "dev": true } } }, "strip-ansi": { "version": "3.0.1", - "from": "strip-ansi@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "bundled": true, "dev": true }, "strip-bom": { "version": "2.0.0", - "from": "strip-bom@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "bundled": true, "dev": true }, "strip-eof": { "version": "1.0.0", - "from": "strip-eof@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "bundled": true, "dev": true }, "supports-color": { "version": "2.0.0", - "from": "supports-color@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "bundled": true, "dev": true }, "test-exclude": { "version": "4.1.1", - "from": "test-exclude@>=4.1.1 <5.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", + "bundled": true, "dev": true }, "to-fast-properties": { "version": "1.0.3", - "from": "to-fast-properties@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "bundled": true, "dev": true }, "trim-right": { "version": "1.0.1", - "from": "trim-right@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "bundled": true, "dev": true }, "uglify-js": { "version": "2.8.29", - "from": "uglify-js@>=2.6.0 <3.0.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "bundled": true, "dev": true, "optional": true, "dependencies": { "yargs": { "version": "3.10.0", - "from": "yargs@>=3.10.0 <3.11.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "bundled": true, "dev": true, "optional": true } @@ -4455,154 +4274,130 @@ }, "uglify-to-browserify": { "version": "1.0.2", - "from": "uglify-to-browserify@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "bundled": true, "dev": true, "optional": true }, "validate-npm-package-license": { "version": "3.0.1", - "from": "validate-npm-package-license@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "bundled": true, "dev": true }, "which": { "version": "1.2.14", - "from": "which@>=1.2.9 <2.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", + "bundled": true, "dev": true }, "which-module": { "version": "2.0.0", - "from": "which-module@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "bundled": true, "dev": true }, "window-size": { "version": "0.1.0", - "from": "window-size@0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "bundled": true, "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "from": "wordwrap@>=0.0.2 <0.1.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "bundled": true, "dev": true }, "wrap-ansi": { "version": "2.1.0", - "from": "wrap-ansi@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "bundled": true, "dev": true, "dependencies": { "string-width": { "version": "1.0.2", - "from": "string-width@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "bundled": true, "dev": true } } }, "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "bundled": true, "dev": true }, "write-file-atomic": { "version": "1.3.4", - "from": "write-file-atomic@>=1.1.4 <2.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "bundled": true, "dev": true }, "y18n": { "version": "3.2.1", - "from": "y18n@>=3.2.1 <4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "bundled": true, "dev": true }, "yallist": { "version": "2.1.2", - "from": "yallist@>=2.1.2 <3.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "bundled": true, "dev": true }, "yargs": { "version": "8.0.2", - "from": "yargs@>=8.0.1 <9.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "bundled": true, "dev": true, "dependencies": { "camelcase": { "version": "4.1.0", - "from": "camelcase@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "bundled": true, "dev": true }, "cliui": { "version": "3.2.0", - "from": "cliui@>=3.2.0 <4.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "bundled": true, "dev": true, "dependencies": { "string-width": { "version": "1.0.2", - "from": "string-width@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "bundled": true, "dev": true } } }, "load-json-file": { "version": "2.0.0", - "from": "load-json-file@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "bundled": true, "dev": true }, "path-type": { "version": "2.0.0", - "from": "path-type@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "bundled": true, "dev": true }, "read-pkg": { "version": "2.0.0", - "from": "read-pkg@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "bundled": true, "dev": true }, "read-pkg-up": { "version": "2.0.0", - "from": "read-pkg-up@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "bundled": true, "dev": true }, "strip-bom": { "version": "3.0.0", - "from": "strip-bom@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "bundled": true, "dev": true }, "yargs-parser": { "version": "7.0.0", - "from": "yargs-parser@>=7.0.0 <8.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "bundled": true, "dev": true } } }, "yargs-parser": { "version": "5.0.0", - "from": "yargs-parser@>=5.0.0 <6.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "bundled": true, "dev": true, "dependencies": { "camelcase": { "version": "3.0.0", - "from": "camelcase@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "bundled": true, "dev": true } } @@ -4611,1323 +4406,1455 @@ }, "oauth-sign": { "version": "0.8.2", - "from": "oauth-sign@>=0.8.1 <0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz" + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { "version": "4.1.1", - "from": "object-assign@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { "version": "0.4.0", - "from": "object-inspect@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz" + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz", + "integrity": "sha1-9RV8EWwUVbJDsG7pdwM5LFrYn+w=" }, "object-keys": { "version": "1.0.11", - "from": "object-keys@>=1.0.6 <2.0.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz" + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" }, "object.omit": { "version": "2.0.1", - "from": "object.omit@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true }, "on-finished": { "version": "2.3.0", - "from": "on-finished@>=2.3.0 <2.4.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" }, "on-headers": { "version": "1.0.1", - "from": "on-headers@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" }, "once": { "version": "1.4.0", - "from": "once@>=1.3.0 <2.0.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" }, "onetime": { "version": "1.1.0", - "from": "onetime@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, "optimist": { "version": "0.3.7", - "from": "optimist@>=0.3.0 <0.4.0", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz" + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=" }, "optionator": { "version": "0.8.2", - "from": "optionator@>=0.8.2 <0.9.0", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "dependencies": { "wordwrap": { "version": "1.0.0", - "from": "wordwrap@>=1.0.0 <1.1.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true } } }, "os-homedir": { "version": "1.0.2", - "from": "os-homedir@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-tmpdir": { "version": "1.0.2", - "from": "os-tmpdir@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.4", - "from": "osenv@>=0.1.4 <0.2.0", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz" + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=" }, "output-file-sync": { "version": "1.1.2", - "from": "output-file-sync@>=1.1.0 <2.0.0", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true }, "package-json": { "version": "1.2.0", - "from": "package-json@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", + "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", "dev": true }, "packet-reader": { "version": "0.2.0", - "from": "packet-reader@0.2.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.2.0.tgz", + "integrity": "sha1-gZ300BC4LV6lZx+KGjrPA5vNdwA=" }, "parse-glob": { "version": "3.0.4", - "from": "parse-glob@>=3.0.4 <4.0.0", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true }, "parseurl": { "version": "1.3.1", - "from": "parseurl@>=1.3.1 <1.4.0", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz" + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", - "from": "path-is-absolute@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", - "from": "path-is-inside@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "path-parse": { "version": "1.0.5", - "from": "path-parse@>=1.0.5 <2.0.0", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" }, "path-to-regexp": { "version": "0.1.7", - "from": "path-to-regexp@0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true }, "pause-stream": { "version": "0.0.11", - "from": "pause-stream@0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true }, "performance-now": { "version": "0.2.0", - "from": "performance-now@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" }, "pg": { - "version": "5.1.0", - "from": "pg@>=5.1.0 <6.0.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-5.1.0.tgz", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-5.2.1.tgz", + "integrity": "sha1-1D0LLlOQjtYapgkoo49teRoqZrM=", "dependencies": { "semver": { "version": "4.3.2", - "from": "semver@4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz" + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" } } }, "pg-connection-string": { "version": "0.1.3", - "from": "pg-connection-string@0.1.3", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz" + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" }, "pg-minify": { - "version": "0.4.2", - "from": "pg-minify@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-0.4.2.tgz" + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-0.4.5.tgz", + "integrity": "sha512-ev7PZ4ySzTnNPaeIJQx4f94ubqbv2C48lpXcYLPzPD4dbnKxzvC+3vNlZZ8HYx9JV37AxaLlY/LzrpFBgBslYQ==" + }, + "pg-pool": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-1.8.0.tgz", + "integrity": "sha1-9+xzgkw3oD8Hb1G/33DjQBR8Tzc=", + "dependencies": { + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + } + } }, "pg-promise": { "version": "5.9.7", - "from": "pg-promise@>=5.6.8 <6.0.0", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-5.9.7.tgz" + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-5.9.7.tgz", + "integrity": "sha512-Hp53E6qdjxyuNepIpr7ONbsKZ2GYfi+HbuW4VNMfWcCSZPlE/A9DieYc82AJaz2f9eHcmByeU7TiQTmsBu3hGA==" }, "pg-types": { - "version": "1.12.0", - "from": "pg-types@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.0.tgz" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz", + "integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=" }, "pgpass": { "version": "0.0.6", - "from": "pgpass@0.0.6", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-0.0.6.tgz" + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-0.0.6.tgz", + "integrity": "sha1-9idiANAXOdoe6mMTi9yjX/S9coA=" }, "pify": { "version": "2.3.0", - "from": "pify@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { "version": "2.0.4", - "from": "pinkie@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "dev": true }, "pinkie-promise": { "version": "2.0.1", - "from": "pinkie-promise@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true }, "pluralize": { "version": "1.2.1", - "from": "pluralize@>=1.2.1 <2.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", "dev": true }, "postgres-array": { "version": "1.0.2", - "from": "postgres-array@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz", + "integrity": "sha1-jgsy6wO/d6XAp4UeBEHBaaJWojg=" }, "postgres-bytea": { "version": "1.0.0", - "from": "postgres-bytea@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" }, "postgres-date": { "version": "1.0.3", - "from": "postgres-date@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", + "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" }, "postgres-interval": { - "version": "1.1.0", - "from": "postgres-interval@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.0.tgz" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", + "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==" }, "prelude-ls": { "version": "1.1.2", - "from": "prelude-ls@>=1.1.2 <1.2.0", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, "prepend-http": { "version": "1.0.4", - "from": "prepend-http@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, "preserve": { "version": "0.2.0", - "from": "preserve@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, "private": { "version": "0.1.7", - "from": "private@>=0.1.6 <0.2.0", "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", + "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", "dev": true }, "process-nextick-args": { "version": "1.0.7", - "from": "process-nextick-args@>=1.0.6 <1.1.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "progress": { "version": "1.1.8", - "from": "progress@>=1.1.8 <2.0.0", "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, "proxy-addr": { - "version": "1.1.4", - "from": "proxy-addr@>=1.1.4 <1.2.0", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=" }, "ps-tree": { "version": "1.1.0", - "from": "ps-tree@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", "dev": true }, "pseudomap": { "version": "1.0.2", - "from": "pseudomap@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "punycode": { "version": "1.3.2", - "from": "punycode@1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, "qs": { "version": "6.4.0", - "from": "qs@6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz" + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" }, "querystring": { "version": "0.2.0", - "from": "querystring@0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "quote-stream": { "version": "1.0.2", - "from": "quote-stream@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=" }, "randomatic": { "version": "1.1.7", - "from": "randomatic@>=1.1.3 <2.0.0", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "dependencies": { "is-number": { "version": "3.0.0", - "from": "is-number@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "dependencies": { "kind-of": { "version": "3.2.2", - "from": "kind-of@^3.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true } } }, "kind-of": { "version": "4.0.0", - "from": "kind-of@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true } } }, "range-parser": { "version": "1.2.0", - "from": "range-parser@>=1.2.0 <1.3.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { "version": "2.2.0", - "from": "raw-body@>=2.2.0 <2.3.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz" + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=" }, "rc": { "version": "1.2.1", - "from": "rc@>=1.1.7 <2.0.0", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz" + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=" }, "read-all-stream": { "version": "3.1.0", - "from": "read-all-stream@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", "dev": true }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.3", - "from": "readable-stream@>=2.1.5 <3.0.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==" }, "readdirp": { "version": "2.1.0", - "from": "readdirp@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true }, "readline2": { "version": "1.0.1", - "from": "readline2@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true }, "rechoir": { "version": "0.6.2", - "from": "rechoir@>=0.6.2 <0.7.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true }, "reduce-component": { "version": "1.0.1", - "from": "reduce-component@1.0.1", "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", + "integrity": "sha1-4Mk1QsV0UhvqE98PlIjtgqt3xdo=", "dev": true }, "regenerate": { "version": "1.3.2", - "from": "regenerate@>=1.2.1 <2.0.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", "dev": true }, "regenerator-runtime": { - "version": "0.10.5", - "from": "regenerator-runtime@>=0.10.0 <0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", "dev": true }, "regenerator-transform": { - "version": "0.9.11", - "from": "regenerator-transform@0.9.11", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true }, "regex-cache": { "version": "0.4.3", - "from": "regex-cache@>=0.4.2 <0.5.0", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", "dev": true }, "regexpu-core": { "version": "2.0.0", - "from": "regexpu-core@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true }, "registry-url": { "version": "3.1.0", - "from": "registry-url@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true }, "regjsgen": { "version": "0.2.0", - "from": "regjsgen@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", - "from": "regjsparser@>=0.1.4 <0.2.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "dependencies": { "jsesc": { "version": "0.5.0", - "from": "jsesc@>=0.5.0 <0.6.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, "remove-trailing-separator": { - "version": "1.0.2", - "from": "remove-trailing-separator@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, "repeat-element": { "version": "1.1.2", - "from": "repeat-element@>=1.1.2 <2.0.0", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { "version": "1.6.1", - "from": "repeat-string@>=1.5.2 <2.0.0", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "repeating": { "version": "2.0.1", - "from": "repeating@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true }, "request": { "version": "2.81.0", - "from": "request@>=2.73.0 <3.0.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz" + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "require-uncached": { "version": "1.0.3", - "from": "require-uncached@>=1.0.2 <2.0.0", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true }, "requizzle": { "version": "0.2.1", - "from": "requizzle@>=0.2.1 <0.3.0", "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", "dev": true, "dependencies": { "underscore": { "version": "1.6.0", - "from": "underscore@>=1.6.0 <1.7.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", "dev": true } } }, "resolve": { - "version": "1.3.3", - "from": "resolve@>=1.1.5 <2.0.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==" }, "resolve-from": { "version": "1.0.1", - "from": "resolve-from@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", "dev": true }, "response-time": { "version": "2.3.2", - "from": "response-time@>=2.3.2 <3.0.0", - "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz" + "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", + "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=" }, "restore-cursor": { "version": "1.0.1", - "from": "restore-cursor@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true }, "reusify": { - "version": "1.0.1", - "from": "reusify@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.1.tgz" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.2.tgz", + "integrity": "sha512-uvHpBEwqP0XOAlNski7iUcFn0xB75j3FupCnAHVMf1Bosyeo0Jwb/i0QB6PLkMU98NVus1q8NUhpJU1wgWdJCw==" }, "rimraf": { "version": "2.6.1", - "from": "rimraf@>=2.6.1 <3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz" + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=" }, "run-async": { "version": "0.1.0", - "from": "run-async@>=0.1.0 <0.2.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true }, "rw": { "version": "1.3.3", - "from": "rw@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" }, "rx-lite": { "version": "3.1.2", - "from": "rx-lite@>=3.1.2 <4.0.0", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", "dev": true }, "safe-buffer": { "version": "5.1.1", - "from": "safe-buffer@>=5.1.1 <5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "samsam": { "version": "1.1.2", - "from": "samsam@1.1.2", "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", + "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", "dev": true }, "sax": { "version": "1.2.1", - "from": "sax@1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "semver": { - "version": "5.3.0", - "from": "semver@>=5.3.0 <6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz" + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" }, "semver-diff": { "version": "2.1.0", - "from": "semver-diff@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true }, "send": { - "version": "0.15.3", - "from": "send@0.15.3", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz" + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.4.tgz", + "integrity": "sha1-mF+qPihLAnPHkzZKNcZze9k5Bbk=", + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" + } + } }, "serve-static": { - "version": "1.12.3", - "from": "serve-static@1.12.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz" + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.4.tgz", + "integrity": "sha1-m2qpjutyU8Tu3Ewfb9vKYJkBqWE=" }, "set-blocking": { "version": "2.0.0", - "from": "set-blocking@>=2.0.0 <2.1.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-immediate-shim": { "version": "1.0.1", - "from": "set-immediate-shim@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", "dev": true }, "setprototypeof": { "version": "1.0.3", - "from": "setprototypeof@1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" }, "shallow-copy": { "version": "0.0.1", - "from": "shallow-copy@>=0.0.1 <0.1.0", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=" }, "shapefile": { "version": "0.3.1", - "from": "shapefile@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/shapefile/-/shapefile-0.3.1.tgz", + "integrity": "sha1-m7mkKb1ghqDPsDli0Uz99CD/uhI=", "dependencies": { "d3-queue": { "version": "1.2.3", - "from": "d3-queue@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-1.2.3.tgz" + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-1.2.3.tgz", + "integrity": "sha1-FDpwHPpl/gISkvMhwQ0U6Yq9SRs=" }, "iconv-lite": { "version": "0.2.11", - "from": "iconv-lite@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz" + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=" } } }, "shelljs": { "version": "0.7.8", - "from": "shelljs@>=0.7.5 <0.8.0", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "dev": true }, "shortid": { "version": "2.2.8", - "from": "shortid@>=2.2.8 <3.0.0", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.8.tgz" + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.8.tgz", + "integrity": "sha1-AzsRfWoul1gE9vCWnb59PQs1UTE=" }, "should": { "version": "6.0.3", - "from": "should@>=6.0.1 <7.0.0", "resolved": "https://registry.npmjs.org/should/-/should-6.0.3.tgz", + "integrity": "sha1-2u4weGpVdmL7x3TACNfFh5Htsdk=", "dev": true }, "should-equal": { "version": "0.3.1", - "from": "should-equal@0.3.1", "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-0.3.1.tgz", + "integrity": "sha1-vY6pemdI45+tR2o75v1y68LnK/A=", "dev": true }, "should-format": { "version": "0.0.7", - "from": "should-format@0.0.7", "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.0.7.tgz", + "integrity": "sha1-Hi74a9kdqcLgQSM1tWq6vZov3hI=", "dev": true }, "should-type": { "version": "0.0.4", - "from": "should-type@0.0.4", "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.0.4.tgz", + "integrity": "sha1-ATKgVBemEmhmQmrPEW8e1WI6XNA=", "dev": true }, "signal-exit": { "version": "3.0.2", - "from": "signal-exit@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { "version": "1.17.7", - "from": "sinon@>=1.14.1 <2.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", + "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", "dev": true }, "slash": { "version": "1.0.0", - "from": "slash@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, "slice-ansi": { "version": "0.0.4", - "from": "slice-ansi@0.0.4", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, "slide": { "version": "1.1.6", - "from": "slide@>=1.1.5 <2.0.0", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, "sntp": { "version": "1.0.9", - "from": "sntp@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=" }, "source-map": { "version": "0.1.43", - "from": "source-map@>=0.1.33 <0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "optional": true }, "source-map-support": { - "version": "0.4.15", - "from": "source-map-support@>=0.4.2 <0.5.0", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz", + "integrity": "sha512-A6vlydY7H/ljr4L2UOhDSajQdZQ6dMD7cLH0pzwcmwLyc9u8PNI4WGtnfDDzX7uzGL6c/T+ORL97Zlh+S4iOrg==", "dev": true, "dependencies": { "source-map": { - "version": "0.5.6", - "from": "source-map@>=0.5.6 <0.6.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, "spex": { "version": "1.2.0", - "from": "spex@>=1.2.0 <1.3.0", - "resolved": "https://registry.npmjs.org/spex/-/spex-1.2.0.tgz" + "resolved": "https://registry.npmjs.org/spex/-/spex-1.2.0.tgz", + "integrity": "sha1-YmSzuKy8RER38G27ZtQlwO4QdMA=" }, "split": { - "version": "1.0.0", - "from": "split@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==" }, "sprintf-js": { "version": "1.0.3", - "from": "sprintf-js@>=1.0.2 <1.1.0", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { "version": "1.13.1", - "from": "sshpk@>=1.7.0 <2.0.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dependencies": { "assert-plus": { "version": "1.0.0", - "from": "assert-plus@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, "stack-trace": { "version": "0.0.10", - "from": "stack-trace@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "static-eval": { "version": "0.2.4", - "from": "static-eval@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-0.2.4.tgz", + "integrity": "sha1-t9NNg4k3uWn5ZBygfUj47eJj6ns=", "dependencies": { "escodegen": { "version": "0.0.28", - "from": "escodegen@>=0.0.24 <0.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz" + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz", + "integrity": "sha1-Dk/xcV8yh3XWyrUaxEpAbNer/9M=" }, "esprima": { "version": "1.0.4", - "from": "esprima@>=1.0.2 <1.1.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" }, "estraverse": { "version": "1.3.2", - "from": "estraverse@>=1.3.0 <1.4.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz" + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz", + "integrity": "sha1-N8K4k+8T1yPydth41g2FNRUqbEI=" } } }, "static-module": { - "version": "1.3.2", - "from": "static-module@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-1.3.2.tgz", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-1.5.0.tgz", + "integrity": "sha1-J9qYg8QajNCSNvhC8MHrxu32PYY=", "dependencies": { "isarray": { "version": "0.0.1", - "from": "isarray@0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "minimist": { "version": "0.0.8", - "from": "minimist@0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "object-keys": { "version": "0.4.0", - "from": "object-keys@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" }, "quote-stream": { "version": "0.0.0", - "from": "quote-stream@>=0.0.0 <0.1.0", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-0.0.0.tgz" + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-0.0.0.tgz", + "integrity": "sha1-zeKelMQJsW4Z3HCYuJtmWPlyHTs=" }, "readable-stream": { "version": "1.0.34", - "from": "readable-stream@>=1.0.27-1 <1.1.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=" }, "string_decoder": { "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "through2": { "version": "0.4.2", - "from": "through2@>=0.4.1 <0.5.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz" + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=" }, "xtend": { "version": "2.1.2", - "from": "xtend@>=2.1.1 <2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=" } } }, "statuses": { "version": "1.3.1", - "from": "statuses@>=1.2.0 <2.0.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" }, "stream-combiner": { "version": "0.0.4", - "from": "stream-combiner@>=0.0.4 <0.1.0", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true }, "stream-shift": { "version": "1.0.0", - "from": "stream-shift@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, "string_decoder": { "version": "1.0.3", - "from": "string_decoder@>=1.0.3 <1.1.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==" }, "string-length": { "version": "1.0.1", - "from": "string-length@>=1.0.0 <2.0.0", "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", + "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", "dev": true }, "string-width": { "version": "1.0.2", - "from": "string-width@>=1.0.1 <2.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" }, "stringstream": { "version": "0.0.5", - "from": "stringstream@>=0.0.4 <0.1.0", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz" + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "strip-ansi": { "version": "3.0.1", - "from": "strip-ansi@>=3.0.1 <4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" }, "strip-bom": { "version": "3.0.0", - "from": "strip-bom@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "strip-json-comments": { "version": "2.0.1", - "from": "strip-json-comments@>=2.0.1 <2.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "superagent": { - "version": "3.5.2", - "from": "superagent@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz", - "dev": true + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.6.0.tgz", + "integrity": "sha512-oWsu4mboo8sVxagp4bNwZIR1rUmypeAJDmNIwT9mF4k06hSu6P92aOjEWLaIj7vsX3fOUp+cRH/04tao+q5Q7A==", + "dev": true, + "dependencies": { + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + } + } }, "supertest": { "version": "3.0.0", - "from": "supertest@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.0.0.tgz", + "integrity": "sha1-jUu2j9GDDuBwM7HFpamkAhyWUpY=", "dev": true }, "supports-color": { "version": "2.0.0", - "from": "supports-color@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, "table": { "version": "3.8.3", - "from": "table@>=3.7.8 <4.0.0", "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "dependencies": { "ansi-regex": { "version": "3.0.0", - "from": "ansi-regex@>=3.0.0 <4.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "from": "is-fullwidth-code-point@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { - "version": "2.1.0", - "from": "string-width@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.0.tgz", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true }, "strip-ansi": { "version": "4.0.0", - "from": "strip-ansi@>=4.0.0 <5.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true } } }, "taffydb": { "version": "2.6.2", - "from": "taffydb@2.6.2", "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true }, "tar": { "version": "2.2.1", - "from": "tar@>=2.2.1 <3.0.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz" + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=" }, "tar-pack": { "version": "3.4.0", - "from": "tar-pack@>=3.4.0 <4.0.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz" + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=" + }, + "test-exclude": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.1.1.tgz", + "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==", + "dev": true }, "text-table": { "version": "0.2.0", - "from": "text-table@>=0.2.0 <0.3.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", - "from": "through@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.3", - "from": "through2@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=" }, "timed-out": { "version": "2.0.0", - "from": "timed-out@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", + "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", "dev": true }, "to-fast-properties": { "version": "1.0.3", - "from": "to-fast-properties@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, "topo": { "version": "1.1.0", - "from": "topo@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=" }, "topojson": { "version": "1.6.27", - "from": "topojson@>=1.6.26 <1.7.0", - "resolved": "https://registry.npmjs.org/topojson/-/topojson-1.6.27.tgz" + "resolved": "https://registry.npmjs.org/topojson/-/topojson-1.6.27.tgz", + "integrity": "sha1-rb4zpn4vFnPTON8SZErSD8ILQu0=" }, "touch": { "version": "1.0.0", - "from": "touch@1.0.0", "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", + "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", "dev": true, "dependencies": { "nopt": { "version": "1.0.10", - "from": "nopt@>=1.0.10 <1.1.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", "dev": true } } }, "tough-cookie": { "version": "2.3.2", - "from": "tough-cookie@>=2.3.0 <2.4.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", "dependencies": { "punycode": { "version": "1.4.1", - "from": "punycode@>=1.4.1 <2.0.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" } } }, "trim-right": { "version": "1.0.1", - "from": "trim-right@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, "tryit": { "version": "1.0.3", - "from": "tryit@>=1.0.1 <2.0.0", "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", + "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", "dev": true }, "tunnel-agent": { "version": "0.6.0", - "from": "tunnel-agent@>=0.6.0 <0.7.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" }, "tweetnacl": { "version": "0.14.5", - "from": "tweetnacl@>=0.14.0 <0.15.0", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true }, "type-check": { "version": "0.3.2", - "from": "type-check@>=0.3.2 <0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true }, "type-is": { "version": "1.6.15", - "from": "type-is@>=1.6.15 <1.7.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz" + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=" }, "typedarray": { "version": "0.0.6", - "from": "typedarray@>=0.0.6 <0.0.7", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uid-number": { "version": "0.0.6", - "from": "uid-number@>=0.0.6 <0.0.7", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz" + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=" }, "undefsafe": { "version": "0.0.3", - "from": "undefsafe@0.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", + "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", "dev": true }, "underscore": { "version": "1.8.3", - "from": "underscore@>=1.8.3 <1.9.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", "dev": true }, "underscore-contrib": { "version": "0.3.0", - "from": "underscore-contrib@>=0.3.0 <0.4.0", "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", "dev": true, "dependencies": { "underscore": { "version": "1.6.0", - "from": "underscore@1.6.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", "dev": true } } }, "unit.js": { "version": "2.0.0", - "from": "unit.js@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/unit.js/-/unit.js-2.0.0.tgz", + "integrity": "sha1-6RtWq8UMUw26A82/4OHfKj7jqjI=", "dev": true, "dependencies": { "async": { "version": "0.9.2", - "from": "async@>=0.9.0 <0.10.0", "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true }, "bluebird": { "version": "2.11.0", - "from": "bluebird@>=2.9.9 <3.0.0", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", "dev": true }, "combined-stream": { "version": "0.0.7", - "from": "combined-stream@>=0.0.4 <0.1.0", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", "dev": true }, "component-emitter": { "version": "1.1.2", - "from": "component-emitter@1.1.2", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", "dev": true }, "cookiejar": { "version": "2.0.1", - "from": "cookiejar@2.0.1", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.1.tgz", + "integrity": "sha1-PRJ1L2rfaKiS8zJDNJK9WBK7Zo8=", "dev": true }, "delayed-stream": { "version": "0.0.5", - "from": "delayed-stream@0.0.5", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", "dev": true }, "extend": { "version": "1.2.1", - "from": "extend@>=1.2.1 <1.3.0", "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", + "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w=", "dev": true }, "form-data": { "version": "0.1.3", - "from": "form-data@0.1.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.3.tgz", + "integrity": "sha1-TuQ0bm61Ni6DRKAgdb2NvYxzc+o=", "dev": true }, "formidable": { "version": "1.0.14", - "from": "formidable@1.0.14", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz", + "integrity": "sha1-Kz9MQRy7X91pXESEPiojUUpDIxo=", "dev": true }, "isarray": { "version": "0.0.1", - "from": "isarray@0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "lodash": { "version": "3.10.1", - "from": "lodash@>=3.7.0 <4.0.0", "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true }, "mime": { "version": "1.2.11", - "from": "mime@1.2.11", "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", "dev": true }, "qs": { "version": "1.2.0", - "from": "qs@1.2.0", "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.0.tgz", + "integrity": "sha1-7Qeb4oaCFH5v2aNMwrDB4OxkU+4=", "dev": true }, "readable-stream": { "version": "1.0.27-1", - "from": "readable-stream@1.0.27-1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", + "integrity": "sha1-a2eYPCA1fO/QfwFlABoW1xDZEHg=", "dev": true }, "string_decoder": { "version": "0.10.31", - "from": "string_decoder@>=0.10.0 <0.11.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, "superagent": { "version": "0.21.0", - "from": "superagent@>=0.21.0 <0.22.0", "resolved": "https://registry.npmjs.org/superagent/-/superagent-0.21.0.tgz", + "integrity": "sha1-+xUCeYR1HucVIgDmzSHNbhml3oc=", "dev": true, "dependencies": { "methods": { "version": "1.0.1", - "from": "methods@1.0.1", "resolved": "https://registry.npmjs.org/methods/-/methods-1.0.1.tgz", + "integrity": "sha1-dbyRlD3/19oDfPPusO1zoAN80Us=", "dev": true } } }, "supertest": { "version": "0.15.0", - "from": "supertest@>=0.15.0 <1.0.0", "resolved": "https://registry.npmjs.org/supertest/-/supertest-0.15.0.tgz", + "integrity": "sha1-hhGGld5L5Yhps+6UxF4dCEyn+sU=", "dev": true } } }, "unpipe": { "version": "1.0.0", - "from": "unpipe@1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { "version": "0.5.0", - "from": "update-notifier@0.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", + "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", "dev": true, "dependencies": { "repeating": { "version": "1.1.3", - "from": "repeating@>=1.1.2 <2.0.0", "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", "dev": true } } }, "url": { "version": "0.10.3", - "from": "url@0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz" + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=" }, "user-home": { "version": "1.1.1", - "from": "user-home@>=1.1.1 <2.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", "dev": true }, "util": { "version": "0.10.3", - "from": "util@>=0.10.3 <1.0.0", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "dependencies": { "inherits": { "version": "2.0.1", - "from": "inherits@2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true } } }, "util-deprecate": { "version": "1.0.2", - "from": "util-deprecate@>=1.0.1 <1.1.0", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.0", - "from": "utils-merge@1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" }, "uuid": { "version": "3.0.1", - "from": "uuid@3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz" + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=" }, "v8flags": { "version": "2.1.1", - "from": "v8flags@>=2.0.10 <3.0.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true }, "vary": { "version": "1.1.1", - "from": "vary@>=1.1.0 <1.2.0", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz" + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", + "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" }, "verror": { - "version": "1.3.6", - "from": "verror@1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } }, "very-fast-args": { "version": "1.1.0", - "from": "very-fast-args@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/very-fast-args/-/very-fast-args-1.1.0.tgz" + "resolved": "https://registry.npmjs.org/very-fast-args/-/very-fast-args-1.1.0.tgz", + "integrity": "sha1-4W0dH6+KbllqJGQh/ZCneWPQs5Y=" }, "wide-align": { "version": "1.1.2", - "from": "wide-align@>=1.1.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz" + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==" }, "winston": { "version": "2.3.1", - "from": "winston@>=2.3.1 <3.0.0", "resolved": "https://registry.npmjs.org/winston/-/winston-2.3.1.tgz", + "integrity": "sha1-C0hCDZeMAYBM8CMLZIhhWYIloRk=", "dependencies": { "async": { "version": "1.0.0", - "from": "async@>=1.0.0 <1.1.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz" + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" } } }, "wkx": { "version": "0.2.0", - "from": "wkx@>=0.2.0 <0.3.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz" + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz", + "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=" }, "wordwrap": { "version": "0.0.3", - "from": "wordwrap@>=0.0.2 <0.1.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" }, "wrappy": { "version": "1.0.2", - "from": "wrappy@>=1.0.0 <2.0.0", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "0.2.1", - "from": "write@>=0.2.1 <0.3.0", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true }, "write-file-atomic": { "version": "1.3.4", - "from": "write-file-atomic@>=1.1.2 <2.0.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true }, "xdg-basedir": { "version": "2.0.0", - "from": "xdg-basedir@>=2.0.0 <3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", "dev": true }, "xml2js": { "version": "0.4.17", - "from": "xml2js@0.4.17", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", "dependencies": { "xmlbuilder": { "version": "4.2.1", - "from": "xmlbuilder@>=4.1.0 <5.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz" + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=" } } }, "xmlbuilder": { - "version": "9.0.1", - "from": "xmlbuilder@>=9.0.0 <10.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.1.tgz" + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", + "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=" + }, + "xmlcreate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "dev": true }, "xtend": { "version": "4.0.1", - "from": "xtend@>=4.0.0 <5.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "yallist": { "version": "2.1.2", - "from": "yallist@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } } diff --git a/package.json b/package.json index 71081f2..5c39c0c 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,7 @@ "description": "Data Server for CogniCity", "main": "dist", "engines": { - "node": "6.10.0", - "npm": "3.10.10" + "node": ">=8.1.4" }, "scripts": { "dev": "nodemon -w src --exec \"babel-node src --presets es2015,stage-0\"", @@ -19,9 +18,12 @@ "jsdoc": "./node_modules/jsdoc/jsdoc.js -r -R README.md -d ./jsdoc/ src/" }, "nyc": { + "sourceMap": false, + "instrument": false, "exclude": [ "**/test/**", - "build" + "build", + "node_modules" ] }, "eslintConfig": { @@ -72,6 +74,7 @@ "devDependencies": { "babel-cli": "^6.24.1", "babel-core": "^6.24.1", + "babel-plugin-istanbul": "^4.1.4", "babel-preset-es2015": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "babel-register": "^6.24.1", @@ -82,13 +85,10 @@ "esutils": "^2.0.2", "jsdoc": "^3.4.3", "jsonwebtoken": "^7.4.1", - "mocha": "^3.3.0", + "mocha": "^3.5.0", "nodemon": "^1.11.0", - "nyc": "^11.0.2", + "nyc": "^11.1.0", "supertest": "^3.0.0", "unit.js": "^2.0.0" - }, - "engines": { - "node": ">=6.9.1" } } diff --git a/src/api/index.js b/src/api/index.js index 78a8575..31921ad 100755 --- a/src/api/index.js +++ b/src/api/index.js @@ -31,33 +31,40 @@ import reports from './routes/reports'; * @return {Object} api Express router object for API routes **/ export default ({config, db, logger}) => { - let api = Router(); // eslint-disable-line new-cap - - // Return the API version - api.get('/', (req, res) => { - res.status(200).json({version}); - }); - - // Mount the various endpoints - // api.use('/areas', cards({ config, db, logger }));// TODO: local_areas - api.use('/cards', cards({config, db, logger})); - api.use('/cities', cities({config, db, logger})); - api.use('/feeds', feeds({config, db, logger})); - api.use('/floodgauges', floodgauges({config, db, logger})); - api.use('/floods', floods({config, db, logger})); - api.use('/infrastructure', infrastructure({config, db, logger})); - api.use('/reports', reports({config, db, logger})); - - // Handle validation errors (wording can be overridden using err.isJoi) - api.use(validate.errors()); - - // Handle not found errors - api.use((req, res) => { - res.status(404).json({message: 'URL not found', url: req.url}); - }); - - // Handle errors gracefully returning nicely formatted json - api.use(errorHandler()); - - return api; + let api = Router(); // eslint-disable-line new-cap + + // Return the API version + api.get('/', (req, res) => { + let query = `SELECT * FROM cognicity.version()`; + db.oneOrNone(query) + .then((data) => { + res.status(200).json({version, schema: data.version}); + }) + .catch((err) => { + res.status(500).json(err); + }); + }); + + // Mount the various endpoints + // api.use('/areas', cards({ config, db, logger }));// TODO: local_areas + api.use('/cards', cards({config, db, logger})); + api.use('/cities', cities({config, db, logger})); + api.use('/feeds', feeds({config, db, logger})); + api.use('/floodgauges', floodgauges({config, db, logger})); + api.use('/floods', floods({config, db, logger})); + api.use('/infrastructure', infrastructure({config, db, logger})); + api.use('/reports', reports({config, db, logger})); + + // Handle validation errors (wording can be overridden using err.isJoi) + api.use(validate.errors()); + + // Handle not found errors + api.use((req, res) => { + res.status(404).json({message: 'URL not found', url: req.url}); + }); + + // Handle errors gracefully returning nicely formatted json + api.use(errorHandler()); + + return api; }; diff --git a/src/api/routes/cards/index.js b/src/api/routes/cards/index.js index e6ee9cf..07b0478 100644 --- a/src/api/routes/cards/index.js +++ b/src/api/routes/cards/index.js @@ -14,9 +14,6 @@ import {cacheResponse, handleResponse} from '../../../lib/util'; import Joi from 'joi'; import validate from 'celebrate'; -// Import ID generator -import shortid from 'shortid'; - // Import image upload capabilities import AWS from 'aws-sdk'; @@ -60,10 +57,9 @@ export default ({config, db, logger}) => { }), }), (req, res, next) => { - let cardId = shortid.generate(); - cards(config, db, logger).create(cardId, req.body) + cards(config, db, logger).create(req.body) .then((data) => data ? res.status(200) - .json({cardId: cardId, created: true}) : + .json({cardId: data.card_id, created: true}) : next(new Error('Failed to create card'))) .catch((err) => { /* istanbul ignore next */ @@ -95,7 +91,7 @@ export default ({config, db, logger}) => { // Return a card api.get('/:cardId', cacheResponse(config.CACHE_DURATION_CARDS), validate({ - params: {cardId: Joi.string().min(7).max(14).required()}, + params: {cardId: Joi.string().min(36).max(36).required()}, }), (req, res, next) => { req.apicacheGroup = CACHE_GROUP_CARDS; @@ -112,7 +108,7 @@ export default ({config, db, logger}) => { // Update a card record with a report api.put('/:cardId', validate({ - params: {cardId: Joi.string().min(7).max(14).required()}, + params: {cardId: Joi.string().min(36).max(36).required()}, body: Joi.object().keys({ disaster_type: Joi.string().valid(config.DISASTER_TYPES).required(), card_data: Joi.object() @@ -177,58 +173,56 @@ export default ({config, db, logger}) => { // Gives an s3 signed url for the frontend to upload an image to api.get('/:cardId/images', validate({ - params: {cardId: Joi.string().min(7).max(14).required()}, + headers: Joi.object({ + 'content-type': Joi.string().valid(config.IMAGE_MIME_TYPES).required(), + }).options({allowUnknown: true}), + params: {cardId: Joi.string().min(36).max(36).required()}, }), (req, res, next) => { - let s3params = { - Bucket: config.IMAGES_BUCKET, - Key: 'originals/' + req.params.cardId + '.jpg', - ContentType: req.query.file_type, - }; - s3.getSignedUrl('putObject', s3params, (err, data) => { - if (err) { - /* istanbul ignore next */ - logger.error('could not get signed url from S3'); - /* istanbul ignore next */ - logger.error(err); - } else { - let returnData = { - signedRequest: data, - url: 'https://s3.'+config.AWS_REGION+'.amazonaws.com/' - + config.IMAGES_BUCKET+'/'+ s3params.Key, - }; - // write the url into the db under image_url for this card - - cards(config, db, logger).byCardId(req.params.cardId) - .then((card) => { - if (!card) { -res.status(404).json({statusCode: 404, cardId: req.params.cardId, - message: `No card exists with id '${req.params.cardId}'`}); -} else { - // Try and submit the report and update the card - cards(config, db, logger).updateReport(card, - {image_url: req.params.cardId + '.jpg'}) - .then((data) => { - clearCache(); - logger.debug( 's3 signed request: ' + returnData.signedRequest); - res.write(JSON.stringify(returnData)); - res.end(); - }) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }); + // first, check card exists + cards(config, db, logger).byCardId(req.params.cardId) + .then((card) => { + if (!card) { + // Card was not found, return error + res.status(404).json({statusCode: 404, cardId: req.params.cardId, + message: `No card exists with id '${req.params.cardId}'`}); + } else { + // Provide client with signed url for this card + let s3params = { + Bucket: config.IMAGES_BUCKET, + Key: 'originals/' + req.params.cardId + '.' + + req.headers['content-type'].split('/')[1], + ContentType: req.query.file_type, + }; + // Call AWS S3 library + s3.getSignedUrl('putObject', s3params, (err, data) => { + let returnData; + if (err) { + /* istanbul ignore next */ + logger.error('could not get signed url from S3'); + /* istanbul ignore next */ + logger.error(err); + returnData = {statusCode: 500, error: err}; + } else { + returnData = { + signedRequest: data, + url: 'https://s3.'+config.AWS_REGION+'.amazonaws.com/' + + config.IMAGES_BUCKET+'/'+ s3params.Key, + }; + // Return signed URL + clearCache(); + logger.debug( 's3 signed request: ' + returnData.signedRequest); + res.write(JSON.stringify(returnData)); + res.end(); } }); - } - }); + } + }); }); // Update a card report with new details including the image URL api.patch('/:cardId', validate({ - params: {cardId: Joi.string().min(7).max(14).required()}, + params: {cardId: Joi.string().min(36).max(36).required()}, body: Joi.object().keys({ image_url: Joi.string().required(), }), @@ -240,22 +234,29 @@ res.status(404).json({statusCode: 404, cardId: req.params.cardId, .then((card) => { // If the card does not exist then return an error message if (!card) { -res.status(404).json({statusCode: 404, cardId: req.params.cardId, + res.status(404).json({statusCode: 404, cardId: req.params.cardId, message: `No card exists with id '${req.params.cardId}'`}); } else { // We have a card - // Try and submit the report and update the card - cards(config, db, logger).updateReport(card, req.body) - .then((data) => { - clearCache(); - res.status(200).json({statusCode: 200, - cardId: req.params.cardId, updated: true}); - }) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }); + // Verify that we can add an image to card report + if ( card.received === false || card.report.image_url !== null ) { + res.status(403).json({statusCode: 403, + error: 'Card report not received or image exists already'}); + } else { + // Try and submit the report and update the card + req.body.image_url = 'https://' + config.IMAGES_HOST + '/' + req.body.image_url + '.jpg'; + cards(config, db, logger).updateReport(card, req.body) + .then((data) => { + clearCache(); + res.status(200).json({statusCode: 200, + cardId: req.params.cardId, updated: true}); + }) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }); + } } }); } catch (err) { @@ -266,6 +267,5 @@ res.status(404).json({statusCode: 404, cardId: req.params.cardId, } } ); - return api; }; diff --git a/src/api/routes/cards/model.js b/src/api/routes/cards/model.js index f901781..a8a1ff3 100644 --- a/src/api/routes/cards/model.js +++ b/src/api/routes/cards/model.js @@ -14,14 +14,14 @@ import Promise from 'bluebird'; **/ export default (config, db, logger) => ({ // Create a new card entry with the given cardId - create: (cardId, body) => new Promise((resolve, reject) => { + create: (body) => new Promise((resolve, reject) => { // Setup query let query = `INSERT INTO ${config.TABLE_GRASP_CARDS} - (card_id, username, network, language, received) - VALUES ($1, $2, $3, $4, $5) RETURNING pkey`; + (username, network, language, received) + VALUES ($1, $2, $3, $4) RETURNING card_id`; // Setup values - let values = [cardId, body.username, body.network, body.language, false]; + let values = [body.username, body.network, body.language, false]; // Execute logger.debug(query, values); @@ -119,7 +119,7 @@ export default (config, db, logger) => ({ query: `INSERT INTO ${config.TABLE_GRASP_LOG} (card_id, event_type) VALUES ($1, $2)`, - values: [card.card_id, 'REPORT UPDATES'], + values: [card.card_id, 'REPORT UPDATE (PATCH)'], }, ]; diff --git a/src/api/routes/cities/index.js b/src/api/routes/cities/index.js index 7b4ceb5..52a3bd2 100644 --- a/src/api/routes/cities/index.js +++ b/src/api/routes/cities/index.js @@ -23,27 +23,27 @@ import validate from 'celebrate'; * @return {Object} api Express router object for reports route */ export default ({config, db, logger}) => { - let api = Router(); // eslint-disable-line new-cap + let api = Router(); // eslint-disable-line new-cap - // Get a list of infrastructure by type for a given city - api.get('/', cacheResponse('1 day'), - validate({ - query: { - format: Joi.any().valid(config.FORMATS) - .default(config.FORMAT_DEFAULT), - geoformat: Joi.any().valid(config.GEO_FORMATS) - .default(config.GEO_FORMAT_DEFAULT), - }, - }), - (req, res, next) => cities(config, db, logger).all() - .then((data) => handleGeoResponse(data, req, res, next)) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + // Get a list of infrastructure by type for a given city + api.get('/', cacheResponse('1 day'), + validate({ + query: { + format: Joi.any().valid(config.FORMATS) + .default(config.FORMAT_DEFAULT), + geoformat: Joi.any().valid(config.GEO_FORMATS) + .default(config.GEO_FORMAT_DEFAULT), + }, + }), + (req, res, next) => cities(config, db, logger).all() + .then((data) => handleGeoResponse(data, req, res, next)) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - return api; + return api; }; diff --git a/src/api/routes/cities/model.js b/src/api/routes/cities/model.js index 6e1857b..5120877 100644 --- a/src/api/routes/cities/model.js +++ b/src/api/routes/cities/model.js @@ -13,17 +13,17 @@ import Promise from 'bluebird'; * @return {Object} Query methods */ export default (config, db, logger) => ({ - // A list of all infrastructure matching a given type - all: () => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT code, name, the_geom - FROM cognicity.instance_regions`; + // A list of all infrastructure matching a given type + all: () => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT code, name, the_geom + FROM cognicity.instance_regions`; - // Execute - logger.debug(query); - db.any(query).timeout(config.PGTIMEOUT) - .then((data) => resolve(data)) - .catch((err) => reject(err)); - }), + // Execute + logger.debug(query); + db.any(query).timeout(config.PGTIMEOUT) + .then((data) => resolve(data)) + .catch((err) => reject(err)); + }), }); diff --git a/src/api/routes/feeds/index.js b/src/api/routes/feeds/index.js index 128c558..6c96677 100644 --- a/src/api/routes/feeds/index.js +++ b/src/api/routes/feeds/index.js @@ -20,65 +20,65 @@ import validate from 'celebrate'; * @return {Object} api Express router object for reports route */ export default ({config, db, logger}) => { - let api = Router(); // eslint-disable-line new-cap + let api = Router(); // eslint-disable-line new-cap - // Create a new qlue record in the database - // TODO: What is mandatory around title / text, any rules AND/OR? - // TODO: Bulk endpoint for multiple POSTs - api.post('/qlue', validate({ - body: Joi.object().keys({ - post_id: Joi.number().integer().required(), - created_at: Joi.date().iso().required(), - title: Joi.string().allow(''), - text: Joi.string().allow('').required(), - image_url: Joi.string(), - qlue_city: Joi.string().valid(config.API_FEEDS_QLUE_CITIES).required(), - disaster_type: Joi.string().valid(config.API_FEEDS_QLUE_DISASTER_TYPES) - .required(), - location: Joi.object().required().keys({ - lat: Joi.number().min(-90).max(90).required(), - lng: Joi.number().min(-180).max(180).required(), - }), - }), - }), - (req, res, next) => feeds(config, db, logger).addQlueReport(req.body) - .then((data) => res.json(data)) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + // Create a new qlue record in the database + // TODO: What is mandatory around title / text, any rules AND/OR? + // TODO: Bulk endpoint for multiple POSTs + api.post('/qlue', validate({ + body: Joi.object().keys({ + post_id: Joi.number().integer().required(), + created_at: Joi.date().iso().required(), + title: Joi.string().allow(''), + text: Joi.string().allow('').required(), + image_url: Joi.string(), + qlue_city: Joi.string().valid(config.API_FEEDS_QLUE_CITIES).required(), + disaster_type: Joi.string().valid(config.API_FEEDS_QLUE_DISASTER_TYPES) + .required(), + location: Joi.object().required().keys({ + lat: Joi.number().min(-90).max(90).required(), + lng: Joi.number().min(-180).max(180).required(), + }), + }), + }), + (req, res, next) => feeds(config, db, logger).addQlueReport(req.body) + .then((data) => res.json(data)) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - // Create a new detik record in the database - // TODO: What is mandatory around title / text, any rules AND/OR? - // TODO: Bulk endpoint for multiple POSTs - api.post('/detik', validate({ - body: Joi.object().keys({ - contribution_id: Joi.number().integer().required(), - created_at: Joi.date().iso().required(), - title: Joi.string().allow(''), - text: Joi.string().allow('').required(), - url: Joi.string().allow(''), - image_url: Joi.string(), - disaster_type: Joi.string().valid(config.API_FEEDS_DETIK_DISASTER_TYPES) - .required(), - location: Joi.object().required().keys({ - latitude: Joi.number().min(-90).max(90).required(), - longitude: Joi.number().min(-180).max(180).required(), - }), - }), - }), - (req, res, next) => feeds(config, db, logger).addDetikReport(req.body) - .then((data) => res.json(data)) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + // Create a new detik record in the database + // TODO: What is mandatory around title / text, any rules AND/OR? + // TODO: Bulk endpoint for multiple POSTs + api.post('/detik', validate({ + body: Joi.object().keys({ + contribution_id: Joi.number().integer().required(), + created_at: Joi.date().iso().required(), + title: Joi.string().allow(''), + text: Joi.string().allow('').required(), + url: Joi.string().allow(''), + image_url: Joi.string(), + disaster_type: Joi.string().valid(config.API_FEEDS_DETIK_DISASTER_TYPES) + .required(), + location: Joi.object().required().keys({ + latitude: Joi.number().min(-90).max(90).required(), + longitude: Joi.number().min(-180).max(180).required(), + }), + }), + }), + (req, res, next) => feeds(config, db, logger).addDetikReport(req.body) + .then((data) => res.json(data)) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - return api; + return api; }; diff --git a/src/api/routes/floodgauges/model.js b/src/api/routes/floodgauges/model.js index cde22b8..027a30c 100644 --- a/src/api/routes/floodgauges/model.js +++ b/src/api/routes/floodgauges/model.js @@ -13,53 +13,53 @@ import Promise from 'bluebird'; * @return {Object} Query methods */ export default (config, db, logger) => ({ - // Return all flood gauge reports within the defined max period - // Optional: city (Petabencana.id Instance Region 3 letter code) - all: (city) => new Promise((resolve, reject) => { - let query = `SELECT gaugeid, gaugenameid, the_geom, - array_to_json(array_agg((measuredatetime, depth, warninglevel, - warningnameid) ORDER BY measuredatetime ASC)) as observations - FROM ${config.TABLE_FLOODGAUGE_REPORTS} - WHERE measuredatetime >= to_timestamp($1) - AND ($2 IS NULL OR tags->>'instance_region_code'=$2) - GROUP BY gaugeid, the_geom, gaugenameid LIMIT $3`; + // Return all flood gauge reports within the defined max period + // Optional: city (Petabencana.id Instance Region 3 letter code) + all: (city) => new Promise((resolve, reject) => { + let query = `SELECT gaugeid, gaugenameid, the_geom, + array_to_json(array_agg((measuredatetime, depth, warninglevel, + warningnameid) ORDER BY measuredatetime ASC)) as observations + FROM ${config.TABLE_FLOODGAUGE_REPORTS} + WHERE measuredatetime >= to_timestamp($1) + AND ($2 IS NULL OR tags->>'instance_region_code'=$2) + GROUP BY gaugeid, the_geom, gaugenameid LIMIT $3`; - // Setup values - let timeWindow = (Date.now() / 1000) - - config.API_FLOODGAUGE_REPORTS_TIME_WINDOW; - let values = [timeWindow, city, config.API_FLOODGAUGE_REPORTS_LIMIT]; + // Setup values + let timeWindow = (Date.now() / 1000) - + config.API_FLOODGAUGE_REPORTS_TIME_WINDOW; + let values = [timeWindow, city, config.API_FLOODGAUGE_REPORTS_LIMIT]; - // Execute - logger.debug(query, values); - db.any(query, values).timeout(config.PGTIMEOUT) - .then((data) => resolve(data)) - /* istanbul ignore next */ - .catch((err) => reject(err)); - }), + // Execute + logger.debug(query, values); + db.any(query, values).timeout(config.PGTIMEOUT) + .then((data) => resolve(data)) + /* istanbul ignore next */ + .catch((err) => reject(err)); + }), - // Return specific flood gauge report by id - byId: (id) => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT gaugeid, gaugenameid, the_geom, - array_to_json(array_agg((measuredatetime, depth, warninglevel, - warningnameid) ORDER BY measuredatetime ASC)) as observations - FROM ${config.TABLE_FLOODGAUGE_REPORTS} - WHERE pkey = $1 - GROUP BY gaugeid, the_geom, gaugenameid`; + // Return specific flood gauge report by id + byId: (id) => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT gaugeid, gaugenameid, the_geom, + array_to_json(array_agg((measuredatetime, depth, warninglevel, + warningnameid) ORDER BY measuredatetime ASC)) as observations + FROM ${config.TABLE_FLOODGAUGE_REPORTS} + WHERE pkey = $1 + GROUP BY gaugeid, the_geom, gaugenameid`; - // Setup values - let values = [id]; + // Setup values + let values = [id]; - // Execute - logger.debug(query, values); - db.oneOrNone(query, values).timeout(config.PGTIMEOUT) - /* istanbul ignore next */ - .then((data) => resolve(data)) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), + // Execute + logger.debug(query, values); + db.oneOrNone(query, values).timeout(config.PGTIMEOUT) + /* istanbul ignore next */ + .then((data) => resolve(data)) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), }); diff --git a/src/api/routes/floods/index.js b/src/api/routes/floods/index.js index 3db2bb3..b50f6cc 100644 --- a/src/api/routes/floods/index.js +++ b/src/api/routes/floods/index.js @@ -24,28 +24,28 @@ import validate from 'celebrate'; // Rem status codes const REM_STATES = { - 1: { - severity: 'Unknown', - levelDescription: 'AN UNKNOWN LEVEL OF FLOODING - USE CAUTION -', - }, - 2: { - severity: 'Minor', - levelDescription: 'FLOODING OF BETWEEN 10 and 70 CENTIMETERS', - }, - 3: { - severity: 'Moderate', - levelDescription: 'FLOODING OF BETWEEN 71 and 150 CENTIMETERS', - }, - 4: { - severity: 'Severe', - levelDescription: 'FLOODING OF OVER 150 CENTIMETERS', - }, + 1: { + severity: 'Unknown', + levelDescription: 'AN UNKNOWN LEVEL OF FLOODING - USE CAUTION -', + }, + 2: { + severity: 'Minor', + levelDescription: 'FLOODING OF BETWEEN 10 and 70 CENTIMETERS', + }, + 3: { + severity: 'Moderate', + levelDescription: 'FLOODING OF BETWEEN 71 and 150 CENTIMETERS', + }, + 4: { + severity: 'Severe', + levelDescription: 'FLOODING OF OVER 150 CENTIMETERS', + }, }; // Function to clear out the cache const clearCache = () => { - apicache.clear(CACHE_GROUP_FLOODS); - apicache.clear(CACHE_GROUP_FLOODS_STATES); + apicache.clear(CACHE_GROUP_FLOODS); + apicache.clear(CACHE_GROUP_FLOODS_STATES); }; /** @@ -57,133 +57,133 @@ const clearCache = () => { * @return {Object} api Express router object for reports route */ export default ({config, db, logger}) => { - let api = Router(); // eslint-disable-line new-cap - const cap = new Cap(logger); // Setup our cap formatter + let api = Router(); // eslint-disable-line new-cap + const cap = new Cap(logger); // Setup our cap formatter - // Get a list of all floods - api.get('/', cacheResponse(config.CACHE_DURATION_FLOODS), - validate({ - query: { - city: Joi.any().valid(config.REGION_CODES), - format: Joi.any().valid(['xml'].concat(config.FORMATS)) - .default(config.FORMAT_DEFAULT), - geoformat: Joi.any().valid(['cap'].concat(config.GEO_FORMATS)) - .default(config.GEO_FORMAT_DEFAULT), - minimum_state: Joi.number().integer().valid(Object.keys(REM_STATES)), - }, - }), - (req, res, next) => { - req.apicacheGroup = CACHE_GROUP_FLOODS; - if (req.query.geoformat === 'cap' && req.query.format !== 'xml') { - res.status(400).json({statusCode: 400, - message: 'format must be \'xml\' when geoformat=\'cap\''}); - } else if (config.GEO_FORMATS.indexOf(req.query.geoformat) > -1 - && req.query.format !== 'json') { - res.status(400).json({statusCode: 400, - message: 'format must be \'json\' when geoformat ' - +'IN (\'geojson\',\'topojson\')'}); - } else { + // Get a list of all floods + api.get('/', cacheResponse(config.CACHE_DURATION_FLOODS), + validate({ + query: { + city: Joi.any().valid(config.REGION_CODES), + format: Joi.any().valid(['xml'].concat(config.FORMATS)) + .default(config.FORMAT_DEFAULT), + geoformat: Joi.any().valid(['cap'].concat(config.GEO_FORMATS)) + .default(config.GEO_FORMAT_DEFAULT), + minimum_state: Joi.number().integer().valid(Object.keys(REM_STATES)), + }, + }), + (req, res, next) => { + req.apicacheGroup = CACHE_GROUP_FLOODS; + if (req.query.geoformat === 'cap' && req.query.format !== 'xml') { + res.status(400).json({statusCode: 400, + message: 'format must be \'xml\' when geoformat=\'cap\''}); + } else if (config.GEO_FORMATS.indexOf(req.query.geoformat) > -1 + && req.query.format !== 'json') { + res.status(400).json({statusCode: 400, + message: 'format must be \'json\' when geoformat ' + +'IN (\'geojson\',\'topojson\')'}); + } else { floods(config, db, logger).allGeo(req.query.city, req.query.minimum_state) - .then((data) => - req.query.geoformat === 'cap' ? - // If CAP format has been required convert to geojson then to CAP - formatGeo(data, 'geojson') - .then((formatted) => res.status(200) - .set('Content-Type', 'text/xml') - .send(cap.geoJsonToAtomCap(formatted.features))) - /* istanbul ignore next */ - .catch((err) => next(err)) : - // Otherwise hand off to geo formatter - formatGeo(data, req.query.geoformat) - .then((formatted) => res.status(200) - .json({statusCode: 200, result: formatted})) - /* istanbul ignore next */ - .catch((err) => next(err)) - ) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }); + .then((data) => + req.query.geoformat === 'cap' ? + // If CAP format has been required convert to geojson then to CAP + formatGeo(data, 'geojson') + .then((formatted) => res.status(200) + .set('Content-Type', 'text/xml') + .send(cap.geoJsonToAtomCap(formatted.features))) + /* istanbul ignore next */ + .catch((err) => next(err)) : + // Otherwise hand off to geo formatter + formatGeo(data, req.query.geoformat) + .then((formatted) => res.status(200) + .json({statusCode: 200, result: formatted})) + /* istanbul ignore next */ + .catch((err) => next(err)) + ) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }); } - } + } ); - // Just get the states without the geographic boundaries - api.get('/states', cacheResponse(config.CACHE_DURATION_FLOODS_STATES), - validate({ - query: { - city: Joi.any().valid(config.REGION_CODES), - format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), - minimum_state: Joi.number().integer().valid(Object.keys(REM_STATES)), - }, - }), - (req, res, next) => { - req.apicacheGroup = CACHE_GROUP_FLOODS_STATES; - floods(config, db, logger).all(req.query.city, req.query.minimum_state) - .then((data) => res.status(200).json({statusCode: 200, result: data})) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }); - } + // Just get the states without the geographic boundaries + api.get('/states', cacheResponse(config.CACHE_DURATION_FLOODS_STATES), + validate({ + query: { + city: Joi.any().valid(config.REGION_CODES), + format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), + minimum_state: Joi.number().integer().valid(Object.keys(REM_STATES)), + }, + }), + (req, res, next) => { + req.apicacheGroup = CACHE_GROUP_FLOODS_STATES; + floods(config, db, logger).all(req.query.city, req.query.minimum_state) + .then((data) => res.status(200).json({statusCode: 200, result: data})) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }); + } ); - // Update the flood status of a local area - api.put('/:localAreaId', jwtCheck, - validate({ - params: {localAreaId: Joi.number().integer().required()}, - body: Joi.object().keys({ - state: Joi.number().integer() - .valid(Object.keys(REM_STATES).map((state) => parseInt(state))) - .required(), - }), - query: { - username: Joi.string().required(), - }, - }), - (req, res, next) => floods(config, db, logger) - .updateREMState(req.params.localAreaId, req.body.state, req.query.username) - .then(() => { - clearCache(); - res.status(200).json({localAreaId: req.params.localAreaId, - state: req.body.state, updated: true}); - }) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) + // Update the flood status of a local area + api.put('/:localAreaId', jwtCheck, + validate({ + params: {localAreaId: Joi.number().integer().required()}, + body: Joi.object().keys({ + state: Joi.number().integer() + .valid(Object.keys(REM_STATES).map((state) => parseInt(state))) + .required(), + }), + query: { + username: Joi.string().required(), + }, + }), + (req, res, next) => floods(config, db, logger) + .updateREMState(req.params.localAreaId, req.body.state, req.query.username) + .then(() => { + clearCache(); + res.status(200).json({localAreaId: req.params.localAreaId, + state: req.body.state, updated: true}); + }) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) ); - // Remove the flood status of a local and add a log entry for audit - api.delete('/:localAreaId', jwtCheck, - validate({ - params: {localAreaId: Joi.number().integer().required()}, - query: { - username: Joi.string().required(), - }, - }), - (req, res, next) => floods(config, db, logger) - .clearREMState(req.params.localAreaId, req.query.username) - .then(() => { - clearCache(); - res.status(200).json({localAreaId: req.params.localAreaId, - state: null, updated: true}); - }) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + // Remove the flood status of a local and add a log entry for audit + api.delete('/:localAreaId', jwtCheck, + validate({ + params: {localAreaId: Joi.number().integer().required()}, + query: { + username: Joi.string().required(), + }, + }), + (req, res, next) => floods(config, db, logger) + .clearREMState(req.params.localAreaId, req.query.username) + .then(() => { + clearCache(); + res.status(200).json({localAreaId: req.params.localAreaId, + state: null, updated: true}); + }) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - return api; + return api; }; diff --git a/src/api/routes/floods/model.js b/src/api/routes/floods/model.js index 82d13ee..4d64884 100644 --- a/src/api/routes/floods/model.js +++ b/src/api/routes/floods/model.js @@ -14,135 +14,135 @@ */ export default (config, db, logger) => ({ - // Get all flood reports for a given city - all: (city, minimumState) => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT local_area as area_id, state, last_updated - FROM ${config.TABLE_REM_STATUS} status, ${config.TABLE_LOCAL_AREAS} area - WHERE status.local_area = area.pkey - AND state IS NOT NULL AND ($2 IS NULL OR state >= $2) - AND ($1 IS NULL OR area.instance_region_code=$1)`; - - // Setup values - let values = [city, minimumState]; - - // Execute - logger.debug(query, values); - db.any(query, values).timeout(config.PGTIMEOUT) - .then((data) => { - resolve(data); - }) - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), - - // Get all flood reports for a given city - allGeo: (city, minimumState) => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT la.the_geom, la.pkey as area_id, la.geom_id, - la.area_name, la.parent_name, la.city_name, rs.state, rs.last_updated - FROM ${config.TABLE_LOCAL_AREAS} la - ${minimumState ? 'JOIN' : 'LEFT JOIN'} - (SELECT local_area, state, last_updated FROM ${config.TABLE_REM_STATUS} - WHERE state IS NOT NULL AND ($2 IS NULL OR state >= $2)) rs - ON la.pkey = rs.local_area - WHERE $1 IS NULL OR instance_region_code = $1`; - - // Setup values - let values = [city, minimumState]; - - // Execute - logger.debug(query, values); - db.any(query, values).timeout(config.PGTIMEOUT) - .then((data) => { - resolve(data); - }) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), - - // Update the REM state and append to the log - updateREMState: (localAreaId, state, username) => - new Promise((resolve, reject) => { - // Setup a timestamp with current date/time in ISO format - let timestamp = (new Date()).toISOString(); - - // Setup our queries - let queries = [ - { - query: `INSERT INTO ${config.TABLE_REM_STATUS} - ( local_area, state, last_updated ) - VALUES ( $1, $2, $3 ) - ON CONFLICT (local_area) DO - UPDATE SET state=$2, last_updated=$3`, - values: [localAreaId, state, timestamp], - }, - { - query: `INSERT INTO ${config.TABLE_REM_STATUS_LOG} - ( local_area, state, changed, username ) - VALUES ( $1, $2, $3, $4 )`, - values: [localAreaId, state, timestamp, username], - }, - ]; - - // Log queries to debugger - for (let query of queries) logger.debug(query.query, query.values); - - // Execute in a transaction as both INSERT and UPDATE must happen together - db.tx((t) => { - return t.batch(queries.map((query) => - t.none(query.query, query.values))); - }).timeout(config.PGTIMEOUT) - .then((data) => { - resolve(data); - }) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), - - // Remove the REM state record and append to the log - clearREMState: (localAreaId, username) => new Promise((resolve, reject) => { - // Setup a timestamp with current date/time in ISO format - let timestamp = (new Date()).toISOString(); - - // Setup our queries - let queries = [ - { - query: `DELETE FROM ${config.TABLE_REM_STATUS} - WHERE local_area = $1`, - values: [localAreaId], - }, - { - query: `INSERT INTO ${config.TABLE_REM_STATUS_LOG} - ( local_area, state, changed, username ) - VALUES ( $1, $2, $3, $4 )`, - values: [localAreaId, null, timestamp, username], - }, - ]; - - // Log queries to debugger - for (let query of queries) logger.debug(query.query, query.values); - - // Execute in a transaction as both INSERT and UPDATE must happen together - db.tx((t) => { - return t.batch(queries.map((query) => t.none(query.query, query.values))); - }).timeout(config.PGTIMEOUT) - .then((data) => { - resolve(data); - }) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), + // Get all flood reports for a given city + all: (city, minimumState) => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT local_area as area_id, state, last_updated + FROM ${config.TABLE_REM_STATUS} status, ${config.TABLE_LOCAL_AREAS} area + WHERE status.local_area = area.pkey + AND state IS NOT NULL AND ($2 IS NULL OR state >= $2) + AND ($1 IS NULL OR area.instance_region_code=$1)`; + + // Setup values + let values = [city, minimumState]; + + // Execute + logger.debug(query, values); + db.any(query, values).timeout(config.PGTIMEOUT) + .then((data) => { + resolve(data); + }) + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), + + // Get all flood reports for a given city + allGeo: (city, minimumState) => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT la.the_geom, la.pkey as area_id, la.geom_id, + la.area_name, la.parent_name, la.city_name, rs.state, rs.last_updated + FROM ${config.TABLE_LOCAL_AREAS} la + ${minimumState ? 'JOIN' : 'LEFT JOIN'} + (SELECT local_area, state, last_updated FROM ${config.TABLE_REM_STATUS} + WHERE state IS NOT NULL AND ($2 IS NULL OR state >= $2)) rs + ON la.pkey = rs.local_area + WHERE $1 IS NULL OR instance_region_code = $1`; + + // Setup values + let values = [city, minimumState]; + + // Execute + logger.debug(query, values); + db.any(query, values).timeout(config.PGTIMEOUT) + .then((data) => { + resolve(data); + }) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), + + // Update the REM state and append to the log + updateREMState: (localAreaId, state, username) => + new Promise((resolve, reject) => { + // Setup a timestamp with current date/time in ISO format + let timestamp = (new Date()).toISOString(); + + // Setup our queries + let queries = [ + { + query: `INSERT INTO ${config.TABLE_REM_STATUS} + ( local_area, state, last_updated ) + VALUES ( $1, $2, $3 ) + ON CONFLICT (local_area) DO + UPDATE SET state=$2, last_updated=$3`, + values: [localAreaId, state, timestamp], + }, + { + query: `INSERT INTO ${config.TABLE_REM_STATUS_LOG} + ( local_area, state, changed, username ) + VALUES ( $1, $2, $3, $4 )`, + values: [localAreaId, state, timestamp, username], + }, + ]; + + // Log queries to debugger + for (let query of queries) logger.debug(query.query, query.values); + + // Execute in a transaction as both INSERT and UPDATE must happen together + db.tx((t) => { + return t.batch(queries.map((query) => + t.none(query.query, query.values))); + }).timeout(config.PGTIMEOUT) + .then((data) => { + resolve(data); + }) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), + + // Remove the REM state record and append to the log + clearREMState: (localAreaId, username) => new Promise((resolve, reject) => { + // Setup a timestamp with current date/time in ISO format + let timestamp = (new Date()).toISOString(); + + // Setup our queries + let queries = [ + { + query: `DELETE FROM ${config.TABLE_REM_STATUS} + WHERE local_area = $1`, + values: [localAreaId], + }, + { + query: `INSERT INTO ${config.TABLE_REM_STATUS_LOG} + ( local_area, state, changed, username ) + VALUES ( $1, $2, $3, $4 )`, + values: [localAreaId, null, timestamp, username], + }, + ]; + + // Log queries to debugger + for (let query of queries) logger.debug(query.query, query.values); + + // Execute in a transaction as both INSERT and UPDATE must happen together + db.tx((t) => { + return t.batch(queries.map((query) => t.none(query.query, query.values))); + }).timeout(config.PGTIMEOUT) + .then((data) => { + resolve(data); + }) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), }); diff --git a/src/api/routes/infrastructure/index.js b/src/api/routes/infrastructure/index.js index deb878a..22a9243 100644 --- a/src/api/routes/infrastructure/index.js +++ b/src/api/routes/infrastructure/index.js @@ -23,29 +23,29 @@ import validate from 'celebrate'; * @return {Object} api Express router object for reports route */ export default ({config, db, logger}) => { - let api = Router(); // eslint-disable-line new-cap + let api = Router(); // eslint-disable-line new-cap - // Get a list of infrastructure by type for a given city - api.get('/:type', cacheResponse(config.CACHE_DURATION_INFRASTRUCTURE), - validate({ - params: {type: Joi.any().valid(config.INFRASTRUCTURE_TYPES)}, - query: { - city: Joi.any().valid(config.REGION_CODES), - format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), - geoformat: Joi.any().valid(config.GEO_FORMATS) - .default(config.GEO_FORMAT_DEFAULT), - }, - }), - (req, res, next) => infrastructure(config, db, logger) - .all(req.query.city, req.params.type) - .then((data) => handleGeoResponse(data, req, res, next)) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + // Get a list of infrastructure by type for a given city + api.get('/:type', cacheResponse(config.CACHE_DURATION_INFRASTRUCTURE), + validate({ + params: {type: Joi.any().valid(config.INFRASTRUCTURE_TYPES)}, + query: { + city: Joi.any().valid(config.REGION_CODES), + format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), + geoformat: Joi.any().valid(config.GEO_FORMATS) + .default(config.GEO_FORMAT_DEFAULT), + }, + }), + (req, res, next) => infrastructure(config, db, logger) + .all(req.query.city, req.params.type) + .then((data) => handleGeoResponse(data, req, res, next)) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - return api; + return api; }; diff --git a/src/api/routes/infrastructure/model.js b/src/api/routes/infrastructure/model.js index 46180ca..3fcfdca 100644 --- a/src/api/routes/infrastructure/model.js +++ b/src/api/routes/infrastructure/model.js @@ -13,25 +13,25 @@ import Promise from 'bluebird'; * @return {Object} Query methods */ export default (config, db, logger) => ({ - // A list of all infrastructure matching a given type - all: (city, type) => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT name, the_geom - FROM infrastructure.${type} - WHERE ($1 IS NULL OR tags->>'instance_region_code'=$1)`; + // A list of all infrastructure matching a given type + all: (city, type) => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT name, the_geom + FROM infrastructure.${type} + WHERE ($1 IS NULL OR tags->>'instance_region_code'=$1)`; - // Setup values - let values = [city]; + // Setup values + let values = [city]; - // Execute - logger.debug(query, values); - db.any(query, values).timeout(config.PGTIMEOUT) - .then((data) => resolve(data)) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), + // Execute + logger.debug(query, values); + db.any(query, values).timeout(config.PGTIMEOUT) + .then((data) => resolve(data)) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), }); diff --git a/src/api/routes/reports/archive/index.js b/src/api/routes/reports/archive/index.js index 0ccf2d4..fc522ab 100644 --- a/src/api/routes/reports/archive/index.js +++ b/src/api/routes/reports/archive/index.js @@ -25,32 +25,32 @@ import validate from 'celebrate'; * @return {Object} api Express router object for reports route */ export default ({config, db, logger}) => { - let api = Router(); // eslint-disable-line new-cap + let api = Router(); // eslint-disable-line new-cap - // Get a list of all reports - api.get('/', cacheResponse('1 minute'), + // Get a list of all reports + api.get('/', cacheResponse('1 minute'), - validate({ - query: { - city: Joi.any().valid(config.REGION_CODES), + validate({ + query: { + city: Joi.any().valid(config.REGION_CODES), start: Joi.date().format('YYYY-MM-DDTHH:mm:ssZ').required(), - end: Joi.date().format('YYYY-MM-DDTHH:mm:ssZ') - .min(Joi.ref('start')).required(), - format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), - geoformat: Joi.any().valid(config.GEO_FORMATS) - .default(config.GEO_FORMAT_DEFAULT), - }, - }), - (req, res, next) => archive(config, db, logger) - .all(req.query.start, req.query.end, req.query.city) - .then((data) => handleGeoResponse(data, req, res, next)) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + end: Joi.date().format('YYYY-MM-DDTHH:mm:ssZ') + .min(Joi.ref('start')).required(), + format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), + geoformat: Joi.any().valid(config.GEO_FORMATS) + .default(config.GEO_FORMAT_DEFAULT), + }, + }), + (req, res, next) => archive(config, db, logger) + .all(req.query.start, req.query.end, req.query.city) + .then((data) => handleGeoResponse(data, req, res, next)) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - return api; + return api; }; diff --git a/src/api/routes/reports/archive/model.js b/src/api/routes/reports/archive/model.js index 5479eed..d1b598c 100644 --- a/src/api/routes/reports/archive/model.js +++ b/src/api/routes/reports/archive/model.js @@ -13,24 +13,24 @@ import Promise from 'bluebird'; * @return {Object} Query methods */ export default (config, db, logger) => ({ - all: (start, end, city) => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT pkey, created_at, source, - status, url, image_url, disaster_type, report_data, tags, title, text, - the_geom FROM ${config.TABLE_REPORTS} - WHERE created_at >= $1::timestamp with time zone + all: (start, end, city) => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT pkey, created_at, source, + status, url, image_url, disaster_type, report_data, tags, title, text, + the_geom FROM ${config.TABLE_REPORTS} + WHERE created_at >= $1::timestamp with time zone AND created_at <= $2::timestamp with time zone - AND ($3 IS NULL OR tags->>'instance_region_code'=$3) - ORDER BY created_at DESC LIMIT $4`; + AND ($3 IS NULL OR tags->>'instance_region_code'=$3) + ORDER BY created_at DESC LIMIT $4`; - // var timeWindow = (Date.now() / 1000) - timeperiod; + // var timeWindow = (Date.now() / 1000) - timeperiod; - let values = [start, end, city, config.API_REPORTS_LIMIT]; + let values = [start, end, city, config.API_REPORTS_LIMIT]; - // Execute - logger.debug(query, values); - db.any(query, values).timeout(config.PGTIMEOUT) - .then((data) => resolve(data)) - .catch((err) => reject(err)); - }), + // Execute + logger.debug(query, values); + db.any(query, values).timeout(config.PGTIMEOUT) + .then((data) => resolve(data)) + .catch((err) => reject(err)); + }), }); diff --git a/src/api/routes/reports/index.js b/src/api/routes/reports/index.js index 89a1e28..b2f82cf 100644 --- a/src/api/routes/reports/index.js +++ b/src/api/routes/reports/index.js @@ -25,56 +25,56 @@ import validate from 'celebrate'; * @return {Object} api Express router object for reports route */ export default ({config, db, logger}) => { - let api = Router(); // eslint-disable-line new-cap + let api = Router(); // eslint-disable-line new-cap - // Get a list of all reports - api.get('/', cacheResponse('1 minute'), - validate({ - query: { - city: Joi.any().valid(config.REGION_CODES), - timeperiod: Joi.number().integer().positive() - .max(config.API_REPORTS_TIME_WINDOW_MAX) - .default(config.API_REPORTS_TIME_WINDOW), - format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), - geoformat: Joi.any().valid(config.GEO_FORMATS) - .default(config.GEO_FORMAT_DEFAULT), - }, - }), - (req, res, next) => reports(config, db, logger) - .all(req.query.timeperiod, req.query.city) - .then((data) => handleGeoResponse(data, req, res, next)) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + // Get a list of all reports + api.get('/', cacheResponse('1 minute'), + validate({ + query: { + city: Joi.any().valid(config.REGION_CODES), + timeperiod: Joi.number().integer().positive() + .max(config.API_REPORTS_TIME_WINDOW_MAX) + .default(config.API_REPORTS_TIME_WINDOW), + format: Joi.any().valid(config.FORMATS).default(config.FORMAT_DEFAULT), + geoformat: Joi.any().valid(config.GEO_FORMATS) + .default(config.GEO_FORMAT_DEFAULT), + }, + }), + (req, res, next) => reports(config, db, logger) + .all(req.query.timeperiod, req.query.city) + .then((data) => handleGeoResponse(data, req, res, next)) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - // to get all reports between two dates - api.use('/archive', archive({config, db, logger})); + // to get all reports between two dates + api.use('/archive', archive({config, db, logger})); - // Get a single report - api.get('/:id', cacheResponse('1 minute'), - validate({ - params: {id: Joi.number().integer().required()}, - query: { - format: Joi.any().valid(config.FORMATS) - .default(config.FORMAT_DEFAULT), - geoformat: Joi.any().valid(config.GEO_FORMATS) - .default(config.GEO_FORMAT_DEFAULT), - }, - }), - (req, res, next) => reports(config, db, logger).byId(req.params.id) - .then((data) => handleGeoResponse(data, req, res, next)) - .catch((err) => { - /* istanbul ignore next */ - logger.error(err); - /* istanbul ignore next */ - next(err); - }) - ); + // Get a single report + api.get('/:id', cacheResponse('1 minute'), + validate({ + params: {id: Joi.number().integer().required()}, + query: { + format: Joi.any().valid(config.FORMATS) + .default(config.FORMAT_DEFAULT), + geoformat: Joi.any().valid(config.GEO_FORMATS) + .default(config.GEO_FORMAT_DEFAULT), + }, + }), + (req, res, next) => reports(config, db, logger).byId(req.params.id) + .then((data) => handleGeoResponse(data, req, res, next)) + .catch((err) => { + /* istanbul ignore next */ + logger.error(err); + /* istanbul ignore next */ + next(err); + }) + ); - return api; + return api; }; diff --git a/src/api/routes/reports/model.js b/src/api/routes/reports/model.js index 3044b17..7ad0c78 100644 --- a/src/api/routes/reports/model.js +++ b/src/api/routes/reports/model.js @@ -13,49 +13,49 @@ * @return {Object} Query methods */ export default (config, db, logger) => ({ - all: (timeperiod, city) => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT pkey, created_at, source, - status, url, image_url, disaster_type, report_data, tags, title, text, - the_geom FROM ${config.TABLE_REPORTS} - WHERE created_at >= to_timestamp($1) - AND ($2 IS NULL OR tags->>'instance_region_code'=$2) - ORDER BY created_at DESC LIMIT $3`; + all: (timeperiod, city) => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT pkey, created_at, source, + status, url, image_url, disaster_type, report_data, tags, title, text, + the_geom FROM ${config.TABLE_REPORTS} + WHERE created_at >= to_timestamp($1) + AND ($2 IS NULL OR tags->>'instance_region_code'=$2) + ORDER BY created_at DESC LIMIT $3`; - let timeWindow = (Date.now() / 1000) - timeperiod; + let timeWindow = (Date.now() / 1000) - timeperiod; - let values = [timeWindow, city, config.API_REPORTS_LIMIT]; + let values = [timeWindow, city, config.API_REPORTS_LIMIT]; - // Execute - logger.debug(query, values); - db.any(query, values).timeout(config.PGTIMEOUT) - .then((data) => resolve(data)) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), + // Execute + logger.debug(query, values); + db.any(query, values).timeout(config.PGTIMEOUT) + .then((data) => resolve(data)) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), - // Return specific report by id - byId: (id) => new Promise((resolve, reject) => { - // Setup query - let query = `SELECT pkey, created_at, source, - status, url, image_url, disaster_type, report_data, tags, title, text, - the_geom FROM ${config.TABLE_REPORTS} - WHERE pkey = $1`; + // Return specific report by id + byId: (id) => new Promise((resolve, reject) => { + // Setup query + let query = `SELECT pkey, created_at, source, + status, url, image_url, disaster_type, report_data, tags, title, text, + the_geom FROM ${config.TABLE_REPORTS} + WHERE pkey = $1`; - // Setup values - let values = [id]; + // Setup values + let values = [id]; - // Execute - logger.debug(query, values); - db.oneOrNone(query, values).timeout(config.PGTIMEOUT) - .then((data) => resolve(data)) - /* istanbul ignore next */ - .catch((err) => { - /* istanbul ignore next */ - reject(err); - }); - }), + // Execute + logger.debug(query, values); + db.oneOrNone(query, values).timeout(config.PGTIMEOUT) + .then((data) => resolve(data)) + /* istanbul ignore next */ + .catch((err) => { + /* istanbul ignore next */ + reject(err); + }); + }), }); diff --git a/src/config.js b/src/config.js index 281f82b..df5ded0 100644 --- a/src/config.js +++ b/src/config.js @@ -41,6 +41,7 @@ export default { GEO_PRECISION: process.env.GEO_PRECISION || 10, IMAGES_BUCKET: process.env.IMAGES_BUCKET || 'petabencana-image-uploads', IMAGES_HOST: process.env.IMAGES_HOST || 'images.petabencana.id', + IMAGE_MIME_TYPES: (process.env.IMAGE_MIME_TYPES || 'image/png,image/jpeg,image/gif').split(','), INFRASTRUCTURE_TYPES: (process.env.INFRASTRUCTURE_TYPES || 'floodgates,pumps,waterways').split(','), LANGUAGES: (process.env.LANGUAGES || 'en,id').split(','), LOG_CONSOLE: process.env.LOG_CONSOLE === 'true' || false, diff --git a/src/db.js b/src/db.js index a0784cb..29258c6 100755 --- a/src/db.js +++ b/src/db.js @@ -19,18 +19,18 @@ const pgp = require('pg-promise')({ * @return {Object} db - PG Promise database **/ export default (config, logger) => new Promise((resolve, reject) => { - // Build the connection string - const cn = `postgres://${config.PGUSER}:${config.PGPASSWORD}@${config.PGHOST}:${config.PGPORT}/${config.PGDATABASE}?ssl=${config.PGSSL}`; + // Build the connection string + const cn = `postgres://${config.PGUSER}:${config.PGPASSWORD}@${config.PGHOST}:${config.PGPORT}/${config.PGDATABASE}?ssl=${config.PGSSL}`; logger.debug(cn); - // Setup the connection - let db = pgp(cn); + // Setup the connection + let db = pgp(cn); - // Make sure we can connect, if so resolve, if not reject - db.proc('version').timeout(config.PGTIMEOUT) - .then(() => resolve(db)) - .catch((err) => { - logger.error(err); - reject(err); - }); + // Make sure we can connect, if so resolve, if not reject + db.proc('version').timeout(config.PGTIMEOUT) + .then(() => resolve(db)) + .catch((err) => { + logger.error(err); + reject(err); + }); }); diff --git a/src/index.js b/src/index.js index 8478b89..155f6d8 100755 --- a/src/index.js +++ b/src/index.js @@ -27,58 +27,58 @@ logger.level = config.LOG_LEVEL; // Check that log file directory can be written to try { - if (config.LOG_DIR !== '') { - fs.accessSync(config.LOG_DIR, fs.W_OK); - } - logger.info(`Logging to ${config.LOG_DIR !== '' ? config.LOG_DIR : - 'current working directory' }`); + if (config.LOG_DIR !== '') { + fs.accessSync(config.LOG_DIR, fs.W_OK); + } + logger.info(`Logging to ${config.LOG_DIR !== '' ? config.LOG_DIR : + 'current working directory' }`); } catch (e) { - // If we cannot write to the desired directory then log tocurrent directory - logger.info(`Cannot log to '${config.LOG_DIR}', - logging to current working directory instead`); - config.LOG_DIR = ''; + // If we cannot write to the desired directory then log tocurrent directory + logger.info(`Cannot log to '${config.LOG_DIR}', + logging to current working directory instead`); + config.LOG_DIR = ''; } // Configure the logger logger.add(logger.transports.File, { - filename: path.join(config.LOG_DIR, `${config.APP_NAME}.log`), - json: config.LOG_JSON, // Log in json or plain text - maxsize: config.LOG_MAX_FILE_SIZE, // Max size of each file - maxFiles: config.LOG_MAX_FILES, // Max number of files - level: config.LOG_LEVEL, // Level of log messages + filename: path.join(config.LOG_DIR, `${config.APP_NAME}.log`), + json: config.LOG_JSON, // Log in json or plain text + maxsize: config.LOG_MAX_FILE_SIZE, // Max size of each file + maxFiles: config.LOG_MAX_FILES, // Max number of files + level: config.LOG_LEVEL, // Level of log messages }); // If we are not in development and console logging not requested then remove it if (config.NODE_ENV !== 'development' && !config.LOG_CONSOLE) { - logger.remove(logger.transports.Console); + logger.remove(logger.transports.Console); } // If we exit immediately winston does not get chance to write last log message const exitWithStatus = (status) => { - logger.info(`Exiting with status ${status}`); - setTimeout(() => process.exit(status), 500); + logger.info(`Exiting with status ${status}`); + setTimeout(() => process.exit(status), 500); }; // Catch kill and interrupt signals and log a clean exit status process - .on('SIGTERM', () => { - logger.info('SIGTERM: Application shutting down'); - exitWithStatus(0); - }) - .on('SIGINT', () => { - logger.info('SIGINT: Application shutting down'); - exitWithStatus(0); - }); + .on('SIGTERM', () => { + logger.info('SIGTERM: Application shutting down'); + exitWithStatus(0); + }) + .on('SIGINT', () => { + logger.info('SIGINT: Application shutting down'); + exitWithStatus(0); + }); // Try and start the server init(config, initializeDb, routes, logger).then((app) => { - // All good to go, start listening for requests - app.server.listen(config.PORT); - logger.info(`Application started,` - + `listening on port ${app.server.address().port}`); + // All good to go, start listening for requests + app.server.listen(config.PORT); + logger.info(`Application started,` + + `listening on port ${app.server.address().port}`); }).catch((err) => { - // Error has occurred, log and shutdown - logger.error('Error starting server: ' + err.message + ', ' + err.stack); - logger.error('Fatal error: Application shutting down'); - exitWithStatus(1); + // Error has occurred, log and shutdown + logger.error('Error starting server: ' + err.message + ', ' + err.stack); + logger.error('Fatal error: Application shutting down'); + exitWithStatus(1); }); diff --git a/src/lib/util.js b/src/lib/util.js index b93baa5..1c61b0a 100755 --- a/src/lib/util.js +++ b/src/lib/util.js @@ -54,10 +54,10 @@ const formatGeo = (body, outputFormat) => new Promise((resolve, reject) => { if (Object.prototype.toString.call( body ) !== '[object Array]') { body = [body]; // Force to array } - dbgeo.parse(body, {outputFormat}, (err, formatted) => { - if (err) reject(err); - resolve(formatted); - }); + dbgeo.parse(body, {outputFormat}, (err, formatted) => { + if (err) reject(err); + resolve(formatted); + }); }); // Handle a geo response, send back a correctly formatted json object with diff --git a/src/server.js b/src/server.js index bb82f9a..7fd88ea 100644 --- a/src/server.js +++ b/src/server.js @@ -1,8 +1,8 @@ /** - * CogniCity Data Server Module - * @module server - * Core server module - **/ + * CogniCity Data Server Module + * @module server + * Core server module + **/ // Import import Promise from 'bluebird'; @@ -27,60 +27,60 @@ import morgan from 'morgan'; // Express logging * @return {Object} - Express server application **/ const init = (config, initializeDb, routes, logger) => - new Promise((resolve, reject) => { - // Create the server - let app = express(); - app.server = http.createServer(app); + new Promise((resolve, reject) => { + // Create the server + let app = express(); + app.server = http.createServer(app); - // Winston stream function for express so we can capture logs - const winstonStream = { - write: function(message) { - logger.info(message.slice(0, -1)); - }, - }; + // Winston stream function for express so we can capture logs + const winstonStream = { + write: function(message) { + logger.info(message.slice(0, -1)); + }, + }; - // Setup express logger - app.use(morgan('combined', {stream: winstonStream})); + // Setup express logger + app.use(morgan('combined', {stream: winstonStream})); - // Compress responses if required but only if caching is disabled - if (config.COMPRESS && !config.CACHE) { - app.use(compression()); - } + // Compress responses if required but only if caching is disabled + if (config.COMPRESS && !config.CACHE) { + app.use(compression()); + } - // Provide CORS support (not required if behind API gateway) - if (config.CORS) { - app.use(cors({exposedHeaders: config.CORS_HEADERS})); - } + // Provide CORS support (not required if behind API gateway) + if (config.CORS) { + app.use(cors({exposedHeaders: config.CORS_HEADERS})); + } - // Provide response time header in response - if (config.RESPONSE_TIME) { - app.use(responseTime()); - } + // Provide response time header in response + if (config.RESPONSE_TIME) { + app.use(responseTime()); + } - // Parse body messages into json - app.use(bodyParser.json({limit: config.BODY_LIMIT})); + // Parse body messages into json + app.use(bodyParser.json({limit: config.BODY_LIMIT})); - // Try and connect to the db - initializeDb(config, logger) - .then((db) => { - // Log debug message - logger.debug('Successfully connected to DB'); + // Try and connect to the db + initializeDb(config, logger) + .then((db) => { + // Log debug message + logger.debug('Successfully connected to DB'); - // Mount the routes - app.use('/', routes({config, db, logger})); + // Mount the routes + app.use('/', routes({config, db, logger})); - // App is ready to go, resolve the promise - resolve(app); - }) - .catch((err) => { - /* istanbul ignore next */ - logger.error('DB Connection error: ' + err); - /* istanbul ignore next */ - logger.error('Fatal error: Application shutting down'); - /* istanbul ignore next */ - // We cannot continue without a DB, reject - reject(err); - }); + // App is ready to go, resolve the promise + resolve(app); + }) + .catch((err) => { + /* istanbul ignore next */ + logger.error('DB Connection error: ' + err); + /* istanbul ignore next */ + logger.error('Fatal error: Application shutting down'); + /* istanbul ignore next */ + // We cannot continue without a DB, reject + reject(err); + }); }); // Export the init function for use externally diff --git a/src/test/index.js b/src/test/index.js index f5f6fa2..3cb382f 100644 --- a/src/test/index.js +++ b/src/test/index.js @@ -8,7 +8,6 @@ // Import config import config from '../config'; -config.PGDATABASE = 'cognicity_server_testing'; // Import DB initializer import initializeDb from '../db'; diff --git a/src/test/testCards.js b/src/test/testCards.js index dcdbb9e..cebb62c 100644 --- a/src/test/testCards.js +++ b/src/test/testCards.js @@ -86,6 +86,24 @@ export default function(app, createdAt) { }); }); + // Update a card + it('Try update card image before report submitted', function(done) { + test.httpAgent(app) + .patch('/cards/'+cardId) + .send({ + 'image_url': 'image', + }) + .expect(403) + .expect('Content-Type', /json/) + .end(function(err, res) { + if (err) { + test.fail(err.message + ' ' + JSON.stringify(res)); + } else { + done(); + } + }); + }); + // Request a card, submit and get resulting report it('Put card data', function(done) { test.httpAgent(app) @@ -118,6 +136,7 @@ export default function(app, createdAt) { it('Get card image link', (done) => { test.httpAgent(app) .get('/cards/'+cardId+'/images') + .set('content-type', 'image/jpeg') .expect(200) .end(function(err, res) { if (err) { @@ -128,7 +147,36 @@ export default function(app, createdAt) { }); }).timeout(150000); - // Request a card, submit and get resulting report + // Get signed URL for card image + it('Catch request card image link without content type', (done) => { + test.httpAgent(app) + .get('/cards/'+cardId+'/images') + .expect(400) + .end(function(err, res) { + if (err) { + test.fail(err.message + ' ' + JSON.stringify(res)); + } else { + done(); + } + }); + }).timeout(150000); + + // Get signed URL for card image + it('Catch request card image link with non image type', (done) => { + test.httpAgent(app) + .get('/cards/'+cardId+'/images') + .set('content-type', 'audio/mpeg') + .expect(400) + .end(function(err, res) { + if (err) { + test.fail(err.message + ' ' + JSON.stringify(res)); + } else { + done(); + } + }); + }).timeout(150000); + + // Request a card and get resulting report it('Get card data', function(done) { test.httpAgent(app) .get('/cards/'+cardId) @@ -166,5 +214,46 @@ export default function(app, createdAt) { } }); }); + + // Request a card and get resulting report with new image + it('Get card data with new image', function(done) { + test.httpAgent(app) + .get('/cards/'+cardId) + .expect(200) + .expect('Content-Type', /json/) + .end(function(err, res) { + if (err) { + test.fail(err.message + ' ' + JSON.stringify(res)); + } else { + test.value(res.body.result.card_id).is(cardId); + test.value(res.body.result.username).is('testuser'); + test.value(res.body.result.network).is('test network'); + test.value(res.body.result.language).is('en'); + test.value(res.body.result.report.text) + .is('integration testing'); + test.value(res.body.result.report.image_url) + .is('https://images.petabencana.id/image.jpg'); + done(); + } + }); + }); + + // Update a card + it('Try update card image after image submitted', function(done) { + test.httpAgent(app) + .patch('/cards/'+cardId) + .send({ + 'image_url': 'image', + }) + .expect(403) + .expect('Content-Type', /json/) + .end(function(err, res) { + if (err) { + test.fail(err.message + ' ' + JSON.stringify(res)); + } else { + done(); + } + }); + }); }); } diff --git a/src/test/testReports.js b/src/test/testReports.js index b3a6fa1..572d43a 100644 --- a/src/test/testReports.js +++ b/src/test/testReports.js @@ -110,7 +110,7 @@ export default function(app, reportid, createdAt) { test.value(res.body.result.features[0].properties.status) .is('confirmed'); test.value(res.body.result.features[0].properties.image_url) - .is('image'); + .is('https://images.petabencana.id/image.jpg'); test.value(res.body.result.features[0].properties.disaster_type) .is('flood'); test.value(res.body.result.features[0].properties.report_data diff --git a/src/test/testServer.js b/src/test/testServer.js index 158cdb7..56a902b 100644 --- a/src/test/testServer.js +++ b/src/test/testServer.js @@ -22,6 +22,7 @@ export default function(app) { if (err) { test.fail(err.message + ' ' + JSON.stringify(res)); } else { + test.value(res.body.version).is(process.env.npm_package_version); done(); } });