├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── Dockerfile ├── LICENSE ├── README.md ├── alpine.Dockerfile ├── config.js ├── index.js ├── kafka-setup ├── README.md ├── docker-compose.yml ├── performance-test.sh ├── start.sh ├── stop.sh └── test-data.txt ├── lib ├── ConsumerInstance.js ├── Kafka.js ├── KafkaRest.js ├── Metadata.js ├── Zookeeper.js └── api │ ├── admin.js │ ├── consumers.js │ ├── index.js │ ├── others.js │ └── topics.js ├── local.Dockerfile ├── package.json └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | logs 2 | *.log 3 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | 7 | node_modules 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | 9 | [{*.js,*.json,*.yml}] 10 | indent_size = 2 11 | indent_style = space 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | coverage/* 2 | /node_modules/* 3 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "env": { 3 | "es6": true, 4 | "node": true, 5 | "mocha": true 6 | }, 7 | "extends": "eslint:recommended", 8 | "parserOptions": { 9 | "ecmaVersion": 2017, 10 | "sourceType": "module" 11 | }, 12 | "rules": { 13 | "indent": [ 14 | "error", 15 | 2 16 | ], 17 | "linebreak-style": [ 18 | "error", 19 | "unix" 20 | ], 21 | "quotes": [ 22 | "error", 23 | "double" 24 | ], 25 | "semi": [ 26 | "error", 27 | "always" 28 | ], 29 | "no-console": 0, 30 | "no-unused-vars": ["error", { "argsIgnorePattern": "^_" }] 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "node" 4 | env: 5 | global: 6 | - ZOOKEEPER_PEERS=localhost:2181 7 | - KAFKA_PEERS=localhost:9092 8 | - KST_TOPIC=travis 9 | - CXX=g++-4.8 10 | 11 | before_install: 12 | - wget http://www.us.apache.org/dist/kafka/1.1.0/kafka_2.12-1.1.0.tgz -O kafka.tgz 13 | - mkdir -p kafka && tar xzf kafka.tgz -C kafka --strip-components 1 14 | - nohup bash -c "cd kafka && bin/zookeeper-server-start.sh config/zookeeper.properties &" 15 | - nohup bash -c "cd kafka && bin/kafka-server-start.sh config/server.properties &" 16 | - sleep 5 17 | - kafka/bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic sinek-test-topic-travis --zookeeper localhost:2181 18 | - kafka/bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic n-test-topic --zookeeper localhost:2181 19 | - sleep 2 20 | 21 | addons: 22 | apt: 23 | sources: 24 | - ubuntu-toolchain-r-test 25 | packages: 26 | - g++-4.8 27 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # node-kafka-rest CHANGELOG 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:9 2 | 3 | RUN mkdir -p /usr/src/app \ 4 | && apt-get update && apt-get install -y build-essential python librdkafka-dev libsasl2-dev libsasl2-modules openssl \ 5 | && apt-get autoremove -y && apt-get autoclean -y \ 6 | && rm -rf /var/lib/apt/lists/* 7 | 8 | WORKDIR /usr/src/app 9 | COPY . /usr/src/app/ 10 | RUN yarn install 11 | 12 | CMD ["yarn", "start"] 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 nodefluent 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Node Kafka REST API 2 | 3 | > DISCLAIMER: The goal of this project is to mimic confluent/kafka-rest-proxy to offer a faster interface to topic data for applications like kafka-topics-ui, as kafka-rest-proxy troubles with larger message payloads or a large amount of messages on the topic. If you are looking for a complete rest-proxy for kafka, this is not the tool you are looking for. 4 | 5 | ## Quick start 6 | - Run kafka-setup: `yarn run kafka:start` 7 | - Open kafka topics ui: `http://localhost:8000` 8 | 9 | ## Curling the API 10 | 11 | #### Get topics 12 | 13 | ```shell 14 | curl -X GET \ 15 | http://localhost:8082/topics \ 16 | -H 'cache-control: no-cache' \ 17 | -H 'content-type: application/json' \ 18 | -d '{ 19 | "name": "peter", 20 | "format": "json", 21 | "auto.offset.reset": "earliest" 22 | }' 23 | ``` 24 | 25 | #### Get topic infos 26 | 27 | ```shell 28 | curl -X GET \ 29 | http://localhost:8082/topics/peters-topic \ 30 | -H 'cache-control: no-cache' \ 31 | -H 'content-type: application/json' \ 32 | -d '{ 33 | "name": "peter", 34 | "format": "json", 35 | "auto.offset.reset": "earliest" 36 | }' 37 | ``` 38 | 39 | #### Create a consumer 40 | 41 | ```shell 42 | curl -X POST \ 43 | http://localhost:8082/consumers/peter \ 44 | -H 'cache-control: no-cache' \ 45 | -H 'content-type: application/json' \ 46 | -d '{ 47 | "name": "peter", 48 | "format": "json", 49 | "auto.offset.reset": "earliest" 50 | }' 51 | ``` 52 | 53 | #### Use consumer to subscribe to topic 54 | 55 | ```shell 56 | curl -X POST \ 57 | http://localhost:8082/consumers/peter/instances/peter/subscription \ 58 | -H 'cache-control: no-cache' \ 59 | -H 'content-type: application/json' \ 60 | -d '{ 61 | "topics": ["peters-topic", "ks-fourth-4b63a506-4e46-4c78-a0b2-24922a1124db"] 62 | }' 63 | ``` 64 | 65 | #### Fetch data 66 | 67 | ```shell 68 | curl -X GET \ 69 | http://localhost:8082/consumers/peter/instances/peter/records \ 70 | -H 'cache-control: no-cache' \ 71 | -H 'content-type: application/json' 72 | ``` 73 | 74 | #### Close and remove consumer 75 | 76 | ```shell 77 | curl -X DELETE \ 78 | http://localhost:8082/consumers/peter/instances/peter \ 79 | -H 'cache-control: no-cache' \ 80 | -H 'content-type: application/json' 81 | ``` 82 | 83 | ## Using Docker 84 | 85 | If you want to customize any Kafka REST parameters, simply add them as environment variables, e.g.: 86 | - To set the **http.port** parameter set the environment to `KAFKA_REST_HTTP_PORT: 8082`. 87 | - To turn on **debug** mode for consumer and producer set `KAFKA_REST_DEBUG: "all"`. 88 | - To set the **group.id** only for consumer set the environment to `KAFKA_REST_CONSUMER_GROUP_ID: "kafka-rest-consumer-group"`. 89 | 90 | The full list and descriptions of config parameters can be found [here](https://github.com/edenhill/librdkafka/blob/0.9.5.x/CONFIGURATION.md). 91 | 92 | Check out our docker compose example: 93 | 94 | ```yaml 95 | --- 96 | version: "2" 97 | services: 98 | zookeeper: 99 | image: wurstmeister/zookeeper:latest 100 | ports: 101 | - 2181:2181 102 | 103 | kafka: 104 | image: wurstmeister/kafka:0.10.2.1 105 | ports: 106 | - "9092:9092" 107 | links: 108 | - zookeeper 109 | depends_on: 110 | - zookeeper 111 | environment: 112 | KAFKA_BROKER_ID: 1 113 | KAFKA_PORT: 9092 114 | KAFKA_ADVERTISED_HOST_NAME: "kafka" 115 | KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092" 116 | KAFKA_LISTENERS: "PLAINTEXT://:9092" 117 | KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 118 | KAFKA_CREATE_TOPICS: "test:1:1" 119 | KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" 120 | 121 | kafka-rest: 122 | image: nodefluent/kafka-rest 123 | ports: 124 | - 8082:8082 125 | links: 126 | - kafka 127 | - zookeeper 128 | depends_on: 129 | - kafka 130 | - zookeeper 131 | environment: 132 | KAFKA_REST_DEBUG: "all" 133 | KAFKA_REST_HTTP_PORT: 8082 134 | KAFKA_REST_CONSUMER_METADATA_BROKER_LIST: "kafka:9092" 135 | KAFKA_REST_PRODUCER_METADATA_BROKER_LIST: "kafka:9092" 136 | 137 | kafka-topics-ui: 138 | image: landoop/kafka-topics-ui 139 | ports: 140 | - 8000:8000 141 | links: 142 | - kafka-rest 143 | depends_on: 144 | - kafka-rest 145 | environment: 146 | KAFKA_REST_PROXY_URL: "http://kafka-rest:8082" 147 | PROXY: "true" 148 | ``` 149 | -------------------------------------------------------------------------------- /alpine.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | 3 | RUN apk add --upgrade --no-cache \ 4 | alpine-sdk \ 5 | libc6-compat \ 6 | bash \ 7 | make \ 8 | gcc \ 9 | g++ \ 10 | python \ 11 | cyrus-sasl-dev \ 12 | libressl2.5-libcrypto --repository http://dl-3.alpinelinux.org/alpine/edge/main/ --allow-untrusted \ 13 | libressl2.5-libssl --repository http://dl-3.alpinelinux.org/alpine/edge/main/ --allow-untrusted \ 14 | #librdkafka-dev --repository http://dl-3.alpinelinux.org/alpine/edge/community/ --allow-untrusted \ 15 | dumb-init --repository http://dl-3.alpinelinux.org/alpine/edge/community/ --allow-untrusted 16 | 17 | # build from source 18 | WORKDIR /root 19 | RUN git clone https://github.com/edenhill/librdkafka.git \ 20 | && cd /root/librdkafka \ 21 | && git reset --hard cf4a4c62f3a9a15c01d40fef86710be970a0190e 22 | WORKDIR /root/librdkafka 23 | RUN /root/librdkafka/configure 24 | RUN make 25 | RUN make install 26 | 27 | ENV BUILD_LIBRDKAFKA=0 28 | 29 | WORKDIR /usr/src/app 30 | COPY . /usr/src/app/ 31 | RUN yarn install 32 | 33 | CMD ["yarn", "start"] 34 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const debug = require("debug"); 3 | 4 | const logger = { 5 | debug: debug("kafka-rest:debug"), 6 | info: debug("kafka-rest:info"), 7 | warn: debug("kafka-rest:warn"), 8 | error: debug("kafka-rest:error") 9 | }; 10 | 11 | const host = "kafka"; 12 | const zhost = "zookeeper"; 13 | 14 | const config = { 15 | logger, 16 | consumer: { 17 | autoremove: 30000, 18 | noptions: { 19 | //"debug": "all", 20 | "metadata.broker.list": `${host}:9092`, 21 | "group.id": "kafka-rest-group-test", 22 | "event_cb": true, 23 | "compression.codec": "none", 24 | "enable.auto.commit": false 25 | }, 26 | tconf: { 27 | } 28 | }, 29 | producer: { 30 | noptions: { 31 | //"debug": "all", 32 | "metadata.broker.list": `${host}:9092`, 33 | "client.id": "kafka-rest-client-test", 34 | "event_cb": true, 35 | "compression.codec": "none", 36 | }, 37 | tconf: { 38 | } 39 | }, 40 | http:{ 41 | port: 8082 42 | }, 43 | zookeeper: { 44 | host: `${zhost}:2181`, 45 | timeout: 20000 46 | } 47 | }; 48 | 49 | Object.keys(process.env).forEach((env)=>{ 50 | if(env === "KAFKA_REST_HTTP_PORT"){ 51 | config.http.port = process.env.KAFKA_REST_HTTP_PORT; 52 | } else if(env.startsWith("KAFKA_REST_CONSUMER_")){ 53 | config.consumer.noptions[env.slice(20).toLowerCase().replace(/_/g, ".")] = process.env[env]; 54 | } else if(env.startsWith("KAFKA_REST_PRODUCER_")){ 55 | config.producer.noptions[env.slice(20).toLowerCase().replace(/_/g, ".")] = process.env[env]; 56 | } else if(env.startsWith("KAFKA_REST_ZOOKEEPER_")){ 57 | config.zookeeper[env.slice(21).toLowerCase().replace(/_/g, ".")] = process.env[env]; 58 | } else if(env.startsWith("KAFKA_REST_") && !env.startsWith("KAFKA_REST_UI_")){ 59 | config.consumer.noptions[env.slice(11).toLowerCase().replace(/_/g, ".")] = process.env[env]; 60 | config.producer.noptions[env.slice(11).toLowerCase().replace(/_/g, ".")] = process.env[env]; 61 | } 62 | }); 63 | 64 | module.exports= config; 65 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const config = require("./config"); 4 | const KafkaRest = require("./lib/KafkaRest"); 5 | 6 | const rest = new KafkaRest(config); 7 | rest.on("error", error => console.error(error)); 8 | rest.run().then(() => {}); 9 | -------------------------------------------------------------------------------- /kafka-setup/README.md: -------------------------------------------------------------------------------- 1 | ## Local Kafka Dev Setup 2 | 3 | ### Requirements 4 | 5 | * Docker 6 | * Docker Compose 7 | 8 | ### Usage 9 | 10 | > Run commands from project root 11 | 12 | - Start kafka: `npm run kafka:start` 13 | - Stop kafka: `npm run kafka:stop` 14 | - Show kafka logs: `npm run kafka:logs` 15 | -------------------------------------------------------------------------------- /kafka-setup/docker-compose.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: "2" 3 | services: 4 | zookeeper: 5 | image: wurstmeister/zookeeper:latest 6 | ports: 7 | - 2181:2181 8 | 9 | kafka: 10 | image: wurstmeister/kafka:0.10.2.1 11 | ports: 12 | - "9092:9092" 13 | links: 14 | - zookeeper 15 | depends_on: 16 | - zookeeper 17 | environment: 18 | KAFKA_BROKER_ID: 1 19 | KAFKA_PORT: 9092 20 | KAFKA_ADVERTISED_HOST_NAME: "kafka" 21 | KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092" 22 | KAFKA_LISTENERS: "PLAINTEXT://:9092" 23 | KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 24 | KAFKA_CREATE_TOPICS: "test:1:1" 25 | KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" 26 | 27 | kafka-rest: 28 | build: 29 | context: ../ 30 | dockerfile: Dockerfile 31 | ports: 32 | - 8082:8082 33 | links: 34 | - kafka 35 | - zookeeper 36 | depends_on: 37 | - kafka 38 | - zookeeper 39 | environment: 40 | DEBUG: "*" 41 | KAFKA_REST_ZOOKEEPER_HOST: "zookeeper:2181" 42 | KAFKA_REST_CONSUMER_METADATA_BROKER_LIST: "kafka:9092" 43 | KAFKA_REST_PRODUCER_METADATA_BROKER_LIST: "kafka:9092" 44 | volumes: 45 | - ..:/usr/src/app/ 46 | - /usr/src/app/node_modules 47 | -------------------------------------------------------------------------------- /kafka-setup/performance-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | CONSUMER_PREFIX="peter" 3 | TOPIC="test" 4 | 5 | for index in {0..6} 6 | do 7 | echo 8 | echo "Create ${CONSUMER_PREFIX}-${index}." 9 | curl -X POST \ 10 | "http://localhost:8082/consumers/${CONSUMER_PREFIX}-${index}" \ 11 | -H 'cache-control: no-cache' \ 12 | -H 'content-type: application/json' \ 13 | -d '{ 14 | "name": "peter", 15 | "format": "json", 16 | "auto.offset.reset": "earliest" 17 | }' 18 | 19 | curl -X POST \ 20 | http://localhost:8082/consumers/${CONSUMER_PREFIX}-${index}/instances/${CONSUMER_PREFIX}-${index}/subscription \ 21 | -H 'cache-control: no-cache' \ 22 | -H 'content-type: application/json' \ 23 | -d "{ 24 | \"topics\": [\"${TOPIC}\"] 25 | }" 26 | done 27 | 28 | echo 29 | echo "Wait for 7 seconds..." 30 | sleep 7 31 | 32 | for index in {0..6} 33 | do 34 | echo 35 | echo "Get records from ${CONSUMER_PREFIX}-${index}." 36 | curl -X GET \ 37 | http://localhost:8082/consumers/${CONSUMER_PREFIX}-${index}/instances/${CONSUMER_PREFIX}-${index}/records \ 38 | -H 'cache-control: no-cache' \ 39 | -H 'content-type: application/json' 40 | done 41 | 42 | echo 43 | for index in {0..6} 44 | do 45 | echo "Deleting consumer ${CONSUMER_PREFIX}-${index}." 46 | curl -X DELETE \ 47 | http://localhost:8082/consumers/${CONSUMER_PREFIX}-${index}/instances/${CONSUMER_PREFIX}-${index} \ 48 | -H 'cache-control: no-cache' \ 49 | -H 'content-type: application/json' 50 | done 51 | -------------------------------------------------------------------------------- /kafka-setup/start.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | rm -rf /tmp/kafka-data 3 | mkdir /tmp/kafka-data 4 | mkdir /tmp/kafka-data/data 5 | mkdir /tmp/kafka-data/logs 6 | chmod -R 777 /tmp/kafka-data 7 | 8 | BASEDIR=$(git rev-parse --show-toplevel) 9 | 10 | if [ -z "$(docker-compose --file ${BASEDIR}/kafka-setup/docker-compose.yml ps -q)" ]; then 11 | docker-compose --file ${BASEDIR}/kafka-setup/docker-compose.yml rm 12 | fi 13 | 14 | docker-compose --file ${BASEDIR}/kafka-setup/docker-compose.yml up -d 15 | -------------------------------------------------------------------------------- /kafka-setup/stop.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | BASEDIR=$(git rev-parse --show-toplevel) 3 | docker-compose --file ${BASEDIR}/kafka-setup/docker-compose.yml down 4 | -------------------------------------------------------------------------------- /kafka-setup/test-data.txt: -------------------------------------------------------------------------------- 1 | 1#{"foo":"bar"} 2 | 2#{"object":{"a":1,"b":2,"c":{"d":4}}} 3 | 3#{} 4 | 4#string 5 | -------------------------------------------------------------------------------- /lib/ConsumerInstance.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const Promise = require("bluebird"); 3 | const debug = require("debug")("kafka-rest:consumer-instance"); 4 | const {NConsumer} = require("sinek"); 5 | 6 | class ConsumerInstance { 7 | 8 | constructor(config, maxWindowSize = 100, messageFormat, earliestElseLatest){ 9 | this.config = config; 10 | this.maxWindowSize = maxWindowSize; 11 | this.messageFormat = messageFormat; 12 | this.earliestElseLatest = earliestElseLatest; 13 | this.window = []; 14 | this.hasSubscribed = false; 15 | } 16 | 17 | _onMessage(message){ 18 | 19 | if(this.messageFormat === "json"){ 20 | try { 21 | message.key = message.key ? message.key.toString("utf8"): null; 22 | message.value = message.value ? message.value.toString("utf8"): null; 23 | message.value = JSON.parse(message.value); 24 | } catch(error){ 25 | debug("Failed to JSON parse message value:", error); 26 | } 27 | } 28 | 29 | if(this.messageFormat === "binary"){ 30 | message.key = message.key ? message.key.toString("base64") : null; 31 | message.value = message.value ? message.value.toString("base64") : null; 32 | } 33 | 34 | if(this.window.length >= this.maxWindowSize){ 35 | if(!this.earliestElseLatest){ 36 | this.window.shift(); //latest 37 | } else { 38 | this.window.pop(); //earliest 39 | } 40 | } 41 | 42 | this.window.push(message); 43 | } 44 | 45 | getMessages(timeout = 500, tries = 3, maxBytes = 50000) { 46 | debug("Get messages.", {timeout, tries, messages: this.window}); 47 | //TODO commit and remove on read? 48 | return Promise.delay(timeout).then(() => { 49 | if(this.window < this.maxWindowSize && 50 | Buffer.byteLength(JSON.stringify(this.window), "utf8") < maxBytes && 51 | tries > 1){ 52 | return this.getMessages(timeout, tries - 1); 53 | } else { 54 | return this.window; 55 | } 56 | }); 57 | 58 | // return this.window; 59 | } 60 | 61 | reset(){ 62 | this.window = []; 63 | } 64 | 65 | async start(){ 66 | try { 67 | this.consumer = new NConsumer([], this.config); 68 | this.consumer.on("error", error => this.config.logger.error(error)); 69 | this.consumer.on("message", message => this.config.logger.info("kafka message", message, this.earliestElseLatest)); 70 | this.consumer.on("message", message => this._onMessage(message)); 71 | return true; 72 | } 73 | catch(error){ 74 | return false; 75 | } 76 | } 77 | 78 | async adjustSubscription(topics = []){ 79 | 80 | if(this.hasSubscribed){ 81 | debug("has already subscribed, cannot adjust streaming consumer."); 82 | return false; 83 | } 84 | 85 | if(!this.consumer){ 86 | debug("no consumer created yet, run .start() first"); 87 | return false; 88 | } 89 | 90 | this.hasSubscribed = true; 91 | this.consumer.topics = topics; 92 | await this.consumer.connect(true); 93 | return true; 94 | } 95 | 96 | close(){ 97 | if(this.consumer){ 98 | return this.consumer.close(); 99 | } 100 | } 101 | 102 | } 103 | 104 | module.exports = ConsumerInstance; 105 | -------------------------------------------------------------------------------- /lib/Kafka.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const {NProducer} = require("sinek"); 4 | const debug = require("debug")("kafka-rest:kafka"); 5 | 6 | const Metadata = require("./Metadata.js"); 7 | const ConsumerInstance = require("./ConsumerInstance.js"); 8 | 9 | class Kafka { 10 | 11 | constructor(config = {}){ 12 | this.config = config; 13 | 14 | if(!this.config.logger || !this.config.logger.error){ 15 | this.config.logger = { 16 | error: () => {} 17 | }; 18 | } 19 | 20 | //store references 21 | this.producer = null; 22 | this.consumers = {}; 23 | } 24 | 25 | async getMetadata(topics = []){ 26 | 27 | const producer = await this.getProducer(); 28 | const metadata = await (new Promise((resolve, reject) => { 29 | 30 | producer.producer.getMetadata(topics, (error, metadata) => { 31 | 32 | if(error){ 33 | return reject(error); 34 | } 35 | 36 | resolve(metadata); 37 | }); 38 | })); 39 | debug("Got metadata.", metadata); 40 | 41 | return new Metadata(metadata); 42 | } 43 | 44 | async getProducer(){ 45 | debug("Get producer."); 46 | if(this.producer){ 47 | return this.producer; 48 | } 49 | 50 | const producer = new NProducer(this.config.producer); 51 | producer.on("error", error => this.config.logger.error(error)); 52 | await producer.connect(); 53 | this.producer = producer; 54 | return producer; 55 | } 56 | 57 | //TODO beautify params.. 58 | async getConsumer(name, topics = [], earliestElseLatest = false, maxWindowSize = 100, messageFormat = "", opts = {}){ 59 | debug("Get consumer.", {name, topics, earliestElseLatest, maxWindowSize, messageFormat, opts}); 60 | 61 | if(this.consumers[name]){ 62 | return this.consumers[name]; 63 | } 64 | 65 | const config = Object.assign({}, this.config.consumer); 66 | if(!config.tconf){ 67 | config.tconf = {}; 68 | } 69 | config.tconf["auto.offset.reset"] = earliestElseLatest ? "earliest" : "latest"; 70 | 71 | const {clientId, consumerGroup} = opts; 72 | config["group.id"] = consumerGroup; 73 | config["client.id"] = clientId; 74 | 75 | //wrap consumer to get a grip on a message window 76 | const consumerInstance = new ConsumerInstance(config, maxWindowSize, messageFormat, earliestElseLatest); 77 | await consumerInstance.start(); 78 | this.consumers[name] = consumerInstance; 79 | setTimeout(() => this.removeConsumer(name), config.autoremove); 80 | 81 | return consumerInstance; 82 | } 83 | 84 | removeConsumer(name){ 85 | 86 | if(!this.consumers[name]){ 87 | return false; 88 | } 89 | 90 | debug("Remove consumer.", {name}); 91 | this.consumers[name].close(); 92 | delete this.consumers[name]; 93 | return true; 94 | } 95 | 96 | closeAll(){ 97 | debug("Close all."); 98 | if(this.producer){ 99 | this.producer.close(); 100 | } 101 | 102 | Object.keys(this.consumers).forEach(consumer => { 103 | if(consumer){ 104 | try { 105 | consumer.close(); 106 | } catch(e){ 107 | //empty 108 | } 109 | } 110 | }); 111 | 112 | this.producer = null; 113 | this.consumers = null; 114 | } 115 | } 116 | 117 | module.exports = Kafka; 118 | -------------------------------------------------------------------------------- /lib/KafkaRest.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const EventEmitter = require("events"); 4 | const Promise = require("bluebird"); 5 | const express = require("express"); 6 | const bodyParser = require("body-parser"); 7 | var cors = require("cors"); 8 | 9 | const Kafka = require("./Kafka.js"); 10 | const Zookeeper = require("./Zookeeper.js"); 11 | 12 | const { 13 | getConsumersRouter, 14 | getTopicsRouter, 15 | getOthersRouter, 16 | getAdminRouter 17 | } = require("./api"); 18 | 19 | class KafkaRest extends EventEmitter { 20 | 21 | constructor(config) { 22 | super(); 23 | 24 | this.pjson = require("./../package.json"); 25 | this.config = config; 26 | 27 | this.aliveStatus = 1; 28 | this.app = this._buildWebServer(this.config.http); 29 | this.httpServer = null; 30 | this.kafka = new Kafka(this.config); 31 | this.zookeeper = new Zookeeper(this.config.zookeeper); 32 | } 33 | 34 | async run() { 35 | this.config.logger.info("Server starting.."); 36 | 37 | await this._startHttpServer(this.config.http); 38 | await this.zookeeper.connect(); 39 | await this.kafka.getProducer(); //registers reference @ self 40 | 41 | this.config.logger.info(`Server listening @ http://localhost:${this.config.http.port}/`); 42 | return this; 43 | } 44 | 45 | getLogger(){ 46 | return this.config.logger; 47 | } 48 | 49 | close(){ 50 | 51 | if(this.httpServer){ 52 | this.httpServer.close(); 53 | } 54 | 55 | if(this.kafka){ 56 | this.kafka.closeAll(); 57 | } 58 | 59 | if(this.zookeeper){ 60 | this.zookeeper.close(); 61 | } 62 | } 63 | 64 | _startHttpServer(config = null){ 65 | return new Promise((resolve, reject) => { 66 | 67 | if (config === null) { 68 | return reject(new Error("Config not found")); 69 | } 70 | 71 | const { port } = config; 72 | 73 | this.httpServer = this.app.listen(port, () => { 74 | resolve(); 75 | }); 76 | }); 77 | } 78 | 79 | _buildWebServer(config = null) { 80 | 81 | if (config === null) { 82 | throw new Error("Config not found"); 83 | } 84 | 85 | const app = express(); 86 | 87 | const { middlewares } = config; 88 | 89 | app.use(cors()); 90 | 91 | app.use(bodyParser.text()); 92 | 93 | app.use(bodyParser.json({ 94 | type: req => req.headers["content-type"] && 95 | (req.headers["content-type"].indexOf("json") !== -1) 96 | })); 97 | 98 | app.use((req, res, next) => { 99 | super.emit("request", { 100 | url: req.url, 101 | method: req.method, 102 | headers: req.headers, 103 | body: req.body 104 | }); 105 | next(); 106 | }); 107 | 108 | app.use("/", getOthersRouter(this)); 109 | app.use("/admin", getAdminRouter(this)); 110 | app.use("/consumers", getConsumersRouter(this)); 111 | app.use("/topics", getTopicsRouter(this)); 112 | 113 | if (middlewares && middlewares.length > 0) { 114 | middlewares.forEach(middleware => { 115 | if (typeof middleware === "function") { 116 | app.use(middleware); 117 | } else { 118 | super.emit("error", new Error("http middlewares must be functions.")); 119 | } 120 | }); 121 | } 122 | 123 | app.use((error, req, res, _) => { 124 | super.emit("error", error); 125 | res.status(500).send(error.message); 126 | }); 127 | 128 | return app; 129 | } 130 | } 131 | 132 | module.exports = KafkaRest; 133 | -------------------------------------------------------------------------------- /lib/Metadata.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | class Metadata { 4 | 5 | constructor(raw){ 6 | this.raw = raw; 7 | } 8 | 9 | asTopicList(){ 10 | return this.raw.topics.map(topic => topic.name); 11 | } 12 | 13 | asTopicDescription(topicName){ 14 | 15 | if(!this.raw.topics || !this.raw.topics.length){ 16 | return {}; 17 | } 18 | 19 | let topic = null; 20 | for(let i = 0; i < this.raw.topics.length; i++){ 21 | if(this.raw.topics[i].name === topicName){ 22 | topic = this.raw.topics[i]; 23 | break; 24 | } 25 | } 26 | 27 | if(!topic){ 28 | return {}; 29 | } 30 | 31 | return { 32 | name: topic.name, 33 | configs: null, 34 | partitions: formatPartitions(topic.partitions) 35 | }; 36 | } 37 | 38 | asTopicPartitions(topicName){ 39 | 40 | if(!this.raw.topics || !this.raw.topics.length){ 41 | return {}; 42 | } 43 | 44 | let topic = null; 45 | for(let i = 0; i < this.raw.topics.length; i++){ 46 | if(this.raw.topics[i].name === topicName){ 47 | topic = this.raw.topics[i]; 48 | break; 49 | } 50 | } 51 | 52 | if(!topic){ 53 | return {}; 54 | } 55 | return formatPartitions(topic.partitions); 56 | } 57 | 58 | asBrokers(){ 59 | return { 60 | brokers: this.raw.brokers.map(broker => broker.id) 61 | }; 62 | } 63 | } 64 | 65 | const formatPartitions = (partitions) => { 66 | return partitions.map((p)=> { 67 | p.partition=p.id; 68 | p.replicas = p.replicas.map((r)=>({ broker: r, in_sync: p.isrs.indexOf(r) !== -1, leader: r === p.leader })); 69 | delete p.id; 70 | delete p.isrs; 71 | return p; 72 | }); 73 | }; 74 | 75 | module.exports = Metadata; 76 | -------------------------------------------------------------------------------- /lib/Zookeeper.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const Promise = require("bluebird"); 4 | const NZookeeper = require("zookeeper"); 5 | const debug = require("debug")("kafka-rest:zookeeper"); 6 | 7 | class Zookeeper { 8 | 9 | constructor(config = {}){ 10 | 11 | const {host: connect, timeout} = config; 12 | 13 | this.zk = new NZookeeper({ 14 | connect, 15 | timeout: timeout || 200000, 16 | debug_level: NZookeeper.ZOO_LOG_LEVEL_WARN, 17 | host_order_deterministic: false 18 | }); 19 | } 20 | 21 | connect(){ 22 | return new Promise((resolve, reject) => { 23 | this.zk.connect(error => { 24 | 25 | if(error){ 26 | return reject(error); 27 | } 28 | 29 | debug("zk session established", this.zk.client_id); 30 | resolve(); 31 | }); 32 | }); 33 | } 34 | 35 | getTopics(){ 36 | return new Promise((resolve, reject) => { 37 | this.zk.a_get_children("/config/topics", null, (error, msg, list) => { 38 | 39 | debug("zookeeper topics", msg); 40 | 41 | if(!error && msg !== "ok"){ 42 | return reject(error || "bad message: " + msg); 43 | } 44 | 45 | resolve(list); 46 | }); 47 | }); 48 | } 49 | 50 | getTopicConfiguration(topic){ 51 | return new Promise((resolve, reject) => { 52 | this.zk.a_get(`/config/topics/${topic}`, null, (error, msg, stat, data) => { 53 | 54 | debug("zookeeper topic config response", msg, stat); 55 | 56 | if(!error && msg !== "ok"){ 57 | return reject(error || "bad message: " + msg); 58 | } 59 | 60 | let config = {}; 61 | try { 62 | config = data.toString("utf8"); 63 | config = JSON.parse(config); 64 | } catch(error){ 65 | debug("failed to parse zookeeper data", error); 66 | return reject(error); 67 | } 68 | 69 | resolve(config); 70 | }); 71 | }); 72 | } 73 | 74 | close(){ 75 | if(this.zk){ 76 | debug("closing zookeeper"); 77 | return this.zk.close(); 78 | } 79 | } 80 | 81 | } 82 | 83 | module.exports = Zookeeper; 84 | -------------------------------------------------------------------------------- /lib/api/admin.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const express = require("express"); 4 | 5 | const getRouter = (app) => { 6 | 7 | const router = express.Router(); 8 | 9 | router.get("/health", (req, res) => { 10 | res.status(app.aliveStatus ? 200 : 503).json(app.aliveStatus ? {status: "UP"} : {status: "DOWN"}); 11 | }); 12 | 13 | router.get("/healthcheck", (req, res) => { 14 | res.status(app.aliveStatus ? 200 : 503).end(app.aliveStatus ? "UP" : "DOWN"); 15 | }); 16 | 17 | return router; 18 | }; 19 | 20 | module.exports = getRouter; 21 | -------------------------------------------------------------------------------- /lib/api/consumers.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const express = require("express"); 4 | const debug = require("debug")("kafka-rest:api:consumer"); 5 | 6 | const getRouter = (app) => { 7 | 8 | const router = express.Router(); 9 | 10 | router.post("/:consumer", (req, res) => { 11 | // http://docs.confluent.io/current/kafka-rest/docs/api.html#consumers 12 | // headers: "Content-Type: application/vnd.kafka.v2+json" 13 | // request body: {"name": "my_consumer_instance", "format": "json", "auto.offset.reset": "earliest"} 14 | 15 | const body = req.body; 16 | 17 | if(!body || !body.name){ 18 | return res.status(400).end("missing body or body.name"); 19 | } 20 | 21 | debug("consumer create request:", body); 22 | 23 | const opts = { 24 | clientId: req.params.consumer, 25 | consumerGroup: body.name 26 | }; 27 | 28 | const earliestElseLatest = body["auto.offset.reset"] === "earliest" ? true : false; 29 | app.kafka.getConsumer(req.params.consumer, [], earliestElseLatest, body.maxWindowSize ? body.maxWindowSize : 100, body.format, opts).then(() => { 30 | 31 | app.getLogger().info(`Created consumer ${req.params.consumer}.`); 32 | 33 | res.status(200).json({ 34 | "instance_id":body.name, 35 | "base_uri":`/consumers/${req.params.consumer}/instances/${body.name}` 36 | }); 37 | }).catch(error => { 38 | res.status(500).end(error.message); 39 | }); 40 | }); 41 | 42 | router.post("/:consumer/instances/:instance/subscription", (req, res) => { 43 | // request body: {"topics":["test"]} 44 | 45 | if(!app.kafka.consumers[req.params.consumer]){ 46 | return res.status(404).end("consumer instance does not exist."); 47 | } 48 | 49 | if(!req.body || !req.body.topics){ 50 | return res.status(400).end("missing body or body.name or body.topics"); 51 | } 52 | 53 | subscribeAndRespond(app, req, res, req.body.topics); 54 | }); 55 | 56 | router.get("/:consumer/instances/:instance/records", async (req, res) => { 57 | // headers: "Content-Type: application/vnd.kafka.v2+json" 58 | 59 | const consumer = app.kafka.consumers[req.params.consumer]; 60 | 61 | if(!consumer){ 62 | return res.status(404).end("consumer consumer does not exist."); 63 | } 64 | 65 | //prevent further requests for avro messages 66 | //this 404 is a hack to prevent further calls 67 | //(it is actually only returned if the avro schema registry cannot be reached) 68 | if(req.get("Accept") === "application/vnd.kafka.avro.v2+json"){ 69 | return res.status(404).end("avro format does not supported"); 70 | } 71 | 72 | const tries = 3; 73 | let timeout = req.query.timeout ? parseInt(req.query.timeout, 10) : 500; 74 | timeout = !isNaN(timeout) ? timeout/tries : 500; 75 | const max_bytes = req.query.max_bytes; 76 | debug("Get messages", {timeout, tries, max_bytes}); 77 | const messages = await consumer.getMessages(timeout, tries, max_bytes); 78 | app.getLogger().info(`Getting ${messages.length} for ${req.params.consumer}.`); 79 | res.status(200).json(messages); 80 | }); 81 | 82 | router.delete("/:consumer/instances/:instance", (req, res) => { 83 | app.getLogger().info(`Removing ${req.params.consumer}.`); 84 | app.kafka.removeConsumer(req.params.consumer); 85 | res.status(204).end(); 86 | }); 87 | 88 | router.post("/:consumer/instances/:instance/positions", (req, res) => { 89 | // request body: {"offsets": [{"topic": "test","partition": 0,"offset": 1}]} 90 | //TODO 91 | res.status(204).end(); 92 | }); 93 | 94 | router.post("/:consumer/instances/:instance/positions/beginning", (req, res) => { 95 | // request body: {"partitions": [{"topic": "test","partition": 0}]} 96 | //TODO 97 | // res.status(200).json(req.body); 98 | 99 | if(!app.kafka.consumers[req.params.consumer]){ 100 | return res.status(404).end("consumer instance does not exist."); 101 | } 102 | 103 | if(!req.body || !req.body.partitions || req.body.partitions.length === 0){ 104 | return res.status(200).json(); 105 | } 106 | 107 | const topics = getTopicsFromPartitions(req.body.partitions); 108 | subscribeAndRespond(app, req, res, topics); 109 | }); 110 | 111 | router.post("/:consumer/instances/:instance/positions/end", (req, res) => { 112 | // request body: {"partitions": [{"topic": "test","partition": 0}]} 113 | //TODO 114 | // res.status(200).json(req.body); 115 | if(!app.kafka.consumers[req.params.consumer]){ 116 | return res.status(404).end("consumer instance does not exist."); 117 | } 118 | 119 | if(!req.body || !req.body.partitions || req.body.partitions.length === 0){ 120 | return res.status(200).json(); 121 | } 122 | 123 | const topics = getTopicsFromPartitions(req.body.partitions); 124 | subscribeAndRespond(app, req, res, topics, false); 125 | }); 126 | 127 | router.post("/:consumer/instances/:instance/assignments", (req, res) => { 128 | // request body: {"topics":["test"]} 129 | //TODO 130 | res.status(200).json(); 131 | /*res.status(200).json({ 132 | "partitions": [ 133 | { 134 | "topic": "test", 135 | "partition": 0 136 | } 137 | ] 138 | });*/ 139 | }); 140 | 141 | return router; 142 | }; 143 | 144 | const subscribeAndRespond = (app, req, res, topics, earliestElseLatest = true)=>{ 145 | app.kafka.getConsumer(req.params.consumer, earliestElseLatest, 100).then(consumer => { 146 | return consumer.adjustSubscription(topics).then(() => { 147 | app.getLogger().info(`${req.params.consumer} subscribing to ${topics.join(", ")}.`); 148 | res.status(204).end(); 149 | }); 150 | }).catch(error => { 151 | res.status(500).end(error.message); 152 | }); 153 | }; 154 | 155 | const getTopicsFromPartitions = (partitions)=>{ 156 | return partitions.reduce((topics, partition)=>{ 157 | if(partition && partition.topic && topics.indexOf(partition.topic) === -1){ 158 | topics.push(partition.topic); 159 | } 160 | return topics; 161 | },[]); 162 | }; 163 | 164 | module.exports = getRouter; 165 | -------------------------------------------------------------------------------- /lib/api/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const getConsumersRouter = require("./consumers.js"); 4 | const getTopicsRouter = require("./topics.js"); 5 | const getOthersRouter = require("./others.js"); 6 | const getAdminRouter = require("./admin.js"); 7 | 8 | module.exports = { 9 | getConsumersRouter, 10 | getTopicsRouter, 11 | getOthersRouter, 12 | getAdminRouter 13 | }; 14 | -------------------------------------------------------------------------------- /lib/api/others.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const express = require("express"); 4 | 5 | const getRouter = (app) => { 6 | 7 | const router = express.Router(); 8 | 9 | router.get("/", (req, res) => { 10 | 11 | let base = req.headers.host; 12 | base = base.startsWith("http") ? base : "http://" + base; 13 | 14 | res.status(200).json({ 15 | _: app.pjson.name, 16 | version: app.pjson.version, 17 | endpoints: { 18 | "GET": { 19 | [`${base}/`]: "self", 20 | [`${base}/alive`]: "alive status", 21 | [`${base}/admin/healthcheck`]: "healthcheck", 22 | [`${base}/admin/health`]: "healthcheck json", 23 | [`${base}/brokers`]: "kafka brokers", 24 | [`${base}/topics`]: "kafka topics", 25 | [`${base}/topics/:topic`]: "kafka topic information", 26 | [`${base}/topics/:topic/partitions`]: "kafka topic information", 27 | [`${base}/consumers/:consumer/instances/:instance/records`]: "get messages", 28 | [`${base}/consumers/:consumer/instances/:instance/offset`]: "get offset", 29 | [`${base}/consumers/:consumer/instances/:instance/subscription`]: "get the current subscribed list of topics.", 30 | [`${base}/consumers/:consumer/instances/:instance/assignments`]: "get the list of partitions currently manually assigned to this consumer.", 31 | }, 32 | "POST":{ 33 | [`${base}/consumers/:consumer`]: "create a consumer", 34 | [`${base}/consumers/:consumer/instances/:instance/offset`]: "commit a list of offsets for the consumer", 35 | [`${base}/consumers/:consumer/instances/:instance/subscription`]: "subscribe the consumer to a topic", 36 | [`${base}/consumers/:consumer/instances/:instance/assignments`]: "manually assign a list of partitions to this consumer.", 37 | [`${base}/consumers/:consumer/instances/:instance/positions`]: "overrides the fetch offsets that the consumer will use for the next set of records to fetch.", 38 | [`${base}/consumers/:consumer/instances/:instance/positions/beginning`]: "seek to the first offset for each of the given partitions.", 39 | [`${base}/consumers/:consumer/instances/:instance/positions/end`]: "seek to the last offset for each of the given partitions.", 40 | }, 41 | "DELETE":{ 42 | [`${base}/consumers/:consumer/instances/:instance`]: "delete a consumer", 43 | } 44 | } 45 | }); 46 | }); 47 | 48 | router.get("/alive", (req, res) => { 49 | res.status(app.aliveStatus ? 200 : 503).end(app.aliveStatus ? "alive" : "dead"); 50 | }); 51 | 52 | router.get("/brokers", (req, res) => { 53 | // http://docs.confluent.io/current/kafka-rest/docs/api.html#brokers 54 | app.kafka.getMetadata().then(metadata => { 55 | app.getLogger().info("Returning brokers."); 56 | res.status(200).json(metadata.asBrokers()); 57 | }).catch(error => { 58 | res.status(500).end(error.message); 59 | }); 60 | }); 61 | 62 | return router; 63 | }; 64 | 65 | module.exports = getRouter; 66 | -------------------------------------------------------------------------------- /lib/api/topics.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const express = require("express"); 4 | 5 | const getRouter = (app) => { 6 | 7 | const router = express.Router(); 8 | 9 | router.get("/", (req, res) => { 10 | // http://docs.confluent.io/current/kafka-rest/docs/api.html#topics 11 | app.kafka.getMetadata().then(metadata => { 12 | app.getLogger().info("Returning metadata."); 13 | res.status(200).json(metadata.asTopicList()); 14 | }).catch(error => { 15 | res.status(500).end(error.message); 16 | }); 17 | }); 18 | 19 | router.get("/:topic", (req, res) => { 20 | app.kafka.getMetadata([req.params.topic]).then(metadata => { 21 | app.getLogger().info("Returning topic metadata."); 22 | 23 | const description = metadata.asTopicDescription(req.params.topic); 24 | app.zookeeper.getTopicConfiguration(req.params.topic).then(configs => { 25 | description.configs = configs.config; // {version, config} 26 | res.status(200).json(description); 27 | }).catch(() => { 28 | res.status(200).json(description); //fallback without topic config 29 | }); 30 | }).catch(error => { 31 | res.status(500).end(error.message); 32 | }); 33 | }); 34 | 35 | router.get("/:topic/partitions", (req, res) => { 36 | // http://docs.confluent.io/current/kafka-rest/docs/api.html#partitions 37 | app.kafka.getMetadata([req.params.topic]).then(metadata => { 38 | app.getLogger().info("Returning partition metadata."); 39 | res.status(200).json(metadata.asTopicPartitions(req.params.topic)); 40 | }).catch(error => { 41 | res.status(500).end(error.message); 42 | }); 43 | }); 44 | 45 | return router; 46 | }; 47 | 48 | module.exports = getRouter; 49 | -------------------------------------------------------------------------------- /local.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8 2 | 3 | RUN mkdir -p /usr/src/app \ 4 | && apt-get update && apt-get install -y build-essential python librdkafka-dev libsasl2-dev libsasl2-modules openssl \ 5 | && apt-get autoremove -y && apt-get autoclean -y \ 6 | && rm -rf /var/lib/apt/lists/* \ 7 | && yarn global add nodemon 8 | 9 | WORKDIR /usr/src 10 | COPY ./package.json /usr/src/package.json 11 | RUN yarn install 12 | 13 | VOLUME /usr/src/app 14 | WORKDIR /usr/src/app 15 | CMD ["nodemon", "/usr/src/app"] 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-kafka-rest", 3 | "version": "0.15.0", 4 | "main": "index.js", 5 | "description": "kafka consumer & producer via HTTP REST", 6 | "scripts": { 7 | "start": "node index.js", 8 | "lint": "eslint .", 9 | "fix": "eslint --fix .", 10 | "kafka:start": "./kafka-setup/start.sh", 11 | "kafka:stop": "./kafka-setup/stop.sh", 12 | "kafka:logs": "docker-compose --file ./kafka-setup/docker-compose.yml logs -f", 13 | "kafka:log": "docker logs kafkasetup_kafka-rest_1 -f", 14 | "kafka:build": "docker-compose --file ./kafka-setup/docker-compose.yml build", 15 | "kafka:rick": "yarn kafka:stop && yarn kafka:build && yarn kafka:start && yarn kafka:generate-data && yarn kafka:log", 16 | "kafka:producer": "docker exec -it kafkasetup_kafka_1 bash -c 'kafka-console-producer.sh --topic=test --broker-list=localhost:9092'", 17 | "kafka:consumer": "docker exec -it kafkasetup_kafka_1 bash -c 'kafka-console-consumer.sh --topic=test --bootstrap-server=localhost:9092 --from-beginning'", 18 | "kafka:generate-data": "while IFS= read line; do echo \"echo '$line' | kafka-console-producer.sh --topic=test --broker-list=localhost:9092 --property='parse.key=true' --property='key.separator=#' \" | docker exec -i kafkasetup_kafka_1 bash -; done< ./kafka-setup/test-data.txt", 19 | "test": "npm run lint && istanbul cover _mocha -- -R spec test/int/* && istanbul check-coverage --statements 50", 20 | "kafka:load-test": "./kafka-setup/performance-test.sh", 21 | "yarn:openssl": "LDFLAGS='-L/usr/local/opt/openssl/lib' CPPFLAGS='-I/usr/local/opt/openssl/include' yarn" 22 | }, 23 | "repository": "git@github.com:nodefluent/node-kafka-rest.git", 24 | "author": "Chris Froehlingsdorf ", 25 | "license": "MIT", 26 | "dependencies": { 27 | "bluebird": "^3.5.5", 28 | "body-parser": "^1.19.0", 29 | "cors": "^2.8.5", 30 | "debug": "^4.1.1", 31 | "express": "^4.17.1", 32 | "sinek": "^7.29.3", 33 | "zookeeper": "^4.1.1" 34 | }, 35 | "devDependencies": { 36 | "eslint": "^5.16.0", 37 | "istanbul": "^0.4.5", 38 | "mocha": "^6.1.4" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.0.0" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/highlight@^7.0.0": 13 | version "7.0.0" 14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 15 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== 16 | dependencies: 17 | chalk "^2.0.0" 18 | esutils "^2.0.2" 19 | js-tokens "^4.0.0" 20 | 21 | abbrev@1: 22 | version "1.1.1" 23 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 24 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 25 | 26 | abbrev@1.0.x: 27 | version "1.0.9" 28 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 29 | integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= 30 | 31 | accepts@~1.3.7: 32 | version "1.3.7" 33 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 34 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 35 | dependencies: 36 | mime-types "~2.1.24" 37 | negotiator "0.6.2" 38 | 39 | acorn-jsx@^5.0.0: 40 | version "5.0.1" 41 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" 42 | integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== 43 | 44 | acorn@^6.0.7: 45 | version "6.1.1" 46 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" 47 | integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== 48 | 49 | ajv@^6.9.1: 50 | version "6.10.0" 51 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" 52 | integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== 53 | dependencies: 54 | fast-deep-equal "^2.0.1" 55 | fast-json-stable-stringify "^2.0.0" 56 | json-schema-traverse "^0.4.1" 57 | uri-js "^4.2.2" 58 | 59 | amdefine@>=0.0.4: 60 | version "1.0.1" 61 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 62 | integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= 63 | 64 | ansi-colors@3.2.3: 65 | version "3.2.3" 66 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 67 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 68 | 69 | ansi-escapes@^3.2.0: 70 | version "3.2.0" 71 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 72 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 73 | 74 | ansi-regex@^2.0.0: 75 | version "2.1.1" 76 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 77 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 78 | 79 | ansi-regex@^3.0.0: 80 | version "3.0.0" 81 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 82 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 83 | 84 | ansi-regex@^4.1.0: 85 | version "4.1.0" 86 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 87 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 88 | 89 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 90 | version "3.2.1" 91 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 92 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 93 | dependencies: 94 | color-convert "^1.9.0" 95 | 96 | aproba@^1.0.3: 97 | version "1.2.0" 98 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 99 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 100 | 101 | are-we-there-yet@~1.1.2: 102 | version "1.1.5" 103 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 104 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 105 | dependencies: 106 | delegates "^1.0.0" 107 | readable-stream "^2.0.6" 108 | 109 | argparse@^1.0.7: 110 | version "1.0.10" 111 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 112 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 113 | dependencies: 114 | sprintf-js "~1.0.2" 115 | 116 | array-flatten@1.1.1: 117 | version "1.1.1" 118 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 119 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 120 | 121 | astral-regex@^1.0.0: 122 | version "1.0.0" 123 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 124 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 125 | 126 | async@1.x: 127 | version "1.5.2" 128 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 129 | integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= 130 | 131 | async@2.6.x, async@^2.6.2, async@~2.6.2: 132 | version "2.6.2" 133 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" 134 | integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== 135 | dependencies: 136 | lodash "^4.17.11" 137 | 138 | balanced-match@^1.0.0: 139 | version "1.0.0" 140 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 141 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 142 | 143 | base64-js@^1.0.2: 144 | version "1.3.0" 145 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" 146 | integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== 147 | 148 | binary@~0.3.0: 149 | version "0.3.0" 150 | resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" 151 | integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= 152 | dependencies: 153 | buffers "~0.1.1" 154 | chainsaw "~0.1.0" 155 | 156 | bindings@^1.3.1: 157 | version "1.5.0" 158 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 159 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 160 | dependencies: 161 | file-uri-to-path "1.0.0" 162 | 163 | bl@^1.0.0: 164 | version "1.2.2" 165 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" 166 | integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== 167 | dependencies: 168 | readable-stream "^2.3.5" 169 | safe-buffer "^5.1.1" 170 | 171 | bl@^2.2.0: 172 | version "2.2.0" 173 | resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493" 174 | integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA== 175 | dependencies: 176 | readable-stream "^2.3.5" 177 | safe-buffer "^5.1.1" 178 | 179 | bluebird@^3.5.5, bluebird@~3.5.4: 180 | version "3.5.5" 181 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" 182 | integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== 183 | 184 | body-parser@1.19.0, body-parser@^1.19.0: 185 | version "1.19.0" 186 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 187 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 188 | dependencies: 189 | bytes "3.1.0" 190 | content-type "~1.0.4" 191 | debug "2.6.9" 192 | depd "~1.1.2" 193 | http-errors "1.7.2" 194 | iconv-lite "0.4.24" 195 | on-finished "~2.3.0" 196 | qs "6.7.0" 197 | raw-body "2.4.0" 198 | type-is "~1.6.17" 199 | 200 | brace-expansion@^1.1.7: 201 | version "1.1.11" 202 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 203 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 204 | dependencies: 205 | balanced-match "^1.0.0" 206 | concat-map "0.0.1" 207 | 208 | browser-stdout@1.3.1: 209 | version "1.3.1" 210 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 211 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 212 | 213 | buffer-alloc-unsafe@^1.1.0: 214 | version "1.1.0" 215 | resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" 216 | integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== 217 | 218 | buffer-alloc@^1.2.0: 219 | version "1.2.0" 220 | resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" 221 | integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== 222 | dependencies: 223 | buffer-alloc-unsafe "^1.1.0" 224 | buffer-fill "^1.0.0" 225 | 226 | buffer-crc32@~0.2.3, buffer-crc32@~0.2.5: 227 | version "0.2.13" 228 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 229 | integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= 230 | 231 | buffer-fill@^1.0.0: 232 | version "1.0.0" 233 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" 234 | integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= 235 | 236 | buffer@^5.2.1: 237 | version "5.2.1" 238 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" 239 | integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== 240 | dependencies: 241 | base64-js "^1.0.2" 242 | ieee754 "^1.1.4" 243 | 244 | buffermaker@~1.2.0: 245 | version "1.2.1" 246 | resolved "https://registry.yarnpkg.com/buffermaker/-/buffermaker-1.2.1.tgz#0631f92b891a84b750f1036491ac857c734429f4" 247 | integrity sha512-IdnyU2jDHU65U63JuVQNTHiWjPRH0CS3aYd/WPaEwyX84rFdukhOduAVb1jwUScmb5X0JWPw8NZOrhoLMiyAHQ== 248 | dependencies: 249 | long "1.1.2" 250 | 251 | buffers@~0.1.1: 252 | version "0.1.1" 253 | resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" 254 | integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= 255 | 256 | bytes@3.1.0: 257 | version "3.1.0" 258 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 259 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 260 | 261 | callsites@^3.0.0: 262 | version "3.1.0" 263 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 264 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 265 | 266 | camelcase@^5.0.0: 267 | version "5.3.1" 268 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 269 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 270 | 271 | chainsaw@~0.1.0: 272 | version "0.1.0" 273 | resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" 274 | integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= 275 | dependencies: 276 | traverse ">=0.3.0 <0.4" 277 | 278 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: 279 | version "2.4.2" 280 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 281 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 282 | dependencies: 283 | ansi-styles "^3.2.1" 284 | escape-string-regexp "^1.0.5" 285 | supports-color "^5.3.0" 286 | 287 | chardet@^0.7.0: 288 | version "0.7.0" 289 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 290 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 291 | 292 | chownr@^1.0.1: 293 | version "1.1.1" 294 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 295 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== 296 | 297 | cli-cursor@^2.1.0: 298 | version "2.1.0" 299 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 300 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 301 | dependencies: 302 | restore-cursor "^2.0.0" 303 | 304 | cli-width@^2.0.0: 305 | version "2.2.0" 306 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 307 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 308 | 309 | cliui@^4.0.0: 310 | version "4.1.0" 311 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 312 | integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== 313 | dependencies: 314 | string-width "^2.1.1" 315 | strip-ansi "^4.0.0" 316 | wrap-ansi "^2.0.0" 317 | 318 | code-point-at@^1.0.0: 319 | version "1.1.0" 320 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 321 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 322 | 323 | color-convert@^1.9.0: 324 | version "1.9.3" 325 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 326 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 327 | dependencies: 328 | color-name "1.1.3" 329 | 330 | color-name@1.1.3: 331 | version "1.1.3" 332 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 333 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 334 | 335 | commander@~2.20.0: 336 | version "2.20.0" 337 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 338 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== 339 | 340 | commander@~2.8.1: 341 | version "2.8.1" 342 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" 343 | integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= 344 | dependencies: 345 | graceful-readlink ">= 1.0.0" 346 | 347 | concat-map@0.0.1: 348 | version "0.0.1" 349 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 350 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 351 | 352 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 353 | version "1.1.0" 354 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 355 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 356 | 357 | content-disposition@0.5.3: 358 | version "0.5.3" 359 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 360 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 361 | dependencies: 362 | safe-buffer "5.1.2" 363 | 364 | content-type@~1.0.4: 365 | version "1.0.4" 366 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 367 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 368 | 369 | cookie-signature@1.0.6: 370 | version "1.0.6" 371 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 372 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 373 | 374 | cookie@0.4.0: 375 | version "0.4.0" 376 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 377 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 378 | 379 | core-util-is@~1.0.0: 380 | version "1.0.2" 381 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 382 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 383 | 384 | cors@^2.8.5: 385 | version "2.8.5" 386 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 387 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 388 | dependencies: 389 | object-assign "^4" 390 | vary "^1" 391 | 392 | cross-spawn@^6.0.0, cross-spawn@^6.0.5: 393 | version "6.0.5" 394 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 395 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 396 | dependencies: 397 | nice-try "^1.0.4" 398 | path-key "^2.0.1" 399 | semver "^5.5.0" 400 | shebang-command "^1.2.0" 401 | which "^1.2.9" 402 | 403 | debug@2.6.9, debug@^2.1.3: 404 | version "2.6.9" 405 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 406 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 407 | dependencies: 408 | ms "2.0.0" 409 | 410 | debug@3.2.6: 411 | version "3.2.6" 412 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 413 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 414 | dependencies: 415 | ms "^2.1.1" 416 | 417 | debug@^4.0.1, debug@^4.1.1, debug@~4.1.1: 418 | version "4.1.1" 419 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 420 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 421 | dependencies: 422 | ms "^2.1.1" 423 | 424 | decamelize@^1.2.0: 425 | version "1.2.0" 426 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 427 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 428 | 429 | decompress-response@^3.3.0: 430 | version "3.3.0" 431 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 432 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 433 | dependencies: 434 | mimic-response "^1.0.0" 435 | 436 | decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: 437 | version "4.1.1" 438 | resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" 439 | integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== 440 | dependencies: 441 | file-type "^5.2.0" 442 | is-stream "^1.1.0" 443 | tar-stream "^1.5.2" 444 | 445 | decompress-tarbz2@^4.0.0: 446 | version "4.1.1" 447 | resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" 448 | integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== 449 | dependencies: 450 | decompress-tar "^4.1.0" 451 | file-type "^6.1.0" 452 | is-stream "^1.1.0" 453 | seek-bzip "^1.0.5" 454 | unbzip2-stream "^1.0.9" 455 | 456 | decompress-targz@4.1.x, decompress-targz@^4.0.0: 457 | version "4.1.1" 458 | resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" 459 | integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== 460 | dependencies: 461 | decompress-tar "^4.1.1" 462 | file-type "^5.2.0" 463 | is-stream "^1.1.0" 464 | 465 | decompress-unzip@^4.0.1: 466 | version "4.0.1" 467 | resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" 468 | integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= 469 | dependencies: 470 | file-type "^3.8.0" 471 | get-stream "^2.2.0" 472 | pify "^2.3.0" 473 | yauzl "^2.4.2" 474 | 475 | decompress@4.2.x: 476 | version "4.2.0" 477 | resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" 478 | integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50= 479 | dependencies: 480 | decompress-tar "^4.0.0" 481 | decompress-tarbz2 "^4.0.0" 482 | decompress-targz "^4.0.0" 483 | decompress-unzip "^4.0.1" 484 | graceful-fs "^4.1.10" 485 | make-dir "^1.0.0" 486 | pify "^2.3.0" 487 | strip-dirs "^2.0.0" 488 | 489 | deep-extend@^0.6.0: 490 | version "0.6.0" 491 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 492 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 493 | 494 | deep-is@~0.1.3: 495 | version "0.1.3" 496 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 497 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 498 | 499 | define-properties@^1.1.2: 500 | version "1.1.3" 501 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 502 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 503 | dependencies: 504 | object-keys "^1.0.12" 505 | 506 | delegates@^1.0.0: 507 | version "1.0.0" 508 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 509 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 510 | 511 | denque@^1.3.0: 512 | version "1.4.1" 513 | resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" 514 | integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ== 515 | 516 | depd@~1.1.2: 517 | version "1.1.2" 518 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 519 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 520 | 521 | destroy@~1.0.4: 522 | version "1.0.4" 523 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 524 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 525 | 526 | detect-libc@^1.0.3: 527 | version "1.0.3" 528 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 529 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 530 | 531 | diff@3.5.0: 532 | version "3.5.0" 533 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 534 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 535 | 536 | doctrine@^3.0.0: 537 | version "3.0.0" 538 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 539 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 540 | dependencies: 541 | esutils "^2.0.2" 542 | 543 | ee-first@1.1.1: 544 | version "1.1.1" 545 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 546 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 547 | 548 | emoji-regex@^7.0.1: 549 | version "7.0.3" 550 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 551 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 552 | 553 | encodeurl@~1.0.2: 554 | version "1.0.2" 555 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 556 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 557 | 558 | end-of-stream@^1.0.0, end-of-stream@^1.1.0: 559 | version "1.4.1" 560 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 561 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 562 | dependencies: 563 | once "^1.4.0" 564 | 565 | es-abstract@^1.5.1: 566 | version "1.13.0" 567 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 568 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== 569 | dependencies: 570 | es-to-primitive "^1.2.0" 571 | function-bind "^1.1.1" 572 | has "^1.0.3" 573 | is-callable "^1.1.4" 574 | is-regex "^1.0.4" 575 | object-keys "^1.0.12" 576 | 577 | es-to-primitive@^1.2.0: 578 | version "1.2.0" 579 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 580 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 581 | dependencies: 582 | is-callable "^1.1.4" 583 | is-date-object "^1.0.1" 584 | is-symbol "^1.0.2" 585 | 586 | escape-html@~1.0.3: 587 | version "1.0.3" 588 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 589 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 590 | 591 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 592 | version "1.0.5" 593 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 594 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 595 | 596 | escodegen@1.8.x: 597 | version "1.8.1" 598 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 599 | integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= 600 | dependencies: 601 | esprima "^2.7.1" 602 | estraverse "^1.9.1" 603 | esutils "^2.0.2" 604 | optionator "^0.8.1" 605 | optionalDependencies: 606 | source-map "~0.2.0" 607 | 608 | eslint-scope@^4.0.3: 609 | version "4.0.3" 610 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" 611 | integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== 612 | dependencies: 613 | esrecurse "^4.1.0" 614 | estraverse "^4.1.1" 615 | 616 | eslint-utils@^1.3.1: 617 | version "1.3.1" 618 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" 619 | integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== 620 | 621 | eslint-visitor-keys@^1.0.0: 622 | version "1.0.0" 623 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 624 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== 625 | 626 | eslint@^5.16.0: 627 | version "5.16.0" 628 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" 629 | integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== 630 | dependencies: 631 | "@babel/code-frame" "^7.0.0" 632 | ajv "^6.9.1" 633 | chalk "^2.1.0" 634 | cross-spawn "^6.0.5" 635 | debug "^4.0.1" 636 | doctrine "^3.0.0" 637 | eslint-scope "^4.0.3" 638 | eslint-utils "^1.3.1" 639 | eslint-visitor-keys "^1.0.0" 640 | espree "^5.0.1" 641 | esquery "^1.0.1" 642 | esutils "^2.0.2" 643 | file-entry-cache "^5.0.1" 644 | functional-red-black-tree "^1.0.1" 645 | glob "^7.1.2" 646 | globals "^11.7.0" 647 | ignore "^4.0.6" 648 | import-fresh "^3.0.0" 649 | imurmurhash "^0.1.4" 650 | inquirer "^6.2.2" 651 | js-yaml "^3.13.0" 652 | json-stable-stringify-without-jsonify "^1.0.1" 653 | levn "^0.3.0" 654 | lodash "^4.17.11" 655 | minimatch "^3.0.4" 656 | mkdirp "^0.5.1" 657 | natural-compare "^1.4.0" 658 | optionator "^0.8.2" 659 | path-is-inside "^1.0.2" 660 | progress "^2.0.0" 661 | regexpp "^2.0.1" 662 | semver "^5.5.1" 663 | strip-ansi "^4.0.0" 664 | strip-json-comments "^2.0.1" 665 | table "^5.2.3" 666 | text-table "^0.2.0" 667 | 668 | espree@^5.0.1: 669 | version "5.0.1" 670 | resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" 671 | integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== 672 | dependencies: 673 | acorn "^6.0.7" 674 | acorn-jsx "^5.0.0" 675 | eslint-visitor-keys "^1.0.0" 676 | 677 | esprima@2.7.x, esprima@^2.7.1: 678 | version "2.7.3" 679 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 680 | integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= 681 | 682 | esprima@^4.0.0: 683 | version "4.0.1" 684 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 685 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 686 | 687 | esquery@^1.0.1: 688 | version "1.0.1" 689 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 690 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 691 | dependencies: 692 | estraverse "^4.0.0" 693 | 694 | esrecurse@^4.1.0: 695 | version "4.2.1" 696 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 697 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 698 | dependencies: 699 | estraverse "^4.1.0" 700 | 701 | estraverse@^1.9.1: 702 | version "1.9.3" 703 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 704 | integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= 705 | 706 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 707 | version "4.2.0" 708 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 709 | integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= 710 | 711 | esutils@^2.0.2: 712 | version "2.0.2" 713 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 714 | integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= 715 | 716 | etag@~1.8.1: 717 | version "1.8.1" 718 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 719 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 720 | 721 | execa@^1.0.0: 722 | version "1.0.0" 723 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 724 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 725 | dependencies: 726 | cross-spawn "^6.0.0" 727 | get-stream "^4.0.0" 728 | is-stream "^1.1.0" 729 | npm-run-path "^2.0.0" 730 | p-finally "^1.0.0" 731 | signal-exit "^3.0.0" 732 | strip-eof "^1.0.0" 733 | 734 | expand-template@^2.0.3: 735 | version "2.0.3" 736 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" 737 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== 738 | 739 | express@^4.17.1: 740 | version "4.17.1" 741 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 742 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 743 | dependencies: 744 | accepts "~1.3.7" 745 | array-flatten "1.1.1" 746 | body-parser "1.19.0" 747 | content-disposition "0.5.3" 748 | content-type "~1.0.4" 749 | cookie "0.4.0" 750 | cookie-signature "1.0.6" 751 | debug "2.6.9" 752 | depd "~1.1.2" 753 | encodeurl "~1.0.2" 754 | escape-html "~1.0.3" 755 | etag "~1.8.1" 756 | finalhandler "~1.1.2" 757 | fresh "0.5.2" 758 | merge-descriptors "1.0.1" 759 | methods "~1.1.2" 760 | on-finished "~2.3.0" 761 | parseurl "~1.3.3" 762 | path-to-regexp "0.1.7" 763 | proxy-addr "~2.0.5" 764 | qs "6.7.0" 765 | range-parser "~1.2.1" 766 | safe-buffer "5.1.2" 767 | send "0.17.1" 768 | serve-static "1.14.1" 769 | setprototypeof "1.1.1" 770 | statuses "~1.5.0" 771 | type-is "~1.6.18" 772 | utils-merge "1.0.1" 773 | vary "~1.1.2" 774 | 775 | external-editor@^3.0.3: 776 | version "3.0.3" 777 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" 778 | integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== 779 | dependencies: 780 | chardet "^0.7.0" 781 | iconv-lite "^0.4.24" 782 | tmp "^0.0.33" 783 | 784 | fast-deep-equal@^2.0.1: 785 | version "2.0.1" 786 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 787 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 788 | 789 | fast-json-stable-stringify@^2.0.0: 790 | version "2.0.0" 791 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 792 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= 793 | 794 | fast-levenshtein@~2.0.4: 795 | version "2.0.6" 796 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 797 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 798 | 799 | fd-slicer@~1.1.0: 800 | version "1.1.0" 801 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" 802 | integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= 803 | dependencies: 804 | pend "~1.2.0" 805 | 806 | figures@^2.0.0: 807 | version "2.0.0" 808 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 809 | integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= 810 | dependencies: 811 | escape-string-regexp "^1.0.5" 812 | 813 | file-entry-cache@^5.0.1: 814 | version "5.0.1" 815 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 816 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 817 | dependencies: 818 | flat-cache "^2.0.1" 819 | 820 | file-type@^3.8.0: 821 | version "3.9.0" 822 | resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" 823 | integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= 824 | 825 | file-type@^5.2.0: 826 | version "5.2.0" 827 | resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" 828 | integrity sha1-LdvqfHP/42No365J3DOMBYwritY= 829 | 830 | file-type@^6.1.0: 831 | version "6.2.0" 832 | resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" 833 | integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== 834 | 835 | file-uri-to-path@1.0.0: 836 | version "1.0.0" 837 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 838 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 839 | 840 | finalhandler@~1.1.2: 841 | version "1.1.2" 842 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 843 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 844 | dependencies: 845 | debug "2.6.9" 846 | encodeurl "~1.0.2" 847 | escape-html "~1.0.3" 848 | on-finished "~2.3.0" 849 | parseurl "~1.3.3" 850 | statuses "~1.5.0" 851 | unpipe "~1.0.0" 852 | 853 | find-up@3.0.0, find-up@^3.0.0: 854 | version "3.0.0" 855 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 856 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 857 | dependencies: 858 | locate-path "^3.0.0" 859 | 860 | flat-cache@^2.0.1: 861 | version "2.0.1" 862 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 863 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 864 | dependencies: 865 | flatted "^2.0.0" 866 | rimraf "2.6.3" 867 | write "1.0.3" 868 | 869 | flat@^4.1.0: 870 | version "4.1.0" 871 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 872 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 873 | dependencies: 874 | is-buffer "~2.0.3" 875 | 876 | flatted@^2.0.0: 877 | version "2.0.0" 878 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" 879 | integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== 880 | 881 | forwarded@~0.1.2: 882 | version "0.1.2" 883 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 884 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 885 | 886 | fresh@0.5.2: 887 | version "0.5.2" 888 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 889 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 890 | 891 | fs-constants@^1.0.0: 892 | version "1.0.0" 893 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 894 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== 895 | 896 | fs.realpath@^1.0.0: 897 | version "1.0.0" 898 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 899 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 900 | 901 | function-bind@^1.1.1: 902 | version "1.1.1" 903 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 904 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 905 | 906 | functional-red-black-tree@^1.0.1: 907 | version "1.0.1" 908 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 909 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 910 | 911 | gauge@~2.7.3: 912 | version "2.7.4" 913 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 914 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 915 | dependencies: 916 | aproba "^1.0.3" 917 | console-control-strings "^1.0.0" 918 | has-unicode "^2.0.0" 919 | object-assign "^4.1.0" 920 | signal-exit "^3.0.0" 921 | string-width "^1.0.1" 922 | strip-ansi "^3.0.1" 923 | wide-align "^1.1.0" 924 | 925 | get-caller-file@^1.0.1: 926 | version "1.0.3" 927 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 928 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 929 | 930 | get-caller-file@^2.0.1: 931 | version "2.0.5" 932 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 933 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 934 | 935 | get-stream@^2.2.0: 936 | version "2.3.1" 937 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" 938 | integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= 939 | dependencies: 940 | object-assign "^4.0.1" 941 | pinkie-promise "^2.0.0" 942 | 943 | get-stream@^4.0.0: 944 | version "4.1.0" 945 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 946 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 947 | dependencies: 948 | pump "^3.0.0" 949 | 950 | github-from-package@0.0.0: 951 | version "0.0.0" 952 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" 953 | integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= 954 | 955 | glob@7.1.3: 956 | version "7.1.3" 957 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 958 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 959 | dependencies: 960 | fs.realpath "^1.0.0" 961 | inflight "^1.0.4" 962 | inherits "2" 963 | minimatch "^3.0.4" 964 | once "^1.3.0" 965 | path-is-absolute "^1.0.0" 966 | 967 | glob@^5.0.15: 968 | version "5.0.15" 969 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 970 | integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= 971 | dependencies: 972 | inflight "^1.0.4" 973 | inherits "2" 974 | minimatch "2 || 3" 975 | once "^1.3.0" 976 | path-is-absolute "^1.0.0" 977 | 978 | glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: 979 | version "7.1.4" 980 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 981 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 982 | dependencies: 983 | fs.realpath "^1.0.0" 984 | inflight "^1.0.4" 985 | inherits "2" 986 | minimatch "^3.0.4" 987 | once "^1.3.0" 988 | path-is-absolute "^1.0.0" 989 | 990 | globals@^11.7.0: 991 | version "11.12.0" 992 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 993 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 994 | 995 | graceful-fs@^4.1.10: 996 | version "4.1.15" 997 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 998 | integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== 999 | 1000 | "graceful-readlink@>= 1.0.0": 1001 | version "1.0.1" 1002 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 1003 | integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= 1004 | 1005 | growl@1.10.5: 1006 | version "1.10.5" 1007 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1008 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1009 | 1010 | handlebars@^4.0.1: 1011 | version "4.1.2" 1012 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" 1013 | integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== 1014 | dependencies: 1015 | neo-async "^2.6.0" 1016 | optimist "^0.6.1" 1017 | source-map "^0.6.1" 1018 | optionalDependencies: 1019 | uglify-js "^3.1.4" 1020 | 1021 | has-flag@^1.0.0: 1022 | version "1.0.0" 1023 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1024 | integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= 1025 | 1026 | has-flag@^3.0.0: 1027 | version "3.0.0" 1028 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1029 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1030 | 1031 | has-symbols@^1.0.0: 1032 | version "1.0.0" 1033 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 1034 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 1035 | 1036 | has-unicode@^2.0.0: 1037 | version "2.0.1" 1038 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1039 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 1040 | 1041 | has@^1.0.1, has@^1.0.3: 1042 | version "1.0.3" 1043 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1044 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1045 | dependencies: 1046 | function-bind "^1.1.1" 1047 | 1048 | he@1.2.0: 1049 | version "1.2.0" 1050 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1051 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1052 | 1053 | http-errors@1.7.2, http-errors@~1.7.2: 1054 | version "1.7.2" 1055 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1056 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1057 | dependencies: 1058 | depd "~1.1.2" 1059 | inherits "2.0.3" 1060 | setprototypeof "1.1.1" 1061 | statuses ">= 1.5.0 < 2" 1062 | toidentifier "1.0.0" 1063 | 1064 | iconv-lite@0.4.24, iconv-lite@^0.4.24: 1065 | version "0.4.24" 1066 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1067 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1068 | dependencies: 1069 | safer-buffer ">= 2.1.2 < 3" 1070 | 1071 | ieee754@^1.1.4: 1072 | version "1.1.13" 1073 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 1074 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 1075 | 1076 | ignore@^4.0.6: 1077 | version "4.0.6" 1078 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1079 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1080 | 1081 | import-fresh@^3.0.0: 1082 | version "3.0.0" 1083 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" 1084 | integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ== 1085 | dependencies: 1086 | parent-module "^1.0.0" 1087 | resolve-from "^4.0.0" 1088 | 1089 | imurmurhash@^0.1.4: 1090 | version "0.1.4" 1091 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1092 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1093 | 1094 | inflight@^1.0.4: 1095 | version "1.0.6" 1096 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1097 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1098 | dependencies: 1099 | once "^1.3.0" 1100 | wrappy "1" 1101 | 1102 | inherits@2, inherits@~2.0.3: 1103 | version "2.0.4" 1104 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1105 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1106 | 1107 | inherits@2.0.3: 1108 | version "2.0.3" 1109 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1110 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1111 | 1112 | ini@~1.3.0: 1113 | version "1.3.5" 1114 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1115 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== 1116 | 1117 | inquirer@^6.2.2: 1118 | version "6.4.1" 1119 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.4.1.tgz#7bd9e5ab0567cd23b41b0180b68e0cfa82fc3c0b" 1120 | integrity sha512-/Jw+qPZx4EDYsaT6uz7F4GJRNFMRdKNeUZw3ZnKV8lyuUgz/YWRCSUAJMZSVhSq4Ec0R2oYnyi6b3d4JXcL5Nw== 1121 | dependencies: 1122 | ansi-escapes "^3.2.0" 1123 | chalk "^2.4.2" 1124 | cli-cursor "^2.1.0" 1125 | cli-width "^2.0.0" 1126 | external-editor "^3.0.3" 1127 | figures "^2.0.0" 1128 | lodash "^4.17.11" 1129 | mute-stream "0.0.7" 1130 | run-async "^2.2.0" 1131 | rxjs "^6.4.0" 1132 | string-width "^2.1.0" 1133 | strip-ansi "^5.1.0" 1134 | through "^2.3.6" 1135 | 1136 | interpret@^1.0.0: 1137 | version "1.2.0" 1138 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" 1139 | integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== 1140 | 1141 | invert-kv@^2.0.0: 1142 | version "2.0.0" 1143 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 1144 | integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== 1145 | 1146 | ipaddr.js@1.9.0: 1147 | version "1.9.0" 1148 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" 1149 | integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== 1150 | 1151 | is-buffer@~2.0.3: 1152 | version "2.0.3" 1153 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" 1154 | integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== 1155 | 1156 | is-callable@^1.1.4: 1157 | version "1.1.4" 1158 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1159 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 1160 | 1161 | is-date-object@^1.0.1: 1162 | version "1.0.1" 1163 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1164 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 1165 | 1166 | is-fullwidth-code-point@^1.0.0: 1167 | version "1.0.0" 1168 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1169 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1170 | dependencies: 1171 | number-is-nan "^1.0.0" 1172 | 1173 | is-fullwidth-code-point@^2.0.0: 1174 | version "2.0.0" 1175 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1176 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1177 | 1178 | is-natural-number@^4.0.1: 1179 | version "4.0.1" 1180 | resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" 1181 | integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= 1182 | 1183 | is-promise@^2.1.0: 1184 | version "2.1.0" 1185 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1186 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 1187 | 1188 | is-regex@^1.0.4: 1189 | version "1.0.4" 1190 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1191 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 1192 | dependencies: 1193 | has "^1.0.1" 1194 | 1195 | is-stream@^1.1.0: 1196 | version "1.1.0" 1197 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1198 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1199 | 1200 | is-symbol@^1.0.2: 1201 | version "1.0.2" 1202 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 1203 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 1204 | dependencies: 1205 | has-symbols "^1.0.0" 1206 | 1207 | isarray@~1.0.0: 1208 | version "1.0.0" 1209 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1210 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1211 | 1212 | isexe@^2.0.0: 1213 | version "2.0.0" 1214 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1215 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1216 | 1217 | istanbul@^0.4.5: 1218 | version "0.4.5" 1219 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" 1220 | integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= 1221 | dependencies: 1222 | abbrev "1.0.x" 1223 | async "1.x" 1224 | escodegen "1.8.x" 1225 | esprima "2.7.x" 1226 | glob "^5.0.15" 1227 | handlebars "^4.0.1" 1228 | js-yaml "3.x" 1229 | mkdirp "0.5.x" 1230 | nopt "3.x" 1231 | once "1.x" 1232 | resolve "1.1.x" 1233 | supports-color "^3.1.0" 1234 | which "^1.1.1" 1235 | wordwrap "^1.0.0" 1236 | 1237 | js-tokens@^4.0.0: 1238 | version "4.0.0" 1239 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1240 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1241 | 1242 | js-yaml@3.13.1, js-yaml@3.x, js-yaml@^3.13.0: 1243 | version "3.13.1" 1244 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1245 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1246 | dependencies: 1247 | argparse "^1.0.7" 1248 | esprima "^4.0.0" 1249 | 1250 | json-schema-traverse@^0.4.1: 1251 | version "0.4.1" 1252 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1253 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1254 | 1255 | json-stable-stringify-without-jsonify@^1.0.1: 1256 | version "1.0.1" 1257 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1258 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1259 | 1260 | kafka-node@~4.1.3: 1261 | version "4.1.3" 1262 | resolved "https://registry.yarnpkg.com/kafka-node/-/kafka-node-4.1.3.tgz#9e5fdf3a5562370ff0f82c5481bd14a6e39ad93d" 1263 | integrity sha512-C2WHksRCr7vIKmbxYaCk2c5Q1lnHIi6C0f3AioK3ARcRHGO9DpqErcoaS9d8PP62yzTnkYras+iAlmPsZHNSfw== 1264 | dependencies: 1265 | async "^2.6.2" 1266 | binary "~0.3.0" 1267 | bl "^2.2.0" 1268 | buffer-crc32 "~0.2.5" 1269 | buffermaker "~1.2.0" 1270 | debug "^2.1.3" 1271 | denque "^1.3.0" 1272 | lodash "^4.17.4" 1273 | minimatch "^3.0.2" 1274 | nested-error-stacks "^2.0.0" 1275 | optional "^0.1.3" 1276 | retry "^0.10.1" 1277 | uuid "^3.0.0" 1278 | optionalDependencies: 1279 | snappy "^6.0.1" 1280 | 1281 | lcid@^2.0.0: 1282 | version "2.0.0" 1283 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 1284 | integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== 1285 | dependencies: 1286 | invert-kv "^2.0.0" 1287 | 1288 | levn@^0.3.0, levn@~0.3.0: 1289 | version "0.3.0" 1290 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1291 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1292 | dependencies: 1293 | prelude-ls "~1.1.2" 1294 | type-check "~0.3.2" 1295 | 1296 | locate-path@^3.0.0: 1297 | version "3.0.0" 1298 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1299 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1300 | dependencies: 1301 | p-locate "^3.0.0" 1302 | path-exists "^3.0.0" 1303 | 1304 | lodash.merge@~4.6.1: 1305 | version "4.6.1" 1306 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" 1307 | integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== 1308 | 1309 | lodash@4.x, lodash@^4.17.11, lodash@^4.17.4: 1310 | version "4.17.11" 1311 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 1312 | integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== 1313 | 1314 | log-symbols@2.2.0: 1315 | version "2.2.0" 1316 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1317 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1318 | dependencies: 1319 | chalk "^2.0.1" 1320 | 1321 | long@1.1.2: 1322 | version "1.1.2" 1323 | resolved "https://registry.yarnpkg.com/long/-/long-1.1.2.tgz#eaef5951ca7551d96926b82da242db9d6b28fb53" 1324 | integrity sha1-6u9ZUcp1UdlpJrgtokLbnWso+1M= 1325 | 1326 | make-dir@^1.0.0: 1327 | version "1.3.0" 1328 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 1329 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== 1330 | dependencies: 1331 | pify "^3.0.0" 1332 | 1333 | map-age-cleaner@^0.1.1: 1334 | version "0.1.3" 1335 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 1336 | integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== 1337 | dependencies: 1338 | p-defer "^1.0.0" 1339 | 1340 | media-typer@0.3.0: 1341 | version "0.3.0" 1342 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1343 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1344 | 1345 | mem@^4.0.0: 1346 | version "4.3.0" 1347 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" 1348 | integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== 1349 | dependencies: 1350 | map-age-cleaner "^0.1.1" 1351 | mimic-fn "^2.0.0" 1352 | p-is-promise "^2.0.0" 1353 | 1354 | merge-descriptors@1.0.1: 1355 | version "1.0.1" 1356 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1357 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1358 | 1359 | methods@~1.1.2: 1360 | version "1.1.2" 1361 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1362 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1363 | 1364 | mime-db@1.40.0: 1365 | version "1.40.0" 1366 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 1367 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== 1368 | 1369 | mime-types@~2.1.24: 1370 | version "2.1.24" 1371 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 1372 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== 1373 | dependencies: 1374 | mime-db "1.40.0" 1375 | 1376 | mime@1.6.0: 1377 | version "1.6.0" 1378 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1379 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1380 | 1381 | mimic-fn@^1.0.0: 1382 | version "1.2.0" 1383 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1384 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1385 | 1386 | mimic-fn@^2.0.0: 1387 | version "2.1.0" 1388 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1389 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1390 | 1391 | mimic-response@^1.0.0: 1392 | version "1.0.1" 1393 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 1394 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1395 | 1396 | "minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: 1397 | version "3.0.4" 1398 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1399 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1400 | dependencies: 1401 | brace-expansion "^1.1.7" 1402 | 1403 | minimist@0.0.8: 1404 | version "0.0.8" 1405 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1406 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1407 | 1408 | minimist@^1.2.0: 1409 | version "1.2.0" 1410 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1411 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1412 | 1413 | minimist@~0.0.1: 1414 | version "0.0.10" 1415 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1416 | integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 1417 | 1418 | mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.1: 1419 | version "0.5.1" 1420 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1421 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1422 | dependencies: 1423 | minimist "0.0.8" 1424 | 1425 | mocha@^6.1.4: 1426 | version "6.1.4" 1427 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.1.4.tgz#e35fada242d5434a7e163d555c705f6875951640" 1428 | integrity sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg== 1429 | dependencies: 1430 | ansi-colors "3.2.3" 1431 | browser-stdout "1.3.1" 1432 | debug "3.2.6" 1433 | diff "3.5.0" 1434 | escape-string-regexp "1.0.5" 1435 | find-up "3.0.0" 1436 | glob "7.1.3" 1437 | growl "1.10.5" 1438 | he "1.2.0" 1439 | js-yaml "3.13.1" 1440 | log-symbols "2.2.0" 1441 | minimatch "3.0.4" 1442 | mkdirp "0.5.1" 1443 | ms "2.1.1" 1444 | node-environment-flags "1.0.5" 1445 | object.assign "4.1.0" 1446 | strip-json-comments "2.0.1" 1447 | supports-color "6.0.0" 1448 | which "1.3.1" 1449 | wide-align "1.1.3" 1450 | yargs "13.2.2" 1451 | yargs-parser "13.0.0" 1452 | yargs-unparser "1.5.0" 1453 | 1454 | ms@2.0.0: 1455 | version "2.0.0" 1456 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1457 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1458 | 1459 | ms@2.1.1: 1460 | version "2.1.1" 1461 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1462 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1463 | 1464 | ms@^2.1.1: 1465 | version "2.1.2" 1466 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1467 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1468 | 1469 | murmur-hash-js@^1.0.0: 1470 | version "1.0.0" 1471 | resolved "https://registry.yarnpkg.com/murmur-hash-js/-/murmur-hash-js-1.0.0.tgz#5041049269c96633c866386960b2f4289e75e5b0" 1472 | integrity sha1-UEEEkmnJZjPIZjhpYLL0KJ515bA= 1473 | 1474 | murmur2-partitioner@~1.0.0: 1475 | version "1.0.0" 1476 | resolved "https://registry.yarnpkg.com/murmur2-partitioner/-/murmur2-partitioner-1.0.0.tgz#887777b4a411a387f8a030a184d0aafbc19e21c0" 1477 | integrity sha512-Vb+qk3jrnYxrwfxsTY1yH7VjXL4PWObXq/S0f4dKzSn+IXTXnFH/8KtXuFZScdCiMKw9HlKtGoY84xKFQpMSEg== 1478 | dependencies: 1479 | murmur-hash-js "^1.0.0" 1480 | 1481 | murmurhash@~0.0.2: 1482 | version "0.0.2" 1483 | resolved "https://registry.yarnpkg.com/murmurhash/-/murmurhash-0.0.2.tgz#6f07bd8a1105e709c26fc89420cb5930c24585fe" 1484 | integrity sha1-bwe9ihEF5wnCb8iUIMtZMMJFhf4= 1485 | 1486 | mute-stream@0.0.7: 1487 | version "0.0.7" 1488 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1489 | integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= 1490 | 1491 | nan@2.x, nan@^2.11.1, nan@^2.14.0: 1492 | version "2.14.0" 1493 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" 1494 | integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== 1495 | 1496 | napi-build-utils@^1.0.1: 1497 | version "1.0.1" 1498 | resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" 1499 | integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA== 1500 | 1501 | natural-compare@^1.4.0: 1502 | version "1.4.0" 1503 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1504 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1505 | 1506 | negotiator@0.6.2: 1507 | version "0.6.2" 1508 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1509 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1510 | 1511 | neo-async@^2.6.0: 1512 | version "2.6.1" 1513 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" 1514 | integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== 1515 | 1516 | nested-error-stacks@^2.0.0: 1517 | version "2.1.0" 1518 | resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" 1519 | integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== 1520 | 1521 | nice-try@^1.0.4: 1522 | version "1.0.5" 1523 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1524 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1525 | 1526 | node-abi@^2.7.0: 1527 | version "2.9.0" 1528 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.9.0.tgz#ae4075b298dab2d92dd1e22c48ccc7ffd7f06200" 1529 | integrity sha512-jmEOvv0eanWjhX8dX1pmjb7oJl1U1oR4FOh0b2GnvALwSYoOdU7sj+kLDSAyjo4pfC9aj/IxkloxdLJQhSSQBA== 1530 | dependencies: 1531 | semver "^5.4.1" 1532 | 1533 | node-environment-flags@1.0.5: 1534 | version "1.0.5" 1535 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 1536 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 1537 | dependencies: 1538 | object.getownpropertydescriptors "^2.0.3" 1539 | semver "^5.7.0" 1540 | 1541 | node-rdkafka@~2.6.1: 1542 | version "2.6.1" 1543 | resolved "https://registry.yarnpkg.com/node-rdkafka/-/node-rdkafka-2.6.1.tgz#87171ad5f45d8405dcc4d987b7b606c8a763344b" 1544 | integrity sha512-mBRq7/7hgnRmbfX8TLPK0JVQYxu/kkuHVT4W7vLXc6wQoV5JfInpV0hWtkGIBjNzFyYSk0faJDIqlDQ2k9vy9Q== 1545 | dependencies: 1546 | bindings "^1.3.1" 1547 | nan "^2.11.1" 1548 | 1549 | noop-logger@^0.1.1: 1550 | version "0.1.1" 1551 | resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" 1552 | integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= 1553 | 1554 | nopt@3.x: 1555 | version "3.0.6" 1556 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 1557 | integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= 1558 | dependencies: 1559 | abbrev "1" 1560 | 1561 | npm-run-path@^2.0.0: 1562 | version "2.0.2" 1563 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1564 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1565 | dependencies: 1566 | path-key "^2.0.0" 1567 | 1568 | npmlog@^4.0.1: 1569 | version "4.1.2" 1570 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1571 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 1572 | dependencies: 1573 | are-we-there-yet "~1.1.2" 1574 | console-control-strings "~1.1.0" 1575 | gauge "~2.7.3" 1576 | set-blocking "~2.0.0" 1577 | 1578 | number-is-nan@^1.0.0: 1579 | version "1.0.1" 1580 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1581 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1582 | 1583 | object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: 1584 | version "4.1.1" 1585 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1586 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1587 | 1588 | object-keys@^1.0.11, object-keys@^1.0.12: 1589 | version "1.1.1" 1590 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1591 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1592 | 1593 | object.assign@4.1.0: 1594 | version "4.1.0" 1595 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1596 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1597 | dependencies: 1598 | define-properties "^1.1.2" 1599 | function-bind "^1.1.1" 1600 | has-symbols "^1.0.0" 1601 | object-keys "^1.0.11" 1602 | 1603 | object.getownpropertydescriptors@^2.0.3: 1604 | version "2.0.3" 1605 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 1606 | integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= 1607 | dependencies: 1608 | define-properties "^1.1.2" 1609 | es-abstract "^1.5.1" 1610 | 1611 | on-finished@~2.3.0: 1612 | version "2.3.0" 1613 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1614 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1615 | dependencies: 1616 | ee-first "1.1.1" 1617 | 1618 | once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: 1619 | version "1.4.0" 1620 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1621 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1622 | dependencies: 1623 | wrappy "1" 1624 | 1625 | onetime@^2.0.0: 1626 | version "2.0.1" 1627 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1628 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 1629 | dependencies: 1630 | mimic-fn "^1.0.0" 1631 | 1632 | optimist@^0.6.1: 1633 | version "0.6.1" 1634 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1635 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 1636 | dependencies: 1637 | minimist "~0.0.1" 1638 | wordwrap "~0.0.2" 1639 | 1640 | optional@^0.1.3: 1641 | version "0.1.4" 1642 | resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3" 1643 | integrity sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw== 1644 | 1645 | optionator@^0.8.1, optionator@^0.8.2: 1646 | version "0.8.2" 1647 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1648 | integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= 1649 | dependencies: 1650 | deep-is "~0.1.3" 1651 | fast-levenshtein "~2.0.4" 1652 | levn "~0.3.0" 1653 | prelude-ls "~1.1.2" 1654 | type-check "~0.3.2" 1655 | wordwrap "~1.0.0" 1656 | 1657 | os-homedir@^1.0.1: 1658 | version "1.0.2" 1659 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1660 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1661 | 1662 | os-locale@^3.0.0, os-locale@^3.1.0: 1663 | version "3.1.0" 1664 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" 1665 | integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== 1666 | dependencies: 1667 | execa "^1.0.0" 1668 | lcid "^2.0.0" 1669 | mem "^4.0.0" 1670 | 1671 | os-tmpdir@~1.0.2: 1672 | version "1.0.2" 1673 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1674 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1675 | 1676 | p-defer@^1.0.0: 1677 | version "1.0.0" 1678 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 1679 | integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= 1680 | 1681 | p-finally@^1.0.0: 1682 | version "1.0.0" 1683 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1684 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1685 | 1686 | p-is-promise@^2.0.0: 1687 | version "2.1.0" 1688 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" 1689 | integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== 1690 | 1691 | p-limit@^2.0.0: 1692 | version "2.2.0" 1693 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 1694 | integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== 1695 | dependencies: 1696 | p-try "^2.0.0" 1697 | 1698 | p-locate@^3.0.0: 1699 | version "3.0.0" 1700 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1701 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1702 | dependencies: 1703 | p-limit "^2.0.0" 1704 | 1705 | p-try@^2.0.0: 1706 | version "2.2.0" 1707 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1708 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1709 | 1710 | parent-module@^1.0.0: 1711 | version "1.0.1" 1712 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1713 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1714 | dependencies: 1715 | callsites "^3.0.0" 1716 | 1717 | parseurl@~1.3.3: 1718 | version "1.3.3" 1719 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1720 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1721 | 1722 | path-exists@^3.0.0: 1723 | version "3.0.0" 1724 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1725 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1726 | 1727 | path-is-absolute@^1.0.0: 1728 | version "1.0.1" 1729 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1730 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1731 | 1732 | path-is-inside@^1.0.2: 1733 | version "1.0.2" 1734 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1735 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 1736 | 1737 | path-key@^2.0.0, path-key@^2.0.1: 1738 | version "2.0.1" 1739 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1740 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 1741 | 1742 | path-parse@^1.0.6: 1743 | version "1.0.6" 1744 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1745 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1746 | 1747 | path-to-regexp@0.1.7: 1748 | version "0.1.7" 1749 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1750 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 1751 | 1752 | pend@~1.2.0: 1753 | version "1.2.0" 1754 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 1755 | integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= 1756 | 1757 | pify@^2.3.0: 1758 | version "2.3.0" 1759 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1760 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1761 | 1762 | pify@^3.0.0: 1763 | version "3.0.0" 1764 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1765 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 1766 | 1767 | pinkie-promise@^2.0.0: 1768 | version "2.0.1" 1769 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1770 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 1771 | dependencies: 1772 | pinkie "^2.0.0" 1773 | 1774 | pinkie@^2.0.0: 1775 | version "2.0.4" 1776 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1777 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 1778 | 1779 | prebuild-install@^5.2.2: 1780 | version "5.3.0" 1781 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.0.tgz#58b4d8344e03590990931ee088dd5401b03004c8" 1782 | integrity sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg== 1783 | dependencies: 1784 | detect-libc "^1.0.3" 1785 | expand-template "^2.0.3" 1786 | github-from-package "0.0.0" 1787 | minimist "^1.2.0" 1788 | mkdirp "^0.5.1" 1789 | napi-build-utils "^1.0.1" 1790 | node-abi "^2.7.0" 1791 | noop-logger "^0.1.1" 1792 | npmlog "^4.0.1" 1793 | os-homedir "^1.0.1" 1794 | pump "^2.0.1" 1795 | rc "^1.2.7" 1796 | simple-get "^2.7.0" 1797 | tar-fs "^1.13.0" 1798 | tunnel-agent "^0.6.0" 1799 | which-pm-runs "^1.0.0" 1800 | 1801 | prelude-ls@~1.1.2: 1802 | version "1.1.2" 1803 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1804 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 1805 | 1806 | process-nextick-args@~2.0.0: 1807 | version "2.0.1" 1808 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1809 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1810 | 1811 | progress@^2.0.0: 1812 | version "2.0.3" 1813 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1814 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1815 | 1816 | proxy-addr@~2.0.5: 1817 | version "2.0.5" 1818 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" 1819 | integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== 1820 | dependencies: 1821 | forwarded "~0.1.2" 1822 | ipaddr.js "1.9.0" 1823 | 1824 | pump@^1.0.0: 1825 | version "1.0.3" 1826 | resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" 1827 | integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== 1828 | dependencies: 1829 | end-of-stream "^1.1.0" 1830 | once "^1.3.1" 1831 | 1832 | pump@^2.0.1: 1833 | version "2.0.1" 1834 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" 1835 | integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== 1836 | dependencies: 1837 | end-of-stream "^1.1.0" 1838 | once "^1.3.1" 1839 | 1840 | pump@^3.0.0: 1841 | version "3.0.0" 1842 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1843 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1844 | dependencies: 1845 | end-of-stream "^1.1.0" 1846 | once "^1.3.1" 1847 | 1848 | punycode@^2.1.0: 1849 | version "2.1.1" 1850 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1851 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1852 | 1853 | qs@6.7.0: 1854 | version "6.7.0" 1855 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 1856 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 1857 | 1858 | range-parser@~1.2.1: 1859 | version "1.2.1" 1860 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1861 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1862 | 1863 | raw-body@2.4.0: 1864 | version "2.4.0" 1865 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 1866 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 1867 | dependencies: 1868 | bytes "3.1.0" 1869 | http-errors "1.7.2" 1870 | iconv-lite "0.4.24" 1871 | unpipe "1.0.0" 1872 | 1873 | rc@^1.2.7: 1874 | version "1.2.8" 1875 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1876 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1877 | dependencies: 1878 | deep-extend "^0.6.0" 1879 | ini "~1.3.0" 1880 | minimist "^1.2.0" 1881 | strip-json-comments "~2.0.1" 1882 | 1883 | readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: 1884 | version "2.3.6" 1885 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1886 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 1887 | dependencies: 1888 | core-util-is "~1.0.0" 1889 | inherits "~2.0.3" 1890 | isarray "~1.0.0" 1891 | process-nextick-args "~2.0.0" 1892 | safe-buffer "~5.1.1" 1893 | string_decoder "~1.1.1" 1894 | util-deprecate "~1.0.1" 1895 | 1896 | rechoir@^0.6.2: 1897 | version "0.6.2" 1898 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 1899 | integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= 1900 | dependencies: 1901 | resolve "^1.1.6" 1902 | 1903 | regexpp@^2.0.1: 1904 | version "2.0.1" 1905 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 1906 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 1907 | 1908 | require-directory@^2.1.1: 1909 | version "2.1.1" 1910 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1911 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1912 | 1913 | require-main-filename@^1.0.1: 1914 | version "1.0.1" 1915 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 1916 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 1917 | 1918 | require-main-filename@^2.0.0: 1919 | version "2.0.0" 1920 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 1921 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1922 | 1923 | resolve-from@^4.0.0: 1924 | version "4.0.0" 1925 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1926 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1927 | 1928 | resolve@1.1.x: 1929 | version "1.1.7" 1930 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1931 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 1932 | 1933 | resolve@^1.1.6: 1934 | version "1.11.0" 1935 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" 1936 | integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== 1937 | dependencies: 1938 | path-parse "^1.0.6" 1939 | 1940 | restore-cursor@^2.0.0: 1941 | version "2.0.0" 1942 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1943 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 1944 | dependencies: 1945 | onetime "^2.0.0" 1946 | signal-exit "^3.0.2" 1947 | 1948 | retry@^0.10.1: 1949 | version "0.10.1" 1950 | resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" 1951 | integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= 1952 | 1953 | rimraf@2.6.3: 1954 | version "2.6.3" 1955 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 1956 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1957 | dependencies: 1958 | glob "^7.1.3" 1959 | 1960 | run-async@^2.2.0: 1961 | version "2.3.0" 1962 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1963 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 1964 | dependencies: 1965 | is-promise "^2.1.0" 1966 | 1967 | rxjs@^6.4.0: 1968 | version "6.5.2" 1969 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" 1970 | integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== 1971 | dependencies: 1972 | tslib "^1.9.0" 1973 | 1974 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1975 | version "5.1.2" 1976 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1977 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1978 | 1979 | "safer-buffer@>= 2.1.2 < 3": 1980 | version "2.1.2" 1981 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1982 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1983 | 1984 | seek-bzip@^1.0.5: 1985 | version "1.0.5" 1986 | resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" 1987 | integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= 1988 | dependencies: 1989 | commander "~2.8.1" 1990 | 1991 | semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.7.0: 1992 | version "5.7.0" 1993 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 1994 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 1995 | 1996 | send@0.17.1: 1997 | version "0.17.1" 1998 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 1999 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 2000 | dependencies: 2001 | debug "2.6.9" 2002 | depd "~1.1.2" 2003 | destroy "~1.0.4" 2004 | encodeurl "~1.0.2" 2005 | escape-html "~1.0.3" 2006 | etag "~1.8.1" 2007 | fresh "0.5.2" 2008 | http-errors "~1.7.2" 2009 | mime "1.6.0" 2010 | ms "2.1.1" 2011 | on-finished "~2.3.0" 2012 | range-parser "~1.2.1" 2013 | statuses "~1.5.0" 2014 | 2015 | serve-static@1.14.1: 2016 | version "1.14.1" 2017 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 2018 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 2019 | dependencies: 2020 | encodeurl "~1.0.2" 2021 | escape-html "~1.0.3" 2022 | parseurl "~1.3.3" 2023 | send "0.17.1" 2024 | 2025 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2026 | version "2.0.0" 2027 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2028 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2029 | 2030 | setprototypeof@1.1.1: 2031 | version "1.1.1" 2032 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2033 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2034 | 2035 | shebang-command@^1.2.0: 2036 | version "1.2.0" 2037 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2038 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2039 | dependencies: 2040 | shebang-regex "^1.0.0" 2041 | 2042 | shebang-regex@^1.0.0: 2043 | version "1.0.0" 2044 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2045 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2046 | 2047 | shelljs@0.8.x: 2048 | version "0.8.3" 2049 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" 2050 | integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== 2051 | dependencies: 2052 | glob "^7.0.0" 2053 | interpret "^1.0.0" 2054 | rechoir "^0.6.2" 2055 | 2056 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2057 | version "3.0.2" 2058 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2059 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 2060 | 2061 | simple-concat@^1.0.0: 2062 | version "1.0.0" 2063 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" 2064 | integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= 2065 | 2066 | simple-get@^2.7.0: 2067 | version "2.8.1" 2068 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" 2069 | integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== 2070 | dependencies: 2071 | decompress-response "^3.3.0" 2072 | once "^1.3.1" 2073 | simple-concat "^1.0.0" 2074 | 2075 | sinek@^7.29.3: 2076 | version "7.29.3" 2077 | resolved "https://registry.yarnpkg.com/sinek/-/sinek-7.29.3.tgz#a60d1d0ace907f6249d8883c5941a0b3caad92cf" 2078 | integrity sha512-I8a9XR2x8Kadl6r6r7gAR+bBW+z3dezIHosm0CfIqv1eDxlBwl+HNo4WgDwazoAIuvxbq7s4QLp+K6WxS32G5Q== 2079 | dependencies: 2080 | async "~2.6.2" 2081 | bluebird "~3.5.4" 2082 | debug "~4.1.1" 2083 | lodash.merge "~4.6.1" 2084 | murmur2-partitioner "~1.0.0" 2085 | murmurhash "~0.0.2" 2086 | node-rdkafka "~2.6.1" 2087 | uuid "~3.3.2" 2088 | optionalDependencies: 2089 | kafka-node "~4.1.3" 2090 | 2091 | slice-ansi@^2.1.0: 2092 | version "2.1.0" 2093 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 2094 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 2095 | dependencies: 2096 | ansi-styles "^3.2.0" 2097 | astral-regex "^1.0.0" 2098 | is-fullwidth-code-point "^2.0.0" 2099 | 2100 | snappy@^6.0.1: 2101 | version "6.2.3" 2102 | resolved "https://registry.yarnpkg.com/snappy/-/snappy-6.2.3.tgz#11690a8fcf0c71ff6b04e72ab32631804b2d265a" 2103 | integrity sha512-HZpVoIxMfQ4fL3iDuMdI1R5xycw1o9YDCAndTKZCY/EHRoKFvzwplttuBBVGeEg2fd1hYiwAXos/sM24W7N1LA== 2104 | dependencies: 2105 | bindings "^1.3.1" 2106 | nan "^2.14.0" 2107 | prebuild-install "^5.2.2" 2108 | 2109 | source-map@^0.6.1, source-map@~0.6.1: 2110 | version "0.6.1" 2111 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2112 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2113 | 2114 | source-map@~0.2.0: 2115 | version "0.2.0" 2116 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 2117 | integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= 2118 | dependencies: 2119 | amdefine ">=0.0.4" 2120 | 2121 | sprintf-js@~1.0.2: 2122 | version "1.0.3" 2123 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2124 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2125 | 2126 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 2127 | version "1.5.0" 2128 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2129 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2130 | 2131 | string-width@^1.0.1: 2132 | version "1.0.2" 2133 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2134 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 2135 | dependencies: 2136 | code-point-at "^1.0.0" 2137 | is-fullwidth-code-point "^1.0.0" 2138 | strip-ansi "^3.0.0" 2139 | 2140 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: 2141 | version "2.1.1" 2142 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2143 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2144 | dependencies: 2145 | is-fullwidth-code-point "^2.0.0" 2146 | strip-ansi "^4.0.0" 2147 | 2148 | string-width@^3.0.0: 2149 | version "3.1.0" 2150 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2151 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2152 | dependencies: 2153 | emoji-regex "^7.0.1" 2154 | is-fullwidth-code-point "^2.0.0" 2155 | strip-ansi "^5.1.0" 2156 | 2157 | string_decoder@~1.1.1: 2158 | version "1.1.1" 2159 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2160 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2161 | dependencies: 2162 | safe-buffer "~5.1.0" 2163 | 2164 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2165 | version "3.0.1" 2166 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2167 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2168 | dependencies: 2169 | ansi-regex "^2.0.0" 2170 | 2171 | strip-ansi@^4.0.0: 2172 | version "4.0.0" 2173 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2174 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2175 | dependencies: 2176 | ansi-regex "^3.0.0" 2177 | 2178 | strip-ansi@^5.1.0: 2179 | version "5.2.0" 2180 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2181 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2182 | dependencies: 2183 | ansi-regex "^4.1.0" 2184 | 2185 | strip-dirs@^2.0.0: 2186 | version "2.1.0" 2187 | resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" 2188 | integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== 2189 | dependencies: 2190 | is-natural-number "^4.0.1" 2191 | 2192 | strip-eof@^1.0.0: 2193 | version "1.0.0" 2194 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2195 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 2196 | 2197 | strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: 2198 | version "2.0.1" 2199 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2200 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2201 | 2202 | supports-color@6.0.0: 2203 | version "6.0.0" 2204 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 2205 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 2206 | dependencies: 2207 | has-flag "^3.0.0" 2208 | 2209 | supports-color@^3.1.0: 2210 | version "3.2.3" 2211 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 2212 | integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= 2213 | dependencies: 2214 | has-flag "^1.0.0" 2215 | 2216 | supports-color@^5.3.0: 2217 | version "5.5.0" 2218 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2219 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2220 | dependencies: 2221 | has-flag "^3.0.0" 2222 | 2223 | table@^5.2.3: 2224 | version "5.4.1" 2225 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.1.tgz#0691ae2ebe8259858efb63e550b6d5f9300171e8" 2226 | integrity sha512-E6CK1/pZe2N75rGZQotFOdmzWQ1AILtgYbMAbAjvms0S1l5IDB47zG3nCnFGB/w+7nB3vKofbLXCH7HPBo864w== 2227 | dependencies: 2228 | ajv "^6.9.1" 2229 | lodash "^4.17.11" 2230 | slice-ansi "^2.1.0" 2231 | string-width "^3.0.0" 2232 | 2233 | tar-fs@^1.13.0: 2234 | version "1.16.3" 2235 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" 2236 | integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== 2237 | dependencies: 2238 | chownr "^1.0.1" 2239 | mkdirp "^0.5.1" 2240 | pump "^1.0.0" 2241 | tar-stream "^1.1.2" 2242 | 2243 | tar-stream@^1.1.2, tar-stream@^1.5.2: 2244 | version "1.6.2" 2245 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" 2246 | integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== 2247 | dependencies: 2248 | bl "^1.0.0" 2249 | buffer-alloc "^1.2.0" 2250 | end-of-stream "^1.0.0" 2251 | fs-constants "^1.0.0" 2252 | readable-stream "^2.3.0" 2253 | to-buffer "^1.1.1" 2254 | xtend "^4.0.0" 2255 | 2256 | text-table@^0.2.0: 2257 | version "0.2.0" 2258 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2259 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2260 | 2261 | through@^2.3.6, through@^2.3.8: 2262 | version "2.3.8" 2263 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2264 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2265 | 2266 | tmp@^0.0.33: 2267 | version "0.0.33" 2268 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 2269 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 2270 | dependencies: 2271 | os-tmpdir "~1.0.2" 2272 | 2273 | to-buffer@^1.1.1: 2274 | version "1.1.1" 2275 | resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" 2276 | integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== 2277 | 2278 | toidentifier@1.0.0: 2279 | version "1.0.0" 2280 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2281 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2282 | 2283 | "traverse@>=0.3.0 <0.4": 2284 | version "0.3.9" 2285 | resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" 2286 | integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= 2287 | 2288 | tslib@^1.9.0: 2289 | version "1.10.0" 2290 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 2291 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 2292 | 2293 | tunnel-agent@^0.6.0: 2294 | version "0.6.0" 2295 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2296 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 2297 | dependencies: 2298 | safe-buffer "^5.0.1" 2299 | 2300 | type-check@~0.3.2: 2301 | version "0.3.2" 2302 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2303 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 2304 | dependencies: 2305 | prelude-ls "~1.1.2" 2306 | 2307 | type-is@~1.6.17, type-is@~1.6.18: 2308 | version "1.6.18" 2309 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2310 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2311 | dependencies: 2312 | media-typer "0.3.0" 2313 | mime-types "~2.1.24" 2314 | 2315 | uglify-js@^3.1.4: 2316 | version "3.6.0" 2317 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" 2318 | integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== 2319 | dependencies: 2320 | commander "~2.20.0" 2321 | source-map "~0.6.1" 2322 | 2323 | unbzip2-stream@^1.0.9: 2324 | version "1.3.3" 2325 | resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz#d156d205e670d8d8c393e1c02ebd506422873f6a" 2326 | integrity sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg== 2327 | dependencies: 2328 | buffer "^5.2.1" 2329 | through "^2.3.8" 2330 | 2331 | unpipe@1.0.0, unpipe@~1.0.0: 2332 | version "1.0.0" 2333 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2334 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2335 | 2336 | uri-js@^4.2.2: 2337 | version "4.2.2" 2338 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 2339 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 2340 | dependencies: 2341 | punycode "^2.1.0" 2342 | 2343 | util-deprecate@~1.0.1: 2344 | version "1.0.2" 2345 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2346 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2347 | 2348 | utils-merge@1.0.1: 2349 | version "1.0.1" 2350 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2351 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2352 | 2353 | uuid@^3.0.0, uuid@~3.3.2: 2354 | version "3.3.2" 2355 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" 2356 | integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== 2357 | 2358 | vary@^1, vary@~1.1.2: 2359 | version "1.1.2" 2360 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2361 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2362 | 2363 | which-module@^2.0.0: 2364 | version "2.0.0" 2365 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2366 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2367 | 2368 | which-pm-runs@^1.0.0: 2369 | version "1.0.0" 2370 | resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" 2371 | integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= 2372 | 2373 | which@1.3.1, which@^1.1.1, which@^1.2.9: 2374 | version "1.3.1" 2375 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2376 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2377 | dependencies: 2378 | isexe "^2.0.0" 2379 | 2380 | wide-align@1.1.3, wide-align@^1.1.0: 2381 | version "1.1.3" 2382 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2383 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2384 | dependencies: 2385 | string-width "^1.0.2 || 2" 2386 | 2387 | wordwrap@^1.0.0, wordwrap@~1.0.0: 2388 | version "1.0.0" 2389 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2390 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 2391 | 2392 | wordwrap@~0.0.2: 2393 | version "0.0.3" 2394 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2395 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 2396 | 2397 | wrap-ansi@^2.0.0: 2398 | version "2.1.0" 2399 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2400 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 2401 | dependencies: 2402 | string-width "^1.0.1" 2403 | strip-ansi "^3.0.1" 2404 | 2405 | wrappy@1: 2406 | version "1.0.2" 2407 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2408 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2409 | 2410 | write@1.0.3: 2411 | version "1.0.3" 2412 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 2413 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 2414 | dependencies: 2415 | mkdirp "^0.5.1" 2416 | 2417 | xtend@^4.0.0: 2418 | version "4.0.1" 2419 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2420 | integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= 2421 | 2422 | "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: 2423 | version "4.0.0" 2424 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 2425 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 2426 | 2427 | yargs-parser@13.0.0: 2428 | version "13.0.0" 2429 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b" 2430 | integrity sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw== 2431 | dependencies: 2432 | camelcase "^5.0.0" 2433 | decamelize "^1.2.0" 2434 | 2435 | yargs-parser@^11.1.1: 2436 | version "11.1.1" 2437 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" 2438 | integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== 2439 | dependencies: 2440 | camelcase "^5.0.0" 2441 | decamelize "^1.2.0" 2442 | 2443 | yargs-parser@^13.0.0: 2444 | version "13.1.1" 2445 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 2446 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 2447 | dependencies: 2448 | camelcase "^5.0.0" 2449 | decamelize "^1.2.0" 2450 | 2451 | yargs-unparser@1.5.0: 2452 | version "1.5.0" 2453 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d" 2454 | integrity sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw== 2455 | dependencies: 2456 | flat "^4.1.0" 2457 | lodash "^4.17.11" 2458 | yargs "^12.0.5" 2459 | 2460 | yargs@13.2.2: 2461 | version "13.2.2" 2462 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993" 2463 | integrity sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA== 2464 | dependencies: 2465 | cliui "^4.0.0" 2466 | find-up "^3.0.0" 2467 | get-caller-file "^2.0.1" 2468 | os-locale "^3.1.0" 2469 | require-directory "^2.1.1" 2470 | require-main-filename "^2.0.0" 2471 | set-blocking "^2.0.0" 2472 | string-width "^3.0.0" 2473 | which-module "^2.0.0" 2474 | y18n "^4.0.0" 2475 | yargs-parser "^13.0.0" 2476 | 2477 | yargs@^12.0.5: 2478 | version "12.0.5" 2479 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" 2480 | integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== 2481 | dependencies: 2482 | cliui "^4.0.0" 2483 | decamelize "^1.2.0" 2484 | find-up "^3.0.0" 2485 | get-caller-file "^1.0.1" 2486 | os-locale "^3.0.0" 2487 | require-directory "^2.1.1" 2488 | require-main-filename "^1.0.1" 2489 | set-blocking "^2.0.0" 2490 | string-width "^2.0.0" 2491 | which-module "^2.0.0" 2492 | y18n "^3.2.1 || ^4.0.0" 2493 | yargs-parser "^11.1.1" 2494 | 2495 | yauzl@^2.4.2: 2496 | version "2.10.0" 2497 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" 2498 | integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= 2499 | dependencies: 2500 | buffer-crc32 "~0.2.3" 2501 | fd-slicer "~1.1.0" 2502 | 2503 | zookeeper@^4.1.1: 2504 | version "4.1.1" 2505 | resolved "https://registry.yarnpkg.com/zookeeper/-/zookeeper-4.1.1.tgz#3367ac4bf385c9df97b2ea4c64c1a2a1200fddf2" 2506 | integrity sha512-35RtAC2TQxwa3+TLWi9189+PoehE1nut17jJcq6poe0+jTtQlqbLEHjFBgU0u/+4uFemPbkHZUtqy/TnrfQydQ== 2507 | dependencies: 2508 | async "2.6.x" 2509 | decompress "4.2.x" 2510 | decompress-targz "4.1.x" 2511 | lodash "4.x" 2512 | nan "2.x" 2513 | shelljs "0.8.x" 2514 | --------------------------------------------------------------------------------