├── .github
└── dependabot.yml
├── .gitignore
├── .vscode
└── settings.json
├── README.md
├── Screenshot (3).png
├── Screenshot (4).png
├── Screenshot (5).png
├── Screenshot (6).png
├── Screenshot (7).png
├── bot.js
├── client
├── .gitignore
├── .snyk
├── README.md
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
└── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── Assets
│ ├── canvasjs.min.js
│ └── canvasjs.react.js
│ ├── Components
│ ├── Auth.js
│ └── Landing.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── other
│ ├── actions
│ │ ├── Action.js
│ │ └── ActionTypes.js
│ ├── reducers
│ │ ├── authReducer.js
│ │ ├── errorReducer.js
│ │ ├── index.js
│ │ └── twitterReducer.js
│ └── store.js
│ ├── serviceWorker.js
│ └── setupTests.js
├── config
├── keys.js
└── passport.js
├── controller
└── Api.js
├── model
└── User.js
├── package-lock.json
├── package.json
├── renovate.json
└── screenshots
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: npm
4 | directory: "/"
5 | schedule:
6 | interval: daily
7 | time: "02:00"
8 | open-pull-requests-limit: 10
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | #dependencies
2 | node_modules
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cSpell.words": [
3 | "Twitterdata"
4 | ],
5 | "cSpell.ignoreWords": [
6 | "a",
7 | "above",
8 | "accent",
9 | "access",
10 | "action",
11 | "actions",
12 | "active",
13 | "admin",
14 | "afz",
15 | "ah",
16 | "all",
17 | "allows",
18 | "and",
19 | "animation",
20 | "any",
21 | "apps",
22 | "area",
23 | "as",
24 | "assets",
25 | "auth",
26 | "axis",
27 | "b",
28 | "background",
29 | "be",
30 | "big",
31 | "blinking",
32 | "blue",
33 | "border",
34 | "bot",
35 | "bp",
36 | "btn",
37 | "bu",
38 | "button",
39 | "c",
40 | "can",
41 | "canvas",
42 | "canvasjs",
43 | "cc",
44 | "center",
45 | "change",
46 | "chart",
47 | "circle",
48 | "class",
49 | "click",
50 | "client",
51 | "client id ughvtmlm k t bu ti uackl apps googleusercontent com secret q bp nq qzxh s d fp maqq oyndr",
52 | "clipper",
53 | "cluster",
54 | "col",
55 | "com",
56 | "component",
57 | "connect",
58 | "console",
59 | "const",
60 | "constructor",
61 | "consumer",
62 | "container",
63 | "cxo",
64 | "d",
65 | "data",
66 | "default",
67 | "di",
68 | "did",
69 | "displayed",
70 | "div",
71 | "dx",
72 | "e",
73 | "effect",
74 | "else",
75 | "enabled",
76 | "enter",
77 | "eog",
78 | "epj",
79 | "errors",
80 | "export",
81 | "exports",
82 | "extends",
83 | "false",
84 | "family",
85 | "fetching",
86 | "fh",
87 | "field",
88 | "font",
89 | "for",
90 | "form",
91 | "fp",
92 | "from",
93 | "func",
94 | "fuy",
95 | "fv",
96 | "gap",
97 | "get",
98 | "gih",
99 | "googleusercontent",
100 | "graphs",
101 | "green",
102 | "gsm",
103 | "h",
104 | "hash",
105 | "hashtag",
106 | "here",
107 | "heroku",
108 | "heroku postbuild",
109 | "hey",
110 | "hgda",
111 | "hoverable",
112 | "hp",
113 | "hr",
114 | "href",
115 | "https",
116 | "hz",
117 | "i",
118 | "icons",
119 | "id",
120 | "if",
121 | "import",
122 | "import react component from canvas js assets canvasjs prop types connect redux get data user other actions action var chart class landing extends constructor props super this state query did mount on change e set target id value submit prevent default const q render twitter score very negative neutral positive map options theme light animation enabled true export title text live tweet visualization axis y number of tweets include zero false x severity type spline area show in legend points label if is retrieved return div name row console log ref you can reference to the instance as shown above using allows access all properties and methods p graphs will be plotted here table center responsive thead tr th sentiment tbody key td displayed loader loading preloader background wrapper big active spinner layer blue circle clipper left gap patch right red yellow green blinking fetching else auth h style font size family roboto visualizer hey there any hash tag or keyword click button visualize your a href https com container form no validate input field col s i material icons prefix times new roman placeholder enter hashtag for textarea padding px width border radius letter spacing margin top rem btn large waves effect hoverable accent func required object errors",
123 | "in",
124 | "include",
125 | "inp",
126 | "input",
127 | "instance",
128 | "ipsk",
129 | "is",
130 | "josphatwambugu",
131 | "js",
132 | "k",
133 | "key",
134 | "keyword",
135 | "krf",
136 | "kzl",
137 | "l",
138 | "label",
139 | "landing",
140 | "large",
141 | "layer",
142 | "left",
143 | "legend",
144 | "letter",
145 | "light",
146 | "live",
147 | "loader",
148 | "loading",
149 | "log",
150 | "m",
151 | "majority",
152 | "map",
153 | "maqq",
154 | "margin",
155 | "material",
156 | "mb",
157 | "methods",
158 | "module",
159 | "module exports twtter bot and oauth consumer key kzl t hgda i c xv y fh u hr fuy ra secret r z mq sm w eog na ipsk qc yl b gsm ot sk wc d epj hz zidvre access token tao cxo hp zs inp poudp h zd q afz yi yrk yrs zl di krf wx p m ah gih uwteqx fv vt l cc mb dx mongo uri mongodb wambugu josphatwambugu cluster shard vtvw net test ssl true replica set auth source admin retry writes majority",
160 | "mongo",
161 | "mongodb",
162 | "mount",
163 | "mq",
164 | "na",
165 | "name",
166 | "negative",
167 | "net",
168 | "neutral",
169 | "new",
170 | "no",
171 | "nq",
172 | "number",
173 | "oauth",
174 | "object",
175 | "of",
176 | "on",
177 | "options",
178 | "or",
179 | "ot",
180 | "other",
181 | "oyndr",
182 | "p",
183 | "padding",
184 | "patch",
185 | "placeholder",
186 | "plotted",
187 | "points",
188 | "positive",
189 | "postbuild",
190 | "poudp",
191 | "prefix",
192 | "preloader",
193 | "prevent",
194 | "prop",
195 | "properties",
196 | "props",
197 | "px",
198 | "q",
199 | "qc",
200 | "query",
201 | "qzxh",
202 | "r",
203 | "ra",
204 | "radius",
205 | "react",
206 | "red",
207 | "redux",
208 | "ref",
209 | "reference",
210 | "rem",
211 | "render",
212 | "replica",
213 | "required",
214 | "responsive",
215 | "retrieved",
216 | "retry",
217 | "return",
218 | "right",
219 | "roboto",
220 | "roman",
221 | "row",
222 | "s",
223 | "score",
224 | "secret",
225 | "sentiment",
226 | "set",
227 | "severity",
228 | "shard",
229 | "show",
230 | "shown",
231 | "size",
232 | "sk",
233 | "sm",
234 | "source",
235 | "spacing",
236 | "spinner",
237 | "spline",
238 | "ssl",
239 | "state",
240 | "style",
241 | "submit",
242 | "super",
243 | "t",
244 | "table",
245 | "tag",
246 | "tao",
247 | "target",
248 | "tbody",
249 | "td",
250 | "test",
251 | "text",
252 | "textarea",
253 | "th",
254 | "the",
255 | "thead",
256 | "theme",
257 | "there",
258 | "this",
259 | "ti",
260 | "times",
261 | "title",
262 | "to",
263 | "token",
264 | "top",
265 | "tr",
266 | "true",
267 | "tweet",
268 | "tweets",
269 | "twitter",
270 | "twtter",
271 | "type",
272 | "types",
273 | "u",
274 | "uackl",
275 | "ughvtmlm",
276 | "uri",
277 | "user",
278 | "using",
279 | "uwteqx",
280 | "validate",
281 | "value",
282 | "var",
283 | "very",
284 | "visualization",
285 | "visualize",
286 | "visualizer",
287 | "vt",
288 | "vtvw",
289 | "w",
290 | "wambugu",
291 | "waves",
292 | "wc",
293 | "width",
294 | "will",
295 | "wrapper",
296 | "writes",
297 | "wx",
298 | "x",
299 | "xv",
300 | "y",
301 | "yellow",
302 | "yi",
303 | "yl",
304 | "you",
305 | "your",
306 | "yrk",
307 | "yrs",
308 | "z",
309 | "zd",
310 | "zero",
311 | "zidvre",
312 | "zl",
313 | "zs"
314 | ]
315 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Tweet-Visualizer
2 | A web Applicaton that uses social login authentication and viusalizes incoming streams of twitter data
3 |
4 |
5 |
6 |
7 |
8 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
9 | Prerequisites
10 |
11 | Node.JS and npm must be installed. Download and install them from here.
12 |
13 |
14 | Installing
15 |
16 | Follow these steps to run this project in your local computer.
17 | $ Firstly, Fork this repo
18 | $ https://github.com/wambugucoder/Tweet-Visualizer.git
19 | $ Open the root folder and run the following commands
20 | $ npm i
21 | $ npm run client-install
22 |
23 | Now, to run both the server and client on port 5000 and 3000 respectively, run:
24 |
25 | $ npm run dev
26 |
27 | To run only the server, run:
28 |
29 | $ npm run server
30 |
31 | To run only the client, run:
32 |
33 | $ npm run client
34 |
35 | Built With
36 |
37 | Node.JS - Node.JS is used in the backend.
38 | React.JS -Frontend library used in the project.
39 | Redux - Used in addition to React.JS
40 | Passport - Used its Google OAuth Strategy
41 | Twit-For collecting tweets
42 | Sentiment-For Analyzing the tweets
43 | Canvas -For plotting graphs
44 |
45 | Author
46 |
47 | JOSPHAT WAMBUGU
48 |
49 |
50 | BELOW ARE SCREENSHOTS OF THE WEB-APP
51 |
40 | }
41 | }
42 |
43 | var CanvasJSReact = {
44 | CanvasJSChart: CanvasJSChart,
45 | CanvasJS: CanvasJS
46 | };
47 |
48 | export default CanvasJSReact;
--------------------------------------------------------------------------------
/client/src/Components/Auth.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 |
3 | import GoogleButton from 'react-google-button'
4 | import TwitterLogin from "react-twitter-login";
5 |
6 | class Auth extends Component {
7 |
8 |
9 |
10 | render() {
11 | return (
12 |
13 |
14 |
15 |
16 |
17 |
Twitter Sentiment Visualizer
18 |
29 |
OR
30 |
39 |
40 |
41 |
42 | );
43 | }
44 | }
45 |
46 | export default Auth;
47 |
48 |
--------------------------------------------------------------------------------
/client/src/Components/Landing.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 |
3 | import CanvasJSReact from "../Assets/canvasjs.react";
4 | import PropTypes from 'prop-types';
5 | import { connect } from 'react-redux';
6 | import { getData,getUser } from '../other/actions/Action';
7 |
8 | var CanvasJS = CanvasJSReact.CanvasJS;
9 | var CanvasJSChart = CanvasJSReact.CanvasJSChart;
10 |
11 |
12 | class Landing extends Component {
13 | constructor(props) {
14 | super(props);
15 | this.state = {
16 | query: "",
17 |
18 | };
19 | }
20 | componentDidMount(){
21 | this.props.getUser();
22 | }
23 | onChange = e => {
24 | this.setState({ [e.target.id]: e.target.value });
25 | };
26 | onSubmit =(e) => {
27 |
28 | e.preventDefault();
29 | const queryData = {
30 | q: this.state.query,
31 |
32 | };
33 |
34 | this.props.getData(queryData);
35 | };
36 | renderChart = () => {
37 | const{twitter}=this.props.twitter;
38 | var score={"Very_Negative":0,"negative":0,"neutral":0,"positive":0,"Very_Positive":0}
39 |
40 |
41 | twitter.map((twitter) =>
42 |
43 | score={"Very_Negative":twitter.Very_negative,"Negative":twitter.negative,"Neutral":twitter.neutral,"Positive":twitter.positive,"Very_Positive":twitter.Very_positive}
44 |
45 |
46 |
47 | )
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | const options = {
57 | theme: "light2",
58 | animationEnabled: true,
59 | exportEnabled: true,
60 | title: {
61 | text: "Live tweet Visualization"
62 | },
63 | axisY: {
64 | title: "Number of tweets",
65 | includeZero: false,
66 | },
67 | axisX: {
68 | title: "Tweet Severity",
69 | includeZero: false,
70 |
71 | },
72 | data: [
73 | {
74 | type: "splineArea",
75 | showInLegend: true,
76 | dataPoints: [
77 |
78 | { label: "Very Negative", y:(score["Very_Negative"])},
79 | { label: "Negative", y: (score["Negative"])},
80 | { label: "Neutral", y:(score["Neutral"])},
81 | { label: "Positive", y: (score["Positive"])},
82 | { label: "Very Positive", y:(score["Very_Positive"])}
83 |
84 | ]
85 | }
86 | ]
87 |
88 | }
89 |
90 | if (this.props.twitter.isRetrieved) {
91 | return (
92 |
93 | {console.log(score)}
94 | this.chart = ref} */
96 | />
97 | {/*You can get reference to the chart instance as shown above using onRef. This allows you to access all chart properties and methods*/}
98 |
99 | );
100 | }
101 | return (
102 |
103 | GRAPHS WILL BE PLOTTED HERE
104 |
105 | );
106 |
107 | };
108 | renderTable = () => {
109 | const {twitter}=this.props.twitter;
110 | if (this.props.twitter.isRetrieved) {
111 | return (
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 | Tweet
120 | Score
121 | Sentiment
122 |
123 |
124 |
125 |
126 |
127 |
128 | {
129 | twitter.map((twitter)=>
130 |
131 | {twitter.tweet}
132 | {twitter.score}
133 | {twitter.sentiment}
134 |
135 |
136 |
137 | )}
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 | );
147 | }
148 | return (
149 |
150 | ALL TWEETS WILL BE DISPLAYED HERE
151 |
152 | );
153 | };
154 | renderLoader=() => {
155 | if (this.props.twitter.isLoading){
156 | return(
157 |
158 |
159 |
168 |
169 |
178 |
179 |
188 |
189 |
198 |
199 |
Fetching Tweets...
200 |
201 | )
202 | } else {
203 | return(
204 |
205 | )
206 | }
207 | };
208 | render() {
209 | const {user} =this.props.auth;
210 | return (
211 |
212 |
213 |
Twitter Sentiment Visualizer
214 |
Hey There ,{user.name}
215 |
Type in Any HashTag or Keyword and Click on the Submit Button to visualize your Twitter Data
216 |
To get this project just Fork the repo on my Github Page
217 |
253 |
254 | {this.renderChart()}
255 |
256 |
257 | {this.renderTable()}
258 |
259 |
260 | {this.renderLoader()}
261 |
262 |
263 | );
264 | }
265 | }
266 | Landing.propTypes={
267 | getData:PropTypes.func.isRequired,
268 | twitter:PropTypes.object.isRequired,
269 | errors:PropTypes.object.isRequired,
270 | auth:PropTypes.object.isRequired,
271 |
272 | };
273 |
274 | const mapStateToProps = state => ({
275 | twitter:state.twitter,
276 | errors:state.errors,
277 | auth:state.auth,
278 | });
279 | export default connect(mapStateToProps,
280 | {getData,getUser})
281 | (Landing)
282 |
283 |
--------------------------------------------------------------------------------
/client/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 | .photo {
15 | width: 200px;
16 | height: 200px;
17 | }
18 | .preloader-background {
19 | display: flex;
20 | align-items: center;
21 | justify-content: center;
22 | background-color: #eee;
23 | position: fixed;
24 | z-index: 999;
25 | top: 0;
26 | left: 0;
27 | right: 0;
28 | bottom: 0;
29 | p {
30 | padding-top:120px;
31 | margin-left: -60px;
32 | opacity: 0.8;
33 | }
34 | }
35 |
36 |
37 | .blinking {
38 | animation: blinker 0.5s linear infinite;
39 | }
40 | @keyframes blinker {
41 | 50% { opacity: 0; }
42 | }
--------------------------------------------------------------------------------
/client/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import * as serviceWorker from './serviceWorker';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want your app to work offline and load faster, you can change
15 | // unregister() to register() below. Note this comes with some pitfalls.
16 | // Learn more about service workers: https://bit.ly/CRA-PWA
17 | serviceWorker.unregister();
18 |
--------------------------------------------------------------------------------
/client/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/other/actions/Action.js:
--------------------------------------------------------------------------------
1 | import { LOADING_DATA, GET_TWITTER_DATA, GET_ERRORS, GET_USER } from "./ActionTypes";
2 | import axios from "axios";
3 |
4 |
5 | //FETCHING DATA FROM BACKEND
6 | export const getData = (queryData) => dispatch => {
7 | dispatch({
8 | type: LOADING_DATA,
9 |
10 | })
11 |
12 | axios.post("/analysis",queryData).then(res =>
13 | dispatch({
14 | type:GET_TWITTER_DATA ,
15 | payload: res.data
16 | })
17 | ).catch(err =>
18 | dispatch({
19 | type: GET_ERRORS,
20 | payload: err.response.data
21 | }));
22 | };
23 | //GET CURRENT USER
24 | export const getUser = () => dispatch => {
25 |
26 |
27 | axios.get("/current_user").then(res =>
28 | dispatch({
29 | type: GET_USER,
30 | payload: res.data
31 | })
32 | );
33 | };
--------------------------------------------------------------------------------
/client/src/other/actions/ActionTypes.js:
--------------------------------------------------------------------------------
1 | export const GET_TWITTER_DATA="GET_TWITTER_DATA";
2 | export const LOADING_DATA="LOADING_DATA";
3 | export const GET_ERRORS="GET_ERRORS";
4 | export const GET_USER="GET_USER";
--------------------------------------------------------------------------------
/client/src/other/reducers/authReducer.js:
--------------------------------------------------------------------------------
1 | import { GET_USER } from "../actions/ActionTypes";
2 |
3 | const INITIAL_STATE = {
4 | isAuthenticated:false,
5 | user:{},
6 | };
7 |
8 | export default (state = INITIAL_STATE, action) => {
9 | switch (action.type) {
10 | case GET_USER:
11 | return {...state,
12 | isAuthenticated:true,
13 | user:action.payload
14 | }
15 | default:
16 | return state
17 | }
18 | }
--------------------------------------------------------------------------------
/client/src/other/reducers/errorReducer.js:
--------------------------------------------------------------------------------
1 | import { GET_ERRORS } from "../actions/ActionTypes";
2 |
3 |
4 | const initialState = {};
5 |
6 | export default function(state = initialState,action) {
7 | switch (action.type){
8 | case GET_ERRORS:
9 | return action.payload
10 |
11 | default:
12 | return state;
13 | }
14 | }
--------------------------------------------------------------------------------
/client/src/other/reducers/index.js:
--------------------------------------------------------------------------------
1 | import { combineReducers } from 'redux';
2 | import twitterReducer from './twitterReducer';
3 | import errorReducer from './errorReducer';
4 | import authReducer from './authReducer';
5 |
6 | const rootReducer = combineReducers({
7 | twitter:twitterReducer,
8 | errors:errorReducer,
9 | auth:authReducer,
10 | });
11 |
12 | export default rootReducer
--------------------------------------------------------------------------------
/client/src/other/reducers/twitterReducer.js:
--------------------------------------------------------------------------------
1 | import { LOADING_DATA, GET_TWITTER_DATA } from "../actions/ActionTypes";
2 |
3 | const INITIAL_STATE = {
4 | isLoading:false,
5 | isRetrieved:false,
6 | twitter:[]
7 | };
8 |
9 | export default (state = INITIAL_STATE, action) => {
10 | switch (action.type) {
11 | case LOADING_DATA:
12 | return {...state,
13 | isLoading:true
14 | }
15 | case GET_TWITTER_DATA:
16 | return {...state,
17 | isLoading:false,
18 | isRetrieved:true,
19 | twitter:action.payload
20 | }
21 | default:
22 | return state
23 | }
24 | }
--------------------------------------------------------------------------------
/client/src/other/store.js:
--------------------------------------------------------------------------------
1 | import { createStore, applyMiddleware, compose } from "redux";
2 | import thunk from "redux-thunk";
3 | import rootReducer from "./reducers";
4 |
5 | const initialState = {};
6 |
7 | const middleware = [thunk];
8 |
9 | const store = createStore(
10 | rootReducer,
11 | initialState,
12 | compose(
13 | applyMiddleware(...middleware),
14 |
15 | )
16 | );
17 |
18 | export default store;
--------------------------------------------------------------------------------
/client/src/serviceWorker.js:
--------------------------------------------------------------------------------
1 | // This optional code is used to register a service worker.
2 | // register() is not called by default.
3 |
4 | // This lets the app load faster on subsequent visits in production, and gives
5 | // it offline capabilities. However, it also means that developers (and users)
6 | // will only see deployed updates on subsequent visits to a page, after all the
7 | // existing tabs open on the page have been closed, since previously cached
8 | // resources are updated in the background.
9 |
10 | // To learn more about the benefits of this model and instructions on how to
11 | // opt-in, read https://bit.ly/CRA-PWA
12 |
13 | const isLocalhost = Boolean(
14 | window.location.hostname === 'localhost' ||
15 | // [::1] is the IPv6 localhost address.
16 | window.location.hostname === '[::1]' ||
17 | // 127.0.0.0/8 are considered localhost for IPv4.
18 | window.location.hostname.match(
19 | /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
20 | )
21 | );
22 |
23 | export function register(config) {
24 | if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
25 | // The URL constructor is available in all browsers that support SW.
26 | const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);
27 | if (publicUrl.origin !== window.location.origin) {
28 | // Our service worker won't work if PUBLIC_URL is on a different origin
29 | // from what our page is served on. This might happen if a CDN is used to
30 | // serve assets; see https://github.com/facebook/create-react-app/issues/2374
31 | return;
32 | }
33 |
34 | window.addEventListener('load', () => {
35 | const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
36 |
37 | if (isLocalhost) {
38 | // This is running on localhost. Let's check if a service worker still exists or not.
39 | checkValidServiceWorker(swUrl, config);
40 |
41 | // Add some additional logging to localhost, pointing developers to the
42 | // service worker/PWA documentation.
43 | navigator.serviceWorker.ready.then(() => {
44 | console.log(
45 | 'This web app is being served cache-first by a service ' +
46 | 'worker. To learn more, visit https://bit.ly/CRA-PWA'
47 | );
48 | });
49 | } else {
50 | // Is not localhost. Just register service worker
51 | registerValidSW(swUrl, config);
52 | }
53 | });
54 | }
55 | }
56 |
57 | function registerValidSW(swUrl, config) {
58 | navigator.serviceWorker
59 | .register(swUrl)
60 | .then(registration => {
61 | registration.onupdatefound = () => {
62 | const installingWorker = registration.installing;
63 | if (installingWorker == null) {
64 | return;
65 | }
66 | installingWorker.onstatechange = () => {
67 | if (installingWorker.state === 'installed') {
68 | if (navigator.serviceWorker.controller) {
69 | // At this point, the updated precached content has been fetched,
70 | // but the previous service worker will still serve the older
71 | // content until all client tabs are closed.
72 | console.log(
73 | 'New content is available and will be used when all ' +
74 | 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'
75 | );
76 |
77 | // Execute callback
78 | if (config && config.onUpdate) {
79 | config.onUpdate(registration);
80 | }
81 | } else {
82 | // At this point, everything has been precached.
83 | // It's the perfect time to display a
84 | // "Content is cached for offline use." message.
85 | console.log('Content is cached for offline use.');
86 |
87 | // Execute callback
88 | if (config && config.onSuccess) {
89 | config.onSuccess(registration);
90 | }
91 | }
92 | }
93 | };
94 | };
95 | })
96 | .catch(error => {
97 | console.error('Error during service worker registration:', error);
98 | });
99 | }
100 |
101 | function checkValidServiceWorker(swUrl, config) {
102 | // Check if the service worker can be found. If it can't reload the page.
103 | fetch(swUrl, {
104 | headers: { 'Service-Worker': 'script' },
105 | })
106 | .then(response => {
107 | // Ensure service worker exists, and that we really are getting a JS file.
108 | const contentType = response.headers.get('content-type');
109 | if (
110 | response.status === 404 ||
111 | (contentType != null && contentType.indexOf('javascript') === -1)
112 | ) {
113 | // No service worker found. Probably a different app. Reload the page.
114 | navigator.serviceWorker.ready.then(registration => {
115 | registration.unregister().then(() => {
116 | window.location.reload();
117 | });
118 | });
119 | } else {
120 | // Service worker found. Proceed as normal.
121 | registerValidSW(swUrl, config);
122 | }
123 | })
124 | .catch(() => {
125 | console.log(
126 | 'No internet connection found. App is running in offline mode.'
127 | );
128 | });
129 | }
130 |
131 | export function unregister() {
132 | if ('serviceWorker' in navigator) {
133 | navigator.serviceWorker.ready
134 | .then(registration => {
135 | registration.unregister();
136 | })
137 | .catch(error => {
138 | console.error(error.message);
139 | });
140 | }
141 | }
142 |
--------------------------------------------------------------------------------
/client/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom/extend-expect';
6 |
--------------------------------------------------------------------------------
/config/keys.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | //TWTTER BOT AND OAUTH
3 |
4 | consumer_key:"",
5 | consumer_secret:"",
6 | access_token:"",
7 | access_token_secret:"",
8 |
9 | //MONGO KEY
10 |
11 | mongoURI:"",
12 |
13 | //COOKIE KEY
14 | cookie:"",
15 |
16 |
17 | //GOOGLE OAUTH KEYS
18 | clientID:"",
19 | clientSecret:""
20 | };
21 |
--------------------------------------------------------------------------------
/config/passport.js:
--------------------------------------------------------------------------------
1 | const passport = require("passport");
2 | const GoogleStrategy = require("passport-google-oauth20").Strategy;
3 | const keys = require("../config/keys.js");
4 | const mongoose = require("mongoose");
5 | const User = mongoose.model("users");
6 | const TwitterStrategy = require("passport-twitter").Strategy;
7 |
8 | //SESSION AUTHENTICATION
9 | passport.serializeUser(function(user, done) {
10 | done(null, user.id);
11 | });
12 |
13 | passport.deserializeUser(function(id, done) {
14 | User.findById(id, function (err, user) {
15 | done(err, user);
16 | });
17 | });
18 | //GOOGLE AUTHENTICATION
19 | passport.use(new GoogleStrategy({
20 | clientID: keys.clientID,
21 | clientSecret: keys.clientSecret,
22 | callbackURL: "/auth/google/callback",
23 | proxy:true,
24 | },
25 | function(accessToken, refreshToken, profile, done) {
26 | console.log(profile);
27 | User.findOne({ googleId: profile.id }).then(existingUser => {
28 | if (existingUser) {
29 | done(null, existingUser);
30 | } else {
31 | new User({
32 | googleId: profile.id,
33 | name: profile.displayName,
34 | email: profile.emails[0].value,
35 | photo: profile.photos[0].value.split("?")[0]
36 | })
37 | .save()
38 | .then(user => done(null, user));
39 | }
40 | });
41 | }
42 | ));
43 | //TWITTER OAUTH AUTHENTICATION
44 | passport.use(new TwitterStrategy({
45 | consumerKey: keys.consumer_key,
46 | consumerSecret: keys.consumer_secret,
47 | callbackURL: "http://localhost:5000/auth/twitter/callback"
48 | },
49 | function(token, tokenSecret, profile, done) {
50 | console.log(profile)
51 | User.findOne({ twitterId: profile.id }).then(existingUser => {
52 | if (existingUser) {
53 | done(null, existingUser);
54 | } else {
55 | new User({
56 | twitterId: profile.id,
57 | name: profile.displayName,
58 | photo: profile.photos[0].value,
59 |
60 | })
61 | .save()
62 | .then(user => done(null, user));
63 | }
64 | });
65 |
66 | }
67 | ));
68 |
69 |
--------------------------------------------------------------------------------
/controller/Api.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const Twit = require('twit');
3 | const keys=require("../config/keys");
4 | const Sentiment= require('sentiment');
5 | const User = require("../model/User");
6 | const passport = require("passport");
7 |
8 | const bot =new Twit(keys);
9 | const sentiment =new Sentiment();
10 | const app = express();
11 |
12 | module.exports= app=> {
13 | //GOOGLE OAUTH
14 | app.get('/auth/google',
15 | passport.authenticate('google', { scope: ['profile','email'] }));
16 |
17 | app.get('/auth/google/callback',
18 | passport.authenticate('google', { failureRedirect: '/success' }),
19 | function(req, res) {
20 | // Successful authentication, redirect to Analyze.
21 | res.redirect('http://localhost:3000/analyze');
22 | });
23 | //TWITTER OAUTH
24 | app.get('/auth/twitter',
25 | passport.authenticate('twitter'));
26 |
27 | app.get('/auth/twitter/callback',
28 | passport.authenticate('twitter', { failureRedirect: '/success' }),
29 | function(req, res) {
30 | // Successful authentication, redirect home.
31 | res.redirect('http://localhost:3000/analyze');
32 |
33 | });
34 | //GET USER DETAILS
35 | app.get('/current_user', (req, res) => {
36 | res.send(req.user);
37 | });
38 | //GET TWEETS
39 |
40 | app.post('/analysis', (req, res) => {
41 | var Twitterdata=[];
42 | var tweet_sentiment="";
43 | var OverallScore={"Very_negative":0,"negative":0,"neutral":0,"positive":0,"Very_positive":0}
44 | bot.get("/search/tweets",{q:'#'+req.body.q,lang:"en",count:1000}, (err, data, response) => {
45 |
46 | const tweet=data.statuses;
47 |
48 | if (!err) {
49 | for (const eachTweet of tweet) {
50 | const result=sentiment.analyze(eachTweet.text)
51 |
52 |
53 | if (result.score <-4) {
54 | tweet_sentiment="Very negative"
55 | OverallScore["Very_negative"]+=1
56 | }
57 | if (result.score >=-3 && result.score<0){
58 | tweet_sentiment="negative"
59 | OverallScore["negative"]+=1
60 | }
61 | if (result.score == 0){
62 | tweet_sentiment="neutral"
63 | OverallScore["neutral"]+=1
64 | }
65 | if (result.score > 0 && result.score <=3){
66 | tweet_sentiment="positive"
67 | OverallScore["positive"]+=1
68 | }
69 | if (result.score >3 ){
70 | tweet_sentiment="Very positive"
71 | OverallScore["Very_positive"]+=1
72 | } console.log(eachTweet.text,result)
73 |
74 | Twitterdata.push({
75 | id:eachTweet.id,
76 | tweet:eachTweet.text,
77 | score:result.score,
78 | sentiment:tweet_sentiment
79 | })
80 |
81 |
82 |
83 | }
84 | Twitterdata.push(OverallScore)
85 | console.log(OverallScore);
86 | return res.status(200).json(Twitterdata);
87 |
88 |
89 | } else {
90 | console.log("OOps")
91 | res.send("OUR BOT IS DOWN PLEASE RESTORE YOUR INTERNET")
92 | }
93 | })
94 |
95 | });
96 |
97 | };
98 |
--------------------------------------------------------------------------------
/model/User.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const Schema = mongoose.Schema;
3 |
4 | const UserSchema = new Schema({
5 | googleId: {
6 | type: String,
7 |
8 | } ,
9 | photo: {
10 | type: String,
11 |
12 | },
13 | name: {
14 | type: String,
15 |
16 | },
17 | email: {
18 | type: String,
19 |
20 | },
21 | twitterId: {
22 | type: String,
23 |
24 | },
25 | });
26 |
27 | module.exports = User = mongoose.model("users", UserSchema);
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sentiment_visualizing",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@sindresorhus/is": {
8 | "version": "0.14.0",
9 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
10 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
11 | },
12 | "@szmarczak/http-timer": {
13 | "version": "1.1.2",
14 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
15 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
16 | "requires": {
17 | "defer-to-connect": "^1.0.1"
18 | }
19 | },
20 | "@types/bson": {
21 | "version": "4.0.3",
22 | "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.3.tgz",
23 | "integrity": "sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw==",
24 | "requires": {
25 | "@types/node": "*"
26 | }
27 | },
28 | "@types/mongodb": {
29 | "version": "3.6.0",
30 | "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.0.tgz",
31 | "integrity": "sha512-5PGiTXS/tvvllyyD+LJt3bVyJixrY/ZIIJwsINnZorvJsN6gki4NH7Fhcep4MZF8HNCKNv2oWguysocS1jt9dw==",
32 | "requires": {
33 | "@types/bson": "*",
34 | "@types/node": "*"
35 | }
36 | },
37 | "@types/node": {
38 | "version": "14.14.10",
39 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
40 | "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ=="
41 | },
42 | "@vitalets/google-translate-api": {
43 | "version": "7.0.0",
44 | "resolved": "https://registry.npmjs.org/@vitalets/google-translate-api/-/google-translate-api-7.0.0.tgz",
45 | "integrity": "sha512-zuKF+jG0EhFzRU/QAyHgTVzIDhrv5zDUmQWy7umwZryMbG8H0jK4fdMGrgla5AhQGU8ViiDWi/xbxNCKK7KHYA==",
46 | "requires": {
47 | "configstore": "^5.0.1",
48 | "got": "^9.6.0"
49 | }
50 | },
51 | "abbrev": {
52 | "version": "1.1.1",
53 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
54 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
55 | "dev": true
56 | },
57 | "accepts": {
58 | "version": "1.3.7",
59 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
60 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
61 | "requires": {
62 | "mime-types": "~2.1.24",
63 | "negotiator": "0.6.2"
64 | }
65 | },
66 | "ajv": {
67 | "version": "6.12.2",
68 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
69 | "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
70 | "requires": {
71 | "fast-deep-equal": "^3.1.1",
72 | "fast-json-stable-stringify": "^2.0.0",
73 | "json-schema-traverse": "^0.4.1",
74 | "uri-js": "^4.2.2"
75 | }
76 | },
77 | "ansi-align": {
78 | "version": "3.0.0",
79 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
80 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
81 | "dev": true,
82 | "requires": {
83 | "string-width": "^3.0.0"
84 | },
85 | "dependencies": {
86 | "string-width": {
87 | "version": "3.1.0",
88 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
89 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
90 | "dev": true,
91 | "requires": {
92 | "emoji-regex": "^7.0.1",
93 | "is-fullwidth-code-point": "^2.0.0",
94 | "strip-ansi": "^5.1.0"
95 | }
96 | }
97 | }
98 | },
99 | "ansi-regex": {
100 | "version": "4.1.0",
101 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
102 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
103 | },
104 | "ansi-styles": {
105 | "version": "4.3.0",
106 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
107 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
108 | "dev": true,
109 | "requires": {
110 | "color-convert": "^2.0.1"
111 | }
112 | },
113 | "anymatch": {
114 | "version": "3.1.1",
115 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
116 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
117 | "dev": true,
118 | "requires": {
119 | "normalize-path": "^3.0.0",
120 | "picomatch": "^2.0.4"
121 | }
122 | },
123 | "array-flatten": {
124 | "version": "1.1.1",
125 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
126 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
127 | },
128 | "asn1": {
129 | "version": "0.2.4",
130 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
131 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
132 | "requires": {
133 | "safer-buffer": "~2.1.0"
134 | }
135 | },
136 | "assert-plus": {
137 | "version": "1.0.0",
138 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
139 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
140 | },
141 | "async": {
142 | "version": "3.1.0",
143 | "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz",
144 | "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ=="
145 | },
146 | "asynckit": {
147 | "version": "0.4.0",
148 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
149 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
150 | },
151 | "aws-sign2": {
152 | "version": "0.7.0",
153 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
154 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
155 | },
156 | "aws4": {
157 | "version": "1.10.0",
158 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz",
159 | "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
160 | },
161 | "balanced-match": {
162 | "version": "1.0.0",
163 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
164 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
165 | "dev": true
166 | },
167 | "base64url": {
168 | "version": "3.0.1",
169 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz",
170 | "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A=="
171 | },
172 | "bcrypt-pbkdf": {
173 | "version": "1.0.2",
174 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
175 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
176 | "requires": {
177 | "tweetnacl": "^0.14.3"
178 | }
179 | },
180 | "binary-extensions": {
181 | "version": "2.1.0",
182 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
183 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
184 | "dev": true
185 | },
186 | "bl": {
187 | "version": "2.2.1",
188 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
189 | "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
190 | "requires": {
191 | "readable-stream": "^2.3.5",
192 | "safe-buffer": "^5.1.1"
193 | }
194 | },
195 | "bluebird": {
196 | "version": "3.7.2",
197 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
198 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
199 | },
200 | "body-parser": {
201 | "version": "1.19.0",
202 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
203 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
204 | "requires": {
205 | "bytes": "3.1.0",
206 | "content-type": "~1.0.4",
207 | "debug": "2.6.9",
208 | "depd": "~1.1.2",
209 | "http-errors": "1.7.2",
210 | "iconv-lite": "0.4.24",
211 | "on-finished": "~2.3.0",
212 | "qs": "6.7.0",
213 | "raw-body": "2.4.0",
214 | "type-is": "~1.6.17"
215 | },
216 | "dependencies": {
217 | "qs": {
218 | "version": "6.7.0",
219 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
220 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
221 | }
222 | }
223 | },
224 | "boxen": {
225 | "version": "4.2.0",
226 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
227 | "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
228 | "dev": true,
229 | "requires": {
230 | "ansi-align": "^3.0.0",
231 | "camelcase": "^5.3.1",
232 | "chalk": "^3.0.0",
233 | "cli-boxes": "^2.2.0",
234 | "string-width": "^4.1.0",
235 | "term-size": "^2.1.0",
236 | "type-fest": "^0.8.1",
237 | "widest-line": "^3.1.0"
238 | }
239 | },
240 | "brace-expansion": {
241 | "version": "1.1.11",
242 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
243 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
244 | "dev": true,
245 | "requires": {
246 | "balanced-match": "^1.0.0",
247 | "concat-map": "0.0.1"
248 | }
249 | },
250 | "braces": {
251 | "version": "3.0.2",
252 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
253 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
254 | "dev": true,
255 | "requires": {
256 | "fill-range": "^7.0.1"
257 | }
258 | },
259 | "bson": {
260 | "version": "1.1.5",
261 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
262 | "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
263 | },
264 | "bytes": {
265 | "version": "3.1.0",
266 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
267 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
268 | },
269 | "cacheable-request": {
270 | "version": "6.1.0",
271 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
272 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
273 | "requires": {
274 | "clone-response": "^1.0.2",
275 | "get-stream": "^5.1.0",
276 | "http-cache-semantics": "^4.0.0",
277 | "keyv": "^3.0.0",
278 | "lowercase-keys": "^2.0.0",
279 | "normalize-url": "^4.1.0",
280 | "responselike": "^1.0.2"
281 | },
282 | "dependencies": {
283 | "get-stream": {
284 | "version": "5.1.0",
285 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
286 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
287 | "requires": {
288 | "pump": "^3.0.0"
289 | }
290 | },
291 | "lowercase-keys": {
292 | "version": "2.0.0",
293 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
294 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
295 | }
296 | }
297 | },
298 | "camelcase": {
299 | "version": "5.3.1",
300 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
301 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
302 | },
303 | "caseless": {
304 | "version": "0.12.0",
305 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
306 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
307 | },
308 | "chalk": {
309 | "version": "3.0.0",
310 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
311 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
312 | "dev": true,
313 | "requires": {
314 | "ansi-styles": "^4.1.0",
315 | "supports-color": "^7.1.0"
316 | },
317 | "dependencies": {
318 | "has-flag": {
319 | "version": "4.0.0",
320 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
321 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
322 | "dev": true
323 | },
324 | "supports-color": {
325 | "version": "7.2.0",
326 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
327 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
328 | "dev": true,
329 | "requires": {
330 | "has-flag": "^4.0.0"
331 | }
332 | }
333 | }
334 | },
335 | "chokidar": {
336 | "version": "3.4.3",
337 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
338 | "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
339 | "dev": true,
340 | "requires": {
341 | "anymatch": "~3.1.1",
342 | "braces": "~3.0.2",
343 | "fsevents": "~2.1.2",
344 | "glob-parent": "~5.1.0",
345 | "is-binary-path": "~2.1.0",
346 | "is-glob": "~4.0.1",
347 | "normalize-path": "~3.0.0",
348 | "readdirp": "~3.5.0"
349 | }
350 | },
351 | "ci-info": {
352 | "version": "2.0.0",
353 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
354 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
355 | "dev": true
356 | },
357 | "cli-boxes": {
358 | "version": "2.2.1",
359 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
360 | "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
361 | "dev": true
362 | },
363 | "cliui": {
364 | "version": "5.0.0",
365 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
366 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
367 | "requires": {
368 | "string-width": "^3.1.0",
369 | "strip-ansi": "^5.2.0",
370 | "wrap-ansi": "^5.1.0"
371 | },
372 | "dependencies": {
373 | "string-width": {
374 | "version": "3.1.0",
375 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
376 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
377 | "requires": {
378 | "emoji-regex": "^7.0.1",
379 | "is-fullwidth-code-point": "^2.0.0",
380 | "strip-ansi": "^5.1.0"
381 | }
382 | }
383 | }
384 | },
385 | "clone-response": {
386 | "version": "1.0.2",
387 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
388 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
389 | "requires": {
390 | "mimic-response": "^1.0.0"
391 | }
392 | },
393 | "color-convert": {
394 | "version": "2.0.1",
395 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
396 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
397 | "dev": true,
398 | "requires": {
399 | "color-name": "~1.1.4"
400 | }
401 | },
402 | "color-name": {
403 | "version": "1.1.4",
404 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
405 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
406 | "dev": true
407 | },
408 | "combined-stream": {
409 | "version": "1.0.8",
410 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
411 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
412 | "requires": {
413 | "delayed-stream": "~1.0.0"
414 | }
415 | },
416 | "concat-map": {
417 | "version": "0.0.1",
418 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
419 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
420 | "dev": true
421 | },
422 | "concurrently": {
423 | "version": "5.3.0",
424 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz",
425 | "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==",
426 | "requires": {
427 | "chalk": "^2.4.2",
428 | "date-fns": "^2.0.1",
429 | "lodash": "^4.17.15",
430 | "read-pkg": "^4.0.1",
431 | "rxjs": "^6.5.2",
432 | "spawn-command": "^0.0.2-1",
433 | "supports-color": "^6.1.0",
434 | "tree-kill": "^1.2.2",
435 | "yargs": "^13.3.0"
436 | },
437 | "dependencies": {
438 | "ansi-styles": {
439 | "version": "3.2.1",
440 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
441 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
442 | "requires": {
443 | "color-convert": "^1.9.0"
444 | }
445 | },
446 | "chalk": {
447 | "version": "2.4.2",
448 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
449 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
450 | "requires": {
451 | "ansi-styles": "^3.2.1",
452 | "escape-string-regexp": "^1.0.5",
453 | "supports-color": "^5.3.0"
454 | },
455 | "dependencies": {
456 | "supports-color": {
457 | "version": "5.5.0",
458 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
459 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
460 | "requires": {
461 | "has-flag": "^3.0.0"
462 | }
463 | }
464 | }
465 | },
466 | "color-convert": {
467 | "version": "1.9.3",
468 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
469 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
470 | "requires": {
471 | "color-name": "1.1.3"
472 | }
473 | },
474 | "color-name": {
475 | "version": "1.1.3",
476 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
477 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
478 | },
479 | "supports-color": {
480 | "version": "6.1.0",
481 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
482 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
483 | "requires": {
484 | "has-flag": "^3.0.0"
485 | }
486 | }
487 | }
488 | },
489 | "configstore": {
490 | "version": "5.0.1",
491 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
492 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
493 | "requires": {
494 | "dot-prop": "^5.2.0",
495 | "graceful-fs": "^4.1.2",
496 | "make-dir": "^3.0.0",
497 | "unique-string": "^2.0.0",
498 | "write-file-atomic": "^3.0.0",
499 | "xdg-basedir": "^4.0.0"
500 | }
501 | },
502 | "content-disposition": {
503 | "version": "0.5.3",
504 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
505 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
506 | "requires": {
507 | "safe-buffer": "5.1.2"
508 | },
509 | "dependencies": {
510 | "safe-buffer": {
511 | "version": "5.1.2",
512 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
513 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
514 | }
515 | }
516 | },
517 | "content-type": {
518 | "version": "1.0.4",
519 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
520 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
521 | },
522 | "cookie": {
523 | "version": "0.4.0",
524 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
525 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
526 | },
527 | "cookie-session": {
528 | "version": "1.4.0",
529 | "resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-1.4.0.tgz",
530 | "integrity": "sha512-0hhwD+BUIwMXQraiZP/J7VP2YFzqo6g4WqZlWHtEHQ22t0MeZZrNBSCxC1zcaLAs8ApT3BzAKizx9gW/AP9vNA==",
531 | "requires": {
532 | "cookies": "0.8.0",
533 | "debug": "2.6.9",
534 | "on-headers": "~1.0.2"
535 | }
536 | },
537 | "cookie-signature": {
538 | "version": "1.0.6",
539 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
540 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
541 | },
542 | "cookies": {
543 | "version": "0.8.0",
544 | "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz",
545 | "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==",
546 | "requires": {
547 | "depd": "~2.0.0",
548 | "keygrip": "~1.1.0"
549 | },
550 | "dependencies": {
551 | "depd": {
552 | "version": "2.0.0",
553 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
554 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
555 | }
556 | }
557 | },
558 | "core-util-is": {
559 | "version": "1.0.2",
560 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
561 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
562 | },
563 | "crypto-random-string": {
564 | "version": "2.0.0",
565 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
566 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="
567 | },
568 | "dashdash": {
569 | "version": "1.14.1",
570 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
571 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
572 | "requires": {
573 | "assert-plus": "^1.0.0"
574 | }
575 | },
576 | "date-fns": {
577 | "version": "2.16.1",
578 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz",
579 | "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ=="
580 | },
581 | "debug": {
582 | "version": "2.6.9",
583 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
584 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
585 | "requires": {
586 | "ms": "2.0.0"
587 | }
588 | },
589 | "decamelize": {
590 | "version": "1.2.0",
591 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
592 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
593 | },
594 | "decompress-response": {
595 | "version": "3.3.0",
596 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
597 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
598 | "requires": {
599 | "mimic-response": "^1.0.0"
600 | }
601 | },
602 | "deep-extend": {
603 | "version": "0.6.0",
604 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
605 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
606 | "dev": true
607 | },
608 | "defer-to-connect": {
609 | "version": "1.1.3",
610 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
611 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
612 | },
613 | "delayed-stream": {
614 | "version": "1.0.0",
615 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
616 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
617 | },
618 | "denque": {
619 | "version": "1.4.1",
620 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
621 | "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
622 | },
623 | "depd": {
624 | "version": "1.1.2",
625 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
626 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
627 | },
628 | "destroy": {
629 | "version": "1.0.4",
630 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
631 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
632 | },
633 | "dot-prop": {
634 | "version": "5.2.0",
635 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
636 | "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
637 | "requires": {
638 | "is-obj": "^2.0.0"
639 | }
640 | },
641 | "duplexer3": {
642 | "version": "0.1.4",
643 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
644 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
645 | },
646 | "ecc-jsbn": {
647 | "version": "0.1.2",
648 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
649 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
650 | "requires": {
651 | "jsbn": "~0.1.0",
652 | "safer-buffer": "^2.1.0"
653 | }
654 | },
655 | "ee-first": {
656 | "version": "1.1.1",
657 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
658 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
659 | },
660 | "emoji-regex": {
661 | "version": "7.0.3",
662 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
663 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
664 | },
665 | "encodeurl": {
666 | "version": "1.0.2",
667 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
668 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
669 | },
670 | "end-of-stream": {
671 | "version": "1.4.4",
672 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
673 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
674 | "requires": {
675 | "once": "^1.4.0"
676 | }
677 | },
678 | "error-ex": {
679 | "version": "1.3.2",
680 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
681 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
682 | "requires": {
683 | "is-arrayish": "^0.2.1"
684 | }
685 | },
686 | "escape-goat": {
687 | "version": "2.1.1",
688 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
689 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
690 | "dev": true
691 | },
692 | "escape-html": {
693 | "version": "1.0.3",
694 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
695 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
696 | },
697 | "escape-string-regexp": {
698 | "version": "1.0.5",
699 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
700 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
701 | },
702 | "etag": {
703 | "version": "1.8.1",
704 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
705 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
706 | },
707 | "express": {
708 | "version": "4.17.1",
709 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
710 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
711 | "requires": {
712 | "accepts": "~1.3.7",
713 | "array-flatten": "1.1.1",
714 | "body-parser": "1.19.0",
715 | "content-disposition": "0.5.3",
716 | "content-type": "~1.0.4",
717 | "cookie": "0.4.0",
718 | "cookie-signature": "1.0.6",
719 | "debug": "2.6.9",
720 | "depd": "~1.1.2",
721 | "encodeurl": "~1.0.2",
722 | "escape-html": "~1.0.3",
723 | "etag": "~1.8.1",
724 | "finalhandler": "~1.1.2",
725 | "fresh": "0.5.2",
726 | "merge-descriptors": "1.0.1",
727 | "methods": "~1.1.2",
728 | "on-finished": "~2.3.0",
729 | "parseurl": "~1.3.3",
730 | "path-to-regexp": "0.1.7",
731 | "proxy-addr": "~2.0.5",
732 | "qs": "6.7.0",
733 | "range-parser": "~1.2.1",
734 | "safe-buffer": "5.1.2",
735 | "send": "0.17.1",
736 | "serve-static": "1.14.1",
737 | "setprototypeof": "1.1.1",
738 | "statuses": "~1.5.0",
739 | "type-is": "~1.6.18",
740 | "utils-merge": "1.0.1",
741 | "vary": "~1.1.2"
742 | },
743 | "dependencies": {
744 | "qs": {
745 | "version": "6.7.0",
746 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
747 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
748 | },
749 | "safe-buffer": {
750 | "version": "5.1.2",
751 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
752 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
753 | }
754 | }
755 | },
756 | "extend": {
757 | "version": "3.0.2",
758 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
759 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
760 | },
761 | "extsprintf": {
762 | "version": "1.3.0",
763 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
764 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
765 | },
766 | "fast-deep-equal": {
767 | "version": "3.1.3",
768 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
769 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
770 | },
771 | "fast-json-stable-stringify": {
772 | "version": "2.1.0",
773 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
774 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
775 | },
776 | "fill-range": {
777 | "version": "7.0.1",
778 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
779 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
780 | "dev": true,
781 | "requires": {
782 | "to-regex-range": "^5.0.1"
783 | }
784 | },
785 | "finalhandler": {
786 | "version": "1.1.2",
787 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
788 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
789 | "requires": {
790 | "debug": "2.6.9",
791 | "encodeurl": "~1.0.2",
792 | "escape-html": "~1.0.3",
793 | "on-finished": "~2.3.0",
794 | "parseurl": "~1.3.3",
795 | "statuses": "~1.5.0",
796 | "unpipe": "~1.0.0"
797 | }
798 | },
799 | "find-up": {
800 | "version": "3.0.0",
801 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
802 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
803 | "requires": {
804 | "locate-path": "^3.0.0"
805 | }
806 | },
807 | "forever-agent": {
808 | "version": "0.6.1",
809 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
810 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
811 | },
812 | "form-data": {
813 | "version": "2.3.3",
814 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
815 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
816 | "requires": {
817 | "asynckit": "^0.4.0",
818 | "combined-stream": "^1.0.6",
819 | "mime-types": "^2.1.12"
820 | }
821 | },
822 | "forwarded": {
823 | "version": "0.1.2",
824 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
825 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
826 | },
827 | "fresh": {
828 | "version": "0.5.2",
829 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
830 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
831 | },
832 | "fs": {
833 | "version": "0.0.2",
834 | "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.2.tgz",
835 | "integrity": "sha1-4fJE7zkzwbKmS9R5kTYGDQ9ZFPg="
836 | },
837 | "fsevents": {
838 | "version": "2.1.3",
839 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
840 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
841 | "dev": true,
842 | "optional": true
843 | },
844 | "get-caller-file": {
845 | "version": "2.0.5",
846 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
847 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
848 | },
849 | "get-stream": {
850 | "version": "4.1.0",
851 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
852 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
853 | "requires": {
854 | "pump": "^3.0.0"
855 | }
856 | },
857 | "getpass": {
858 | "version": "0.1.7",
859 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
860 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
861 | "requires": {
862 | "assert-plus": "^1.0.0"
863 | }
864 | },
865 | "glob-parent": {
866 | "version": "5.1.1",
867 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
868 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
869 | "dev": true,
870 | "requires": {
871 | "is-glob": "^4.0.1"
872 | }
873 | },
874 | "global-dirs": {
875 | "version": "2.0.1",
876 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz",
877 | "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==",
878 | "dev": true,
879 | "requires": {
880 | "ini": "^1.3.5"
881 | }
882 | },
883 | "google-translate": {
884 | "version": "3.0.0",
885 | "resolved": "https://registry.npmjs.org/google-translate/-/google-translate-3.0.0.tgz",
886 | "integrity": "sha512-NQrP9gnFBO9LpEAN7Ia4kiyycbubqG+vdmxhQE5hjhAeU6U2n1vM7Kb1wtI3YU7Ghk3+bdfiRiAr6Zhox/UV2w==",
887 | "requires": {
888 | "async": "3.1.0",
889 | "he": "1.2.0",
890 | "request": "2.88.0",
891 | "underscore": "1.9.1"
892 | },
893 | "dependencies": {
894 | "punycode": {
895 | "version": "1.4.1",
896 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
897 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
898 | },
899 | "request": {
900 | "version": "2.88.0",
901 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
902 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
903 | "requires": {
904 | "aws-sign2": "~0.7.0",
905 | "aws4": "^1.8.0",
906 | "caseless": "~0.12.0",
907 | "combined-stream": "~1.0.6",
908 | "extend": "~3.0.2",
909 | "forever-agent": "~0.6.1",
910 | "form-data": "~2.3.2",
911 | "har-validator": "~5.1.0",
912 | "http-signature": "~1.2.0",
913 | "is-typedarray": "~1.0.0",
914 | "isstream": "~0.1.2",
915 | "json-stringify-safe": "~5.0.1",
916 | "mime-types": "~2.1.19",
917 | "oauth-sign": "~0.9.0",
918 | "performance-now": "^2.1.0",
919 | "qs": "~6.5.2",
920 | "safe-buffer": "^5.1.2",
921 | "tough-cookie": "~2.4.3",
922 | "tunnel-agent": "^0.6.0",
923 | "uuid": "^3.3.2"
924 | }
925 | },
926 | "tough-cookie": {
927 | "version": "2.4.3",
928 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
929 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
930 | "requires": {
931 | "psl": "^1.1.24",
932 | "punycode": "^1.4.1"
933 | }
934 | }
935 | }
936 | },
937 | "got": {
938 | "version": "9.6.0",
939 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
940 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
941 | "requires": {
942 | "@sindresorhus/is": "^0.14.0",
943 | "@szmarczak/http-timer": "^1.1.2",
944 | "cacheable-request": "^6.0.0",
945 | "decompress-response": "^3.3.0",
946 | "duplexer3": "^0.1.4",
947 | "get-stream": "^4.1.0",
948 | "lowercase-keys": "^1.0.1",
949 | "mimic-response": "^1.0.1",
950 | "p-cancelable": "^1.0.0",
951 | "to-readable-stream": "^1.0.0",
952 | "url-parse-lax": "^3.0.0"
953 | }
954 | },
955 | "graceful-fs": {
956 | "version": "4.2.4",
957 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
958 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
959 | },
960 | "har-schema": {
961 | "version": "2.0.0",
962 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
963 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
964 | },
965 | "har-validator": {
966 | "version": "5.1.3",
967 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
968 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
969 | "requires": {
970 | "ajv": "^6.5.5",
971 | "har-schema": "^2.0.0"
972 | }
973 | },
974 | "has-flag": {
975 | "version": "3.0.0",
976 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
977 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
978 | },
979 | "has-yarn": {
980 | "version": "2.1.0",
981 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
982 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
983 | "dev": true
984 | },
985 | "he": {
986 | "version": "1.2.0",
987 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
988 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
989 | },
990 | "hosted-git-info": {
991 | "version": "2.8.8",
992 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
993 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
994 | },
995 | "http-cache-semantics": {
996 | "version": "4.1.0",
997 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
998 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
999 | },
1000 | "http-errors": {
1001 | "version": "1.7.2",
1002 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1003 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1004 | "requires": {
1005 | "depd": "~1.1.2",
1006 | "inherits": "2.0.3",
1007 | "setprototypeof": "1.1.1",
1008 | "statuses": ">= 1.5.0 < 2",
1009 | "toidentifier": "1.0.0"
1010 | }
1011 | },
1012 | "http-signature": {
1013 | "version": "1.2.0",
1014 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1015 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1016 | "requires": {
1017 | "assert-plus": "^1.0.0",
1018 | "jsprim": "^1.2.2",
1019 | "sshpk": "^1.7.0"
1020 | }
1021 | },
1022 | "iconv-lite": {
1023 | "version": "0.4.24",
1024 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1025 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1026 | "requires": {
1027 | "safer-buffer": ">= 2.1.2 < 3"
1028 | }
1029 | },
1030 | "ignore-by-default": {
1031 | "version": "1.0.1",
1032 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
1033 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
1034 | "dev": true
1035 | },
1036 | "import-lazy": {
1037 | "version": "2.1.0",
1038 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
1039 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
1040 | "dev": true
1041 | },
1042 | "imurmurhash": {
1043 | "version": "0.1.4",
1044 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1045 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
1046 | },
1047 | "inherits": {
1048 | "version": "2.0.3",
1049 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1050 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1051 | },
1052 | "ini": {
1053 | "version": "1.3.8",
1054 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
1055 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
1056 | "dev": true
1057 | },
1058 | "ipaddr.js": {
1059 | "version": "1.9.1",
1060 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1061 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1062 | },
1063 | "is-arrayish": {
1064 | "version": "0.2.1",
1065 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1066 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
1067 | },
1068 | "is-binary-path": {
1069 | "version": "2.1.0",
1070 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1071 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1072 | "dev": true,
1073 | "requires": {
1074 | "binary-extensions": "^2.0.0"
1075 | }
1076 | },
1077 | "is-ci": {
1078 | "version": "2.0.0",
1079 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
1080 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
1081 | "dev": true,
1082 | "requires": {
1083 | "ci-info": "^2.0.0"
1084 | }
1085 | },
1086 | "is-extglob": {
1087 | "version": "2.1.1",
1088 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1089 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1090 | "dev": true
1091 | },
1092 | "is-fullwidth-code-point": {
1093 | "version": "2.0.0",
1094 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1095 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
1096 | },
1097 | "is-glob": {
1098 | "version": "4.0.1",
1099 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1100 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1101 | "dev": true,
1102 | "requires": {
1103 | "is-extglob": "^2.1.1"
1104 | }
1105 | },
1106 | "is-installed-globally": {
1107 | "version": "0.3.2",
1108 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
1109 | "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
1110 | "dev": true,
1111 | "requires": {
1112 | "global-dirs": "^2.0.1",
1113 | "is-path-inside": "^3.0.1"
1114 | }
1115 | },
1116 | "is-npm": {
1117 | "version": "4.0.0",
1118 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
1119 | "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
1120 | "dev": true
1121 | },
1122 | "is-number": {
1123 | "version": "7.0.0",
1124 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1125 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1126 | "dev": true
1127 | },
1128 | "is-obj": {
1129 | "version": "2.0.0",
1130 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
1131 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
1132 | },
1133 | "is-path-inside": {
1134 | "version": "3.0.2",
1135 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
1136 | "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
1137 | "dev": true
1138 | },
1139 | "is-typedarray": {
1140 | "version": "1.0.0",
1141 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1142 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
1143 | },
1144 | "is-yarn-global": {
1145 | "version": "0.3.0",
1146 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
1147 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
1148 | "dev": true
1149 | },
1150 | "isarray": {
1151 | "version": "1.0.0",
1152 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1153 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1154 | },
1155 | "isstream": {
1156 | "version": "0.1.2",
1157 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1158 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
1159 | },
1160 | "jsbn": {
1161 | "version": "0.1.1",
1162 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1163 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
1164 | },
1165 | "json-buffer": {
1166 | "version": "3.0.0",
1167 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
1168 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
1169 | },
1170 | "json-parse-better-errors": {
1171 | "version": "1.0.2",
1172 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1173 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
1174 | },
1175 | "json-schema": {
1176 | "version": "0.2.3",
1177 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
1178 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
1179 | },
1180 | "json-schema-traverse": {
1181 | "version": "0.4.1",
1182 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1183 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
1184 | },
1185 | "json-stringify-safe": {
1186 | "version": "5.0.1",
1187 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1188 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
1189 | },
1190 | "jsprim": {
1191 | "version": "1.4.1",
1192 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1193 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1194 | "requires": {
1195 | "assert-plus": "1.0.0",
1196 | "extsprintf": "1.3.0",
1197 | "json-schema": "0.2.3",
1198 | "verror": "1.10.0"
1199 | }
1200 | },
1201 | "kareem": {
1202 | "version": "2.3.1",
1203 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
1204 | "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw=="
1205 | },
1206 | "keygrip": {
1207 | "version": "1.1.0",
1208 | "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz",
1209 | "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==",
1210 | "requires": {
1211 | "tsscmp": "1.0.6"
1212 | }
1213 | },
1214 | "keyv": {
1215 | "version": "3.1.0",
1216 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
1217 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
1218 | "requires": {
1219 | "json-buffer": "3.0.0"
1220 | }
1221 | },
1222 | "latest-version": {
1223 | "version": "5.1.0",
1224 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
1225 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
1226 | "dev": true,
1227 | "requires": {
1228 | "package-json": "^6.3.0"
1229 | }
1230 | },
1231 | "locate-path": {
1232 | "version": "3.0.0",
1233 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
1234 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
1235 | "requires": {
1236 | "p-locate": "^3.0.0",
1237 | "path-exists": "^3.0.0"
1238 | }
1239 | },
1240 | "lodash": {
1241 | "version": "4.17.20",
1242 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
1243 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
1244 | },
1245 | "lowercase-keys": {
1246 | "version": "1.0.1",
1247 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
1248 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
1249 | },
1250 | "make-dir": {
1251 | "version": "3.1.0",
1252 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1253 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1254 | "requires": {
1255 | "semver": "^6.0.0"
1256 | },
1257 | "dependencies": {
1258 | "semver": {
1259 | "version": "6.3.0",
1260 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1261 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
1262 | }
1263 | }
1264 | },
1265 | "media-typer": {
1266 | "version": "0.3.0",
1267 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1268 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
1269 | },
1270 | "memory-pager": {
1271 | "version": "1.5.0",
1272 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
1273 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
1274 | "optional": true
1275 | },
1276 | "merge-descriptors": {
1277 | "version": "1.0.1",
1278 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1279 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
1280 | },
1281 | "methods": {
1282 | "version": "1.1.2",
1283 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1284 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
1285 | },
1286 | "mime": {
1287 | "version": "1.6.0",
1288 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1289 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1290 | },
1291 | "mime-db": {
1292 | "version": "1.44.0",
1293 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
1294 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
1295 | },
1296 | "mime-types": {
1297 | "version": "2.1.27",
1298 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
1299 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
1300 | "requires": {
1301 | "mime-db": "1.44.0"
1302 | }
1303 | },
1304 | "mimic-response": {
1305 | "version": "1.0.1",
1306 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
1307 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
1308 | },
1309 | "minimatch": {
1310 | "version": "3.0.4",
1311 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1312 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1313 | "dev": true,
1314 | "requires": {
1315 | "brace-expansion": "^1.1.7"
1316 | }
1317 | },
1318 | "minimist": {
1319 | "version": "1.2.5",
1320 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1321 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1322 | "dev": true
1323 | },
1324 | "mongodb": {
1325 | "version": "3.6.3",
1326 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.3.tgz",
1327 | "integrity": "sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w==",
1328 | "requires": {
1329 | "bl": "^2.2.1",
1330 | "bson": "^1.1.4",
1331 | "denque": "^1.4.1",
1332 | "require_optional": "^1.0.1",
1333 | "safe-buffer": "^5.1.2",
1334 | "saslprep": "^1.0.0"
1335 | }
1336 | },
1337 | "mongoose": {
1338 | "version": "5.11.3",
1339 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.3.tgz",
1340 | "integrity": "sha512-qhL76i63E6YZ16uyrDFV39qh8Jyq1cserYgAOjdpFzOIKvxAQfAEx/UC+S9MYwQhwC3tbElN9G6WTZvtfC1q+g==",
1341 | "requires": {
1342 | "@types/mongodb": "^3.5.27",
1343 | "bson": "^1.1.4",
1344 | "kareem": "2.3.1",
1345 | "mongodb": "3.6.3",
1346 | "mongoose-legacy-pluralize": "1.0.2",
1347 | "mpath": "0.8.0",
1348 | "mquery": "3.2.2",
1349 | "ms": "2.1.2",
1350 | "regexp-clone": "1.0.0",
1351 | "safe-buffer": "5.2.1",
1352 | "sift": "7.0.1",
1353 | "sliced": "1.0.1"
1354 | },
1355 | "dependencies": {
1356 | "ms": {
1357 | "version": "2.1.2",
1358 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1359 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1360 | }
1361 | }
1362 | },
1363 | "mongoose-legacy-pluralize": {
1364 | "version": "1.0.2",
1365 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
1366 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
1367 | },
1368 | "mpath": {
1369 | "version": "0.8.0",
1370 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.0.tgz",
1371 | "integrity": "sha512-slIifXzF6pBxKpPV47ScgqWfGgkpwZNy55fY/umDrgmAxjWMz/WYzYsd8cThU49kw0rLyPWTZaWrOlazaeW57Q=="
1372 | },
1373 | "mquery": {
1374 | "version": "3.2.2",
1375 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz",
1376 | "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==",
1377 | "requires": {
1378 | "bluebird": "3.5.1",
1379 | "debug": "3.1.0",
1380 | "regexp-clone": "^1.0.0",
1381 | "safe-buffer": "5.1.2",
1382 | "sliced": "1.0.1"
1383 | },
1384 | "dependencies": {
1385 | "bluebird": {
1386 | "version": "3.5.1",
1387 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
1388 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
1389 | },
1390 | "debug": {
1391 | "version": "3.1.0",
1392 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
1393 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
1394 | "requires": {
1395 | "ms": "2.0.0"
1396 | }
1397 | },
1398 | "safe-buffer": {
1399 | "version": "5.1.2",
1400 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1401 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1402 | }
1403 | }
1404 | },
1405 | "ms": {
1406 | "version": "2.0.0",
1407 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1408 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1409 | },
1410 | "negotiator": {
1411 | "version": "0.6.2",
1412 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1413 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
1414 | },
1415 | "nodemon": {
1416 | "version": "2.0.6",
1417 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz",
1418 | "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==",
1419 | "dev": true,
1420 | "requires": {
1421 | "chokidar": "^3.2.2",
1422 | "debug": "^3.2.6",
1423 | "ignore-by-default": "^1.0.1",
1424 | "minimatch": "^3.0.4",
1425 | "pstree.remy": "^1.1.7",
1426 | "semver": "^5.7.1",
1427 | "supports-color": "^5.5.0",
1428 | "touch": "^3.1.0",
1429 | "undefsafe": "^2.0.3",
1430 | "update-notifier": "^4.1.0"
1431 | },
1432 | "dependencies": {
1433 | "debug": {
1434 | "version": "3.2.6",
1435 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
1436 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
1437 | "dev": true,
1438 | "requires": {
1439 | "ms": "^2.1.1"
1440 | }
1441 | },
1442 | "ms": {
1443 | "version": "2.1.2",
1444 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1445 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1446 | "dev": true
1447 | }
1448 | }
1449 | },
1450 | "nopt": {
1451 | "version": "1.0.10",
1452 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1453 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
1454 | "dev": true,
1455 | "requires": {
1456 | "abbrev": "1"
1457 | }
1458 | },
1459 | "normalize-package-data": {
1460 | "version": "2.5.0",
1461 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
1462 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
1463 | "requires": {
1464 | "hosted-git-info": "^2.1.4",
1465 | "resolve": "^1.10.0",
1466 | "semver": "2 || 3 || 4 || 5",
1467 | "validate-npm-package-license": "^3.0.1"
1468 | }
1469 | },
1470 | "normalize-path": {
1471 | "version": "3.0.0",
1472 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1473 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1474 | "dev": true
1475 | },
1476 | "normalize-url": {
1477 | "version": "4.5.0",
1478 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
1479 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
1480 | },
1481 | "oauth": {
1482 | "version": "0.9.15",
1483 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
1484 | "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE="
1485 | },
1486 | "oauth-sign": {
1487 | "version": "0.9.0",
1488 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1489 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
1490 | },
1491 | "on-finished": {
1492 | "version": "2.3.0",
1493 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1494 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1495 | "requires": {
1496 | "ee-first": "1.1.1"
1497 | }
1498 | },
1499 | "on-headers": {
1500 | "version": "1.0.2",
1501 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
1502 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
1503 | },
1504 | "once": {
1505 | "version": "1.4.0",
1506 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1507 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1508 | "requires": {
1509 | "wrappy": "1"
1510 | }
1511 | },
1512 | "p-cancelable": {
1513 | "version": "1.1.0",
1514 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
1515 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
1516 | },
1517 | "p-limit": {
1518 | "version": "2.3.0",
1519 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
1520 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
1521 | "requires": {
1522 | "p-try": "^2.0.0"
1523 | }
1524 | },
1525 | "p-locate": {
1526 | "version": "3.0.0",
1527 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
1528 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
1529 | "requires": {
1530 | "p-limit": "^2.0.0"
1531 | }
1532 | },
1533 | "p-try": {
1534 | "version": "2.2.0",
1535 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1536 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
1537 | },
1538 | "package-json": {
1539 | "version": "6.5.0",
1540 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
1541 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
1542 | "dev": true,
1543 | "requires": {
1544 | "got": "^9.6.0",
1545 | "registry-auth-token": "^4.0.0",
1546 | "registry-url": "^5.0.0",
1547 | "semver": "^6.2.0"
1548 | },
1549 | "dependencies": {
1550 | "semver": {
1551 | "version": "6.3.0",
1552 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1553 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1554 | "dev": true
1555 | }
1556 | }
1557 | },
1558 | "parse-json": {
1559 | "version": "4.0.0",
1560 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
1561 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
1562 | "requires": {
1563 | "error-ex": "^1.3.1",
1564 | "json-parse-better-errors": "^1.0.1"
1565 | }
1566 | },
1567 | "parseurl": {
1568 | "version": "1.3.3",
1569 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1570 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1571 | },
1572 | "passport": {
1573 | "version": "0.4.1",
1574 | "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
1575 | "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
1576 | "requires": {
1577 | "passport-strategy": "1.x.x",
1578 | "pause": "0.0.1"
1579 | }
1580 | },
1581 | "passport-google-oauth20": {
1582 | "version": "2.0.0",
1583 | "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz",
1584 | "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==",
1585 | "requires": {
1586 | "passport-oauth2": "1.x.x"
1587 | }
1588 | },
1589 | "passport-oauth1": {
1590 | "version": "1.1.0",
1591 | "resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.1.0.tgz",
1592 | "integrity": "sha1-p96YiiEfnPRoc3cTDqdN8ycwyRg=",
1593 | "requires": {
1594 | "oauth": "0.9.x",
1595 | "passport-strategy": "1.x.x",
1596 | "utils-merge": "1.x.x"
1597 | }
1598 | },
1599 | "passport-oauth2": {
1600 | "version": "1.5.0",
1601 | "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.5.0.tgz",
1602 | "integrity": "sha512-kqBt6vR/5VlCK8iCx1/KpY42kQ+NEHZwsSyt4Y6STiNjU+wWICG1i8ucc1FapXDGO15C5O5VZz7+7vRzrDPXXQ==",
1603 | "requires": {
1604 | "base64url": "3.x.x",
1605 | "oauth": "0.9.x",
1606 | "passport-strategy": "1.x.x",
1607 | "uid2": "0.0.x",
1608 | "utils-merge": "1.x.x"
1609 | }
1610 | },
1611 | "passport-strategy": {
1612 | "version": "1.0.0",
1613 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
1614 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
1615 | },
1616 | "passport-twitter": {
1617 | "version": "1.0.4",
1618 | "resolved": "https://registry.npmjs.org/passport-twitter/-/passport-twitter-1.0.4.tgz",
1619 | "integrity": "sha1-AaeZ4fdgvy3knyul+6MigvGJMtc=",
1620 | "requires": {
1621 | "passport-oauth1": "1.x.x",
1622 | "xtraverse": "0.1.x"
1623 | }
1624 | },
1625 | "path-exists": {
1626 | "version": "3.0.0",
1627 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1628 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
1629 | },
1630 | "path-parse": {
1631 | "version": "1.0.6",
1632 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1633 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
1634 | },
1635 | "path-to-regexp": {
1636 | "version": "0.1.7",
1637 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1638 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1639 | },
1640 | "pause": {
1641 | "version": "0.0.1",
1642 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
1643 | "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
1644 | },
1645 | "performance-now": {
1646 | "version": "2.1.0",
1647 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
1648 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
1649 | },
1650 | "picomatch": {
1651 | "version": "2.2.2",
1652 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
1653 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
1654 | "dev": true
1655 | },
1656 | "pify": {
1657 | "version": "3.0.0",
1658 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1659 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
1660 | },
1661 | "prepend-http": {
1662 | "version": "2.0.0",
1663 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
1664 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
1665 | },
1666 | "process-nextick-args": {
1667 | "version": "2.0.1",
1668 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1669 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
1670 | },
1671 | "proxy-addr": {
1672 | "version": "2.0.6",
1673 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
1674 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
1675 | "requires": {
1676 | "forwarded": "~0.1.2",
1677 | "ipaddr.js": "1.9.1"
1678 | }
1679 | },
1680 | "psl": {
1681 | "version": "1.8.0",
1682 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
1683 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
1684 | },
1685 | "pstree.remy": {
1686 | "version": "1.1.8",
1687 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
1688 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
1689 | "dev": true
1690 | },
1691 | "pump": {
1692 | "version": "3.0.0",
1693 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
1694 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
1695 | "requires": {
1696 | "end-of-stream": "^1.1.0",
1697 | "once": "^1.3.1"
1698 | }
1699 | },
1700 | "punycode": {
1701 | "version": "2.1.1",
1702 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1703 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
1704 | },
1705 | "pupa": {
1706 | "version": "2.0.1",
1707 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz",
1708 | "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==",
1709 | "dev": true,
1710 | "requires": {
1711 | "escape-goat": "^2.0.0"
1712 | }
1713 | },
1714 | "qs": {
1715 | "version": "6.5.2",
1716 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1717 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
1718 | },
1719 | "range-parser": {
1720 | "version": "1.2.1",
1721 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1722 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1723 | },
1724 | "raw-body": {
1725 | "version": "2.4.0",
1726 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
1727 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
1728 | "requires": {
1729 | "bytes": "3.1.0",
1730 | "http-errors": "1.7.2",
1731 | "iconv-lite": "0.4.24",
1732 | "unpipe": "1.0.0"
1733 | }
1734 | },
1735 | "rc": {
1736 | "version": "1.2.8",
1737 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1738 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1739 | "dev": true,
1740 | "requires": {
1741 | "deep-extend": "^0.6.0",
1742 | "ini": "~1.3.0",
1743 | "minimist": "^1.2.0",
1744 | "strip-json-comments": "~2.0.1"
1745 | }
1746 | },
1747 | "read-pkg": {
1748 | "version": "4.0.1",
1749 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
1750 | "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
1751 | "requires": {
1752 | "normalize-package-data": "^2.3.2",
1753 | "parse-json": "^4.0.0",
1754 | "pify": "^3.0.0"
1755 | }
1756 | },
1757 | "readable-stream": {
1758 | "version": "2.3.7",
1759 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1760 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1761 | "requires": {
1762 | "core-util-is": "~1.0.0",
1763 | "inherits": "~2.0.3",
1764 | "isarray": "~1.0.0",
1765 | "process-nextick-args": "~2.0.0",
1766 | "safe-buffer": "~5.1.1",
1767 | "string_decoder": "~1.1.1",
1768 | "util-deprecate": "~1.0.1"
1769 | },
1770 | "dependencies": {
1771 | "safe-buffer": {
1772 | "version": "5.1.2",
1773 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1774 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1775 | }
1776 | }
1777 | },
1778 | "readdirp": {
1779 | "version": "3.5.0",
1780 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
1781 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
1782 | "dev": true,
1783 | "requires": {
1784 | "picomatch": "^2.2.1"
1785 | }
1786 | },
1787 | "regexp-clone": {
1788 | "version": "1.0.0",
1789 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
1790 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
1791 | },
1792 | "registry-auth-token": {
1793 | "version": "4.2.0",
1794 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
1795 | "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==",
1796 | "dev": true,
1797 | "requires": {
1798 | "rc": "^1.2.8"
1799 | }
1800 | },
1801 | "registry-url": {
1802 | "version": "5.1.0",
1803 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
1804 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
1805 | "dev": true,
1806 | "requires": {
1807 | "rc": "^1.2.8"
1808 | }
1809 | },
1810 | "request": {
1811 | "version": "2.88.2",
1812 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
1813 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
1814 | "requires": {
1815 | "aws-sign2": "~0.7.0",
1816 | "aws4": "^1.8.0",
1817 | "caseless": "~0.12.0",
1818 | "combined-stream": "~1.0.6",
1819 | "extend": "~3.0.2",
1820 | "forever-agent": "~0.6.1",
1821 | "form-data": "~2.3.2",
1822 | "har-validator": "~5.1.3",
1823 | "http-signature": "~1.2.0",
1824 | "is-typedarray": "~1.0.0",
1825 | "isstream": "~0.1.2",
1826 | "json-stringify-safe": "~5.0.1",
1827 | "mime-types": "~2.1.19",
1828 | "oauth-sign": "~0.9.0",
1829 | "performance-now": "^2.1.0",
1830 | "qs": "~6.5.2",
1831 | "safe-buffer": "^5.1.2",
1832 | "tough-cookie": "~2.5.0",
1833 | "tunnel-agent": "^0.6.0",
1834 | "uuid": "^3.3.2"
1835 | }
1836 | },
1837 | "require-directory": {
1838 | "version": "2.1.1",
1839 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1840 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
1841 | },
1842 | "require-main-filename": {
1843 | "version": "2.0.0",
1844 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
1845 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
1846 | },
1847 | "require_optional": {
1848 | "version": "1.0.1",
1849 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
1850 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
1851 | "requires": {
1852 | "resolve-from": "^2.0.0",
1853 | "semver": "^5.1.0"
1854 | }
1855 | },
1856 | "resolve": {
1857 | "version": "1.17.0",
1858 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
1859 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
1860 | "requires": {
1861 | "path-parse": "^1.0.6"
1862 | }
1863 | },
1864 | "resolve-from": {
1865 | "version": "2.0.0",
1866 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
1867 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
1868 | },
1869 | "responselike": {
1870 | "version": "1.0.2",
1871 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
1872 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
1873 | "requires": {
1874 | "lowercase-keys": "^1.0.0"
1875 | }
1876 | },
1877 | "rxjs": {
1878 | "version": "6.6.3",
1879 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
1880 | "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
1881 | "requires": {
1882 | "tslib": "^1.9.0"
1883 | }
1884 | },
1885 | "safe-buffer": {
1886 | "version": "5.2.1",
1887 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1888 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1889 | },
1890 | "safer-buffer": {
1891 | "version": "2.1.2",
1892 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1893 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1894 | },
1895 | "saslprep": {
1896 | "version": "1.0.3",
1897 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
1898 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
1899 | "optional": true,
1900 | "requires": {
1901 | "sparse-bitfield": "^3.0.3"
1902 | }
1903 | },
1904 | "semver": {
1905 | "version": "5.7.1",
1906 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1907 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
1908 | },
1909 | "semver-diff": {
1910 | "version": "3.1.1",
1911 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
1912 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
1913 | "dev": true,
1914 | "requires": {
1915 | "semver": "^6.3.0"
1916 | },
1917 | "dependencies": {
1918 | "semver": {
1919 | "version": "6.3.0",
1920 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1921 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1922 | "dev": true
1923 | }
1924 | }
1925 | },
1926 | "send": {
1927 | "version": "0.17.1",
1928 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1929 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1930 | "requires": {
1931 | "debug": "2.6.9",
1932 | "depd": "~1.1.2",
1933 | "destroy": "~1.0.4",
1934 | "encodeurl": "~1.0.2",
1935 | "escape-html": "~1.0.3",
1936 | "etag": "~1.8.1",
1937 | "fresh": "0.5.2",
1938 | "http-errors": "~1.7.2",
1939 | "mime": "1.6.0",
1940 | "ms": "2.1.1",
1941 | "on-finished": "~2.3.0",
1942 | "range-parser": "~1.2.1",
1943 | "statuses": "~1.5.0"
1944 | },
1945 | "dependencies": {
1946 | "ms": {
1947 | "version": "2.1.1",
1948 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1949 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1950 | }
1951 | }
1952 | },
1953 | "sentiment": {
1954 | "version": "5.0.2",
1955 | "resolved": "https://registry.npmjs.org/sentiment/-/sentiment-5.0.2.tgz",
1956 | "integrity": "sha512-ZeC3y0JsOYTdwujt5uOd7ILJNilbgFzUtg/LEG4wUv43LayFNLZ28ec8+Su+h3saHlJmIwYxBzfDHHZuiMA15g=="
1957 | },
1958 | "serve-static": {
1959 | "version": "1.14.1",
1960 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1961 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1962 | "requires": {
1963 | "encodeurl": "~1.0.2",
1964 | "escape-html": "~1.0.3",
1965 | "parseurl": "~1.3.3",
1966 | "send": "0.17.1"
1967 | }
1968 | },
1969 | "set-blocking": {
1970 | "version": "2.0.0",
1971 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1972 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
1973 | },
1974 | "setprototypeof": {
1975 | "version": "1.1.1",
1976 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1977 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1978 | },
1979 | "sift": {
1980 | "version": "7.0.1",
1981 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
1982 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
1983 | },
1984 | "signal-exit": {
1985 | "version": "3.0.3",
1986 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
1987 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
1988 | },
1989 | "sliced": {
1990 | "version": "1.0.1",
1991 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
1992 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
1993 | },
1994 | "sparse-bitfield": {
1995 | "version": "3.0.3",
1996 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
1997 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
1998 | "optional": true,
1999 | "requires": {
2000 | "memory-pager": "^1.0.2"
2001 | }
2002 | },
2003 | "spawn-command": {
2004 | "version": "0.0.2-1",
2005 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
2006 | "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A="
2007 | },
2008 | "spdx-correct": {
2009 | "version": "3.1.1",
2010 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
2011 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
2012 | "requires": {
2013 | "spdx-expression-parse": "^3.0.0",
2014 | "spdx-license-ids": "^3.0.0"
2015 | }
2016 | },
2017 | "spdx-exceptions": {
2018 | "version": "2.3.0",
2019 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
2020 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
2021 | },
2022 | "spdx-expression-parse": {
2023 | "version": "3.0.1",
2024 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
2025 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
2026 | "requires": {
2027 | "spdx-exceptions": "^2.1.0",
2028 | "spdx-license-ids": "^3.0.0"
2029 | }
2030 | },
2031 | "spdx-license-ids": {
2032 | "version": "3.0.5",
2033 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
2034 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
2035 | },
2036 | "sshpk": {
2037 | "version": "1.16.1",
2038 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
2039 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
2040 | "requires": {
2041 | "asn1": "~0.2.3",
2042 | "assert-plus": "^1.0.0",
2043 | "bcrypt-pbkdf": "^1.0.0",
2044 | "dashdash": "^1.12.0",
2045 | "ecc-jsbn": "~0.1.1",
2046 | "getpass": "^0.1.1",
2047 | "jsbn": "~0.1.0",
2048 | "safer-buffer": "^2.0.2",
2049 | "tweetnacl": "~0.14.0"
2050 | }
2051 | },
2052 | "statuses": {
2053 | "version": "1.5.0",
2054 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
2055 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
2056 | },
2057 | "string-width": {
2058 | "version": "4.2.0",
2059 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
2060 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
2061 | "dev": true,
2062 | "requires": {
2063 | "emoji-regex": "^8.0.0",
2064 | "is-fullwidth-code-point": "^3.0.0",
2065 | "strip-ansi": "^6.0.0"
2066 | },
2067 | "dependencies": {
2068 | "ansi-regex": {
2069 | "version": "5.0.0",
2070 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
2071 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
2072 | "dev": true
2073 | },
2074 | "emoji-regex": {
2075 | "version": "8.0.0",
2076 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2077 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2078 | "dev": true
2079 | },
2080 | "is-fullwidth-code-point": {
2081 | "version": "3.0.0",
2082 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2083 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
2084 | "dev": true
2085 | },
2086 | "strip-ansi": {
2087 | "version": "6.0.0",
2088 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
2089 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
2090 | "dev": true,
2091 | "requires": {
2092 | "ansi-regex": "^5.0.0"
2093 | }
2094 | }
2095 | }
2096 | },
2097 | "string_decoder": {
2098 | "version": "1.1.1",
2099 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
2100 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
2101 | "requires": {
2102 | "safe-buffer": "~5.1.0"
2103 | },
2104 | "dependencies": {
2105 | "safe-buffer": {
2106 | "version": "5.1.2",
2107 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2108 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
2109 | }
2110 | }
2111 | },
2112 | "strip-ansi": {
2113 | "version": "5.2.0",
2114 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2115 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2116 | "requires": {
2117 | "ansi-regex": "^4.1.0"
2118 | }
2119 | },
2120 | "strip-json-comments": {
2121 | "version": "2.0.1",
2122 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
2123 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
2124 | "dev": true
2125 | },
2126 | "supports-color": {
2127 | "version": "5.5.0",
2128 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2129 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2130 | "dev": true,
2131 | "requires": {
2132 | "has-flag": "^3.0.0"
2133 | }
2134 | },
2135 | "term-size": {
2136 | "version": "2.2.0",
2137 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz",
2138 | "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==",
2139 | "dev": true
2140 | },
2141 | "to-readable-stream": {
2142 | "version": "1.0.0",
2143 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
2144 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
2145 | },
2146 | "to-regex-range": {
2147 | "version": "5.0.1",
2148 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2149 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2150 | "dev": true,
2151 | "requires": {
2152 | "is-number": "^7.0.0"
2153 | }
2154 | },
2155 | "toidentifier": {
2156 | "version": "1.0.0",
2157 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
2158 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
2159 | },
2160 | "touch": {
2161 | "version": "3.1.0",
2162 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
2163 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
2164 | "dev": true,
2165 | "requires": {
2166 | "nopt": "~1.0.10"
2167 | }
2168 | },
2169 | "tough-cookie": {
2170 | "version": "2.5.0",
2171 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
2172 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
2173 | "requires": {
2174 | "psl": "^1.1.28",
2175 | "punycode": "^2.1.1"
2176 | }
2177 | },
2178 | "tree-kill": {
2179 | "version": "1.2.2",
2180 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
2181 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="
2182 | },
2183 | "tslib": {
2184 | "version": "1.13.0",
2185 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
2186 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
2187 | },
2188 | "tsscmp": {
2189 | "version": "1.0.6",
2190 | "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz",
2191 | "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA=="
2192 | },
2193 | "tunnel": {
2194 | "version": "0.0.6",
2195 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
2196 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
2197 | },
2198 | "tunnel-agent": {
2199 | "version": "0.6.0",
2200 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
2201 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
2202 | "requires": {
2203 | "safe-buffer": "^5.0.1"
2204 | }
2205 | },
2206 | "tweetnacl": {
2207 | "version": "0.14.5",
2208 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
2209 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
2210 | },
2211 | "twit": {
2212 | "version": "2.2.11",
2213 | "resolved": "https://registry.npmjs.org/twit/-/twit-2.2.11.tgz",
2214 | "integrity": "sha512-BkdwvZGRVoUTcEBp0zuocuqfih4LB+kEFUWkWJOVBg6pAE9Ebv9vmsYTTrfXleZGf45Bj5H3A1/O9YhF2uSYNg==",
2215 | "requires": {
2216 | "bluebird": "^3.1.5",
2217 | "mime": "^1.3.4",
2218 | "request": "^2.68.0"
2219 | }
2220 | },
2221 | "type-fest": {
2222 | "version": "0.8.1",
2223 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
2224 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
2225 | "dev": true
2226 | },
2227 | "type-is": {
2228 | "version": "1.6.18",
2229 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
2230 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
2231 | "requires": {
2232 | "media-typer": "0.3.0",
2233 | "mime-types": "~2.1.24"
2234 | }
2235 | },
2236 | "typedarray-to-buffer": {
2237 | "version": "3.1.5",
2238 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
2239 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
2240 | "requires": {
2241 | "is-typedarray": "^1.0.0"
2242 | }
2243 | },
2244 | "uid2": {
2245 | "version": "0.0.3",
2246 | "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz",
2247 | "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I="
2248 | },
2249 | "undefsafe": {
2250 | "version": "2.0.3",
2251 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
2252 | "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
2253 | "dev": true,
2254 | "requires": {
2255 | "debug": "^2.2.0"
2256 | }
2257 | },
2258 | "underscore": {
2259 | "version": "1.9.1",
2260 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
2261 | "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
2262 | },
2263 | "unique-string": {
2264 | "version": "2.0.0",
2265 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
2266 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
2267 | "requires": {
2268 | "crypto-random-string": "^2.0.0"
2269 | }
2270 | },
2271 | "unpipe": {
2272 | "version": "1.0.0",
2273 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2274 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
2275 | },
2276 | "update-notifier": {
2277 | "version": "4.1.3",
2278 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
2279 | "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
2280 | "dev": true,
2281 | "requires": {
2282 | "boxen": "^4.2.0",
2283 | "chalk": "^3.0.0",
2284 | "configstore": "^5.0.1",
2285 | "has-yarn": "^2.1.0",
2286 | "import-lazy": "^2.1.0",
2287 | "is-ci": "^2.0.0",
2288 | "is-installed-globally": "^0.3.1",
2289 | "is-npm": "^4.0.0",
2290 | "is-yarn-global": "^0.3.0",
2291 | "latest-version": "^5.0.0",
2292 | "pupa": "^2.0.1",
2293 | "semver-diff": "^3.1.1",
2294 | "xdg-basedir": "^4.0.0"
2295 | }
2296 | },
2297 | "uri-js": {
2298 | "version": "4.2.2",
2299 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
2300 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
2301 | "requires": {
2302 | "punycode": "^2.1.0"
2303 | }
2304 | },
2305 | "url-parse-lax": {
2306 | "version": "3.0.0",
2307 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
2308 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
2309 | "requires": {
2310 | "prepend-http": "^2.0.0"
2311 | }
2312 | },
2313 | "util-deprecate": {
2314 | "version": "1.0.2",
2315 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2316 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
2317 | },
2318 | "utils-merge": {
2319 | "version": "1.0.1",
2320 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2321 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
2322 | },
2323 | "uuid": {
2324 | "version": "3.4.0",
2325 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
2326 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
2327 | },
2328 | "validate-npm-package-license": {
2329 | "version": "3.0.4",
2330 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
2331 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
2332 | "requires": {
2333 | "spdx-correct": "^3.0.0",
2334 | "spdx-expression-parse": "^3.0.0"
2335 | }
2336 | },
2337 | "vary": {
2338 | "version": "1.1.2",
2339 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2340 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
2341 | },
2342 | "verror": {
2343 | "version": "1.10.0",
2344 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
2345 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
2346 | "requires": {
2347 | "assert-plus": "^1.0.0",
2348 | "core-util-is": "1.0.2",
2349 | "extsprintf": "^1.2.0"
2350 | }
2351 | },
2352 | "which-module": {
2353 | "version": "2.0.0",
2354 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
2355 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
2356 | },
2357 | "widest-line": {
2358 | "version": "3.1.0",
2359 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
2360 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
2361 | "dev": true,
2362 | "requires": {
2363 | "string-width": "^4.0.0"
2364 | }
2365 | },
2366 | "wrap-ansi": {
2367 | "version": "5.1.0",
2368 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
2369 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
2370 | "requires": {
2371 | "ansi-styles": "^3.2.0",
2372 | "string-width": "^3.0.0",
2373 | "strip-ansi": "^5.0.0"
2374 | },
2375 | "dependencies": {
2376 | "ansi-styles": {
2377 | "version": "3.2.1",
2378 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2379 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2380 | "requires": {
2381 | "color-convert": "^1.9.0"
2382 | }
2383 | },
2384 | "color-convert": {
2385 | "version": "1.9.3",
2386 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2387 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2388 | "requires": {
2389 | "color-name": "1.1.3"
2390 | }
2391 | },
2392 | "color-name": {
2393 | "version": "1.1.3",
2394 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2395 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
2396 | },
2397 | "string-width": {
2398 | "version": "3.1.0",
2399 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2400 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2401 | "requires": {
2402 | "emoji-regex": "^7.0.1",
2403 | "is-fullwidth-code-point": "^2.0.0",
2404 | "strip-ansi": "^5.1.0"
2405 | }
2406 | }
2407 | }
2408 | },
2409 | "wrappy": {
2410 | "version": "1.0.2",
2411 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2412 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
2413 | },
2414 | "write-file-atomic": {
2415 | "version": "3.0.3",
2416 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
2417 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
2418 | "requires": {
2419 | "imurmurhash": "^0.1.4",
2420 | "is-typedarray": "^1.0.0",
2421 | "signal-exit": "^3.0.2",
2422 | "typedarray-to-buffer": "^3.1.5"
2423 | }
2424 | },
2425 | "xdg-basedir": {
2426 | "version": "4.0.0",
2427 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
2428 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q=="
2429 | },
2430 | "xmldom": {
2431 | "version": "0.1.31",
2432 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
2433 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
2434 | },
2435 | "xtraverse": {
2436 | "version": "0.1.0",
2437 | "resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz",
2438 | "integrity": "sha1-t0G60BjveNip0ug63gB7P3lZxzI=",
2439 | "requires": {
2440 | "xmldom": "0.1.x"
2441 | }
2442 | },
2443 | "y18n": {
2444 | "version": "4.0.0",
2445 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
2446 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
2447 | },
2448 | "yargs": {
2449 | "version": "13.3.2",
2450 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
2451 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
2452 | "requires": {
2453 | "cliui": "^5.0.0",
2454 | "find-up": "^3.0.0",
2455 | "get-caller-file": "^2.0.1",
2456 | "require-directory": "^2.1.1",
2457 | "require-main-filename": "^2.0.0",
2458 | "set-blocking": "^2.0.0",
2459 | "string-width": "^3.0.0",
2460 | "which-module": "^2.0.0",
2461 | "y18n": "^4.0.0",
2462 | "yargs-parser": "^13.1.2"
2463 | },
2464 | "dependencies": {
2465 | "string-width": {
2466 | "version": "3.1.0",
2467 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2468 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2469 | "requires": {
2470 | "emoji-regex": "^7.0.1",
2471 | "is-fullwidth-code-point": "^2.0.0",
2472 | "strip-ansi": "^5.1.0"
2473 | }
2474 | }
2475 | }
2476 | },
2477 | "yargs-parser": {
2478 | "version": "13.1.2",
2479 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
2480 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
2481 | "requires": {
2482 | "camelcase": "^5.0.0",
2483 | "decamelize": "^1.2.0"
2484 | }
2485 | }
2486 | }
2487 | }
2488 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sentiment_visualizing",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "bot.js",
6 | "scripts": {
7 | "start": "node bot.js",
8 | "bot": "nodemon bot.js",
9 | "client": "npm start --prefix client",
10 | "dev": "concurrently \"npm run bot\" \"npm run client\"",
11 | "build": "cd client && npm run build",
12 | "install-client": "cd client && npm install",
13 | "heroku-postbuild": "npm run install-client && npm run build"
14 | },
15 | "author": "Jos",
16 | "license": "ISC",
17 | "dependencies": {
18 | "@vitalets/google-translate-api": "^7.0.0",
19 | "body-parser": "^1.19.0",
20 | "concurrently": "^5.3.0",
21 | "cookie-session": "^1.4.0",
22 | "express": "^4.17.1",
23 | "fs": "0.0.2",
24 | "google-translate": "^3.0.0",
25 | "mongoose": "^5.11.3",
26 | "passport": "^0.4.1",
27 | "passport-google-oauth20": "^2.0.0",
28 | "passport-twitter": "^1.0.4",
29 | "sentiment": "^5.0.2",
30 | "tunnel": "0.0.6",
31 | "twit": "^2.2.11"
32 | },
33 | "devDependencies": {
34 | "nodemon": "^2.0.6"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "config:base"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/screenshots:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------