From d50a598ecbd99f51d4f2ccae7ba15c0aea8d6713 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Thu, 5 Sep 2019 11:58:05 +0530 Subject: [PATCH 01/15] adding websocket requirments and current architecture file --- Requirements.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Requirements.md diff --git a/Requirements.md b/Requirements.md new file mode 100644 index 0000000..e69de29 From 4a65e1ed0ce51ef0b8608311a53788aebd2720e3 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Thu, 5 Sep 2019 12:39:08 +0530 Subject: [PATCH 02/15] websocket requirments image --- websocket.png | Bin 0 -> 18344 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 websocket.png diff --git a/websocket.png b/websocket.png new file mode 100644 index 0000000000000000000000000000000000000000..712846e880d00bb0cf51658f00e5daf8e2a7d1f9 GIT binary patch literal 18344 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 Date: Thu, 5 Sep 2019 12:43:24 +0530 Subject: [PATCH 03/15] websocket requirments image --- websocket.png | Bin 18344 -> 9496 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/websocket.png b/websocket.png index 712846e880d00bb0cf51658f00e5daf8e2a7d1f9..b9fbf4077843d93a98c956a1d65121291a4abc6b 100644 GIT binary patch literal 9496 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 VL7?HF^FNwCgJ>yNK6w@Pe*lQ5-dz9y literal 18344 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 Date: Thu, 5 Sep 2019 13:27:31 +0530 Subject: [PATCH 04/15] Update Requirements.md --- Requirements.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Requirements.md b/Requirements.md index e69de29..9a56aa0 100644 --- a/Requirements.md +++ b/Requirements.md @@ -0,0 +1,14 @@ +# Webscoket requirements + +Need websocket support in for this micro-service so that front-end will be updated immediately once the new 'corresponding' +message will be consumed/received from Cloud-Kafka. +In a general sense, need to support `push` mechanisim instead of `polling` as per below diagram. + +![websocket diagram](websocket.png) + +**Background** - This is general notification service, which is converting related trigger event into user notifications. + +Our other micro-services are triggering (publishing) `event` in coressponding `Cloud-Kafka` topics. This service subscribes +all coressponding Cloud-Kafka topcis. After consuming an event message from a particular topic, this service is generating user +notifications by doing `post-consumer-operation`, kind of `one-to-many` scenario. Example - any update in `challenge` need to +be notified to all registered participants. From f7390025af05230c213e4f2305bd55b72e8401c2 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Mon, 16 Sep 2019 10:29:58 +0530 Subject: [PATCH 05/15] challege:30100600:1 --- Consumer-Verification.md | 4 + README.md | 37 +- Websocket-Verification.md | 153 + config/default.js | 24 + connect/config.js | 2 +- connect/connectNotificationServer.js | 7 +- consumer.js | 8 + package-lock.json | 3899 +++++++++++---------- package.json | 1 + src/app.js | 26 +- src/common/helper.js | 50 + src/common/tcApiHelper.js | 2 +- src/controllers/NotificationController.js | 6 +- src/notificationStreamWS.js | 193 + src/processors/challenge/DummyHandler.js | 20 + src/processors/index.js | 2 + test/create-topics.sh | 6 + test/docker-compose.yml | 26 + test/websocket.html | 53 + 19 files changed, 2566 insertions(+), 1953 deletions(-) create mode 100644 Websocket-Verification.md create mode 100644 src/notificationStreamWS.js create mode 100644 src/processors/challenge/DummyHandler.js create mode 100644 test/create-topics.sh create mode 100644 test/docker-compose.yml create mode 100644 test/websocket.html diff --git a/Consumer-Verification.md b/Consumer-Verification.md index 232fa6e..f93dd44 100644 --- a/Consumer-Verification.md +++ b/Consumer-Verification.md @@ -103,6 +103,8 @@ info: Successfully sent notifications.action.email.connect.project.notifications error: Failed to send email to user id: 5, handle: handle5 ... info: Saved 8 notifications for users: 1, 2, 3, 4, 5, 6, 7, 8 +info: Going to push 8 notifications to websocket. +info: Pushed 8 notifications to websocket info: Handler handleChallengeCreated was run successfully ``` @@ -131,6 +133,8 @@ info: Successfully sent notifications.action.email.connect.project.notifications error: Failed to send email to user id: 5, handle: handle5 ... info: Saved 8 notifications for users: 1, 2, 3, 4, 5, 6, 7, 8 +info: Going to push 8 notifications to websocket. +info: Pushed 8 notifications to websocket info: Handler handleChallengePhaseWarning was run successfully ``` diff --git a/README.md b/README.md index 808a611..5d2038c 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ tc-notifications (as a standard nodejs app) provides generic framework around no 5. Either add deployment for this new notification consumer/processor in existing deployment script (if you want to host the processor as separate service in the same ECS cluster) or write a new script if you want to keep the deployment separate. ## Dependencies -- nodejs https://nodejs.org/en/ (v6+, if newer version of node is used, e.g. v10, then it needs to install extra lib `npm i natives@1.1.6` to support the gulp build) +- nodejs https://nodejs.org/en/ (v6+, if newer version of node is used, e.g. v10, then it needs to install extra lib `npm i natives@1.1.6` to support the gulp build) - Heroku Toolbelt https://toolbelt.heroku.com - git - PostgreSQL 9.5 @@ -50,8 +50,8 @@ The following parameters can be set in config files or in env variables: if not provided, then SSL connection is not used, direct insecure connection is used; if provided, it can be either path to private key file or private key content - **Topcoder API** - - `TC_API_V3_BASE_URL`: the TopCoder API V3 base URL - - `TC_API_V4_BASE_URL`: the TopCoder API V4 base URL + - `TC_API_V3_BASE_URL`: the TopCoder API V3 base URL + - `TC_API_V4_BASE_URL`: the TopCoder API V4 base URL - `TC_API_V5_BASE_URL`: the TopCoder API V5 base URL - **Notifications API** - `API_CONTEXT_PATH`: path to serve API on @@ -61,16 +61,27 @@ The following parameters can be set in config files or in env variables: - `TOKEN_CACHE_TIME`: time period of the cached token - `AUTH0_CLIENT_ID`: auth0 client id - `AUTH0_CLIENT_SECRET`: auth0 client secret - - `AUTH0_PROXY_SERVER_URL`: auth0 proxy server URL -- **Consumer handlers** - - `KAFKA_CONSUMER_HANDLERS`: mapping from consumer topic to handlers -- **Email notification** - - `ENV`: used to construct email category - - `ENABLE_EMAILS`: whether to enable email notifications - - `ENABLE_DEV_MODE`: whether to enable dev mode - - `DEV_MODE_EMAIL`: recipient email used in dev mode - - `DEFAULT_REPLY_EMAIL`: default reply email - + - `AUTH0_PROXY_SERVER_URL`: auth0 proxy server URL +- **Consumer handlers** + - `KAFKA_CONSUMER_HANDLERS`: mapping from consumer topic to handlers +- **Consumer websocket support** + - `WS_MAX_MESSAGE_COUNT`: Maximum number of messages kept in memory per topic + - `WS_PORT`: Port to expose websocket endpoint + - `WS_ZLIB_DEFLATE_CHUNK_SIZE`: Gzip Deflate chunk size + - `WS_ZLIB_DEFLATE_MEM_LEVEL`: Gzip and Deflate compression memory level + - `WS_ZLIB_INFLATE_CHUNK_SIZE`: Gzip Inflate chunk size + - `WS_CLIENT_NO_CONTEXT_TAKEOVER`: Acknowledge disabling of client context takeover. + - `WS_SERVER_NO_CONTEXT_TAKEOVER`: Whether to use context takeover or not. + - `WS_SERVER_MAX_WINDOW_BITS`: Gzip window bits + - `WS_CONCURRENCY_LIMIT`: The number of concurrent calls to zlib. Calls above this limit will be queued + - `WS_BYTES_THRESHOLD`: Payloads smaller than this will not be compressed. +- **Email notification** + - `ENV`: used to construct email category + - `ENABLE_EMAILS`: whether to enable email notifications + - `ENABLE_DEV_MODE`: whether to enable dev mode + - `DEV_MODE_EMAIL`: recipient email used in dev mode + - `DEFAULT_REPLY_EMAIL`: default reply email + ### Connect notification server Configuration for the connect notification server is at `connect/config.js`. diff --git a/Websocket-Verification.md b/Websocket-Verification.md new file mode 100644 index 0000000..eff744c --- /dev/null +++ b/Websocket-Verification.md @@ -0,0 +1,153 @@ +# TOPCODER NOTIFICATIONS - WEBSOCKET VERIFICATION + +## Local Setup + +Use local docker-compse file under test. Docker-compose file contains +- Zookeeper +- Kafka +- Postgresql 9.6 + +It maps port 9092 and 5432 to your local machine for kafka and database. + +``` +cd test +docker-compose up -d +``` + +## Create topics and database + +``` +cd test +$ ./create-topics.sh +WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both. +WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both. +WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both. +WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both. + +``` +or run each create topic command manually + +``` +cd test +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic challenge.notification.events +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic notifications.autopilot.events +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic submission.notification.create +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic dummy.topic +``` + +Set below environment variables + +``` +export LOG_LEVEL=debug +export DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres +export KAFKA_URL=localhost:9092 +export KAFKA_GROUP_ID=tc-notifications +export ENV=test +export DEV_MODE_EMAIL=testing@topcoder.com +export DEFAULT_REPLY_EMAIL=no-reply@topcoder.com +export AUTH0_CLIENT_ID=dummy +export AUTH0_CLIENT_SECRET=dummy +export AUTH0_URL=dummy +export AUTH0_AUDIENCE=dummy +export AUTH_SECRET=secret +export VALID_ISSUERS=[\"abc.com\"] +``` + +- install dependencies `npm install` +- run code lint check `npm run lint` +- create db tables if not present `node test/init-db`, this is needed only for local test + +Update KAFKA_CONSUMER_RULESETS default config with dummy topic and consumer + +``` +'dummy.topic': [ + { + handleDummy: { + roles: ['Topcoder User'], + }, + }, + ], +``` + + +- start notification consumer `npm run startConsumer` + +## Verification + +Open the sample html page under test/websocket.html. + +- Click : Run WebSocket, you will see below messages in order. +``` + WebSocket is supported by your Browser! + Token is sent... + Subscribed to topic watch for the messages.. +``` +And in the html page you will see + +``` +1-{"full":true,"topic":"dummy.topic","messages":[]} +``` + +Also you can check server logs for below. There is a custom generated token in the html page. You will see role of connected user. +The token will be masked in the logs for security reasons +``` +debug: web socket connected +debug: web socket message: token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIiwiYWRtaW5pc3RyYXRvciJdLCJpc3MiOiJhYmMuY29tIiwiaGFuZGxlIjoic2FjaGluIiwidXNlcklkIjoiMTAwIiwiZW1haWwiOiJhYmMuY29tIiwianRpIjoiMTdiYzc1Y2EtNmI2Yi00NzIyLWFlMzMtMzQ2NTg4YzlmZjJhIiwiaWF0IjoxNTY3NjgwNjU2LCJleHAiOjE1NzU0NTY2NTZ9.0Lo-t422h7n-Jmt_8qnTK81lmBiFVRWld8kYR2VeKr8 +debug: web socket authorized with roles: Topcoder User,administrator +debug: web socket message: {"topic":"dummy.topic","count":5} +``` + +Topic items are empty in application now. We will put a sample message + +Connect to console producer +``` + cd test + docker-compose exec kafka opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic dummy.topic +``` + +- Put a sample message +``` +{ "topic": "dummy.topic", "originator": "tc-autopilot", "timestamp": "2018-02-16T00:00:00", "mime-type": "application/json", "payload": { "challengeId": 30054674, "challengeTitle": "test", "challengeUrl": "http://www.topcoder.com/123", "phase": "Submission", "remainingTime": 12345, "userId": 8547899, "initiatorUserId": 123, "type": "UPDATE_DRAFT_CHALLENGE" , "data" : {"id" : "30055164" }} } +``` + +- You will see logging in the app console: + +``` +info: Handle Kafka event message; Topic: dummy.topic; Partition: 0; Offset: 1; Message: { "topic": "dummy.topic", "originator": "tc-autopilot", "timestamp": "2018-02-16T00:00:00", "mime-type": "application/json", "payload": { "challengeId": 30054674, "challengeTitle": "test", "challengeUrl": "http://www.topcoder.com/123", "phase": "Submission", "remainingTime": 12345, "userId": 8547899, "initiatorUserId": 123, "type": "UPDATE_DRAFT_CHALLENGE" , "data" : {"id" : "30055164" }} }. +info: Run handler handleDummy +info: Going to insert 1 notifications in database. +Executing (default): INSERT INTO "Notifications" ("id","userId","type","contents","read","seen","version","createdAt","updatedAt") VALUES (DEFAULT,123,'dummy.topic','{"topic":"dummy.topic","originator":"tc-autopilot","timestamp":"2018-02-16T00:00:00","mime-type":"application/json","payload":{"challengeId":30054674,"challengeTitle":"test","challengeUrl":"http://www.topcoder.com/123","phase":"Submission","remainingTime":12345,"userId":8547899,"initiatorUserId":123,"type":"UPDATE_DRAFT_CHALLENGE","data":{"id":"30055164"}}}',false,false,NULL,'2019-09-09 19:14:38.349 +00:00','2019-09-09 19:14:38.349 +00:00'); +info: Saved 1 notifications +info: Going to push 1 notifications to websocket. +info: Pushed 1 notifications to websocket +info: Handler handleDummy executed successfully + +``` + +Now please check the websocket.html again and see that new message is inserted. + +``` +{"full":false,"topic":"dummy.topic","messages":[[{"userId":123,"notification":{"topic":"dummy.topic","originator":"tc-autopilot","timestamp":"2018-02-16T00:00:00","mime-type":"application/json","payload":{"challengeId":30054674,"challengeTitle":"test","challengeUrl":"http://www.topcoder.com/123","phase":"Submission","remainingTime":12345,"userId":8547899,"initiatorUserId":123,"type":"UPDATE_DRAFT_CHALLENGE","data":{"id":"30055164"}}}}]]} +``` + +Refresh the page and connect to websocket again. You should see that previous messages are published + +``` +{"full":true,"topic":"dummy.topic","messages":[[{"userId":123,"notification":{"topic":"dummy.topic","originator":"tc-autopilot","timestamp":"2018-02-16T00:00:00","mime-type":"application/json","payload":{"challengeId":30054674,"challengeTitle":"test","challengeUrl":"http://www.topcoder.com/123","phase":"Submission","remainingTime":12345,"userId":8547899,"initiatorUserId":123,"type":"UPDATE_DRAFT_CHALLENGE","data":{"id":"30055164"}}}}]]} +``` + +## Database Verification + +Use some PostgreSQL client to connect to the database. Credentials are same as below + +- Username : postgres +- Password : postgres +- Hostname : localhost +- Post : 5432 +- Database : postgres + +``` +select notifications: select * from "Notifications"; +``` + +Then you will see generated notification records same as browser notifications diff --git a/config/default.js b/config/default.js index bbcc8c5..3da6ee7 100644 --- a/config/default.js +++ b/config/default.js @@ -16,6 +16,30 @@ module.exports = { idle: 10000, }, }, + // Websocket configurations + WS_OPTIONS: { + MAX_MESSAGE_COUNT: process.env.WS_MAX_MESSAGE_COUNT || 100, + PORT: process.env.WS_PORT || 8081, + perMessageDeflate: { + zlibDeflateOptions: { + // See zlib defaults. + chunkSize: process.env.WS_ZLIB_DEFLATE_CHUNK_SIZE || 10 * 1024, + memLevel: process.env.WS_ZLIB_DEFLATE_MEM_LEVEL || 7, + level: process.env.WS_ZLIB_DEFLATE_MEM_LEVEL || 3, + }, + zlibInflateOptions: { + chunkSize: process.env.WS_ZLIB_INFLATE_CHUNK_SIZE || 10 * 1024, + }, + // Other options settable: + clientNoContextTakeover: process.env.WS_CLIENT_NO_CONTEXT_TAKEOVER || true, + serverNoContextTakeover: process.env.WS_SERVER_NO_CONTEXT_TAKEOVER || true, + serverMaxWindowBits: process.env.WS_SERVER_MAX_WINDOW_BITS || 10, + // Below options specified as default values. + concurrencyLimit: process.env.WS_CONCURRENCY_LIMIT || 10, // Limits zlib concurrency for perf. + threshold: process.env.WS_BYTES_THRESHOLD || 1024, // Size (in bytes) below which messages + // should not be compressed. + }, + }, AUTH_SECRET: process.env.AUTH_SECRET, VALID_ISSUERS: process.env.VALID_ISSUERS ? process.env.VALID_ISSUERS.replace(/\\"/g, '') : null, diff --git a/connect/config.js b/connect/config.js index f2c414a..30fa7b6 100644 --- a/connect/config.js +++ b/connect/config.js @@ -35,5 +35,5 @@ module.exports = { DEFAULT_REPLY_EMAIL: process.env.DEFAULT_REPLY_EMAIL, CONNECT_URL: process.env.CONNECT_URL || 'https://connect.topcoder-dev.com', - ACCOUNTS_APP_URL: process.env.ACCOUNTS_APP_URL || "https://accounts.topcoder-dev.com", + ACCOUNTS_APP_URL: process.env.ACCOUNTS_APP_URL || 'https://accounts.topcoder-dev.com', }; diff --git a/connect/connectNotificationServer.js b/connect/connectNotificationServer.js index 4cc98be..7a9a9e8 100644 --- a/connect/connectNotificationServer.js +++ b/connect/connectNotificationServer.js @@ -92,7 +92,7 @@ const getNotificationsForMentionedUser = (logger, eventConfig, content) => { _.forEach(notifications, (notification) => { const mentionedUser = _.find(users, { handle: notification.userHandle }); notification.userId = mentionedUser ? mentionedUser.userId.toString() : null; - if (!notification.userId && logger) {// such notifications would be discarded later after aggregation + if (!notification.userId && logger) { // such notifications would be discarded later after aggregation logger.info(`Unable to find user with handle ${notification.userHandle}`); } }); @@ -102,12 +102,11 @@ const getNotificationsForMentionedUser = (logger, eventConfig, content) => { logger.error(error); logger.info('Unable to send notification to mentioned user'); } - //resolves with empty notification which essentially means we are unable to send notification to mentioned user + // resolves with empty notification which essentially means we are unable to send notification to mentioned user return Promise.resolve([]); }); - } else { - return Promise.resolve([]); } + return Promise.resolve([]); }; /** diff --git a/consumer.js b/consumer.js index 5313f0a..fe84c51 100644 --- a/consumer.js +++ b/consumer.js @@ -13,6 +13,7 @@ const healthcheck = require('topcoder-healthcheck-dropin'); const logger = require('./src/common/logger'); const models = require('./src/models'); const processors = require('./src/processors'); +const notificationStreamWS = require('./src/notificationStreamWS'); /** @@ -24,6 +25,9 @@ function startKafkaConsumer() { options.ssl = { cert: config.KAFKA_CLIENT_CERT, key: config.KAFKA_CLIENT_CERT_KEY }; } const consumer = new Kafka.GroupConsumer(options); + // Setup websocket server + logger.debug('Setting ws socket'); + notificationStreamWS.setup(); // data handler const messageHandler = (messageSet, topic, partition) => Promise.each(messageSet, (m) => { @@ -90,6 +94,10 @@ function startKafkaConsumer() { }))); // logging logger.info(`Saved ${notifications.length} notifications`); + logger.info(`Going to push ${notifications.length} notifications to websocket.`); + // Trigger websocket notifications + yield notificationStreamWS.pushNotifications(topic, notifications, handlerRuleSets); + logger.info(`Pushed ${notifications.length} notifications to websocket`); /* logger.info(` for users: ${ _.map(notifications, (n) => n.userId).join(', ') }`); */ diff --git a/package-lock.json b/package-lock.json index 17a40e0..de4d99e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "integrity": "sha512-lyJ8sW1PbY3uwuvpOBZ9zMYKshMnQpXmeDHh8dj9j2nJm/xrW0FgB5gLSYOArj5X0IfaXnmhFoJnhS4KbqIMug==", "dev": true, "requires": { - "@types/babel-types": "7.0.4" + "@types/babel-types": "*" } }, "@types/bluebird": { @@ -29,8 +29,8 @@ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "requires": { - "@types/connect": "3.4.32", - "@types/node": "10.0.8" + "@types/connect": "*", + "@types/node": "*" } }, "@types/connect": { @@ -38,7 +38,7 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", "requires": { - "@types/node": "10.0.8" + "@types/node": "*" } }, "@types/events": { @@ -51,9 +51,9 @@ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.1.tgz", "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==", "requires": { - "@types/body-parser": "1.17.0", - "@types/express-serve-static-core": "4.11.1", - "@types/serve-static": "1.13.2" + "@types/body-parser": "*", + "@types/express-serve-static-core": "*", + "@types/serve-static": "*" } }, "@types/express-jwt": { @@ -61,8 +61,8 @@ "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz", "integrity": "sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI=", "requires": { - "@types/express": "4.11.1", - "@types/express-unless": "0.0.32" + "@types/express": "*", + "@types/express-unless": "*" } }, "@types/express-serve-static-core": { @@ -70,8 +70,8 @@ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz", "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==", "requires": { - "@types/events": "1.2.0", - "@types/node": "10.0.8" + "@types/events": "*", + "@types/node": "*" } }, "@types/express-unless": { @@ -79,7 +79,7 @@ "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.0.32.tgz", "integrity": "sha512-6YpJyFNlDDnPnRjMOvJCoDYlSDDmG/OEEUsPk7yhNkL4G9hUYtgab6vi1CcWsGSSSM0CsvNlWTG+ywAGnvF03g==", "requires": { - "@types/express": "4.11.1" + "@types/express": "*" } }, "@types/geojson": { @@ -107,8 +107,8 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", "requires": { - "@types/express-serve-static-core": "4.11.1", - "@types/mime": "2.0.0" + "@types/express-serve-static-core": "*", + "@types/mime": "*" } }, "CSSselect": { @@ -116,8 +116,8 @@ "resolved": "https://registry.npmjs.org/CSSselect/-/CSSselect-0.4.1.tgz", "integrity": "sha1-+Kt+H4QYzmPNput713ioXX7EkrI=", "requires": { - "CSSwhat": "0.4.7", - "domutils": "1.4.3" + "CSSwhat": "0.4", + "domutils": "1.4" }, "dependencies": { "domutils": { @@ -125,7 +125,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.3.tgz", "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=", "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } } } @@ -146,7 +146,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -162,7 +162,7 @@ "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.4" }, "dependencies": { "acorn": { @@ -179,7 +179,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -202,7 +202,7 @@ "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, "requires": { - "es6-promisify": "5.0.0" + "es6-promisify": "^5.0.0" } }, "ajv": { @@ -210,10 +210,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -227,9 +227,9 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -242,7 +242,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "requires": { - "ansi-wrap": "0.1.0" + "ansi-wrap": "^0.1.0" } }, "ansi-escapes": { @@ -281,8 +281,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "aproba": { @@ -303,8 +303,8 @@ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { @@ -312,8 +312,8 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", "requires": { - "underscore": "1.7.0", - "underscore.string": "2.4.0" + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" } }, "arr-diff": { @@ -366,7 +366,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -415,9 +415,9 @@ "integrity": "sha1-ZyT54b7loekjiEaZs0//9anWvsU=", "dev": true, "requires": { - "is-extendable": "0.1.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7" + "is-extendable": "^0.1.1", + "kind-of": "^2.0.0", + "lazy-cache": "^0.2.2" }, "dependencies": { "is-extendable": { @@ -432,7 +432,7 @@ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.0.2" } }, "lazy-cache": { @@ -488,7 +488,7 @@ "resolved": "https://registry.npmjs.org/async-replace/-/async-replace-1.0.1.tgz", "integrity": "sha1-0/CFfM0C8elOsUnLX4nVisTwIdY=", "requires": { - "async": "1.5.2" + "async": "^1.4.2" }, "dependencies": { "async": { @@ -510,17 +510,24 @@ "dev": true }, "auth0-js": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-9.6.1.tgz", - "integrity": "sha1-kI4bxemnxveHsBmtU9dojKqi9I4=", - "requires": { - "base64-js": "1.3.0", - "idtoken-verifier": "1.2.0", - "js-cookie": "2.2.0", - "qs": "6.5.1", - "superagent": "3.8.3", - "url-join": "1.1.0", - "winchan": "0.2.0" + "version": "9.11.3", + "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-9.11.3.tgz", + "integrity": "sha512-86EGbaXPHBuyYPPPpvkckH7rCnEgS14DHsK64v2tb4ph4NsZ+peW6pjwBHkOdz4Ytd/ibhGTYCEbA9xdHWSqiA==", + "requires": { + "base64-js": "^1.3.0", + "idtoken-verifier": "^1.4.1", + "js-cookie": "^2.2.0", + "qs": "^6.7.0", + "superagent": "^3.8.3", + "url-join": "^4.0.1", + "winchan": "^0.2.2" + }, + "dependencies": { + "qs": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.8.0.tgz", + "integrity": "sha512-tPSkj8y92PfZVbinY1n84i1Qdx75lZjMQYx9WZhnkofyxzw2r7Ho39G3/aEvSUdebxpnnM4LZJCtvE/Aq3+s9w==" + } } }, "autolinker": { @@ -551,7 +558,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.6.1.tgz", "integrity": "sha1-eIuUtvY04luRvWxd9y1GdFevsAA=", "requires": { - "core-js": "2.5.7" + "core-js": "^2.1.0" } }, "babel-types": { @@ -560,10 +567,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" }, "dependencies": { "babel-runtime": { @@ -572,8 +579,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } } } @@ -595,7 +602,7 @@ "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", "requires": { - "precond": "0.2.3" + "precond": "0.2" } }, "balanced-match": { @@ -609,13 +616,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -624,7 +631,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -633,7 +640,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -642,7 +649,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -651,9 +658,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -676,9 +683,9 @@ "dev": true }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "base64id": { "version": "1.0.0", @@ -698,7 +705,7 @@ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "beeper": { @@ -721,9 +728,9 @@ "resolved": "https://registry.npmjs.org/bin-protocol/-/bin-protocol-3.0.4.tgz", "integrity": "sha1-RlqdNQb+sOEmtStbIWDZNuFbJ/Q=", "requires": { - "lodash": "4.17.10", - "long": "3.2.0", - "protocol-buffers-schema": "3.3.2" + "lodash": "^4.1.0", + "long": "^3.0.3", + "protocol-buffers-schema": "^3.0.0" } }, "binary-extensions": { @@ -749,7 +756,7 @@ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "bluebird": { @@ -763,15 +770,15 @@ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" } }, "boolbase": { @@ -785,7 +792,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "brace-expansion": { @@ -793,7 +800,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -803,9 +810,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "browser-sync": { @@ -814,16 +821,16 @@ "integrity": "sha512-3cVW8Ft3sPQ1t9gqZXBDZhTyRce8NW4wf5KzpCYcg6fWjPbyt+vZLvEo+sTq7c7eNQhi8lInQWbjIFEpoM2f7Q==", "dev": true, "requires": { - "browser-sync-ui": "1.0.1", + "browser-sync-ui": "v1.0.1", "bs-recipes": "1.3.4", "chokidar": "1.7.0", "connect": "3.6.6", - "connect-history-api-fallback": "1.5.0", - "dev-ip": "1.0.1", + "connect-history-api-fallback": "^1.5.0", + "dev-ip": "^1.0.1", "easy-extender": "2.3.2", "eazy-logger": "3.0.2", - "etag": "1.8.1", - "fresh": "0.5.2", + "etag": "^1.8.1", + "fresh": "^0.5.2", "fs-extra": "3.0.1", "http-proxy": "1.15.2", "immutable": "3.8.2", @@ -832,7 +839,7 @@ "opn": "4.0.2", "portscanner": "2.1.1", "qs": "6.2.3", - "raw-body": "2.3.2", + "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", "serve-index": "1.9.1", @@ -855,9 +862,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "qs": { @@ -878,20 +885,20 @@ "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.1.0" } } } @@ -903,11 +910,11 @@ "dev": true, "requires": { "async-each-series": "0.1.1", - "connect-history-api-fallback": "1.5.0", - "immutable": "3.8.2", + "connect-history-api-fallback": "^1.1.0", + "immutable": "^3.7.6", "server-destroy": "1.0.1", "socket.io-client": "2.0.4", - "stream-throttle": "0.1.3" + "stream-throttle": "^0.1.3" } }, "bs-recipes": { @@ -947,10 +954,10 @@ "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", "requires": { - "dtrace-provider": "0.8.7", - "moment": "2.22.1", - "mv": "2.1.1", - "safe-json-stringify": "1.2.0" + "dtrace-provider": "~0.8", + "moment": "^2.10.6", + "mv": "~2", + "safe-json-stringify": "~1" } }, "bytes": { @@ -964,15 +971,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "caller-path": { @@ -981,7 +988,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsite": { @@ -1006,8 +1013,8 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, "caseless": { @@ -1020,8 +1027,8 @@ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -1029,11 +1036,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "character-parser": { @@ -1042,7 +1049,7 @@ "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", "dev": true, "requires": { - "is-regex": "1.0.4" + "is-regex": "^1.0.3" } }, "cheerio": { @@ -1050,10 +1057,10 @@ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.13.1.tgz", "integrity": "sha1-SK8RNFYbNSf4PZFWxPmo69grBuw=", "requires": { - "CSSselect": "0.4.1", - "entities": "0.5.0", - "htmlparser2": "3.4.0", - "underscore": "1.5.2" + "CSSselect": "~0.4.0", + "entities": "0.x", + "htmlparser2": "~3.4.0", + "underscore": "~1.5" }, "dependencies": { "domhandler": { @@ -1061,7 +1068,7 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz", "integrity": "sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I=", "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -1069,7 +1076,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz", "integrity": "sha1-mtTVm1r2ymhMYv5tdo7xcOcN8ZI=", "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "entities": { @@ -1082,10 +1089,10 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.4.0.tgz", "integrity": "sha1-oc1l9YI60oXhnWOwha1yLQpR6uc=", "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.2.1", - "domutils": "1.3.0", - "readable-stream": "1.1.14" + "domelementtype": "1", + "domhandler": "2.2", + "domutils": "1.3", + "readable-stream": "1.1" } }, "isarray": { @@ -1098,10 +1105,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1122,15 +1129,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.7", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "circular-json": { @@ -1144,7 +1151,7 @@ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" } }, "class-utils": { @@ -1153,10 +1160,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1165,7 +1172,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -1176,7 +1183,7 @@ "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "0.5.x" } }, "cli-cursor": { @@ -1185,7 +1192,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-width": { @@ -1199,8 +1206,8 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -1227,8 +1234,8 @@ "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", "requires": { - "is-bluebird": "1.0.2", - "shimmer": "1.2.0" + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" } }, "co": { @@ -1241,7 +1248,7 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -1271,8 +1278,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-support": { @@ -1291,7 +1298,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -1327,10 +1334,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "config": { @@ -1350,7 +1357,7 @@ "requires": { "debug": "2.6.9", "finalhandler": "1.1.0", - "parseurl": "1.3.2", + "parseurl": "~1.3.2", "utils-merge": "1.0.1" }, "dependencies": { @@ -1361,12 +1368,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" } }, "statuses": { @@ -1405,10 +1412,10 @@ "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", "dev": true, "requires": { - "@types/babel-types": "7.0.4", - "@types/babylon": "6.16.3", - "babel-types": "6.26.0", - "babylon": "6.18.0" + "@types/babel-types": "^7.0.0", + "@types/babylon": "^6.16.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0" } }, "contains-path": { @@ -1463,8 +1470,8 @@ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" + "object-assign": "^4", + "vary": "^1" } }, "cross-spawn": { @@ -1473,8 +1480,8 @@ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", "dev": true, "requires": { - "lru-cache": "4.0.2", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "cryptiles": { @@ -1482,7 +1489,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -1490,7 +1497,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } } } @@ -1506,7 +1513,7 @@ "integrity": "sha512-zdlrprCn9RutJI5n42OEydMNErhVRTzPd7hb7DzbOkgSEHERjOlRqKd4nWEDi+626vstikcjN8RRtG/b3p2T/g==", "dev": true, "requires": { - "cssom": "0.3.4" + "cssom": "^0.3.2" } }, "css-select": { @@ -1515,10 +1522,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" }, "dependencies": { "domutils": { @@ -1527,8 +1534,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } } } @@ -1538,8 +1545,8 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz", "integrity": "sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A==", "requires": { - "mdn-data": "1.1.4", - "source-map": "0.5.7" + "mdn-data": "^1.0.0", + "source-map": "^0.5.3" } }, "css-what": { @@ -1567,7 +1574,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cycle": { @@ -1581,7 +1588,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.42" + "es5-ext": "^0.10.9" } }, "dashdash": { @@ -1589,7 +1596,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "data-uri-to-buffer": { @@ -1603,8 +1610,8 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "meow": "^3.3.0" } }, "debug": { @@ -1638,7 +1645,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.4" + "clone": "^1.0.2" } }, "define-property": { @@ -1647,8 +1654,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -1657,7 +1664,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1666,7 +1673,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1675,9 +1682,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -1694,9 +1701,9 @@ "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", "dev": true, "requires": { - "ast-types": "0.11.5", - "escodegen": "1.11.0", - "esprima": "3.1.3" + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" }, "dependencies": { "esprima": { @@ -1713,13 +1720,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.4.5" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -1767,8 +1774,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "doctypes": { @@ -1782,8 +1789,8 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -1803,7 +1810,7 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -1811,8 +1818,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "dottie": { @@ -1821,12 +1828,20 @@ "integrity": "sha1-2hkZgci41xPKARXViYzzl8Lw3dA=" }, "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", "optional": true, "requires": { - "nan": "2.10.0" + "nan": "^2.14.0" + }, + "dependencies": { + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "optional": true + } } }, "duplexer2": { @@ -1834,7 +1849,7 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" }, "dependencies": { "isarray": { @@ -1847,10 +1862,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1866,7 +1881,7 @@ "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=", "dev": true, "requires": { - "lodash": "3.10.1" + "lodash": "^3.10.1" }, "dependencies": { "lodash": { @@ -1883,7 +1898,7 @@ "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", "dev": true, "requires": { - "tfunk": "3.1.0" + "tfunk": "^3.0.1" } }, "ecc-jsbn": { @@ -1892,7 +1907,7 @@ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ecdsa-sig-formatter": { @@ -1900,7 +1915,7 @@ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "editions": { @@ -1924,7 +1939,7 @@ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", "dev": true, "requires": { - "once": "1.3.3" + "once": "~1.3.0" }, "dependencies": { "once": { @@ -1933,7 +1948,7 @@ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } } } @@ -1944,13 +1959,13 @@ "integrity": "sha1-+H6MkLuAzT9YWXrFaVk+5G2idC0=", "dev": true, "requires": { - "assign-deep": "0.4.7", - "collection-visit": "0.2.3", - "get-value": "1.3.1", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "object.omit": "2.0.1", - "set-value": "0.2.0" + "assign-deep": "^0.4.3", + "collection-visit": "^0.2.0", + "get-value": "^1.2.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "object.omit": "^2.0.0", + "set-value": "^0.2.0" }, "dependencies": { "assign-deep": { @@ -1959,9 +1974,9 @@ "integrity": "sha512-tYlXoIH6RM2rclkx9uLXDKPKrDGsnxoWHE2J5+9tq2StAXeAAo8hLPZtOqwt22p8r6H5hnMgd8Oz8qPJl3W31g==", "dev": true, "requires": { - "assign-symbols": "0.1.1", - "is-primitive": "2.0.0", - "kind-of": "5.1.0" + "assign-symbols": "^0.1.1", + "is-primitive": "^2.0.0", + "kind-of": "^5.0.2" }, "dependencies": { "kind-of": { @@ -1984,9 +1999,9 @@ "integrity": "sha1-L2JIPK7MlfCDuaRUo+6eYTmteVc=", "dev": true, "requires": { - "lazy-cache": "2.0.2", - "map-visit": "0.1.5", - "object-visit": "0.3.4" + "lazy-cache": "^2.0.1", + "map-visit": "^0.1.5", + "object-visit": "^0.3.4" }, "dependencies": { "lazy-cache": { @@ -1995,7 +2010,7 @@ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", "dev": true, "requires": { - "set-getter": "0.1.0" + "set-getter": "^0.1.0" } } } @@ -2006,10 +2021,10 @@ "integrity": "sha1-isfvTyA4I5KyZGVI+bmtLcbIlkI=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "is-extendable": "0.1.1", - "lazy-cache": "0.2.7", - "noncharacters": "1.1.0" + "arr-flatten": "^1.0.1", + "is-extendable": "^0.1.1", + "lazy-cache": "^0.2.4", + "noncharacters": "^1.1.0" } }, "is-extendable": { @@ -2033,7 +2048,7 @@ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.0.2" } }, "lazy-cache": { @@ -2048,8 +2063,8 @@ "integrity": "sha1-2+Q5J85VJbgN/BVzpE1oxR8mgWs=", "dev": true, "requires": { - "lazy-cache": "2.0.2", - "object-visit": "0.3.4" + "lazy-cache": "^2.0.1", + "object-visit": "^0.3.4" }, "dependencies": { "lazy-cache": { @@ -2058,7 +2073,7 @@ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", "dev": true, "requires": { - "set-getter": "0.1.0" + "set-getter": "^0.1.0" } } } @@ -2069,7 +2084,7 @@ "integrity": "sha1-rhXPhvCy/dVRdxY2RIRSxUw9qCk=", "dev": true, "requires": { - "isobject": "2.1.0" + "isobject": "^2.0.0" } }, "set-value": { @@ -2078,8 +2093,8 @@ "integrity": "sha1-c7CmglwVjGoWqCu9yVd1vyqCX6s=", "dev": true, "requires": { - "isobject": "1.0.2", - "noncharacters": "1.1.0" + "isobject": "^1.0.0", + "noncharacters": "^1.1.0" }, "dependencies": { "isobject": { @@ -2098,12 +2113,12 @@ "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", - "ws": "3.3.3" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { "debug": { @@ -2125,14 +2140,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { @@ -2154,10 +2169,10 @@ "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.7", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.4", - "has-binary2": "1.0.3" + "has-binary2": "~1.0.2" } }, "entities": { @@ -2170,7 +2185,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es5-ext": { @@ -2179,9 +2194,9 @@ "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -2190,9 +2205,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -2201,12 +2216,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-promise": { @@ -2221,7 +2236,7 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "es6-promise": "4.2.4" + "es6-promise": "^4.0.3" } }, "es6-set": { @@ -2230,11 +2245,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -2243,8 +2258,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -2253,10 +2268,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-html": { @@ -2275,11 +2290,11 @@ "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "esprima": { @@ -2303,10 +2318,10 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint": { @@ -2315,39 +2330,39 @@ "integrity": "sha1-5MyPoPAJ+4KaquI4VaKTYL4fbBE=", "dev": true, "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.5.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" + "chalk": "^1.1.3", + "concat-stream": "^1.4.6", + "debug": "^2.1.1", + "doctrine": "^1.2.2", + "es6-map": "^0.1.3", + "escope": "^3.6.0", + "espree": "^3.1.6", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^1.1.1", + "glob": "^7.0.3", + "globals": "^9.2.0", + "ignore": "^3.1.2", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "optionator": "^0.8.1", + "path-is-absolute": "^1.0.0", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.6.0", + "strip-json-comments": "~1.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" }, "dependencies": { "glob": { @@ -2356,12 +2371,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -2378,9 +2393,9 @@ "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", "dev": true, "requires": { - "debug": "2.6.9", - "object-assign": "4.1.1", - "resolve": "1.7.1" + "debug": "^2.2.0", + "object-assign": "^4.0.1", + "resolve": "^1.1.6" } }, "eslint-plugin-import": { @@ -2389,22 +2404,22 @@ "integrity": "sha1-svoH68xTUE0PKkR3WC7Iv/GHG58=", "dev": true, "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.3.0", - "es6-map": "0.1.5", - "es6-set": "0.1.5", - "eslint-import-resolver-node": "0.2.3", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "lodash.endswith": "4.2.1", - "lodash.find": "4.6.0", - "lodash.findindex": "4.6.0", - "minimatch": "3.0.4", - "object-assign": "4.1.1", - "pkg-dir": "1.0.0", - "pkg-up": "1.0.0" + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.2.0", + "doctrine": "1.3.x", + "es6-map": "^0.1.3", + "es6-set": "^0.1.4", + "eslint-import-resolver-node": "^0.2.0", + "has": "^1.0.1", + "lodash.cond": "^4.3.0", + "lodash.endswith": "^4.0.1", + "lodash.find": "^4.3.0", + "lodash.findindex": "^4.3.0", + "minimatch": "^3.0.3", + "object-assign": "^4.0.1", + "pkg-dir": "^1.0.0", + "pkg-up": "^1.0.0" }, "dependencies": { "doctrine": { @@ -2413,8 +2428,8 @@ "integrity": "sha1-E+dWgrVVGEJCdvfBc3g0Vu+RPSY=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } } } @@ -2425,8 +2440,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { @@ -2441,7 +2456,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2467,8 +2482,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" + "d": "1", + "es5-ext": "~0.10.14" } }, "eventemitter3": { @@ -2489,12 +2504,12 @@ "integrity": "sha1-Ed5aLyOMhXWAZO86MuCZSrpaMFs=", "dev": true, "requires": { - "engine": "0.1.12", - "get-value": "1.3.1", - "is-primitive": "2.0.0", - "kind-of": "2.0.1", - "lazy-cache": "0.2.7", - "regex-flags": "0.1.0" + "engine": "^0.1.8", + "get-value": "^1.2.1", + "is-primitive": "^2.0.0", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "regex-flags": "^0.1.0" }, "dependencies": { "get-value": { @@ -2503,10 +2518,10 @@ "integrity": "sha1-isfvTyA4I5KyZGVI+bmtLcbIlkI=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "is-extendable": "0.1.1", - "lazy-cache": "0.2.7", - "noncharacters": "1.1.0" + "arr-flatten": "^1.0.1", + "is-extendable": "^0.1.1", + "lazy-cache": "^0.2.4", + "noncharacters": "^1.1.0" } }, "is-extendable": { @@ -2521,7 +2536,7 @@ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.0.2" } }, "lazy-cache": { @@ -2538,7 +2553,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -2547,7 +2562,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" } }, "expand-tilde": { @@ -2556,7 +2571,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "express": { @@ -2564,36 +2579,36 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", + "proxy-addr": "~2.0.3", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "statuses": { @@ -2619,8 +2634,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "extglob": { @@ -2629,7 +2644,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "extract-css": { @@ -2638,10 +2653,10 @@ "integrity": "sha1-vlOQ9AnIWwy18buQKZx35RaIqN4=", "dev": true, "requires": { - "batch": "0.6.1", - "href-content": "1.0.3", - "list-stylesheets": "1.2.1", - "style-data": "1.3.0" + "batch": "^0.6.1", + "href-content": "^1.0.2", + "list-stylesheets": "^1.2.1", + "style-data": "^1.3.0" } }, "extsprintf": { @@ -2660,9 +2675,9 @@ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" } }, "fast-deep-equal": { @@ -2687,8 +2702,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "file-entry-cache": { @@ -2697,8 +2712,8 @@ "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "file-uri-to-path": { @@ -2719,11 +2734,11 @@ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" }, "dependencies": { "isobject": { @@ -2743,12 +2758,12 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" }, "dependencies": { "statuses": { @@ -2769,8 +2784,8 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "findup-sync": { @@ -2779,10 +2794,10 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "dependencies": { "array-unique": { @@ -2797,16 +2812,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -2815,7 +2830,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2826,13 +2841,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2841,7 +2856,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2850,7 +2865,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -2859,7 +2874,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2868,7 +2883,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2879,7 +2894,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2888,7 +2903,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2899,9 +2914,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -2918,14 +2933,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2934,7 +2949,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -2943,7 +2958,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2954,10 +2969,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -2966,7 +2981,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2977,7 +2992,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2986,7 +3001,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2995,9 +3010,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extendable": { @@ -3018,7 +3033,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } }, "is-number": { @@ -3027,7 +3042,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3036,7 +3051,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3053,19 +3068,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } } } @@ -3076,11 +3091,11 @@ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.2" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" } }, "first-chunk-stream": { @@ -3101,10 +3116,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, "flatten": { @@ -3118,8 +3133,8 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-0.0.7.tgz", "integrity": "sha1-NLkLqyqRGqNHVx2pDyK9NuzYqRk=", "requires": { - "debug": "2.6.9", - "stream-consume": "0.1.1" + "debug": "^2.2.0", + "stream-consume": "^0.1.0" } }, "for-in": { @@ -3134,7 +3149,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "forever-agent": { @@ -3147,9 +3162,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "^2.1.12" } }, "formidable": { @@ -3168,7 +3183,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -3182,9 +3197,9 @@ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, "fs.realpath": { @@ -3200,8 +3215,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.3" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -3227,8 +3242,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -3241,7 +3256,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3305,7 +3320,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.3.5" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -3320,14 +3335,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -3336,12 +3351,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3356,7 +3371,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { @@ -3365,7 +3380,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3374,8 +3389,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3394,7 +3409,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3408,7 +3423,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3421,8 +3436,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, "minizlib": { @@ -3431,7 +3446,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.3.5" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -3454,9 +3469,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.24", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -3465,16 +3480,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.4", - "nopt": "4.0.1", - "npm-packlist": "1.2.0", - "npmlog": "4.1.2", - "rc": "1.2.8", - "rimraf": "2.6.3", - "semver": "5.6.0", - "tar": "4.4.8" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3483,8 +3498,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -3499,8 +3514,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.5" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -3509,10 +3524,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -3531,7 +3546,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3552,8 +3567,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3574,10 +3589,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3594,13 +3609,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -3609,7 +3624,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" } }, "safe-buffer": { @@ -3652,9 +3667,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3663,7 +3678,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -3671,7 +3686,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3686,13 +3701,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -3707,7 +3722,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { @@ -3728,10 +3743,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.4.5" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "ftp": { @@ -3740,7 +3755,7 @@ "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", "dev": true, "requires": { - "readable-stream": "1.1.14", + "readable-stream": "1.1.x", "xregexp": "2.0.0" }, "dependencies": { @@ -3756,10 +3771,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3782,14 +3797,14 @@ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "gaze": { @@ -3798,7 +3813,7 @@ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "globule": "0.1.0" + "globule": "~0.1.0" } }, "generate-function": { @@ -3813,7 +3828,7 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "generic-pool": { @@ -3843,12 +3858,12 @@ "integrity": "sha512-ZD325dMZOgerGqF/rF6vZXyFGTAay62svjQIT+X/oU2PtxYpFxvSkbsdi+oxIrsNxlZVd4y8wUDqkaExWTI/Cw==", "dev": true, "requires": { - "data-uri-to-buffer": "1.2.0", - "debug": "2.6.9", - "extend": "3.0.1", - "file-uri-to-path": "1.0.0", - "ftp": "0.3.10", - "readable-stream": "2.3.6" + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "3", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" } }, "get-value": { @@ -3862,7 +3877,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -3870,11 +3885,11 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -3883,8 +3898,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -3893,7 +3908,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "glob-stream": { @@ -3902,12 +3917,12 @@ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" }, "dependencies": { "glob": { @@ -3916,10 +3931,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, "isarray": { @@ -3934,7 +3949,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } }, "readable-stream": { @@ -3943,10 +3958,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3961,8 +3976,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -3973,7 +3988,7 @@ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { - "gaze": "0.5.2" + "gaze": "^0.5.1" } }, "glob2base": { @@ -3982,7 +3997,7 @@ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "find-index": "0.1.1" + "find-index": "^0.1.1" } }, "global-modules": { @@ -3991,9 +4006,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { @@ -4002,11 +4017,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.1" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "globals": { @@ -4021,12 +4036,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "glob": { @@ -4035,12 +4050,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -4051,9 +4066,9 @@ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" }, "dependencies": { "glob": { @@ -4062,9 +4077,9 @@ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" } }, "graceful-fs": { @@ -4097,8 +4112,8 @@ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -4109,7 +4124,7 @@ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "sparkles": "1.0.1" + "sparkles": "^1.0.0" } }, "graceful-fs": { @@ -4123,19 +4138,19 @@ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.1.0", - "liftoff": "2.5.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.2", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" }, "dependencies": { "dateformat": { @@ -4150,24 +4165,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" } }, "lodash._reinterpolate": { @@ -4182,7 +4197,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.keys": { @@ -4191,9 +4206,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.template": { @@ -4202,15 +4217,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -4219,8 +4234,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "minimist": { @@ -4241,8 +4256,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -4254,13 +4269,13 @@ "integrity": "sha1-yOGFMBwglRH6TDxFe2G1wXtNH5s=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "gulp-util": "3.0.8", - "lazy-cache": "0.2.7", - "parse-filepath": "0.6.3", - "placeholders": "0.2.0", - "rewrite-ext": "0.2.0", - "through2": "2.0.3" + "extend-shallow": "^2.0.1", + "gulp-util": "^3.0.7", + "lazy-cache": "^0.2.4", + "parse-filepath": "^0.6.3", + "placeholders": "^0.2.0", + "rewrite-ext": "^0.2.0", + "through2": "^2.0.0" }, "dependencies": { "dateformat": { @@ -4275,7 +4290,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "gulp-util": { @@ -4284,24 +4299,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" } }, "is-absolute": { @@ -4310,8 +4325,8 @@ "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", "dev": true, "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" + "is-relative": "^0.2.1", + "is-windows": "^0.2.0" } }, "is-extendable": { @@ -4326,7 +4341,7 @@ "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", "dev": true, "requires": { - "is-unc-path": "0.1.2" + "is-unc-path": "^0.1.1" } }, "is-unc-path": { @@ -4335,7 +4350,7 @@ "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.0" } }, "is-windows": { @@ -4362,7 +4377,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.keys": { @@ -4371,9 +4386,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.template": { @@ -4382,15 +4397,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -4399,8 +4414,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "minimist": { @@ -4421,8 +4436,8 @@ "integrity": "sha1-OOF6c+Xk5ndrrpUG/DzLFLw6K4A=", "dev": true, "requires": { - "is-absolute": "0.2.6", - "map-cache": "0.2.2" + "is-absolute": "^0.2.2", + "map-cache": "^0.2.0" } }, "vinyl": { @@ -4431,8 +4446,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -4444,9 +4459,9 @@ "integrity": "sha1-8mcI5PYnn+CoDFoniKPFk5s42JQ=", "dev": true, "requires": { - "inline-css": "2.4.0", - "plugin-error": "1.0.1", - "through2": "2.0.3" + "inline-css": "^2.4.0", + "plugin-error": "^1.0.1", + "through2": "^2.0.3" } }, "gulp-inline-source": { @@ -4454,9 +4469,9 @@ "resolved": "https://registry.npmjs.org/gulp-inline-source/-/gulp-inline-source-3.2.0.tgz", "integrity": "sha512-Ky5SKDgM517QZ6Jw9rKhYz+ynX9T4sr72iUW2fbOhqzN74D37DzWZDZnbKLSwdlTbbqt7JFq/JmUmT12qroW+A==", "requires": { - "inline-source": "5.2.7", - "plugin-error": "1.0.1", - "through2": "2.0.3" + "inline-source": "~5.2.6", + "plugin-error": "~1.0.1", + "through2": "~2.0.0" } }, "gulp-pug": { @@ -4465,10 +4480,10 @@ "integrity": "sha1-RpgsFDnAlMNgVC7YulyILTu3Ec8=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "object-assign": "4.1.1", - "pug": "2.0.3", - "through2": "2.0.3" + "gulp-util": "^3.0.2", + "object-assign": "^4.1.0", + "pug": ">=2.0.0-alpha <3", + "through2": "^2.0.0" }, "dependencies": { "dateformat": { @@ -4483,24 +4498,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "dependencies": { "object-assign": { @@ -4523,7 +4538,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.keys": { @@ -4532,9 +4547,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.template": { @@ -4543,15 +4558,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -4560,8 +4575,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "minimist": { @@ -4576,8 +4591,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -4595,8 +4610,8 @@ "integrity": "sha512-lgdmrFSI1SdhNMXZQbrC75MOl1UjYWlOWNbNRnz+F/KHmgxt3l6XstBoAYIdadwETFyG/6i+vWUSCawdC3pqOw==", "requires": { "istextorbinary": "2.2.1", - "readable-stream": "2.3.6", - "replacestream": "4.0.3" + "readable-stream": "^2.0.1", + "replacestream": "^4.0.0" } }, "gulp-sass": { @@ -4605,11 +4620,11 @@ "integrity": "sha512-UATbRpSDsyXCnpYSPBUEvdvtSEzksJs7/oQ0CujIpzKqKrO6vlnYwhX2UTsGrf4rNLwqlSSaM271It0uHYvJ3Q==", "dev": true, "requires": { - "gulp-util": "3.0.8", - "lodash.clonedeep": "4.5.0", - "node-sass": "4.9.2", - "through2": "2.0.3", - "vinyl-sourcemaps-apply": "0.2.1" + "gulp-util": "^3.0", + "lodash.clonedeep": "^4.3.2", + "node-sass": "^4.8.3", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" }, "dependencies": { "dateformat": { @@ -4624,24 +4639,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" } }, "lodash._reinterpolate": { @@ -4656,7 +4671,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.keys": { @@ -4665,9 +4680,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.template": { @@ -4676,15 +4691,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -4693,8 +4708,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "minimist": { @@ -4715,8 +4730,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -4727,12 +4742,12 @@ "resolved": "https://registry.npmjs.org/gulp-smoosher/-/gulp-smoosher-0.0.9.tgz", "integrity": "sha1-IiqiHu5TEzzvKL8ki1xJdbid2x8=", "requires": { - "async": "0.9.2", - "async-replace": "1.0.1", - "cheerio": "0.13.1", - "gulp-util": "2.2.20", - "lodash": "3.10.1", - "through2": "0.4.2" + "async": "^0.9.0", + "async-replace": "^1.0.0", + "cheerio": "~0.13.1", + "gulp-util": "~2.2.14", + "lodash": "^3.10.1", + "through2": "~0.4.1" }, "dependencies": { "async": { @@ -4755,10 +4770,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4771,8 +4786,8 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", "requires": { - "readable-stream": "1.0.34", - "xtend": "2.1.2" + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" } }, "xtend": { @@ -4780,7 +4795,7 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", "requires": { - "object-keys": "0.4.0" + "object-keys": "~0.4.0" } } } @@ -4790,14 +4805,14 @@ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", "requires": { - "chalk": "0.5.1", - "dateformat": "1.0.12", - "lodash._reinterpolate": "2.4.1", - "lodash.template": "2.4.1", - "minimist": "0.2.0", - "multipipe": "0.1.2", - "through2": "0.5.1", - "vinyl": "0.2.3" + "chalk": "^0.5.0", + "dateformat": "^1.0.7-1.2.3", + "lodash._reinterpolate": "^2.4.1", + "lodash.template": "^2.4.1", + "minimist": "^0.2.0", + "multipipe": "^0.1.0", + "through2": "^0.5.0", + "vinyl": "^0.2.1" }, "dependencies": { "ansi-regex": { @@ -4815,11 +4830,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" } }, "has-ansi": { @@ -4827,7 +4842,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.0" } }, "isarray": { @@ -4845,10 +4860,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4861,7 +4876,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.1" } }, "supports-color": { @@ -4874,8 +4889,8 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", "requires": { - "readable-stream": "1.0.34", - "xtend": "3.0.0" + "readable-stream": "~1.0.17", + "xtend": "~3.0.0" } }, "xtend": { @@ -4891,7 +4906,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.1" + "glogg": "^1.0.0" } }, "handlebars": { @@ -4899,10 +4914,10 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "async": { @@ -4915,7 +4930,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "uglify-js": { @@ -4924,9 +4939,9 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -4949,8 +4964,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has": { @@ -4959,7 +4974,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -4967,7 +4982,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-binary2": { @@ -4999,7 +5014,7 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "1.0.1" + "sparkles": "^1.0.0" } }, "has-unicode": { @@ -5014,9 +5029,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -5025,8 +5040,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -5035,7 +5050,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5044,7 +5059,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5055,7 +5070,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5065,8 +5080,8 @@ "resolved": "https://registry.npmjs.org/hashring/-/hashring-3.2.0.tgz", "integrity": "sha1-/aTv3oqiLNuX+x0qZeiEAeHBRM4=", "requires": { - "connection-parse": "0.0.7", - "simple-lru-cache": "0.0.2" + "connection-parse": "0.0.x", + "simple-lru-cache": "0.0.x" } }, "hawk": { @@ -5074,10 +5089,10 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "hoek": { @@ -5091,7 +5106,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { @@ -5105,7 +5120,7 @@ "integrity": "sha1-vjI21iI1EceN4Yrv2cLNTo1TT4c=", "dev": true, "requires": { - "remote-content": "1.0.3" + "remote-content": "^1.0.1" } }, "htmlparser2": { @@ -5113,12 +5128,12 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.4.2", - "domutils": "1.7.0", - "entities": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" } }, "http-errors": { @@ -5126,10 +5141,10 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "statuses": ">= 1.4.0 < 2" } }, "http-proxy": { @@ -5138,8 +5153,8 @@ "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" } }, "http-proxy-agent": { @@ -5148,7 +5163,7 @@ "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, "requires": { - "agent-base": "4.2.1", + "agent-base": "4", "debug": "3.1.0" }, "dependencies": { @@ -5168,9 +5183,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-proxy-agent": { @@ -5179,8 +5194,8 @@ "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0" + "agent-base": "^4.1.0", + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -5200,15 +5215,23 @@ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "idtoken-verifier": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/idtoken-verifier/-/idtoken-verifier-1.2.0.tgz", - "integrity": "sha512-8jmmFHwdPz8L73zGNAXHHOV9yXNC+Z0TUBN5rafpoaFaLFltlIFr1JkQa3FYAETP23eSsulVw0sBiwrE8jqbUg==", - "requires": { - "base64-js": "1.3.0", - "crypto-js": "3.1.9-1", - "jsbn": "0.1.1", - "superagent": "3.8.3", - "url-join": "1.1.0" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/idtoken-verifier/-/idtoken-verifier-1.4.1.tgz", + "integrity": "sha512-BoJc00Gj37hrNlx7NYmd8uJFvvC9/FiWDKugDluP4JmgOGT/AfNlPfnRmi9fHEEqSatnIIr3WTyf0dlhHfSHnA==", + "requires": { + "base64-js": "^1.2.0", + "crypto-js": "^3.1.9-1", + "jsbn": "^0.1.0", + "promise-polyfill": "^8.1.3", + "unfetch": "^4.1.0", + "url-join": "^1.1.0" + }, + "dependencies": { + "url-join": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", + "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=" + } } }, "ignore": { @@ -5240,7 +5263,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexof": { @@ -5259,8 +5282,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5280,15 +5303,15 @@ "integrity": "sha1-3wyZkDuhy68G/PXJMZ/5Gw8a7L8=", "dev": true, "requires": { - "bluebird": "3.5.1", - "cheerio": "0.22.0", - "css-rules": "1.0.3", - "extend": "3.0.1", - "extract-css": "1.2.0", - "flatten": "1.0.2", - "object.pick": "1.3.0", - "slick": "1.12.2", - "specificity": "0.3.2" + "bluebird": "^3.5.1", + "cheerio": "^0.22.0", + "css-rules": "^1.0.3", + "extend": "^3.0.1", + "extract-css": "^1.2.0", + "flatten": "^1.0.2", + "object.pick": "^1.3.0", + "slick": "^1.12.2", + "specificity": "^0.3.2" }, "dependencies": { "cheerio": { @@ -5297,22 +5320,22 @@ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.1", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" } }, "lodash.defaults": { @@ -5328,12 +5351,12 @@ "resolved": "https://registry.npmjs.org/inline-source/-/inline-source-5.2.7.tgz", "integrity": "sha512-RvMOGMXxAqqve4ld128B7TYyNR2aP1LB38dcSpWFmqXrhKPuey1+yFU6kFUgyH8IWX+gRZdWtHN4eQ9d0IpFZg==", "requires": { - "csso": "3.4.0", - "htmlparser2": "3.9.2", - "is-plain-obj": "1.1.0", - "object-assign": "4.1.1", - "svgo": "0.7.2", - "uglify-js": "3.3.28" + "csso": "3.4.x", + "htmlparser2": "3.9.x", + "is-plain-obj": "1.1.x", + "object-assign": "4.1.x", + "svgo": "0.7.x", + "uglify-js": "3.3.x" } }, "inquirer": { @@ -5342,19 +5365,19 @@ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.10", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, "interpret": { @@ -5386,8 +5409,8 @@ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "1.0.0", - "is-windows": "1.0.2" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-accessor-descriptor": { @@ -5396,7 +5419,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-arrayish": { @@ -5410,7 +5433,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-bluebird": { @@ -5428,7 +5451,7 @@ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-data-descriptor": { @@ -5437,7 +5460,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -5446,9 +5469,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -5471,7 +5494,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-expression": { @@ -5480,8 +5503,8 @@ "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", "dev": true, "requires": { - "acorn": "4.0.13", - "object-assign": "4.1.1" + "acorn": "~4.0.2", + "object-assign": "^4.0.1" }, "dependencies": { "acorn": { @@ -5497,7 +5520,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } }, "is-extglob": { @@ -5511,7 +5534,7 @@ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -5520,7 +5543,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { @@ -5529,7 +5552,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-my-ip-valid": { @@ -5544,11 +5567,11 @@ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-number": { @@ -5557,7 +5580,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-number-like": { @@ -5566,7 +5589,7 @@ "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", "dev": true, "requires": { - "lodash.isfinite": "3.3.2" + "lodash.isfinite": "^3.3.2" } }, "is-path-cwd": { @@ -5581,7 +5604,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -5590,7 +5613,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-obj": { @@ -5603,7 +5626,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -5636,7 +5659,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-relative": { @@ -5645,7 +5668,7 @@ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "is-unc-path": "1.0.0" + "is-unc-path": "^1.0.0" } }, "is-resolvable": { @@ -5665,7 +5688,7 @@ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-utf8": { @@ -5710,9 +5733,9 @@ "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", "requires": { - "binaryextensions": "2.1.1", - "editions": "1.3.4", - "textextensions": "2.2.0" + "binaryextensions": "2", + "editions": "^1.3.3", + "textextensions": "2" } }, "items": { @@ -5725,11 +5748,11 @@ "resolved": "https://registry.npmjs.org/joi/-/joi-9.2.0.tgz", "integrity": "sha1-M4WseQGSEwy+Iw6ALsAskhW7/to=", "requires": { - "hoek": "4.2.1", - "isemail": "2.2.1", - "items": "2.1.1", - "moment": "2.22.1", - "topo": "2.0.2" + "hoek": "4.x.x", + "isemail": "2.x.x", + "items": "2.x.x", + "moment": "2.x.x", + "topo": "2.x.x" } }, "js-base64": { @@ -5739,9 +5762,9 @@ "dev": true }, "js-cookie": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz", - "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s=" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" }, "js-stringify": { "version": "1.0.2", @@ -5755,8 +5778,8 @@ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "argparse": { @@ -5765,7 +5788,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } } } @@ -5791,7 +5814,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -5810,7 +5833,7 @@ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -5830,16 +5853,16 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.2.1.tgz", "integrity": "sha512-l8rUBr0fqYYwPc8/ZGrue7GiW7vWdZtZqelxo4Sd5lMvuEeCK8/wS54sEo6tJhdZ6hqfutsj6COgC0d1XdbHGw==", "requires": { - "jws": "3.1.5", - "lodash.includes": "4.3.0", - "lodash.isboolean": "3.0.3", - "lodash.isinteger": "4.0.4", - "lodash.isnumber": "3.0.3", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.once": "4.1.1", - "ms": "2.1.1", - "xtend": "4.0.1" + "jws": "^3.1.4", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "xtend": "^4.0.1" }, "dependencies": { "ms": { @@ -5866,8 +5889,8 @@ "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", "dev": true, "requires": { - "is-promise": "2.1.0", - "promise": "7.3.1" + "is-promise": "^2.0.0", + "promise": "^7.0.1" } }, "jwa": { @@ -5877,7 +5900,7 @@ "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.10", - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" }, "dependencies": { "ecdsa-sig-formatter": { @@ -5885,7 +5908,7 @@ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } } } @@ -5896,11 +5919,11 @@ "integrity": "sha512-xg+fw7FOV4eGdDIEMqQJvPLmFv85h4uN+j/GKwJZAxlCrDQpM8ov1F709xKGEp/dG3l4TUxoSOeN6YK7+KpinQ==", "requires": { "@types/express-jwt": "0.0.34", - "debug": "2.6.9", - "limiter": "1.1.3", - "lru-memoizer": "1.12.0", - "ms": "2.0.0", - "request": "2.85.0" + "debug": "^2.2.0", + "limiter": "^1.1.0", + "lru-memoizer": "^1.6.0", + "ms": "^2.0.0", + "request": "^2.73.0" } }, "jws": { @@ -5908,8 +5931,8 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", "requires": { - "jwa": "1.1.6", - "safe-buffer": "5.1.1" + "jwa": "^1.1.5", + "safe-buffer": "^5.0.1" } }, "kind-of": { @@ -5917,7 +5940,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -5931,26 +5954,26 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "le_node": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/le_node/-/le_node-1.7.1.tgz", - "integrity": "sha1-gxZAna2oK58pZXykBgZj+PEVUdE=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/le_node/-/le_node-1.8.0.tgz", + "integrity": "sha512-NXzjxBskZ4QawTNwlGdRG05jYU0LhV2nxxmP3x7sRMHyROV0jPdyyikO9at+uYrWX3VFt0Y/am11oKITedx0iw==", "requires": { "babel-runtime": "6.6.1", "codependency": "0.1.4", "json-stringify-safe": "5.0.1", - "lodash": "3.9.3", + "lodash": "4.17.11", "reconnect-core": "1.3.0", "semver": "5.1.0" }, "dependencies": { "lodash": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.9.3.tgz", - "integrity": "sha1-AVnoaDL+/8bWHYUrEqlTuZSWvTI=" + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" }, "semver": { "version": "5.1.0", @@ -5965,8 +5988,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "liftoff": { @@ -5975,14 +5998,14 @@ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { - "extend": "3.0.1", - "findup-sync": "2.0.0", - "fined": "1.1.0", - "flagged-respawn": "1.0.0", - "is-plain-object": "2.0.4", - "object.map": "1.0.1", - "rechoir": "0.6.2", - "resolve": "1.7.1" + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" } }, "limiter": { @@ -5996,9 +6019,9 @@ "integrity": "sha1-eX82xaRU8xE2kZc970Lk8Mxm3+s=", "dev": true, "requires": { - "cheerio": "0.22.0", - "extend": "3.0.1", - "object.pick": "1.3.0" + "cheerio": "^0.22.0", + "extend": "^3.0.1", + "object.pick": "^1.3.0" }, "dependencies": { "cheerio": { @@ -6007,22 +6030,22 @@ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.1", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" } }, "lodash.defaults": { @@ -6038,11 +6061,11 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "localtunnel": { @@ -6063,8 +6086,8 @@ "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", "dev": true, "requires": { - "follow-redirects": "1.5.1", - "is-buffer": "1.1.6" + "follow-redirects": "^1.2.5", + "is-buffer": "^1.1.5" } }, "camelcase": { @@ -6079,9 +6102,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "debug": { @@ -6099,7 +6122,7 @@ "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -6119,19 +6142,19 @@ "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" } } } @@ -6169,7 +6192,7 @@ "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", "requires": { - "lodash._htmlescapes": "2.4.1" + "lodash._htmlescapes": "~2.4.1" } }, "lodash._escapestringchar": { @@ -6226,8 +6249,8 @@ "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", "requires": { - "lodash._htmlescapes": "2.4.1", - "lodash.keys": "2.4.1" + "lodash._htmlescapes": "~2.4.1", + "lodash.keys": "~2.4.1" } }, "lodash._root": { @@ -6241,7 +6264,7 @@ "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", "requires": { - "lodash._objecttypes": "2.4.1" + "lodash._objecttypes": "~2.4.1" } }, "lodash.assign": { @@ -6279,8 +6302,8 @@ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", "requires": { - "lodash._objecttypes": "2.4.1", - "lodash.keys": "2.4.1" + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" } }, "lodash.endswith": { @@ -6294,9 +6317,9 @@ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", "requires": { - "lodash._escapehtmlchar": "2.4.1", - "lodash._reunescapedhtml": "2.4.1", - "lodash.keys": "2.4.1" + "lodash._escapehtmlchar": "~2.4.1", + "lodash._reunescapedhtml": "~2.4.1", + "lodash.keys": "~2.4.1" } }, "lodash.filter": { @@ -6372,7 +6395,7 @@ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", "requires": { - "lodash._objecttypes": "2.4.1" + "lodash._objecttypes": "~2.4.1" } }, "lodash.isplainobject": { @@ -6390,9 +6413,9 @@ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", "requires": { - "lodash._isnative": "2.4.1", - "lodash._shimkeys": "2.4.1", - "lodash.isobject": "2.4.1" + "lodash._isnative": "~2.4.1", + "lodash._shimkeys": "~2.4.1", + "lodash.isobject": "~2.4.1" } }, "lodash.map": { @@ -6453,13 +6476,13 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", "requires": { - "lodash._escapestringchar": "2.4.1", - "lodash._reinterpolate": "2.4.1", - "lodash.defaults": "2.4.1", - "lodash.escape": "2.4.1", - "lodash.keys": "2.4.1", - "lodash.templatesettings": "2.4.1", - "lodash.values": "2.4.1" + "lodash._escapestringchar": "~2.4.1", + "lodash._reinterpolate": "~2.4.1", + "lodash.defaults": "~2.4.1", + "lodash.escape": "~2.4.1", + "lodash.keys": "~2.4.1", + "lodash.templatesettings": "~2.4.1", + "lodash.values": "~2.4.1" } }, "lodash.templatesettings": { @@ -6467,8 +6490,8 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", "requires": { - "lodash._reinterpolate": "2.4.1", - "lodash.escape": "2.4.1" + "lodash._reinterpolate": "~2.4.1", + "lodash.escape": "~2.4.1" } }, "lodash.values": { @@ -6476,7 +6499,7 @@ "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", "requires": { - "lodash.keys": "2.4.1" + "lodash.keys": "~2.4.1" } }, "long": { @@ -6494,8 +6517,8 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lru-cache": { @@ -6503,8 +6526,8 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" } }, "lru-memoizer": { @@ -6512,10 +6535,10 @@ "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-1.12.0.tgz", "integrity": "sha1-7+ZXBsyKnMZT+A8NWm6jitlQ41I=", "requires": { - "lock": "0.1.4", - "lodash": "4.17.10", - "lru-cache": "4.0.2", - "very-fast-args": "1.1.0" + "lock": "~0.1.2", + "lodash": "^4.17.4", + "lru-cache": "~4.0.0", + "very-fast-args": "^1.1.0" } }, "make-iterator": { @@ -6524,7 +6547,7 @@ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -6552,7 +6575,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "math-random": { @@ -6577,7 +6600,7 @@ "integrity": "sha512-xTMfHiICZHxijWFrb5rXjGUblQo2TrYmVnWFRhp2HESJQ1BGPmgAerq/t7Sm9i+79ZyUb1l0DMRsXGfHT119kQ==", "dev": true, "requires": { - "cssom": "0.3.4" + "cssom": "^0.3.0" } }, "meow": { @@ -6585,16 +6608,16 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { "minimist": { @@ -6620,19 +6643,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" }, "dependencies": { "arr-diff": { @@ -6641,7 +6664,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } } } @@ -6666,7 +6689,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "minimatch": { @@ -6674,7 +6697,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -6688,8 +6711,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" } }, "mkdirp": { @@ -6710,7 +6733,7 @@ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.17.tgz", "integrity": "sha512-Y/JpVEWIOA9Gho4vO15MTnW1FCmHi3ypprrkUaxsZ1TKg3uqC8q/qMBjTddkHoiwwZN3qvZSr4zJP7x9V3LpXA==", "requires": { - "moment": "2.22.1" + "moment": ">= 2.9.0" } }, "ms": { @@ -6743,15 +6766,16 @@ "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", "optional": true, "requires": { - "mkdirp": "0.5.1", - "ncp": "2.0.0", - "rimraf": "2.4.5" + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" } }, "nan": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -6759,17 +6783,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "array-unique": { @@ -6820,7 +6844,7 @@ "resolved": "https://registry.npmjs.org/nice-simple-logger/-/nice-simple-logger-1.0.1.tgz", "integrity": "sha1-D55khSe+e+PkmrdvqMjAmK+VG/Y=", "requires": { - "lodash": "4.17.10" + "lodash": "^4.3.0" } }, "no-kafka": { @@ -6829,15 +6853,15 @@ "integrity": "sha1-0sq8QwZbSS24wVyiOK6V8WgIGvU=", "requires": { "@types/bluebird": "3.5.0", - "@types/lodash": "4.14.111", - "bin-protocol": "3.0.4", - "bluebird": "3.5.1", - "buffer-crc32": "0.2.13", - "hashring": "3.2.0", - "lodash": "4.17.5", - "murmur-hash-js": "1.0.0", - "nice-simple-logger": "1.0.1", - "wrr-pool": "1.1.3" + "@types/lodash": "^4.14.55", + "bin-protocol": "^3.0.4", + "bluebird": "^3.3.3", + "buffer-crc32": "^0.2.5", + "hashring": "^3.2.0", + "lodash": "=4.17.5", + "murmur-hash-js": "^1.0.0", + "nice-simple-logger": "^1.0.1", + "wrr-pool": "^1.0.3" }, "dependencies": { "lodash": { @@ -6858,18 +6882,18 @@ "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==", "dev": true, "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.81.0", - "rimraf": "2.4.5", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.1" + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": ">=2.9.0 <2.82.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" }, "dependencies": { "ajv": { @@ -6878,8 +6902,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "assert-plus": { @@ -6900,7 +6924,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "cryptiles": { @@ -6909,7 +6933,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "form-data": { @@ -6918,9 +6942,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "glob": { @@ -6929,12 +6953,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "har-schema": { @@ -6949,8 +6973,8 @@ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "dev": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "hawk": { @@ -6959,10 +6983,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -6977,9 +7001,9 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "performance-now": { @@ -7000,28 +7024,28 @@ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "semver": { @@ -7036,7 +7060,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } } } @@ -7047,25 +7071,25 @@ "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==", "dev": true, "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.3", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.10.0", - "node-gyp": "3.7.0", - "npmlog": "4.1.2", + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.3.1", + "npmlog": "^4.0.0", "request": "2.87.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" }, "dependencies": { "gaze": { @@ -7074,7 +7098,7 @@ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, "requires": { - "globule": "1.2.1" + "globule": "^1.0.0" } }, "glob": { @@ -7083,12 +7107,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "globule": { @@ -7097,9 +7121,9 @@ "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, "request": { @@ -7108,26 +7132,26 @@ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } } } @@ -7144,7 +7168,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-package-data": { @@ -7152,10 +7176,10 @@ "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==", "requires": { - "hosted-git-info": "2.7.1", - "is-builtin-module": "1.0.0", - "semver": "4.3.2", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -7164,7 +7188,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npmlog": { @@ -7173,10 +7197,10 @@ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "nth-check": { @@ -7185,7 +7209,7 @@ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "number-is-nan": { @@ -7215,9 +7239,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -7226,7 +7250,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -7248,7 +7272,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.defaults": { @@ -7257,10 +7281,10 @@ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "array-each": "1.0.1", - "array-slice": "1.1.0", - "for-own": "1.0.0", - "isobject": "3.0.1" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "for-own": { @@ -7269,7 +7293,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } } } @@ -7280,8 +7304,8 @@ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, "requires": { - "for-own": "1.0.0", - "make-iterator": "1.0.1" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "dependencies": { "for-own": { @@ -7290,7 +7314,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } } } @@ -7301,8 +7325,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" }, "dependencies": { "is-extendable": { @@ -7319,7 +7343,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "on-finished": { @@ -7335,7 +7359,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -7356,8 +7380,8 @@ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", "dev": true, "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" } }, "optimist": { @@ -7365,8 +7389,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "wordwrap": { @@ -7382,12 +7406,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "orchestrator": { @@ -7396,9 +7420,9 @@ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.1" + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" } }, "ordered-read-streams": { @@ -7418,7 +7442,7 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -7433,8 +7457,8 @@ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "pac-proxy-agent": { @@ -7443,14 +7467,14 @@ "integrity": "sha512-cDNAN1Ehjbf5EHkNY5qnRhGPUCp6SnpyVof5fRzN800QV1Y2OkzbH9rmjZkbBRa8igof903yOnjIl6z0SlAhxA==", "dev": true, "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0", - "get-uri": "2.0.2", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "pac-resolver": "3.0.0", - "raw-body": "2.3.2", - "socks-proxy-agent": "3.0.1" + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "get-uri": "^2.0.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "pac-resolver": "^3.0.0", + "raw-body": "^2.2.0", + "socks-proxy-agent": "^3.0.0" }, "dependencies": { "debug": { @@ -7470,11 +7494,11 @@ "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", "dev": true, "requires": { - "co": "4.6.0", - "degenerator": "1.0.4", - "ip": "1.1.5", - "netmask": "1.0.6", - "thunkify": "2.1.2" + "co": "^4.6.0", + "degenerator": "^1.0.4", + "ip": "^1.1.5", + "netmask": "^1.0.6", + "thunkify": "^2.1.2" } }, "packet-reader": { @@ -7488,9 +7512,9 @@ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "1.0.0", - "map-cache": "0.2.2", - "path-root": "0.1.1" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, "parse-glob": { @@ -7499,10 +7523,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -7510,7 +7534,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "1.3.2" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -7525,7 +7549,7 @@ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -7534,7 +7558,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -7553,7 +7577,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -7579,7 +7603,7 @@ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "path-root-regex": "0.1.2" + "path-root-regex": "^0.1.0" } }, "path-root-regex": { @@ -7598,9 +7622,9 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "performance-now": { @@ -7616,9 +7640,9 @@ "buffer-writer": "1.0.1", "packet-reader": "0.3.1", "pg-connection-string": "0.1.3", - "pg-pool": "2.0.3", - "pg-types": "1.12.1", - "pgpass": "1.0.2", + "pg-pool": "~2.0.3", + "pg-types": "~1.12.1", + "pgpass": "1.x", "semver": "4.3.2" } }, @@ -7637,10 +7661,10 @@ "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.12.1.tgz", "integrity": "sha1-1kCH45A7WP+q0nnnWVxSIIoUw9I=", "requires": { - "postgres-array": "1.0.2", - "postgres-bytea": "1.0.0", - "postgres-date": "1.0.3", - "postgres-interval": "1.1.1" + "postgres-array": "~1.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.0", + "postgres-interval": "^1.1.0" } }, "pgpass": { @@ -7648,7 +7672,7 @@ "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", "requires": { - "split": "1.0.1" + "split": "^1.0.0" } }, "pify": { @@ -7666,7 +7690,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -7675,7 +7699,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } }, "pkg-up": { @@ -7684,7 +7708,7 @@ "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } }, "placeholders": { @@ -7693,8 +7717,8 @@ "integrity": "sha1-Gu/xO/cc8B1VF2v5yjcPB9IQ6sM=", "dev": true, "requires": { - "assign-deep": "0.3.1", - "expand": "0.3.2" + "assign-deep": "^0.3.1", + "expand": "^0.3.1" } }, "plugin-error": { @@ -7702,10 +7726,10 @@ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "requires": { - "ansi-colors": "1.1.0", - "arr-diff": "4.0.0", - "arr-union": "3.1.0", - "extend-shallow": "3.0.2" + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" } }, "pluralize": { @@ -7721,7 +7745,7 @@ "dev": true, "requires": { "async": "1.5.2", - "is-number-like": "1.0.8" + "is-number-like": "^1.0.3" }, "dependencies": { "async": { @@ -7758,7 +7782,7 @@ "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", "requires": { - "xtend": "4.0.1" + "xtend": "^4.0.0" } }, "precond": { @@ -7801,9 +7825,14 @@ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, + "promise-polyfill": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", + "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" + }, "protocol-buffers-schema": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz", @@ -7814,7 +7843,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.6.0" } }, @@ -7824,14 +7853,14 @@ "integrity": "sha512-CNKuhC1jVtm8KJYFTS2ZRO71VCBx3QSA92So/e6NrY6GoJonkx3Irnk4047EsCcswczwqAekRj3s8qLRGahSKg==", "dev": true, "requires": { - "agent-base": "4.2.1", - "debug": "3.1.0", - "http-proxy-agent": "2.1.0", - "https-proxy-agent": "2.2.1", - "lru-cache": "4.1.3", - "pac-proxy-agent": "2.0.2", - "proxy-from-env": "1.0.0", - "socks-proxy-agent": "3.0.1" + "agent-base": "^4.2.0", + "debug": "^3.1.0", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "pac-proxy-agent": "^2.0.1", + "proxy-from-env": "^1.0.0", + "socks-proxy-agent": "^3.0.0" }, "dependencies": { "debug": { @@ -7849,8 +7878,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } } } @@ -7867,9 +7896,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz", + "integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==" }, "pug": { "version": "2.0.3", @@ -7877,14 +7906,14 @@ "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", "dev": true, "requires": { - "pug-code-gen": "2.0.1", - "pug-filters": "3.1.0", - "pug-lexer": "4.0.0", - "pug-linker": "3.0.5", - "pug-load": "2.0.11", - "pug-parser": "5.0.0", - "pug-runtime": "2.0.4", - "pug-strip-comments": "1.0.3" + "pug-code-gen": "^2.0.1", + "pug-filters": "^3.1.0", + "pug-lexer": "^4.0.0", + "pug-linker": "^3.0.5", + "pug-load": "^2.0.11", + "pug-parser": "^5.0.0", + "pug-runtime": "^2.0.4", + "pug-strip-comments": "^1.0.3" } }, "pug-attrs": { @@ -7893,9 +7922,9 @@ "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", "dev": true, "requires": { - "constantinople": "3.1.2", - "js-stringify": "1.0.2", - "pug-runtime": "2.0.4" + "constantinople": "^3.0.1", + "js-stringify": "^1.0.1", + "pug-runtime": "^2.0.4" } }, "pug-code-gen": { @@ -7904,14 +7933,14 @@ "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", "dev": true, "requires": { - "constantinople": "3.1.2", - "doctypes": "1.1.0", - "js-stringify": "1.0.2", - "pug-attrs": "2.0.3", - "pug-error": "1.3.2", - "pug-runtime": "2.0.4", - "void-elements": "2.0.1", - "with": "5.1.1" + "constantinople": "^3.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.1", + "pug-attrs": "^2.0.3", + "pug-error": "^1.3.2", + "pug-runtime": "^2.0.4", + "void-elements": "^2.0.1", + "with": "^5.0.0" } }, "pug-error": { @@ -7926,13 +7955,13 @@ "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", "dev": true, "requires": { - "clean-css": "4.1.11", - "constantinople": "3.1.2", + "clean-css": "^4.1.11", + "constantinople": "^3.0.1", "jstransformer": "1.0.0", - "pug-error": "1.3.2", - "pug-walk": "1.1.7", - "resolve": "1.7.1", - "uglify-js": "2.8.29" + "pug-error": "^1.3.2", + "pug-walk": "^1.1.7", + "resolve": "^1.1.6", + "uglify-js": "^2.6.1" }, "dependencies": { "uglify-js": { @@ -7941,9 +7970,9 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" } } } @@ -7954,9 +7983,9 @@ "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", "dev": true, "requires": { - "character-parser": "2.2.0", - "is-expression": "3.0.0", - "pug-error": "1.3.2" + "character-parser": "^2.1.1", + "is-expression": "^3.0.0", + "pug-error": "^1.3.2" } }, "pug-linker": { @@ -7965,8 +7994,8 @@ "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", "dev": true, "requires": { - "pug-error": "1.3.2", - "pug-walk": "1.1.7" + "pug-error": "^1.3.2", + "pug-walk": "^1.1.7" } }, "pug-load": { @@ -7975,8 +8004,8 @@ "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", "dev": true, "requires": { - "object-assign": "4.1.1", - "pug-walk": "1.1.7" + "object-assign": "^4.1.0", + "pug-walk": "^1.1.7" } }, "pug-parser": { @@ -7985,7 +8014,7 @@ "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", "dev": true, "requires": { - "pug-error": "1.3.2", + "pug-error": "^1.3.2", "token-stream": "0.0.1" } }, @@ -8001,7 +8030,7 @@ "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", "dev": true, "requires": { - "pug-error": "1.3.2" + "pug-error": "^1.3.2" } }, "pug-walk": { @@ -8031,9 +8060,9 @@ "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "dev": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -8079,7 +8108,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.5.0" + "statuses": ">= 1.3.1 < 2" } }, "setprototypeof": { @@ -8094,9 +8123,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -8104,8 +8133,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { @@ -8113,13 +8142,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -8128,10 +8157,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "readline2": { @@ -8140,8 +8169,8 @@ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", "mute-stream": "0.0.5" } }, @@ -8151,7 +8180,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.7.1" + "resolve": "^1.1.6" } }, "reconnect-core": { @@ -8159,7 +8188,7 @@ "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz", "integrity": "sha1-+65SkZp4d9hE4yRtAaLyZwHIM8g=", "requires": { - "backoff": "2.5.0" + "backoff": "~2.5.0" } }, "redent": { @@ -8167,8 +8196,8 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "regenerator-runtime": { @@ -8183,7 +8212,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-flags": { @@ -8192,7 +8221,7 @@ "integrity": "sha1-NEJ5hCj6rtU7DP7ef1cEQRDtHpQ=", "dev": true, "requires": { - "kind-of": "2.0.1" + "kind-of": "^2.0.0" }, "dependencies": { "kind-of": { @@ -8201,7 +8230,7 @@ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.0.2" } } } @@ -8212,8 +8241,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remarkable": { @@ -8221,8 +8250,8 @@ "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-1.7.1.tgz", "integrity": "sha1-qspJchALZqZCpjoQIcpLrBvjv/Y=", "requires": { - "argparse": "0.1.16", - "autolinker": "0.15.3" + "argparse": "~0.1.15", + "autolinker": "~0.15.0" } }, "remote-content": { @@ -8231,9 +8260,9 @@ "integrity": "sha1-kNVyVVOk1OQloLogBLXr+hG9L7M=", "dev": true, "requires": { - "proxy-from-env": "1.0.0", - "superagent": "3.8.3", - "superagent-proxy": "1.0.3" + "proxy-from-env": "^1.0.0", + "superagent": "^3.8.2", + "superagent-proxy": "^1.0.3" } }, "remove-trailing-separator": { @@ -8258,7 +8287,7 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -8272,9 +8301,9 @@ "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1", - "readable-stream": "2.3.6" + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" } }, "request": { @@ -8282,28 +8311,28 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "require-directory": { @@ -8324,8 +8353,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "requires-port": { @@ -8340,7 +8369,7 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-dir": { @@ -8349,8 +8378,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-from": { @@ -8371,8 +8400,8 @@ "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", "dev": true, "requires": { - "debug": "2.6.9", - "minimatch": "3.0.4" + "debug": "^2.2.0", + "minimatch": "^3.0.2" } }, "restore-cursor": { @@ -8381,8 +8410,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "ret": { @@ -8396,8 +8425,8 @@ "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", "requires": { - "bluebird": "3.5.1", - "debug": "2.6.9" + "bluebird": "^3.4.6", + "debug": "^2.6.9" } }, "rewrite-ext": { @@ -8406,7 +8435,7 @@ "integrity": "sha1-WzWLRHLU9UTnA2w3sGYwZJLt17Q=", "dev": true, "requires": { - "ext-map": "1.0.1" + "ext-map": "^1.0.0" } }, "right-align": { @@ -8414,7 +8443,7 @@ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -8422,7 +8451,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "requires": { - "glob": "6.0.4" + "glob": "^6.0.1" } }, "run-async": { @@ -8431,7 +8460,7 @@ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.3.0" } }, "rx": { @@ -8463,7 +8492,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "sass-graph": { @@ -8472,10 +8501,10 @@ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", "dev": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" }, "dependencies": { "camelcase": { @@ -8490,9 +8519,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "glob": { @@ -8501,12 +8530,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "yargs": { @@ -8515,19 +8544,19 @@ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" } }, "yargs-parser": { @@ -8536,7 +8565,7 @@ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^3.0.0" } } } @@ -8552,8 +8581,8 @@ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", "dev": true, "requires": { - "js-base64": "2.4.8", - "source-map": "0.4.4" + "js-base64": "^2.1.8", + "source-map": "^0.4.2" }, "dependencies": { "source-map": { @@ -8562,7 +8591,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -8578,18 +8607,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { "statuses": { @@ -8604,23 +8633,23 @@ "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.37.7.tgz", "integrity": "sha512-1/M1Aua2GgejZbUI3T90G3uXXjcM4gTfFC36jGsepaJh3cRK9plPmlZeKkAQWWn4bCJaJozeEtuxfyPfQUY9wg==", "requires": { - "bluebird": "3.5.1", - "cls-bluebird": "2.1.0", - "debug": "3.1.0", - "depd": "1.1.2", - "dottie": "2.0.0", - "generic-pool": "3.4.2", + "bluebird": "^3.5.0", + "cls-bluebird": "^2.1.0", + "debug": "^3.1.0", + "depd": "^1.1.0", + "dottie": "^2.0.0", + "generic-pool": "^3.4.0", "inflection": "1.12.0", - "lodash": "4.17.10", - "moment": "2.22.1", - "moment-timezone": "0.5.17", - "retry-as-promised": "2.3.2", - "semver": "5.5.0", - "terraformer-wkt-parser": "1.1.2", - "toposort-class": "1.0.1", - "uuid": "3.2.1", - "validator": "9.4.1", - "wkx": "0.4.5" + "lodash": "^4.17.1", + "moment": "^2.20.0", + "moment-timezone": "^0.5.14", + "retry-as-promised": "^2.3.2", + "semver": "^5.5.0", + "terraformer-wkt-parser": "^1.1.2", + "toposort-class": "^1.0.1", + "uuid": "^3.2.1", + "validator": "^9.4.1", + "wkx": "^0.4.1" }, "dependencies": { "debug": { @@ -8650,13 +8679,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.18", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -8664,9 +8693,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -8688,7 +8717,7 @@ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", "dev": true, "requires": { - "to-object-path": "0.3.0" + "to-object-path": "^0.3.0" } }, "set-immediate-shim": { @@ -8703,10 +8732,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -8715,7 +8744,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -8782,14 +8811,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -8798,7 +8827,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8807,7 +8836,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -8824,9 +8853,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8835,7 +8864,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -8844,7 +8873,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -8853,7 +8882,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -8862,9 +8891,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "kind-of": { @@ -8881,7 +8910,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" } }, "sntp": { @@ -8889,7 +8918,7 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "socket.io": { @@ -8898,12 +8927,12 @@ "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "3.1.0", - "engine.io": "3.2.0", - "has-binary2": "1.0.3", - "socket.io-adapter": "1.1.1", + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", "socket.io-client": "2.1.1", - "socket.io-parser": "3.2.0" + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { @@ -8923,14 +8952,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" } }, @@ -8950,15 +8979,15 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.2.1", - "has-binary2": "1.0.3", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "3.2.0", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" } }, @@ -8969,7 +8998,7 @@ "dev": true, "requires": { "component-emitter": "1.2.1", - "debug": "3.1.0", + "debug": "~3.1.0", "isarray": "2.0.1" } } @@ -8991,14 +9020,14 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.6.9", - "engine.io-client": "3.1.6", + "debug": "~2.6.4", + "engine.io-client": "~3.1.0", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "3.1.3", + "socket.io-parser": "~3.1.1", "to-array": "0.1.4" } }, @@ -9009,8 +9038,8 @@ "dev": true, "requires": { "component-emitter": "1.2.1", - "debug": "3.1.0", - "has-binary2": "1.0.3", + "debug": "~3.1.0", + "has-binary2": "~1.0.2", "isarray": "2.0.1" }, "dependencies": { @@ -9037,8 +9066,8 @@ "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", "dev": true, "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" } }, "socks-proxy-agent": { @@ -9047,8 +9076,8 @@ "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", "dev": true, "requires": { - "agent-base": "4.2.1", - "socks": "1.1.10" + "agent-base": "^4.1.0", + "socks": "^1.1.10" } }, "source-map": { @@ -9062,11 +9091,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -9086,8 +9115,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -9100,8 +9129,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -9120,7 +9149,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -9129,7 +9158,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -9142,14 +9171,14 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "stack-trace": { @@ -9163,8 +9192,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -9173,7 +9202,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -9189,7 +9218,7 @@ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.1" } }, "stream-consume": { @@ -9203,8 +9232,8 @@ "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", "dev": true, "requires": { - "commander": "2.15.1", - "limiter": "1.1.3" + "commander": "^2.2.0", + "limiter": "^1.0.5" } }, "string-width": { @@ -9213,9 +9242,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -9223,7 +9252,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -9236,7 +9265,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -9244,7 +9273,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-indent": { @@ -9252,7 +9281,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "strip-json-comments": { @@ -9267,10 +9296,10 @@ "integrity": "sha1-tZcW3LCMQEY5Bv5V8E5HWOyRup0=", "dev": true, "requires": { - "cheerio": "0.22.0", - "extend": "3.0.1", - "mediaquery-text": "1.0.5", - "object.pick": "1.3.0" + "cheerio": "^0.22.0", + "extend": "^3.0.1", + "mediaquery-text": "^1.0.5", + "object.pick": "^1.3.0" }, "dependencies": { "cheerio": { @@ -9279,22 +9308,22 @@ "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-serializer": "0.1.0", - "entities": "1.1.1", - "htmlparser2": "3.9.2", - "lodash.assignin": "4.2.0", - "lodash.bind": "4.2.1", - "lodash.defaults": "4.2.0", - "lodash.filter": "4.6.0", - "lodash.flatten": "4.4.0", - "lodash.foreach": "4.5.0", - "lodash.map": "4.6.0", - "lodash.merge": "4.6.1", - "lodash.pick": "4.4.0", - "lodash.reduce": "4.6.0", - "lodash.reject": "4.6.0", - "lodash.some": "4.6.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" } }, "lodash.defaults": { @@ -9310,16 +9339,16 @@ "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.1", - "debug": "3.1.0", - "extend": "3.0.1", - "form-data": "2.3.2", - "formidable": "1.2.1", - "methods": "1.1.2", - "mime": "1.4.1", - "qs": "6.5.1", - "readable-stream": "2.3.6" + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" }, "dependencies": { "debug": { @@ -9338,8 +9367,8 @@ "integrity": "sha512-79Ujg1lRL2ICfuHUdX+H2MjIw73kB7bXsIkxLwHURz3j0XUmEEEoJ+u/wq+mKwna21Uejsm2cGR3OESA00TIjA==", "dev": true, "requires": { - "debug": "3.1.0", - "proxy-agent": "2.3.1" + "debug": "^3.1.0", + "proxy-agent": "2" }, "dependencies": { "debug": { @@ -9363,13 +9392,13 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" }, "dependencies": { "argparse": { @@ -9377,7 +9406,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "colors": { @@ -9390,8 +9419,8 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "esprima": { @@ -9404,8 +9433,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } } } @@ -9416,12 +9445,12 @@ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.10", + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", "slice-ansi": "0.0.4", - "string-width": "2.1.1" + "string-width": "^2.0.0" }, "dependencies": { "ajv": { @@ -9430,8 +9459,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { @@ -9452,8 +9481,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -9462,7 +9491,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -9473,34 +9502,44 @@ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tc-core-library-js": { "version": "github:appirio-tech/tc-core-library-js#d16413db30b1eed21c0cf426e185bedb2329ddab", - "requires": { - "auth0-js": "9.6.1", - "axios": "0.12.0", - "bunyan": "1.8.12", - "jsonwebtoken": "8.5.1", - "jwks-rsa": "1.4.0", - "le_node": "1.7.1", - "lodash": "4.17.10", - "millisecond": "0.1.2", - "request": "2.88.0" + "from": "github:appirio-tech/tc-core-library-js#v2.6", + "requires": { + "auth0-js": "^9.4.2", + "axios": "^0.12.0", + "bunyan": "^1.8.12", + "jsonwebtoken": "^8.3.0", + "jwks-rsa": "^1.3.0", + "le_node": "^1.3.1", + "lodash": "^4.17.10", + "millisecond": "^0.1.2", + "request": "^2.88.0" }, "dependencies": { + "@types/express-jwt": { + "version": "0.0.42", + "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.42.tgz", + "integrity": "sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==", + "requires": { + "@types/express": "*", + "@types/express-unless": "*" + } + }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "aws4": { @@ -9523,8 +9562,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "6.10.0", - "har-schema": "2.0.0" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" } }, "json-schema-traverse": { @@ -9537,16 +9576,16 @@ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "requires": { - "jws": "3.2.2", - "lodash.includes": "4.3.0", - "lodash.isboolean": "3.0.3", - "lodash.isinteger": "4.0.4", - "lodash.isnumber": "3.0.3", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.once": "4.1.1", - "ms": "2.1.1", - "semver": "5.7.0" + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" } }, "jwa": { @@ -9556,20 +9595,21 @@ "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "jwks-rsa": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.4.0.tgz", - "integrity": "sha512-6aUc+oTuqsLwIarfq3A0FqoD5LFSgveW5JO1uX2s0J8TJuOEcDc4NIMZAmVHO8tMHDw7CwOPzXF/9QhfOpOElA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.6.0.tgz", + "integrity": "sha512-gLhpd7Ka7Jy8ofm9OVj0PFPtSdx3+W2dncF3UCA1wDTAbvfiB1GhHbbyQlz8bqLF5+rge7pgD/DALRfgZi8Fgg==", "requires": { - "@types/express-jwt": "0.0.34", - "debug": "2.6.9", - "limiter": "1.1.3", - "lru-memoizer": "1.12.0", - "ms": "2.1.1", - "request": "2.88.0" + "@types/express-jwt": "0.0.42", + "debug": "^2.6.9", + "jsonwebtoken": "^8.5.1", + "limiter": "^1.1.4", + "lru-memoizer": "^1.12.0", + "ms": "^2.1.1", + "request": "^2.88.0" } }, "jws": { @@ -9577,27 +9617,32 @@ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "requires": { - "jwa": "1.4.1", - "safe-buffer": "5.1.1" + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" } }, + "limiter": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", + "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==" + }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "requires": { - "mime-db": "1.38.0" + "mime-db": "1.40.0" } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "oauth-sign": { "version": "0.9.0", @@ -9614,53 +9659,53 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.22", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" } } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { - "psl": "1.1.31", - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" } }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" } } }, @@ -9669,7 +9714,7 @@ "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", "requires": { - "@types/geojson": "1.0.6" + "@types/geojson": "^1.0.0" } }, "terraformer-wkt-parser": { @@ -9677,7 +9722,7 @@ "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", "requires": { - "terraformer": "1.0.8" + "terraformer": "~1.0.5" } }, "text-table": { @@ -9697,8 +9742,8 @@ "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", "dev": true, "requires": { - "chalk": "1.1.3", - "object-path": "0.9.2" + "chalk": "^1.1.1", + "object-path": "^0.9.0" } }, "through": { @@ -9711,8 +9756,8 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunkify": { @@ -9727,7 +9772,7 @@ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } }, "time-stamp": { @@ -9754,7 +9799,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "to-regex": { @@ -9763,10 +9808,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -9775,8 +9820,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { @@ -9785,7 +9830,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } } } @@ -9796,12 +9841,20 @@ "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=", "dev": true }, + "topcoder-healthcheck-dropin": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/topcoder-healthcheck-dropin/-/topcoder-healthcheck-dropin-1.0.3.tgz", + "integrity": "sha512-k8X84IC2NALu1v8cD3SZXY0MMZAMWw2uzHmjXDlgXwpS5xnXdwnVU+BpJWqg1uz1OuYDdeaAIPguqnhs7G6Y0A==", + "requires": { + "express": "^4.16.3" + } + }, "topo": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "toposort-class": { @@ -9814,7 +9867,7 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "trim-newlines": { @@ -9828,7 +9881,7 @@ "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", "dev": true, "requires": { - "glob": "6.0.4" + "glob": "^6.0.4" } }, "tunnel-agent": { @@ -9836,7 +9889,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -9851,7 +9904,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { @@ -9860,7 +9913,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -9880,8 +9933,8 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" + "commander": "~2.15.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -9919,16 +9972,21 @@ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=" }, + "unfetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.1.0.tgz", + "integrity": "sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg==" + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -9937,7 +9995,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -9952,10 +10010,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -9983,8 +10041,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -9993,9 +10051,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -10022,7 +10080,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" }, "dependencies": { "punycode": { @@ -10032,6 +10090,11 @@ } } }, + "urijs": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz", + "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==" + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -10039,9 +10102,9 @@ "dev": true }, "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, "use": { "version": "3.1.1", @@ -10055,7 +10118,7 @@ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } }, "util-deprecate": { @@ -10069,9 +10132,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, "v8flags": { "version": "2.1.1", @@ -10079,7 +10142,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" }, "dependencies": { "user-home": { @@ -10095,8 +10158,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validator": { @@ -10114,9 +10177,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "very-fast-args": { @@ -10129,7 +10192,7 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", "requires": { - "clone-stats": "0.0.1" + "clone-stats": "~0.0.1" } }, "vinyl-fs": { @@ -10138,14 +10201,14 @@ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" }, "dependencies": { "clone": { @@ -10160,7 +10223,7 @@ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { - "natives": "1.1.4" + "natives": "^1.1.0" } }, "isarray": { @@ -10175,10 +10238,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -10193,8 +10256,8 @@ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" } }, "through2": { @@ -10203,8 +10266,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -10213,8 +10276,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -10225,7 +10288,7 @@ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.1" } }, "void-elements": { @@ -10245,7 +10308,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -10260,13 +10323,13 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2 || 2" } }, "winchan": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/winchan/-/winchan-0.2.0.tgz", - "integrity": "sha1-OGMCjn+XSw2hQS8oQXukJJcqvZQ=" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/winchan/-/winchan-0.2.2.tgz", + "integrity": "sha512-pvN+IFAbRP74n/6mc6phNyCH8oVkzXsto4KCHPJ2AScniAnA1AmeLI03I2BzjePpaClGSI4GUMowzsD3qz5PRQ==" }, "window-size": { "version": "0.1.0", @@ -10278,12 +10341,12 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", "requires": { - "async": "1.0.0", - "colors": "1.0.3", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "stack-trace": "0.0.10" + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" } }, "with": { @@ -10292,8 +10355,8 @@ "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", "dev": true, "requires": { - "acorn": "3.3.0", - "acorn-globals": "3.1.0" + "acorn": "^3.1.0", + "acorn-globals": "^3.0.0" }, "dependencies": { "acorn": { @@ -10309,7 +10372,7 @@ "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.5.tgz", "integrity": "sha512-01dloEcJZAJabLO5XdcRgqdKpmnxS0zIT02LhkdWOZX2Zs2tPM6hlZ4XG9tWaWur1Qd1OO4kJxUbe2+5BofvnA==", "requires": { - "@types/node": "10.0.8" + "@types/node": "*" } }, "wordwrap": { @@ -10324,8 +10387,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -10339,7 +10402,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "wrr-pool": { @@ -10347,7 +10410,7 @@ "resolved": "https://registry.npmjs.org/wrr-pool/-/wrr-pool-1.1.3.tgz", "integrity": "sha1-/a0i8uofMDY//l14HPeUl6d/8H4=", "requires": { - "lodash": "4.17.10" + "lodash": "^4.0.1" } }, "ws": { @@ -10356,9 +10419,9 @@ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, "xmlhttprequest-ssl": { @@ -10394,9 +10457,9 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" }, "dependencies": { @@ -10413,7 +10476,7 @@ "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^3.0.0" }, "dependencies": { "camelcase": { diff --git a/package.json b/package.json index 3789de8..eb025c9 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "tc-core-library-js": "appirio-tech/tc-core-library-js.git#v2.6", "topcoder-healthcheck-dropin": "^1.0.3", "urijs": "^1.19.1", + "uuid": "^3.3.3", "winston": "^2.2.0" }, "engines": { diff --git a/src/app.js b/src/app.js index 1d7d4bc..399eaf3 100644 --- a/src/app.js +++ b/src/app.js @@ -21,7 +21,7 @@ const healthcheck = require('topcoder-healthcheck-dropin'); // helps in health checking in case of unhandled rejection of promises const unhandledRejections = []; process.on('unhandledRejection', (reason, promise) => { - console.log('Unhandled Rejection at:', promise, 'reason:', reason); + logger.info('Unhandled Rejection at:', promise, 'reason:', reason); // aborts the process to let the HA of the container to restart the task // process.abort(); unhandledRejections.push(promise); @@ -31,7 +31,7 @@ process.on('unhandledRejection', (reason, promise) => { // from the unhandledRejections array. We just remove the first element from the array as we only care // about the count every time an unhandled rejection promise is handled process.on('rejectionHandled', (promise) => { - console.log('Handled Rejection at:', promise); + logger.info('Handled Rejection at:', promise); unhandledRejections.shift(); }); @@ -93,10 +93,10 @@ function startKafkaConsumer(handlers, notificationServiceHandlers) { }); }); - var latestSubscriptions = null; + let latestSubscriptions = null; const check = function () { - logger.debug("Checking health"); + logger.debug('Checking health'); if (unhandledRejections && unhandledRejections.length > 0) { logger.error('Found unhandled promises. Application is potentially in stalled state.'); return false; @@ -106,12 +106,12 @@ function startKafkaConsumer(handlers, notificationServiceHandlers) { return false; } let connected = true; - let currentSubscriptions = consumer.subscriptions; - for(var sIdx in currentSubscriptions) { + const currentSubscriptions = consumer.subscriptions; + Object.keys(currentSubscriptions).forEach(sIdx => { // current subscription - let sub = currentSubscriptions[sIdx]; + const sub = currentSubscriptions[sIdx]; // previous subscription - let prevSub = latestSubscriptions ? latestSubscriptions[sIdx] : null; + const prevSub = latestSubscriptions ? latestSubscriptions[sIdx] : null; // levarage the `paused` field (https://github.com/oleksiyk/kafka/blob/master/lib/base_consumer.js#L66) to // determine if there was a possibility of an unhandled exception. If we find paused status for the same // topic in two consecutive health checks, we assume it was stuck because of unhandled error @@ -119,15 +119,15 @@ function startKafkaConsumer(handlers, notificationServiceHandlers) { logger.error(`Found subscription for ${sIdx} in paused state for consecutive health checks`); return false; } - } + }); // stores the latest subscription status in global variable latestSubscriptions = consumer.subscriptions; consumer.client.initialBrokers.forEach(conn => { - logger.debug(`url ${conn.server()} - connected=${conn.connected}`) - connected = conn.connected & connected + logger.debug(`url ${conn.server()} - connected=${conn.connected}`); + connected = conn.connected & connected; }); - return connected - } + return connected; + }; consumer .init() diff --git a/src/common/helper.js b/src/common/helper.js index c788f72..4188bc7 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -5,6 +5,10 @@ const _ = require('lodash'); const co = require('co'); +const uuid = require('uuid/v4'); +const config = require('config'); +const authVerifier = require('tc-core-library-js').auth.verifier; + /** * Wrap generator function to standard express function @@ -38,7 +42,53 @@ function autoWrapExpress(obj) { return obj; } +/** + * Generate random uuid with timestamp + * @returns {String} uuid with timestamp + */ +function generateRandomString() { + return `${uuid()}-${new Date().getTime()}`; +} + +/** + * Check whether user is valid. + * + * @param {Object} user the user + * @returns {boolean} whether it is valid + */ +function isValid(user) { + return user !== undefined; +} + +/** + * Check whether JWT token is authorized to access the resources. + * + * @param {String} token the JWT token + * @param {Function} callback the callback function + */ +function isTokenAuthorized(token, callback) { + const secret = _.get(config, 'AUTH_SECRET') || ''; + const validIssuers = JSON.parse(_.get(config, 'VALID_ISSUERS') || '[]'); + const jwtKeyCacheTime = _.get(config, 'JWT_KEY_CACHE_TIME', '24h'); + if (!secret) { + return callback(new Error('Auth secret not provided')); + } + if (!validIssuers || validIssuers.length === 0) { + return callback(new Error('JWT Issuers not configured')); + } + + const verifier = authVerifier(validIssuers, jwtKeyCacheTime); + verifier.validateToken(token, secret, (err, decoded) => { + if (err) { + return callback(err); + } + const authorized = isValid(decoded); + return callback(null, authorized, decoded.roles); + }); +} module.exports = { wrapExpress, autoWrapExpress, + generateRandomString, + isTokenAuthorized, }; diff --git a/src/common/tcApiHelper.js b/src/common/tcApiHelper.js index dcd7489..866ebcd 100644 --- a/src/common/tcApiHelper.js +++ b/src/common/tcApiHelper.js @@ -84,7 +84,7 @@ function* getUsersByHandles(handles) { return []; } // use 'OR' to link the handle matches - const query = _.map(handles, (h) => 'handle:"' + h.trim().replace('"', '\\"') + '"').join(' OR '); + const query = _.map(handles, (h) => 'handle:"' + h.trim().replace('"', '\\"') + '"').join(' OR '); return yield searchUsersByQuery(query); } diff --git a/src/controllers/NotificationController.js b/src/controllers/NotificationController.js index 5f91450..b885ab7 100644 --- a/src/controllers/NotificationController.js +++ b/src/controllers/NotificationController.js @@ -32,15 +32,15 @@ function* listNotifications(req, res) { * disabling v5 API feature temporarily for connect-app (backward compatibility) */ - //res.json(items); + // res.json(items); // TODO disable this and revert to original res.json({ items, offset: currentPage, limit: perPage, - totalCount: total - }) + totalCount: total, + }); } function* updateNotification(req, res) { diff --git a/src/notificationStreamWS.js b/src/notificationStreamWS.js new file mode 100644 index 0000000..3947f84 --- /dev/null +++ b/src/notificationStreamWS.js @@ -0,0 +1,193 @@ +/** + * Data stream web socket functionalities. + */ +'use strict'; + +const _ = require('lodash'); +const logger = require('./common/logger'); +const WebSocket = require('ws'); +const WebSocketServer = WebSocket.Server; +const helper = require('./common/helper'); +const config = require('config'); + +// all web socket client data +const allWS = []; + +// all cached messages, key is topic, value is array of messages of the topic with roles associated +const allMessages = {}; + +// max cache message count per topic +const maxMsgCount = Number(config.WS_OPTIONS.MAX_MESSAGE_COUNT); + +/** + * Send object to websocket client + * + * @param {Object} ws object contains client information + * @param {Object} payload object to send client + */ +const sendData = (ws, payload) => { + try { + ws.send(JSON.stringify(payload)); + } catch (err) { + logger.error(err); + } +}; + +/** + * Compare two roles array to check if there is a shared role + * + * @param {Array} firstRoles first role array to compare + * @param {Array} secondRoles second role array to compare + * @returns {boolean} true if they have at least one common role + */ +function hasCommonRole(firstRoles, secondRoles) { + return firstRoles.some((el) => secondRoles.indexOf(el) > -1); +} + +/** + * Setup web socket. + */ +const setup = () => { + const wss = new WebSocketServer({ + port: config.WS_OPTIONS.PORT, + perMessageDeflate: { + zlibDeflateOptions: { + // See zlib defaults. + chunkSize: config.WS_OPTIONS.perMessageDeflate.zlibDeflateOptions.chunkSize, + memLevel: config.WS_OPTIONS.perMessageDeflate.zlibDeflateOptions.memLevel, + level: config.WS_OPTIONS.perMessageDeflate.zlibDeflateOptions.level, + }, + zlibInflateOptions: { + chunkSize: config.WS_OPTIONS.perMessageDeflate.zlibInflateOptions.chunkSize, + }, + // Other options settable: + clientNoContextTakeover: config.WS_OPTIONS.perMessageDeflate.clientNoContextTakeover, + serverNoContextTakeover: config.WS_OPTIONS.perMessageDeflate.serverNoContextTakeover, + serverMaxWindowBits: config.WS_OPTIONS.perMessageDeflate.serverMaxWindowBits, + concurrencyLimit: config.WS_OPTIONS.perMessageDeflate.concurrencyLimit, + threshold: config.WS_OPTIONS.perMessageDeflate.threshold, + }, + }); + wss.on('connection', (ws) => { + logger.debug('web socket connected'); + const id = helper.generateRandomString(); + const clientData = { + id, + topic: null, + ws, + authorized: false, + roles: [], + }; + allWS.push(clientData); + + // got message from client, + // the message is 'token:{JWT-token}' or string representation of JSON containing fields: topic and count, + // where count is the last count of messages of the topic to retrieve + ws.on('message', (message) => { + // handle token + if (message.startsWith('token:')) { + logger.debug(`web socket message: ${message.substring(0, 10)}*********`); + const token = message.substring('token:'.length); + helper.isTokenAuthorized(token, (err, isAuthorized, roles) => { + if (err) { + logger.error('failed to authorize token', err); + } else if (isAuthorized) { + logger.debug(`web socket authorized with roles: ${roles}`); + clientData.authorized = true; + clientData.roles = roles; + } + }); + return; + } + logger.debug(`web socket message: ${message}`); + let msgJSON; + try { + msgJSON = JSON.parse(message); + } catch (err) { + logger.error('invalid message', message, err); + return; + } + clientData.topic = msgJSON.topic; + + const topicMsgs = allMessages[msgJSON.topic] || []; + let startIndex = topicMsgs.length - msgJSON.count; + if (startIndex < 0) startIndex = 0; + const messages = topicMsgs.slice(startIndex); + // the 'full' flag is true, indicating the messages are full latest messages for client side, + // client side should clear the existing messages if any for the topic + if (clientData.authorized) { + const authorizedMessages = []; + for (let i = 0; i < messages.length; i++) { + // Check the role for each notification since there are more then one handler + // Each handler might have different role sets + if (hasCommonRole(messages[i].handlerRuleSets.roles, clientData.roles)) { + authorizedMessages.push(messages[i].notifications); + } + } + sendData(ws, { full: true, topic: msgJSON.topic, messages: authorizedMessages }); + } + }); + + // terminate web socket + const terminateWS = () => { + if (clientData.terminated) { + return; + } + clientData.terminated = true; + + for (let i = 0; i < allWS.length; i += 1) { + if (id === allWS[i].id) { + // remove the current client data + allWS.splice(i, 1); + break; + } + } + ws.close(); + }; + + // close event handler + ws.on('close', () => { + logger.debug('web socket closed'); + terminateWS(); + }); + + // error event handler + ws.on('error', (err) => { + logger.error('there is error for the web socket', err); + terminateWS(); + }); + }); + + wss.on('error', (err) => { + logger.error('there is error for the web socket server', err); + }); +}; + + +/** + * Send notifications to all applicable web socket clients. The notifications will be cached to be retrieved by clients. + * + * @param {String} topic notification topic + * @param {Array} notifications array of notifications to push + * @returns {Object} handlerRuleSets ruleset of handler to check roles + */ +function* pushNotifications(topic, notifications, handlerRuleSets) { + // cache notifications + if (!allMessages[topic]) allMessages[topic] = []; + allMessages[topic].push({ notifications, handlerRuleSets }); + if (allMessages[topic].length > maxMsgCount) allMessages[topic].shift(); + // send notifications to clients + _.each(allWS, (clientData) => { + // Check the auth and role for each notification since there are more then one handler + // Each handler might have different role sets + if (topic === clientData.topic && clientData.authorized && hasCommonRole(handlerRuleSets.roles, clientData.roles)) { + // the 'full' flag is false, indicating the notifications is to be added to client side + sendData(clientData.ws, { full: false, topic, messages: [notifications] }); + } + }); +} + +module.exports = { + setup, + pushNotifications, +}; diff --git a/src/processors/challenge/DummyHandler.js b/src/processors/challenge/DummyHandler.js new file mode 100644 index 0000000..8c90423 --- /dev/null +++ b/src/processors/challenge/DummyHandler.js @@ -0,0 +1,20 @@ +/** + * Dummy handler returns basic notification. + */ +const co = require('co'); + +/** + * Handle Kafka JSON message of challenge created. + * + * @param {Object} message the Kafka JSON message + * @param {Object} ruleSets + * + * @return {Promise} promise resolved to notifications + */ +const handle = (message) => co(function* () { + return [{ userId: message.payload.initiatorUserId || 123, notification: message }]; +}); + +module.exports = { + handle, +}; diff --git a/src/processors/index.js b/src/processors/index.js index 70d8c6a..f8874fc 100644 --- a/src/processors/index.js +++ b/src/processors/index.js @@ -8,6 +8,7 @@ const ChallengePhaseWarningHandler = require('./challenge/ChallengePhaseWarningH const ChallengeHandler = require('./challenge/ChallengeHandler'); const AutoPilotHandler = require('./challenge/AutoPilotHandler'); const SubmissionHandler = require('./challenge/SubmissionHandler'); +const DummyHandler = require('./challenge/DummyHandler'); // Exports module.exports = { @@ -16,4 +17,5 @@ module.exports = { handleChallenge: ChallengeHandler.handle, handleAutoPilot: AutoPilotHandler.handle, handleSubmission: SubmissionHandler.handle, + handleDummy: DummyHandler.handle, }; diff --git a/test/create-topics.sh b/test/create-topics.sh new file mode 100644 index 0000000..353fa0c --- /dev/null +++ b/test/create-topics.sh @@ -0,0 +1,6 @@ +#!/bin/bash +#Create minimal topics for local testing +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic challenge.notification.events +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic notifications.autopilot.events +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic submission.notification.create +docker-compose exec kafka opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic dummy.topic \ No newline at end of file diff --git a/test/docker-compose.yml b/test/docker-compose.yml new file mode 100644 index 0000000..d72a060 --- /dev/null +++ b/test/docker-compose.yml @@ -0,0 +1,26 @@ +version: '3' +services: + zookeeper: + image: wurstmeister/zookeeper + networks: + - overlay + kafka: + image: wurstmeister/kafka + ports: + - "9092:9092" + environment: + KAFKA_ADVERTISED_HOST_NAME: localhost + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + networks: + - overlay + postgres96: + image: postgres:9.6 + ports: + - "5432:5432" + environment: + POSTGRES_PASSWORD: postgres + POSTGRES_USER: postgres + networks: + - overlay +networks: + overlay: diff --git a/test/websocket.html b/test/websocket.html new file mode 100644 index 0000000..d26e687 --- /dev/null +++ b/test/websocket.html @@ -0,0 +1,53 @@ + + + + +
+ + + + + + + + + From 784fca251a709867c05b1e2934f56218543edd56 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Wed, 9 Oct 2019 17:59:06 +0530 Subject: [PATCH 06/15] auth setting --- Requirements.md | 14 -------------- src/common/helper.js | 6 +++--- src/notificationStreamWS.js | 19 ++++++++++++------- websocket.png | Bin 9496 -> 0 bytes 4 files changed, 15 insertions(+), 24 deletions(-) delete mode 100644 Requirements.md delete mode 100644 websocket.png diff --git a/Requirements.md b/Requirements.md deleted file mode 100644 index 9a56aa0..0000000 --- a/Requirements.md +++ /dev/null @@ -1,14 +0,0 @@ -# Webscoket requirements - -Need websocket support in for this micro-service so that front-end will be updated immediately once the new 'corresponding' -message will be consumed/received from Cloud-Kafka. -In a general sense, need to support `push` mechanisim instead of `polling` as per below diagram. - -![websocket diagram](websocket.png) - -**Background** - This is general notification service, which is converting related trigger event into user notifications. - -Our other micro-services are triggering (publishing) `event` in coressponding `Cloud-Kafka` topics. This service subscribes -all coressponding Cloud-Kafka topcis. After consuming an event message from a particular topic, this service is generating user -notifications by doing `post-consumer-operation`, kind of `one-to-many` scenario. Example - any update in `challenge` need to -be notified to all registered participants. diff --git a/src/common/helper.js b/src/common/helper.js index 4188bc7..9637da5 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -69,7 +69,7 @@ function isValid(user) { function isTokenAuthorized(token, callback) { const secret = _.get(config, 'AUTH_SECRET') || ''; const validIssuers = JSON.parse(_.get(config, 'VALID_ISSUERS') || '[]'); - const jwtKeyCacheTime = _.get(config, 'JWT_KEY_CACHE_TIME', '24h'); + if (!secret) { return callback(new Error('Auth secret not provided')); } @@ -77,13 +77,13 @@ function isTokenAuthorized(token, callback) { return callback(new Error('JWT Issuers not configured')); } - const verifier = authVerifier(validIssuers, jwtKeyCacheTime); + const verifier = authVerifier(validIssuers); // second argument relevance for m2m token not for user token verifier.validateToken(token, secret, (err, decoded) => { if (err) { return callback(err); } const authorized = isValid(decoded); - return callback(null, authorized, decoded.roles); + return callback(null, authorized, decoded); }); } module.exports = { diff --git a/src/notificationStreamWS.js b/src/notificationStreamWS.js index 3947f84..df6d469 100644 --- a/src/notificationStreamWS.js +++ b/src/notificationStreamWS.js @@ -73,10 +73,11 @@ const setup = () => { const id = helper.generateRandomString(); const clientData = { id, - topic: null, + topic: null, // no need ws, authorized: false, roles: [], + userId: null, }; allWS.push(clientData); @@ -88,13 +89,14 @@ const setup = () => { if (message.startsWith('token:')) { logger.debug(`web socket message: ${message.substring(0, 10)}*********`); const token = message.substring('token:'.length); - helper.isTokenAuthorized(token, (err, isAuthorized, roles) => { + helper.isTokenAuthorized(token, (err, isAuthorized, decoded) => { if (err) { logger.error('failed to authorize token', err); } else if (isAuthorized) { - logger.debug(`web socket authorized with roles: ${roles}`); + logger.debug(`web socket authorized with roles: ${decoded.roles}`); clientData.authorized = true; - clientData.roles = roles; + clientData.roles = decoded.roles; + clientData.userId = decoded.userId; } }); return; @@ -180,9 +182,12 @@ function* pushNotifications(topic, notifications, handlerRuleSets) { _.each(allWS, (clientData) => { // Check the auth and role for each notification since there are more then one handler // Each handler might have different role sets - if (topic === clientData.topic && clientData.authorized && hasCommonRole(handlerRuleSets.roles, clientData.roles)) { - // the 'full' flag is false, indicating the notifications is to be added to client side - sendData(clientData.ws, { full: false, topic, messages: [notifications] }); + if (clientData.authorized) { + _.map(notifications, (n) => { + if ( clientData.userId == n.userId ) { + sendData(clientData.ws, { full: false, topic, messages: [notifications] }); + } + }); } }); } diff --git a/websocket.png b/websocket.png deleted file mode 100644 index b9fbf4077843d93a98c956a1d65121291a4abc6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9496 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 VL7?HF^FNwCgJ>yNK6w@Pe*lQ5-dz9y From ed2459ccdca1ffa8b5abb12126f23a056e853dd1 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Wed, 9 Oct 2019 18:01:40 +0530 Subject: [PATCH 07/15] deploying on dev --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2297526..a0bf69f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -102,7 +102,7 @@ workflows: context : org-global filters: branches: - only: [dev, 'hotfix/V5-API-Standards'] + only: [dev, 'feature/websocket'] - "build-prod": context : org-global filters: From 3febbd2619d2391518a0f9ebc00f0ed93c8cbe95 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Thu, 10 Oct 2019 18:12:43 +0530 Subject: [PATCH 08/15] setting websocket server --- config/default.js | 25 ------------------------ consumer.js | 25 ++++++++++++++++++++++-- src/notificationStreamWS.js | 39 ++++--------------------------------- 3 files changed, 27 insertions(+), 62 deletions(-) diff --git a/config/default.js b/config/default.js index 3da6ee7..ff061f2 100644 --- a/config/default.js +++ b/config/default.js @@ -16,31 +16,6 @@ module.exports = { idle: 10000, }, }, - // Websocket configurations - WS_OPTIONS: { - MAX_MESSAGE_COUNT: process.env.WS_MAX_MESSAGE_COUNT || 100, - PORT: process.env.WS_PORT || 8081, - perMessageDeflate: { - zlibDeflateOptions: { - // See zlib defaults. - chunkSize: process.env.WS_ZLIB_DEFLATE_CHUNK_SIZE || 10 * 1024, - memLevel: process.env.WS_ZLIB_DEFLATE_MEM_LEVEL || 7, - level: process.env.WS_ZLIB_DEFLATE_MEM_LEVEL || 3, - }, - zlibInflateOptions: { - chunkSize: process.env.WS_ZLIB_INFLATE_CHUNK_SIZE || 10 * 1024, - }, - // Other options settable: - clientNoContextTakeover: process.env.WS_CLIENT_NO_CONTEXT_TAKEOVER || true, - serverNoContextTakeover: process.env.WS_SERVER_NO_CONTEXT_TAKEOVER || true, - serverMaxWindowBits: process.env.WS_SERVER_MAX_WINDOW_BITS || 10, - // Below options specified as default values. - concurrencyLimit: process.env.WS_CONCURRENCY_LIMIT || 10, // Limits zlib concurrency for perf. - threshold: process.env.WS_BYTES_THRESHOLD || 1024, // Size (in bytes) below which messages - // should not be compressed. - }, - }, - AUTH_SECRET: process.env.AUTH_SECRET, VALID_ISSUERS: process.env.VALID_ISSUERS ? process.env.VALID_ISSUERS.replace(/\\"/g, '') : null, // keep it here for dev purposes, it's only needed by modified version of tc-core-library-js diff --git a/consumer.js b/consumer.js index fe84c51..e31ff4d 100644 --- a/consumer.js +++ b/consumer.js @@ -14,6 +14,8 @@ const logger = require('./src/common/logger'); const models = require('./src/models'); const processors = require('./src/processors'); const notificationStreamWS = require('./src/notificationStreamWS'); +const http = require('http'); +const express = require('express'); /** @@ -27,7 +29,6 @@ function startKafkaConsumer() { const consumer = new Kafka.GroupConsumer(options); // Setup websocket server logger.debug('Setting ws socket'); - notificationStreamWS.setup(); // data handler const messageHandler = (messageSet, topic, partition) => Promise.each(messageSet, (m) => { @@ -95,9 +96,11 @@ function startKafkaConsumer() { // logging logger.info(`Saved ${notifications.length} notifications`); logger.info(`Going to push ${notifications.length} notifications to websocket.`); + // Trigger websocket notifications yield notificationStreamWS.pushNotifications(topic, notifications, handlerRuleSets); logger.info(`Pushed ${notifications.length} notifications to websocket`); + /* logger.info(` for users: ${ _.map(notifications, (n) => n.userId).join(', ') }`); */ @@ -140,12 +143,30 @@ function startKafkaConsumer() { }]) .then(() => { logger.info('Kafka consumer initialized successfully'); - healthcheck.init([check]); + //healthcheck.init([check]); // checking in middleware }) .catch((err) => { logger.error('Kafka consumer failed'); logger.logFullError(err); }); + + // setup websocket server + const app = express(); + app.set('port', config.PORT); + app.use(healthcheck.middleware([check])); + //app.use('/ws-check', express.static('./docs/ws-check.html')); + app.use((req, res) => { + res.status(404).json({ error: 'route not found' }); + }); + app.use((err, req, res) => { + logger.logFullError(err); + res.status(400).json({ error: err.message }); + }); + + const server = http.createServer(app); + notificationStreamWS.setup(server); + server.listen(app.get('port')); + logger.info(`Websocket server listening on port ${app.get('port')}`); } startKafkaConsumer(); diff --git a/src/notificationStreamWS.js b/src/notificationStreamWS.js index df6d469..4dbe6f3 100644 --- a/src/notificationStreamWS.js +++ b/src/notificationStreamWS.js @@ -16,9 +16,6 @@ const allWS = []; // all cached messages, key is topic, value is array of messages of the topic with roles associated const allMessages = {}; -// max cache message count per topic -const maxMsgCount = Number(config.WS_OPTIONS.MAX_MESSAGE_COUNT); - /** * Send object to websocket client * @@ -46,34 +43,15 @@ function hasCommonRole(firstRoles, secondRoles) { /** * Setup web socket. + * */ -const setup = () => { - const wss = new WebSocketServer({ - port: config.WS_OPTIONS.PORT, - perMessageDeflate: { - zlibDeflateOptions: { - // See zlib defaults. - chunkSize: config.WS_OPTIONS.perMessageDeflate.zlibDeflateOptions.chunkSize, - memLevel: config.WS_OPTIONS.perMessageDeflate.zlibDeflateOptions.memLevel, - level: config.WS_OPTIONS.perMessageDeflate.zlibDeflateOptions.level, - }, - zlibInflateOptions: { - chunkSize: config.WS_OPTIONS.perMessageDeflate.zlibInflateOptions.chunkSize, - }, - // Other options settable: - clientNoContextTakeover: config.WS_OPTIONS.perMessageDeflate.clientNoContextTakeover, - serverNoContextTakeover: config.WS_OPTIONS.perMessageDeflate.serverNoContextTakeover, - serverMaxWindowBits: config.WS_OPTIONS.perMessageDeflate.serverMaxWindowBits, - concurrencyLimit: config.WS_OPTIONS.perMessageDeflate.concurrencyLimit, - threshold: config.WS_OPTIONS.perMessageDeflate.threshold, - }, - }); +const setup = (server) => { + const wss = new WebSocketServer({server}); wss.on('connection', (ws) => { logger.debug('web socket connected'); const id = helper.generateRandomString(); const clientData = { id, - topic: null, // no need ws, authorized: false, roles: [], @@ -109,12 +87,7 @@ const setup = () => { logger.error('invalid message', message, err); return; } - clientData.topic = msgJSON.topic; - - const topicMsgs = allMessages[msgJSON.topic] || []; - let startIndex = topicMsgs.length - msgJSON.count; - if (startIndex < 0) startIndex = 0; - const messages = topicMsgs.slice(startIndex); + // the 'full' flag is true, indicating the messages are full latest messages for client side, // client side should clear the existing messages if any for the topic if (clientData.authorized) { @@ -174,10 +147,6 @@ const setup = () => { * @returns {Object} handlerRuleSets ruleset of handler to check roles */ function* pushNotifications(topic, notifications, handlerRuleSets) { - // cache notifications - if (!allMessages[topic]) allMessages[topic] = []; - allMessages[topic].push({ notifications, handlerRuleSets }); - if (allMessages[topic].length > maxMsgCount) allMessages[topic].shift(); // send notifications to clients _.each(allWS, (clientData) => { // Check the auth and role for each notification since there are more then one handler From 72ed2a1fa4343afc21878107d1ac02ed819978ae Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Thu, 10 Oct 2019 18:51:23 +0530 Subject: [PATCH 09/15] fixing client message handling issue. --- src/notificationStreamWS.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/notificationStreamWS.js b/src/notificationStreamWS.js index 4dbe6f3..37067d8 100644 --- a/src/notificationStreamWS.js +++ b/src/notificationStreamWS.js @@ -88,19 +88,6 @@ const setup = (server) => { return; } - // the 'full' flag is true, indicating the messages are full latest messages for client side, - // client side should clear the existing messages if any for the topic - if (clientData.authorized) { - const authorizedMessages = []; - for (let i = 0; i < messages.length; i++) { - // Check the role for each notification since there are more then one handler - // Each handler might have different role sets - if (hasCommonRole(messages[i].handlerRuleSets.roles, clientData.roles)) { - authorizedMessages.push(messages[i].notifications); - } - } - sendData(ws, { full: true, topic: msgJSON.topic, messages: authorizedMessages }); - } }); // terminate web socket From e49dc0a3ae61482b230beb2dab896e71b9917188 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Fri, 11 Oct 2019 18:45:38 +0530 Subject: [PATCH 10/15] tweaking websocket data from server. --- consumer.js | 54 ++++++++++++++++++++++--------------- src/notificationStreamWS.js | 4 +-- 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/consumer.js b/consumer.js index e31ff4d..7842c08 100644 --- a/consumer.js +++ b/consumer.js @@ -85,6 +85,7 @@ function startKafkaConsumer() { if (notifications && notifications.length > 0) { // save notifications in bulk to improve performance logger.info(`Going to insert ${notifications.length} notifications in database.`); + let wsData = []; yield models.Notification.bulkCreate(_.map(notifications, (n) => ({ userId: n.userId, type: n.type || topic, @@ -92,15 +93,26 @@ function startKafkaConsumer() { read: false, seen: false, version: n.version || null, - }))); + })), { returning: true }) + .then((result) => { + _.each(result, (model) => { + const item = model.toJSON(); + wsData.push(item); + }); + }) + .catch((errors) => { + logger.logFullError(errors); + }) // logging logger.info(`Saved ${notifications.length} notifications`); logger.info(`Going to push ${notifications.length} notifications to websocket.`); // Trigger websocket notifications - yield notificationStreamWS.pushNotifications(topic, notifications, handlerRuleSets); - logger.info(`Pushed ${notifications.length} notifications to websocket`); - + if (wsData.length > 0) { + yield notificationStreamWS.pushNotifications(topic, wsData, handlerRuleSets); + logger.info(`Pushed ${wsData.length} notifications to websocket`); + } + /* logger.info(` for users: ${ _.map(notifications, (n) => n.userId).join(', ') }`); */ @@ -150,23 +162,23 @@ function startKafkaConsumer() { logger.logFullError(err); }); - // setup websocket server - const app = express(); - app.set('port', config.PORT); - app.use(healthcheck.middleware([check])); - //app.use('/ws-check', express.static('./docs/ws-check.html')); - app.use((req, res) => { - res.status(404).json({ error: 'route not found' }); - }); - app.use((err, req, res) => { - logger.logFullError(err); - res.status(400).json({ error: err.message }); - }); - - const server = http.createServer(app); - notificationStreamWS.setup(server); - server.listen(app.get('port')); - logger.info(`Websocket server listening on port ${app.get('port')}`); + // setup websocket server + const app = express(); + app.set('port', config.PORT); + app.use(healthcheck.middleware([check])); + //app.use('/ws-check', express.static('./docs/ws-check.html')); + app.use((req, res) => { + res.status(404).json({ error: 'route not found' }); + }); + app.use((err, req, res) => { + logger.logFullError(err); + res.status(400).json({ error: err.message }); + }); + + const server = http.createServer(app); + notificationStreamWS.setup(server); + server.listen(app.get('port')); + logger.info(`Websocket server listening on port ${app.get('port')}`); } startKafkaConsumer(); diff --git a/src/notificationStreamWS.js b/src/notificationStreamWS.js index 37067d8..90935a0 100644 --- a/src/notificationStreamWS.js +++ b/src/notificationStreamWS.js @@ -57,7 +57,7 @@ const setup = (server) => { roles: [], userId: null, }; - allWS.push(clientData); + allWS.push(clientData); //TODO planning to have userid based // got message from client, // the message is 'token:{JWT-token}' or string representation of JSON containing fields: topic and count, @@ -141,7 +141,7 @@ function* pushNotifications(topic, notifications, handlerRuleSets) { if (clientData.authorized) { _.map(notifications, (n) => { if ( clientData.userId == n.userId ) { - sendData(clientData.ws, { full: false, topic, messages: [notifications] }); + sendData(clientData.ws, { full: false, topic, message: n }); } }); } From da365fc0cf259905e64ce1c167f7f168259e6104 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Fri, 6 Dec 2019 15:25:36 +0530 Subject: [PATCH 11/15] testing new core api tag v2.6.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index eb025c9..ae0fc6b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "remarkable": "^1.7.1", "sequelize": "^4.21.0", "superagent": "^3.8.0", - "tc-core-library-js": "appirio-tech/tc-core-library-js.git#v2.6", + "tc-core-library-js": "appirio-tech/tc-core-library-js.git#v2.6.4", "topcoder-healthcheck-dropin": "^1.0.3", "urijs": "^1.19.1", "uuid": "^3.3.3", From 3ce29a7e914e596daba401664bf3687c3cf420a4 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Fri, 20 Dec 2019 16:40:47 +0530 Subject: [PATCH 12/15] deploying on dev --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1628f9a..408a32e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -102,7 +102,7 @@ workflows: context : org-global filters: branches: - only: [dev, 'hotfix/V5-API-Standards', 'v5-upgrade'] + only: [dev, 'hotfix/V5-API-Standards', 'v5-upgrade', 'feature/websocket'] - "build-prod": context : org-global filters: From 29578cd2844a89a03fa5a9d0a330f1a46e17ee02 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Thu, 9 Jan 2020 16:32:53 +0530 Subject: [PATCH 13/15] adding front-end testing page for websocket basic connection. --- .circleci/config.yml | 2 +- test/connect-websocket.html | 127 ++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 test/connect-websocket.html diff --git a/.circleci/config.yml b/.circleci/config.yml index 408a32e..9b183f3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -102,7 +102,7 @@ workflows: context : org-global filters: branches: - only: [dev, 'hotfix/V5-API-Standards', 'v5-upgrade', 'feature/websocket'] + only: [dev] - "build-prod": context : org-global filters: diff --git a/test/connect-websocket.html b/test/connect-websocket.html new file mode 100644 index 0000000..abf4184 --- /dev/null +++ b/test/connect-websocket.html @@ -0,0 +1,127 @@ + + + + + WebSocket Verification + + + + + +
+
+
+ Websocket Server URL +
+ +
+
+
+ User JWT Token +
+ +
+ +
+
+ +
+
+ +
+
+ + \ No newline at end of file From d5f66844ebc2f901a8d0f5430732f6d41fc03837 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Fri, 31 Jan 2020 21:18:49 +0530 Subject: [PATCH 14/15] adding test handler for websocket testing --- config/default.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/default.js b/config/default.js index ff061f2..8c2538a 100644 --- a/config/default.js +++ b/config/default.js @@ -97,6 +97,12 @@ module.exports = { }, }, ], + 'test.sachin': [ + { + handleDummy: + {} + }, + ], //'notifications.community.challenge.created': ['handleChallengeCreated'], //'notifications.community.challenge.phasewarning': ['handleChallengePhaseWarning'], }, From a6392699ba210f4c10cfc0665d2754ef7b2ebc93 Mon Sep 17 00:00:00 2001 From: Sachin Maheshwari Date: Fri, 31 Jan 2020 21:19:58 +0530 Subject: [PATCH 15/15] adding test handler for websocket testing --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 9b183f3..a0bf69f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -102,7 +102,7 @@ workflows: context : org-global filters: branches: - only: [dev] + only: [dev, 'feature/websocket'] - "build-prod": context : org-global filters: