adds start for console

This commit is contained in:
Joseph Ditton 2021-11-22 14:21:53 -07:00
parent 3902da1747
commit 4ae4e87468
12 changed files with 240 additions and 32 deletions

View File

@ -1,3 +1,23 @@
import { useContext } from 'react';
import { SettingsContext } from '../../utils/settings_context';
export const Home = () => { export const Home = () => {
return <div>I am the home page</div>; const [, dispatch] = useContext(SettingsContext);
const logout = async () => {
const res = await fetch('/sessions', {
method: 'DELETE',
});
if (res.status === 200) {
dispatch({ type: 'update', payload: { jwt: undefined } });
}
};
return (
<div>
<h1>Welcome</h1>
<button type="button" onClick={logout}>
Logout
</button>
</div>
);
}; };

View File

@ -7,12 +7,12 @@ import { SignUp } from './sign_up/_sign_up';
export const Router = () => { export const Router = () => {
const [settings] = useContext(SettingsContext); const [settings] = useContext(SettingsContext);
const { JWT } = settings; const { jwt } = settings;
return ( return (
<Routes> <Routes>
<Route <Route
path="/" path="/"
element={JWT ? <Home /> : <Navigate replace to="signin" />} // no JWT means not logged in element={jwt ? <Home /> : <Navigate replace to="signin" />} // no jwt means not logged in
/> />
<Route path="signin" element={<SignIn />} /> <Route path="signin" element={<SignIn />} />
<Route path="signup" element={<SignUp />} /> <Route path="signup" element={<SignUp />} />

View File

@ -1,7 +1,9 @@
import { useState } from 'react'; import { useContext, useState } from 'react';
import { useNavigate } from 'react-router'; import { useNavigate } from 'react-router';
import { SettingsContext } from '../../utils/settings_context';
export const SignIn = () => { export const SignIn = () => {
const [, dispatch] = useContext(SettingsContext);
const [email, setEmail] = useState(''); const [email, setEmail] = useState('');
const [password, setPassword] = useState(''); const [password, setPassword] = useState('');
const navigate = useNavigate(); const navigate = useNavigate();
@ -10,6 +12,26 @@ export const SignIn = () => {
navigate('/signup'); navigate('/signup');
}; };
const signIn = async () => {
const res = await fetch('/sessions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
email,
password,
}),
});
if (res.status === 201) {
const result = await res.json();
dispatch({ type: 'update', payload: { jwt: result.token } });
navigate('/');
} else {
console.error('An issue occurred when logging in.');
}
};
return ( return (
<div> <div>
<div>Email</div> <div>Email</div>
@ -25,7 +47,9 @@ export const SignIn = () => {
onChange={(e) => setPassword(e.target.value)} onChange={(e) => setPassword(e.target.value)}
/> />
<div> <div>
<button type="button">Sign in</button> <button type="button" onClick={signIn}>
Sign in
</button>
</div> </div>
<div> <div>
<button type="button" onClick={goToSignUp}> <button type="button" onClick={goToSignUp}>

View File

@ -1,6 +1,10 @@
import { useState } from 'react'; import { useContext, useState } from 'react';
import { useNavigate } from 'react-router';
import { SettingsContext } from '../../utils/settings_context';
export const SignUp = () => { export const SignUp = () => {
const [, dispatch] = useContext(SettingsContext);
const navigate = useNavigate();
const [name, setName] = useState(''); const [name, setName] = useState('');
const [email, setEmail] = useState(''); const [email, setEmail] = useState('');
const [emailConfirmation, setEmailConfirmation] = useState(''); const [emailConfirmation, setEmailConfirmation] = useState('');
@ -29,20 +33,21 @@ export const SignUp = () => {
setErrorMessage('Name cannot be blank.'); setErrorMessage('Name cannot be blank.');
return; return;
} }
try { const res = await fetch('/users', {
await fetch('/users', { method: 'POST',
method: 'POST', headers: {
headers: { 'Content-Type': 'application/json',
'Content-Type': 'application/json', },
}, body: JSON.stringify({
body: JSON.stringify({ name,
name, email,
email, password,
password, }),
}), });
}); if (res.status === 201) {
} catch (e) { const result = await res.json();
console.log(e.message); dispatch({ type: 'update', payload: { jwt: result.token } });
navigate('/');
} }
}; };

View File

@ -15,6 +15,7 @@
"prebuild": "rimraf dist", "prebuild": "rimraf dist",
"build": "nest build && yarn client:build", "build": "nest build && yarn client:build",
"format": "prettier --write \"server/**/*.ts\" \"test/**/*.ts\"", "format": "prettier --write \"server/**/*.ts\" \"test/**/*.ts\"",
"console": "ts-node -r tsconfig-paths/register server/console.ts",
"start": "nest start", "start": "nest start",
"start:dev": "yarn db:start && nest start --watch", "start:dev": "yarn db:start && nest start --watch",
"start:debug": "yarn db:start && nest start --debug --watch", "start:debug": "yarn db:start && nest start --debug --watch",
@ -56,12 +57,15 @@
"@types/supertest": "^2.0.11", "@types/supertest": "^2.0.11",
"@typescript-eslint/eslint-plugin": "^4.28.2", "@typescript-eslint/eslint-plugin": "^4.28.2",
"@typescript-eslint/parser": "^4.28.2", "@typescript-eslint/parser": "^4.28.2",
"await-outside": "^3.0.0",
"eslint": "^7.30.0", "eslint": "^7.30.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^3.4.0", "eslint-plugin-prettier": "^3.4.0",
"jest": "^27.0.6", "jest": "^27.0.6",
"parcel": "^2.0.1", "parcel": "^2.0.1",
"prettier": "^2.4.1", "prettier": "^2.4.1",
"purdy": "^3.5.1",
"repl": "^0.1.3",
"supertest": "^6.1.3", "supertest": "^6.1.3",
"ts-jest": "^27.0.3", "ts-jest": "^27.0.3",
"ts-node": "^10.0.0", "ts-node": "^10.0.0",

View File

@ -1,8 +1,12 @@
import { Controller, Get, Render } from '@nestjs/common'; import { Controller, Get, Render, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller() @Controller()
export class AppController { export class AppController {
@Get() @Get()
@Render('index') @Render('index')
index() {} index(@Req() req: Request) {
const jwt = req.cookies['_token'];
return { jwt };
}
} }

39
server/console.ts Normal file
View File

@ -0,0 +1,39 @@
import 'dotenv/config';
import { NestFactory } from '@nestjs/core';
import * as repl from 'repl';
import * as Logger from 'purdy';
const LOGGER_OPTIONS = {
indent: 2,
depth: 1,
};
class InteractiveNestJS {
async run() {
// create the application context
// eslint-disable-next-line @typescript-eslint/no-var-requires
const targetModule = require(`${__dirname}/app.module`);
const applicationContext = await NestFactory.createApplicationContext(
// tslint:disable-next-line: no-string-literal
targetModule['AppModule'],
);
// eslint-disable-next-line @typescript-eslint/no-var-requires
const awaitOutside = require('await-outside');
// start node repl
const server = repl.start({
useColors: true,
prompt: '> ',
writer: replWriter,
ignoreUndefined: true,
});
server.context.app = applicationContext;
awaitOutside.addAwaitOutsideToReplServer(server);
}
}
function replWriter(value: any): string {
return Logger.stringify(value, LOGGER_OPTIONS);
}
const session = new InteractiveNestJS();
session.run();

View File

@ -1,9 +1,11 @@
import { import {
Body, Body,
Controller, Controller,
Delete,
HttpException, HttpException,
HttpStatus, HttpStatus,
Post, Post,
Redirect,
Res, Res,
} from '@nestjs/common'; } from '@nestjs/common';
import { Response } from 'express'; import { Response } from 'express';
@ -18,13 +20,13 @@ import { SignInDto } from 'server/dto/sign_in.dto';
export class SessionsController { export class SessionsController {
constructor(private usersService: UsersService) {} constructor(private usersService: UsersService) {}
@Post('/sign_in') @Post('/sessions')
async signIn( async create(
@Body() body: SignInDto, @Body() body: SignInDto,
@Res({ passthrough: true }) res: Response, @Res({ passthrough: true }) res: Response,
) { ) {
const { verified, user } = await this.usersService.verify( const { verified, user } = await this.usersService.verify(
body.username, body.email,
body.password, body.password,
); );
@ -45,4 +47,10 @@ export class SessionsController {
res.cookie('_token', token); res.cookie('_token', token);
return { token }; return { token };
} }
@Delete('/sessions')
async destroy(@Res({ passthrough: true }) res: Response) {
res.clearCookie('_token');
return { success: true };
}
} }

View File

@ -1,4 +1,4 @@
export class SignInDto { export class SignInDto {
username: string; email: string;
password: string; password: string;
} }

View File

@ -30,6 +30,6 @@ export class UsersService {
password, password,
user.password_hash, user.password_hash,
); );
return { verified, user }; return { verified, user: verified ? user : null };
} }
} }

View File

@ -1,7 +1,9 @@
<html> <html>
<head> <head>
<script type="text/javascript"> <script type="text/javascript">
window.SETTINGS = {}; window.SETTINGS = {
jwt: '{{jwt}}'
};
</script> </script>
</head> </head>
<body> <body>

110
yarn.lock
View File

@ -2195,6 +2195,14 @@ async-limiter@~1.0.0:
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
async-to-gen@~1.3.2:
version "1.3.3"
resolved "https://registry.yarnpkg.com/async-to-gen/-/async-to-gen-1.3.3.tgz#d52c9fb4801f0df44abc4d2de1870b48b60e20bb"
integrity sha1-1SyftIAfDfRKvE0t4YcLSLYOILs=
dependencies:
babylon "^6.14.0"
magic-string "^0.19.0"
async@0.9.x: async@0.9.x:
version "0.9.2" version "0.9.2"
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
@ -2215,6 +2223,13 @@ available-typed-arrays@^1.0.5:
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
await-outside@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/await-outside/-/await-outside-3.0.0.tgz#cf97dff66dbb6fe635935e541f40d676464f0a6d"
integrity sha512-ZIxAOB+YJvmzUR4VKVX+SWtdlXfNUAv0fkZWZvtz12A5lexesibQDeiK+XhPanA6DMCscuT+9tZ3OBIPGTmZ7A==
dependencies:
async-to-gen "~1.3.2"
aws-sign2@~0.7.0: aws-sign2@~0.7.0:
version "0.7.0" version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
@ -2293,6 +2308,11 @@ babel-preset-jest@^27.2.0:
babel-plugin-jest-hoist "^27.2.0" babel-plugin-jest-hoist "^27.2.0"
babel-preset-current-node-syntax "^1.0.0" babel-preset-current-node-syntax "^1.0.0"
babylon@^6.14.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
balanced-match@^1.0.0: balanced-match@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@ -2375,6 +2395,14 @@ boolbase@^1.0.0:
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
bossy@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/bossy/-/bossy-3.0.4.tgz#f9ae9f26e81b41a318f4ee0d83686e4a5c2507b9"
integrity sha1-+a6fJugbQaMY9O4Ng2huSlwlB7k=
dependencies:
hoek "4.x.x"
joi "10.x.x"
brace-expansion@^1.1.7: brace-expansion@^1.1.7:
version "1.1.11" version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@ -4426,6 +4454,11 @@ hmac-drbg@^1.0.1:
minimalistic-assert "^1.0.0" minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1" minimalistic-crypto-utils "^1.0.1"
hoek@4.x.x:
version "4.2.1"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==
html-encoding-sniffer@^1.0.2: html-encoding-sniffer@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
@ -4933,6 +4966,18 @@ isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isemail@2.x.x:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isemail/-/isemail-2.2.1.tgz#0353d3d9a62951080c262c2aa0a42b8ea8e9e2a6"
integrity sha1-A1PT2aYpUQgMJiwqoKQrjqjp4qY=
isemail@3.x.x:
version "3.2.0"
resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c"
integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==
dependencies:
punycode "2.x.x"
isexe@^2.0.0: isexe@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
@ -4995,6 +5040,11 @@ istanbul-reports@^3.0.2:
html-escaper "^2.0.0" html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0" istanbul-lib-report "^3.0.0"
items@2.x.x:
version "2.1.2"
resolved "https://registry.yarnpkg.com/items/-/items-2.1.2.tgz#0849354595805d586dac98e7e6e85556ea838558"
integrity sha512-kezcEqgB97BGeZZYtX/MA8AG410ptURstvnz5RAgyFZ8wQFPMxHY8GpTq+/ZHKT3frSlIthUq7EvLt9xn3TvXg==
iterare@1.2.1: iterare@1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042" resolved "https://registry.yarnpkg.com/iterare/-/iterare-1.2.1.tgz#139c400ff7363690e33abffa33cbba8920f00042"
@ -5420,6 +5470,25 @@ jest@^27.0.6:
import-local "^3.0.2" import-local "^3.0.2"
jest-cli "^27.3.1" jest-cli "^27.3.1"
joi@10.x.x:
version "10.6.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-10.6.0.tgz#52587f02d52b8b75cdb0c74f0b164a191a0e1fc2"
integrity sha512-hBF3LcqyAid+9X/pwg+eXjD2QBZI5eXnBFJYaAkH4SK3mp9QSRiiQnDYlmlz5pccMvnLcJRS4whhDOTCkmsAdQ==
dependencies:
hoek "4.x.x"
isemail "2.x.x"
items "2.x.x"
topo "2.x.x"
joi@^12.0.0:
version "12.0.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-12.0.0.tgz#46f55e68f4d9628f01bbb695902c8b307ad8d33a"
integrity sha512-z0FNlV4NGgjQN1fdtHYXf5kmgludM65fG/JlXzU6+rwkt9U5UWuXVYnXa2FpK0u6+qBuCmrm5byPNuiiddAHvQ==
dependencies:
hoek "4.x.x"
isemail "3.x.x"
topo "2.x.x"
js-tokens@^4.0.0: js-tokens@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@ -5810,6 +5879,13 @@ magic-string@0.25.7:
dependencies: dependencies:
sourcemap-codec "^1.4.4" sourcemap-codec "^1.4.4"
magic-string@^0.19.0:
version "0.19.1"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.1.tgz#14d768013caf2ec8fdea16a49af82fc377e75201"
integrity sha1-FNdoATyvLsj96hakmvgvw3fnUgE=
dependencies:
vlq "^0.2.1"
make-dir@^3.0.0, make-dir@^3.1.0: make-dir@^3.0.0, make-dir@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
@ -7084,15 +7160,24 @@ punycode@1.3.2:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
punycode@^1.3.2, punycode@^1.4.1: punycode@^1.3.2, punycode@^1.4.1:
version "1.4.1" version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
punycode@^2.1.0, punycode@^2.1.1: purdy@^3.5.1:
version "2.1.1" version "3.5.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" resolved "https://registry.yarnpkg.com/purdy/-/purdy-3.5.1.tgz#addb87ca765d7b4a04c7b250c8c6f504d1827a2e"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== integrity sha512-2v+aHv71zgOES8odUqnlbxLq+p2TeM51CtKLaUKuedsKWI4atGHO7IlQyUJuVCUJ7gECJ936ugOiA3gtAxSNzQ==
dependencies:
bossy "^3.0.4"
chalk "^2.4.1"
joi "^12.0.0"
purgecss@^4.0.0: purgecss@^4.0.0:
version "4.0.3" version "4.0.3"
@ -7247,6 +7332,11 @@ relateurl@^0.2.7:
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
repl@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/repl/-/repl-0.1.3.tgz#2f05d42b0c88b43d05ccbda10ed14aeff5699b60"
integrity sha1-LwXUKwyItD0FzL2hDtFK7/Vpm2A=
request-promise-core@1.1.4: request-promise-core@1.1.4:
version "1.1.4" version "1.1.4"
resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
@ -8050,6 +8140,13 @@ toidentifier@1.0.0:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
topo@2.x.x:
version "2.0.2"
resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182"
integrity sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=
dependencies:
hoek "4.x.x"
tough-cookie@^2.3.3, tough-cookie@^2.5.0, tough-cookie@~2.5.0: tough-cookie@^2.3.3, tough-cookie@^2.5.0, tough-cookie@~2.5.0:
version "2.5.0" version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
@ -8393,6 +8490,11 @@ verror@1.10.0:
core-util-is "1.0.2" core-util-is "1.0.2"
extsprintf "^1.2.0" extsprintf "^1.2.0"
vlq@^0.2.1:
version "0.2.3"
resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26"
integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==
vm-browserify@^1.1.2: vm-browserify@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"