From 54ea0c8979b620f45b432de00fc99302326e7870 Mon Sep 17 00:00:00 2001
From: alexlee-dev
Date: Thu, 11 Jun 2020 19:12:17 -0700
Subject: [PATCH 1/8] =?UTF-8?q?=F0=9F=93=A6=20Version=20Bump?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package.json | 2 +-
src/index.ts | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/package.json b/package.json
index 6e23403..e90c4a1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "create-mern-application",
- "version": "0.8.0",
+ "version": "0.9.0",
"description": "A bootstrapper for creating a MERN application.",
"bin": {
"create-mern-application": "./index.js"
diff --git a/src/index.ts b/src/index.ts
index d2ec6f4..5e19b2f 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -14,7 +14,7 @@ const pkg = require("../package.json");
Sentry.init({
dsn:
"https://44111e696abc456c959aef6dfc97f6a7@o202486.ingest.sentry.io/5262339",
- release: "0.8.0",
+ release: "0.9.0",
});
import {
@@ -47,7 +47,7 @@ const main = async (): Promise => {
* The program that parses the initial user input
*/
const program = new commander.Command("create-mern-application")
- .version("0.8.0")
+ .version("0.9.0")
.arguments("")
.usage(`${chalk.blueBright("")} [options]`)
.action((name) => {
From 01bfd90f5f27e085d216656c5328013cd90ca3ee Mon Sep 17 00:00:00 2001
From: alexlee-dev
Date: Thu, 11 Jun 2020 19:13:04 -0700
Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=93=9D=20Add=20v0.9.0=20to=20CHANGELO?=
=?UTF-8?q?G?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 787408e..5e64374 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [0.9.0] - _Unreleased_
+
+### Added
+
+### Changed
+
+### Removed
+
+### Fixed
+
## [0.8.0] - 2020-06-11
### 🧪 Good Testing
From f7c494fa9c75a98ce28c76398b26db5c190f2931 Mon Sep 17 00:00:00 2001
From: alexlee-dev
Date: Thu, 11 Jun 2020 20:31:25 -0700
Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=92=AC=20Add=20Comments=20to=20Files?=
=?UTF-8?q?=20-=20#22?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 2 ++
package-lock.json | 2 +-
src/constants.ts | 9 ++++++++
src/index.ts | 6 ++++-
src/template/README.md | 4 ++--
src/template/public/index.html | 2 ++
src/template/src/client/App.tsx | 5 +++-
src/template/src/client/api/beer.ts | 23 +++++++++++++++----
.../src/client/components/BeerDisplayer.tsx | 4 +++-
.../client/components/LoadingIndicator.tsx | 4 +++-
src/template/src/client/components/Modal.tsx | 4 +++-
.../components/forms/DeleteBeerForm.tsx | 4 +++-
.../client/components/forms/EditBeerForm.tsx | 4 +++-
.../client/components/forms/NewBeerForm.tsx | 4 +++-
src/template/src/client/constants.ts | 3 +++
src/template/src/client/index.css | 11 ++++++++-
src/template/src/client/util.ts | 4 ++++
src/template/src/server/app.ts | 20 +++++++++++++---
src/template/src/server/controllers/assets.ts | 7 ++++++
src/template/src/server/controllers/beer.ts | 18 +++++++++++++++
.../src/server/controllers/scripts.ts | 7 ++++++
src/template/src/server/index.ts | 9 ++++++++
src/template/src/server/models/Beer.ts | 7 ++++++
src/template/src/server/types.ts | 3 +++
src/template/src/server/util.ts | 4 ++++
src/template/webpack-js.js | 1 -
src/template/webpack-ts.js | 1 -
website/src/server/app.ts | 3 ---
website/webpack.config.js | 1 -
29 files changed, 150 insertions(+), 26 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5e64374..fcde6a1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
+- Comments in template files [#22](https://github.com/alexlee-dev/create-mern-application/issues/22)
+
### Changed
### Removed
diff --git a/package-lock.json b/package-lock.json
index 277e693..665b884 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "create-mern-application",
- "version": "0.8.0",
+ "version": "0.9.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
diff --git a/src/constants.ts b/src/constants.ts
index c475670..69d9e25 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -74,6 +74,9 @@ export const devDependenciesTS = [
"webpack-dev-server",
];
+/**
+ * Files needed for the Build process, to be copied.
+ */
export const buildFilesToCopy = [
{
src: "src/server/assets",
@@ -89,6 +92,9 @@ export const buildFilesToCopy = [
},
];
+/**
+ * Files to remove after the Build process completes.
+ */
export const buildFilesToRemove = [
"dist",
"index.d.ts",
@@ -97,6 +103,9 @@ export const buildFilesToRemove = [
"/src/server/types.js",
];
+/**
+ * Dependencies to remove from the application after compilation is completed.
+ */
export const dependenciesToCleanup = [
"@types/cors",
"@types/express",
diff --git a/src/index.ts b/src/index.ts
index 5e19b2f..d7be69e 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,4 +1,3 @@
-// TODO - programatically create images in assets [#26]
// TODO - Is there a place for AUTHOR NAME?
import * as Sentry from "@sentry/node";
@@ -34,6 +33,9 @@ import {
verifyNodeVersion,
} from "./util";
+/**
+ * create-mern-application
+ */
const main = async (): Promise => {
let applicationName;
let authorName = "YOUR NAME";
@@ -146,6 +148,7 @@ const main = async (): Promise => {
// * Displays a success message to the user
displaySuccessMessage(applicationName);
+ // * Notify user to update if need be
updateNotifier({
pkg: {
name: "create-mern-application",
@@ -153,6 +156,7 @@ const main = async (): Promise => {
},
}).notify();
} catch (error) {
+ // * Ensure application directory is removed
await cleanupError(applicationName);
console.error(error);
throw new Error(error);
diff --git a/src/template/README.md b/src/template/README.md
index ca0d19f..dda6599 100644
--- a/src/template/README.md
+++ b/src/template/README.md
@@ -7,7 +7,7 @@
---
- This application was bootstrapped with create-mern-application
+
This application was bootstrapped with create-mern-application
@@ -33,4 +33,4 @@ Please be sure to start your MongoDB instance prior to starting your application
## ✍️ Authors
-- [Alex Lee](https://github.com/alexlee-dev) - Application Developer
+- [YOUR NAME](YOUR WEBSITE URL) - YOUR TITLE
diff --git a/src/template/public/index.html b/src/template/public/index.html
index 19c94ba..16eedea 100644
--- a/src/template/public/index.html
+++ b/src/template/public/index.html
@@ -1,6 +1,7 @@
+
___APP NAME___
+
diff --git a/src/template/src/client/App.tsx b/src/template/src/client/App.tsx
index 46dcb72..91bfba4 100644
--- a/src/template/src/client/App.tsx
+++ b/src/template/src/client/App.tsx
@@ -5,7 +5,10 @@ import BeerDisplayer from "./components/BeerDisplayer";
import LoadingIndicator from "./components/LoadingIndicator";
import Modal from "./components/Modal";
import { Beer } from "./types";
-/* NEW LINE */
+
+/**
+ * Application.
+ */
const App: React.SFC<{}> = () => {
const [beers, setBeers] = React.useState<[] | Beer[]>([]);
const [isModalOpen, setIsModalOpen] = React.useState(false);
diff --git a/src/template/src/client/api/beer.ts b/src/template/src/client/api/beer.ts
index 25e99d2..d58d33e 100644
--- a/src/template/src/client/api/beer.ts
+++ b/src/template/src/client/api/beer.ts
@@ -1,7 +1,9 @@
import { starterBeers } from "../constants";
import { Beer } from "../types";
-/* NEW LINE */
+/**
+ * Initialize DB with Starter Beers if no Beers present.
+ */
export const initializeStarterBeers = async (): Promise => {
try {
starterBeers.forEach(async ({ abv, brewer, description, name, type }) => {
@@ -26,7 +28,9 @@ export const initializeStarterBeers = async (): Promise => {
}
};
-/* NEW LINE */
+/**
+ * Gets Beers from the database.
+ */
export const getBeers = async (): Promise => {
try {
const response = await fetch("/beers");
@@ -38,7 +42,10 @@ export const getBeers = async (): Promise => {
}
};
-/* NEW LINE */
+/**
+ * Adds a Beer to the database.
+ * @param beer Beer to add.
+ */
export const addBeer = async (beer: {
abv: number;
brewer: string;
@@ -59,7 +66,10 @@ export const addBeer = async (beer: {
}
};
-/* NEW LINE */
+/**
+ * Removes a Beer from the database.
+ * @param id ID of Beer to remove.
+ */
export const deleteBeer = async (id: string): Promise => {
try {
await fetch(`/beer/${id}`, {
@@ -73,7 +83,10 @@ export const deleteBeer = async (id: string): Promise => {
}
};
-/* NEW LINE */
+/**
+ * Edits a Beer in the database.
+ * @param beer Beer to edit.
+ */
export const editBeer = async (beer: {
id: string;
abv: number;
diff --git a/src/template/src/client/components/BeerDisplayer.tsx b/src/template/src/client/components/BeerDisplayer.tsx
index 8605cad..2662658 100644
--- a/src/template/src/client/components/BeerDisplayer.tsx
+++ b/src/template/src/client/components/BeerDisplayer.tsx
@@ -8,7 +8,9 @@ export interface BeerDisplayerProps {
setModalContent: Function;
}
-/* NEW LINE */
+/**
+ * Displays Beers in the database.
+ */
const BeerDisplayer: React.SFC = ({
beers,
setCurrentBeer,
diff --git a/src/template/src/client/components/LoadingIndicator.tsx b/src/template/src/client/components/LoadingIndicator.tsx
index b1dc31f..a74fe0c 100644
--- a/src/template/src/client/components/LoadingIndicator.tsx
+++ b/src/template/src/client/components/LoadingIndicator.tsx
@@ -4,7 +4,9 @@ export interface LoadingIndicatorProps {
isLoading: boolean;
}
-/* NEW LINE */
+/**
+ * Displays Loading Indicator.
+ */
const LoadingIndicator: React.SFC = ({ isLoading }) => {
return (
<>
diff --git a/src/template/src/client/components/Modal.tsx b/src/template/src/client/components/Modal.tsx
index 74d8635..b99f7c5 100644
--- a/src/template/src/client/components/Modal.tsx
+++ b/src/template/src/client/components/Modal.tsx
@@ -15,7 +15,9 @@ export interface ModalProps {
setModalContent: Function;
}
-/* NEW LINE */
+/**
+ * Displays Modal.
+ */
const Modal: React.SFC = ({
currentBeer,
isModalOpen,
diff --git a/src/template/src/client/components/forms/DeleteBeerForm.tsx b/src/template/src/client/components/forms/DeleteBeerForm.tsx
index a1866af..caaa9a5 100644
--- a/src/template/src/client/components/forms/DeleteBeerForm.tsx
+++ b/src/template/src/client/components/forms/DeleteBeerForm.tsx
@@ -11,7 +11,9 @@ export interface DeleteBeerForm {
setModalContent: Function;
}
-/* NEW LINE */
+/**
+ * Form to Delete a Beer.
+ */
const DeleteBeerForm: React.SFC = ({
currentBeer,
refreshBeers,
diff --git a/src/template/src/client/components/forms/EditBeerForm.tsx b/src/template/src/client/components/forms/EditBeerForm.tsx
index 80897d0..2417cb7 100644
--- a/src/template/src/client/components/forms/EditBeerForm.tsx
+++ b/src/template/src/client/components/forms/EditBeerForm.tsx
@@ -12,7 +12,9 @@ export interface EditBeerFormProps {
setModalContent: Function;
}
-/* NEW LINE */
+/**
+ * Form to Edit a Beer.
+ */
const EditBeerForm: React.SFC = ({
currentBeer,
refreshBeers,
diff --git a/src/template/src/client/components/forms/NewBeerForm.tsx b/src/template/src/client/components/forms/NewBeerForm.tsx
index 2c0d720..7f7828d 100644
--- a/src/template/src/client/components/forms/NewBeerForm.tsx
+++ b/src/template/src/client/components/forms/NewBeerForm.tsx
@@ -8,7 +8,9 @@ export interface NewBeerFormProps {
setModalContent: Function;
}
-/* NEW LINE */
+/**
+ * Form to Edit a Beer.
+ */
const NewBeerForm: React.SFC = ({
refreshBeers,
setIsLoading,
diff --git a/src/template/src/client/constants.ts b/src/template/src/client/constants.ts
index cb5b7c3..925c248 100644
--- a/src/template/src/client/constants.ts
+++ b/src/template/src/client/constants.ts
@@ -1,3 +1,6 @@
+/**
+ * Starter Beers.
+ */
export const starterBeers = [
{
abv: 7.0,
diff --git a/src/template/src/client/index.css b/src/template/src/client/index.css
index c249fbf..c5e4c47 100644
--- a/src/template/src/client/index.css
+++ b/src/template/src/client/index.css
@@ -1,3 +1,4 @@
+/* Application */
body {
font-family: "Roboto", "Helvetica Neue", sans-serif;
margin: 0;
@@ -13,10 +14,14 @@ body {
padding: 25px;
}
+/* Logo */
+
#logo {
height: 300px;
}
+/* Beer Displayer */
+
#beer-table-heading {
align-items: center;
background-color: #39374d;
@@ -66,6 +71,8 @@ tbody tr:nth-child(even) {
background-color: #e9ecef;
}
+/* Modal */
+
.shade {
background-color: rgba(0, 0, 0, 0.75);
bottom: 0;
@@ -99,6 +106,8 @@ tbody tr:nth-child(even) {
display: none;
}
+/* Forms */
+
.form {
display: flex;
flex-direction: column;
@@ -117,7 +126,7 @@ tbody tr:nth-child(even) {
margin-top: 25px;
}
-/* Spinner */
+/* Loading Indicator */
.orbit-spinner,
.orbit-spinner * {
diff --git a/src/template/src/client/util.ts b/src/template/src/client/util.ts
index b1270fa..45a8e9a 100644
--- a/src/template/src/client/util.ts
+++ b/src/template/src/client/util.ts
@@ -1,3 +1,7 @@
+/**
+ * Compares objects to test for equality.
+ * @param objects Objects to compare.
+ */
export const isEqual = (...objects: any) =>
objects.every(
(obj: any) => JSON.stringify(obj) === JSON.stringify(objects[0])
diff --git a/src/template/src/server/app.ts b/src/template/src/server/app.ts
index 6f49b9b..3d99cb1 100644
--- a/src/template/src/server/app.ts
+++ b/src/template/src/server/app.ts
@@ -5,24 +5,33 @@ import mongoose from "mongoose";
import morgan from "morgan";
import path from "path";
+/* NEW LINE */
import { Controller } from "./types";
+/**
+ * Server Application.
+ */
class App {
public app: express.Application;
+ /* NEW LINE */
public port: string;
+ /* NEW LINE */
constructor(controllers: Controller[], port: string) {
this.app = express();
this.port = port;
+ /* NEW LINE */
this.initializeMiddlewares();
this.initializeControllers(controllers);
}
+ /* NEW LINE */
private initializeMiddlewares(): void {
if (!process.env.MONGODB_URL) throw new Error("No MOONGODB_URL");
+ /* NEW LINE */
mongoose.connect(process.env.MONGODB_URL, {
useNewUrlParser: true,
useCreateIndex: true,
@@ -30,6 +39,7 @@ class App {
useUnifiedTopology: true,
});
+ /* NEW LINE */
this.app.use(express.json());
this.app.use(morgan("dev"));
const whitelistDomains = [
@@ -38,38 +48,41 @@ class App {
undefined,
];
+ /* NEW LINE */
const corsOptions: CorsOptions = {
origin: (requestOrigin: string | undefined, callback: Function): void => {
if (whitelistDomains.indexOf(requestOrigin) !== -1) {
callback(null, true);
} else {
- // eslint-disable-next-line no-console
console.error(`Sever refused to allow: ${requestOrigin}`);
callback(new Error("Not allowed by CORS"));
}
},
};
+ /* NEW LINE */
this.app.use(cors(corsOptions));
}
+ /* NEW LINE */
private initializeControllers(controllers: Controller[]): void {
controllers.forEach((controller) => {
this.app.use("/", controller.router);
});
+ /* NEW LINE */
this.app.use(express.static(path.join(__dirname, "../dist")));
+ /* NEW LINE */
this.app.get("*", (req: Request, res: Response) => {
res.sendFile(path.join(__dirname, "../dist/index.html"));
});
}
+ /* NEW LINE */
public listen(): void {
this.app.listen(this.port, () => {
- // eslint-disable-next-line no-console
console.log(`Mode: ${chalk.blueBright(process.env.NODE_ENV)}\n`);
- // eslint-disable-next-line no-console
console.log(
`Server is listening on port: ${chalk.blueBright(this.port)}\n`
);
@@ -77,4 +90,5 @@ class App {
}
}
+/* NEW LINE */
export default App;
diff --git a/src/template/src/server/controllers/assets.ts b/src/template/src/server/controllers/assets.ts
index 9106e24..8abb5fe 100644
--- a/src/template/src/server/controllers/assets.ts
+++ b/src/template/src/server/controllers/assets.ts
@@ -1,9 +1,13 @@
import express, { Router, Request, Response } from "express";
import path from "path";
+/**
+ * Assets Controller.
+ */
class AssetsController {
public router: Router = express.Router();
+ /* NEW LINE */
static assetList: string[] = [
"android-chrome-192x192.png",
"android-chrome-512x512.png",
@@ -17,10 +21,12 @@ class AssetsController {
"site.webmanifest",
];
+ /* NEW LINE */
constructor() {
this.initializeRoutes();
}
+ /* NEW LINE */
public initializeRoutes(): void {
AssetsController.assetList.forEach((asset: string) => {
this.router.get(
@@ -33,4 +39,5 @@ class AssetsController {
}
}
+/* NEW LINE */
export default AssetsController;
diff --git a/src/template/src/server/controllers/beer.ts b/src/template/src/server/controllers/beer.ts
index 7289850..56ba7af 100644
--- a/src/template/src/server/controllers/beer.ts
+++ b/src/template/src/server/controllers/beer.ts
@@ -2,24 +2,31 @@ import express, { Request, Response, Router } from "express";
import Beer from "../models/Beer";
import { BeerDocument, BeerEditRequest } from "../types";
+/**
+ * Beer Controller.
+ */
class BeerController {
public router: Router = express.Router();
+ /* NEW LINE */
constructor() {
this.initializeRoutes();
}
+ /* NEW LINE */
public initializeRoutes(): void {
this.router.get("/beers", async (req: Request, res: Response) => {
try {
const beers = await Beer.find();
+ /* NEW LINE */
res.send(beers);
} catch (error) {
res.status(500).send({ error });
}
});
+ /* NEW LINE */
this.router.post("/beer", async (req: Request, res: Response) => {
try {
const newBeer = new Beer({
@@ -30,32 +37,39 @@ class BeerController {
type: req.body.type,
});
+ /* NEW LINE */
await newBeer.save();
+ /* NEW LINE */
res.status(201).send(newBeer);
} catch (error) {
res.status(500).send({ error: error.message });
}
});
+ /* NEW LINE */
this.router.put(
"/beer/:id",
async (req: BeerEditRequest, res: Response) => {
try {
const beer = (await Beer.findById(req.params.id)) as BeerDocument;
+ /* NEW LINE */
if (!beer) {
return res.status(404).send();
}
+ /* NEW LINE */
beer.abv = req.body.abv;
beer.brewer = req.body.brewer;
beer.description = req.body.description;
beer.name = req.body.name;
beer.type = req.body.type;
+ /* NEW LINE */
await beer.save();
+ /* NEW LINE */
res.send(beer);
} catch (error) {
res.status(500).send({ error });
@@ -63,14 +77,17 @@ class BeerController {
}
);
+ /* NEW LINE */
this.router.delete("/beer/:id", async (req: Request, res: Response) => {
try {
const beer = await Beer.findOneAndDelete({ _id: req.params.id });
+ /* NEW LINE */
if (!beer) {
return res.status(404).send();
}
+ /* NEW LINE */
res.send(beer);
} catch (error) {
res.status(500).send({ error });
@@ -79,4 +96,5 @@ class BeerController {
}
}
+/* NEW LINE */
export default BeerController;
diff --git a/src/template/src/server/controllers/scripts.ts b/src/template/src/server/controllers/scripts.ts
index d959e15..fe9b0c7 100644
--- a/src/template/src/server/controllers/scripts.ts
+++ b/src/template/src/server/controllers/scripts.ts
@@ -1,13 +1,18 @@
import express, { Router, Request, Response } from "express";
import path from "path";
+/**
+ * Scipts Controller.
+ */
class ScriptsController {
public router: Router = express.Router();
+ /* NEW LINE */
constructor() {
this.initializeRoutes();
}
+ /* NEW LINE */
public initializeRoutes(): void {
this.router.get(
"/scripts/react.js",
@@ -20,6 +25,7 @@ class ScriptsController {
}
);
+ /* NEW LINE */
this.router.get(
"/scripts/react-dom.js",
async (req: Request, res: Response) => {
@@ -35,4 +41,5 @@ class ScriptsController {
}
}
+/* NEW LINE */
export default ScriptsController;
diff --git a/src/template/src/server/index.ts b/src/template/src/server/index.ts
index bd51983..d42a071 100644
--- a/src/template/src/server/index.ts
+++ b/src/template/src/server/index.ts
@@ -1,15 +1,20 @@
import chalk from "chalk";
+/* NEW LINE */
import App from "./app";
import AssetsController from "./controllers/assets";
import BeerController from "./controllers/beer";
import ScriptsController from "./controllers/scripts";
import { checkIfMongoDBIsRunning } from "./util";
+/**
+ * Main Server Application.
+ */
const main = async (): Promise => {
try {
const isRunning = await checkIfMongoDBIsRunning();
+ /* NEW LINE */
if (!isRunning) {
console.error(chalk.red("ERROR: Could not connect to MongoDB URL"));
console.log("");
@@ -27,17 +32,21 @@ const main = async (): Promise => {
return process.exit(1);
}
+ /* NEW LINE */
if (!process.env.PORT) throw new Error("No PORT");
+ /* NEW LINE */
const app = new App(
[new AssetsController(), new BeerController(), new ScriptsController()],
process.env.PORT
);
+ /* NEW LINE */
app.listen();
} catch (error) {
console.error(error);
}
};
+/* NEW LINE */
main();
diff --git a/src/template/src/server/models/Beer.ts b/src/template/src/server/models/Beer.ts
index 8cbade7..6f9d8ca 100644
--- a/src/template/src/server/models/Beer.ts
+++ b/src/template/src/server/models/Beer.ts
@@ -1,5 +1,8 @@
import mongoose from "mongoose";
+/**
+ * Beer Model.
+ */
const beerSchema = new mongoose.Schema(
{
abv: {
@@ -26,12 +29,16 @@ const beerSchema = new mongoose.Schema(
{ timestamps: true }
);
+/* NEW LINE */
function applicationToJSON(this: any): void {
return this.toObject();
}
+/* NEW LINE */
beerSchema.methods.toJSON = applicationToJSON;
+/* NEW LINE */
const Beer = mongoose.model("Beer", beerSchema);
+/* NEW LINE */
export default Beer;
diff --git a/src/template/src/server/types.ts b/src/template/src/server/types.ts
index 2544a4d..cc531bf 100644
--- a/src/template/src/server/types.ts
+++ b/src/template/src/server/types.ts
@@ -1,6 +1,7 @@
import { Request, Router } from "express";
import { Document } from "mongoose";
+/* NEW LINE */
export interface BeerDocument extends Document {
_id: string;
abv: number;
@@ -10,6 +11,7 @@ export interface BeerDocument extends Document {
type: string;
}
+/* NEW LINE */
export interface BeerEditRequest extends Request {
body: {
abv: number;
@@ -20,6 +22,7 @@ export interface BeerEditRequest extends Request {
};
}
+/* NEW LINE */
export type Controller = {
router: Router;
};
diff --git a/src/template/src/server/util.ts b/src/template/src/server/util.ts
index 5f2b735..d5dd9be 100644
--- a/src/template/src/server/util.ts
+++ b/src/template/src/server/util.ts
@@ -1,10 +1,14 @@
import fetch from "node-fetch";
+/**
+ * Check if MongoDB is running locally. Stops application from continuing if false.
+ */
export const checkIfMongoDBIsRunning = async (): Promise =>
new Promise(async (resolve, reject) => {
try {
if (!process.env.MONGODB_URL) throw new Error("No MONGODB_URL");
+ /* NEW LINE */
const response = await fetch(
process.env.MONGODB_URL.replace(/mongodb:\/\//gm, "http://")
);
diff --git a/src/template/webpack-js.js b/src/template/webpack-js.js
index f682a9c..594cb24 100644
--- a/src/template/webpack-js.js
+++ b/src/template/webpack-js.js
@@ -1,4 +1,3 @@
-/* eslint-disable no-console */
const webpack = require("webpack");
const chalk = require("chalk");
const path = require("path");
diff --git a/src/template/webpack-ts.js b/src/template/webpack-ts.js
index 573926f..a3a8d17 100644
--- a/src/template/webpack-ts.js
+++ b/src/template/webpack-ts.js
@@ -1,4 +1,3 @@
-/* eslint-disable no-console */
const webpack = require("webpack");
const chalk = require("chalk");
const path = require("path");
diff --git a/website/src/server/app.ts b/website/src/server/app.ts
index 7540bc1..bb85eda 100644
--- a/website/src/server/app.ts
+++ b/website/src/server/app.ts
@@ -34,7 +34,6 @@ class App {
if (whitelistDomains.indexOf(origin) !== -1) {
cb(null, true);
} else {
- // eslint-disable-next-line no-console
console.error(`Sever refused to allow: ${origin}`);
cb(new Error('Not allowed by CORS'));
}
@@ -58,9 +57,7 @@ class App {
public listen(): void {
this.app.listen(this.port, () => {
- // eslint-disable-next-line no-console
console.log(`Mode: ${chalk.blueBright(process.env.NODE_ENV)}\n`);
- // eslint-disable-next-line no-console
console.log(
`Server is listening on port: ${chalk.blueBright(this.port)}\n`,
);
diff --git a/website/webpack.config.js b/website/webpack.config.js
index 0f201fe..0bd9ea5 100644
--- a/website/webpack.config.js
+++ b/website/webpack.config.js
@@ -1,4 +1,3 @@
-/* eslint-disable no-console */
const webpack = require('webpack');
const chalk = require('chalk');
const path = require('path');
From 3a673e3843d0ad63e1c6fcf1491c11eed7183e1e Mon Sep 17 00:00:00 2001
From: alexlee-dev
Date: Thu, 11 Jun 2020 20:52:53 -0700
Subject: [PATCH 4/8] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Remove=20unused=20depe?=
=?UTF-8?q?ndencies=20-=20#9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package-lock.json | 1097 ++++-----------------------------------------
package.json | 24 +-
2 files changed, 84 insertions(+), 1037 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 665b884..ad1d7b7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1323,71 +1323,71 @@
}
},
"@sentry/apm": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/apm/-/apm-5.16.1.tgz",
- "integrity": "sha512-sAOsWdQYRuEFOyAv4ZDIrGSaBIVgNJyWZBXIFH4RBrvQgKd8h98g4NXnt5QQqHO56awaO5DGl9XQ3hnd4jZEJg==",
- "requires": {
- "@sentry/browser": "5.16.1",
- "@sentry/hub": "5.16.1",
- "@sentry/minimal": "5.16.1",
- "@sentry/types": "5.16.1",
- "@sentry/utils": "5.16.1",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/apm/-/apm-5.17.0.tgz",
+ "integrity": "sha512-raJcPa04TP8mVocSTHe0PdULpRWhw0NaLq9Rk8KCTFBJvLsgzY2krph5/LgEfBBX78vWt70FrwSw+DdIfYIJ6g==",
+ "requires": {
+ "@sentry/browser": "5.17.0",
+ "@sentry/hub": "5.17.0",
+ "@sentry/minimal": "5.17.0",
+ "@sentry/types": "5.17.0",
+ "@sentry/utils": "5.17.0",
"tslib": "^1.9.3"
}
},
"@sentry/browser": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.16.1.tgz",
- "integrity": "sha512-uXXKRGLWDqwaKO09K1GTTV0Yj+OfELVs+0cDDYqPDow+DlIXyx0gSnZPd0caCqFllUy8JSxb4S9OprYinvks2A==",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.17.0.tgz",
+ "integrity": "sha512-++pXpCHtdek1cRUwVeLvlxUJ2w1s+eiC9qN1N+7+HdAjHpBz2/tA1sKBCqwwVQZ490Cf2GLll9Ao7fuPPmveRQ==",
"requires": {
- "@sentry/core": "5.16.1",
- "@sentry/types": "5.16.1",
- "@sentry/utils": "5.16.1",
+ "@sentry/core": "5.17.0",
+ "@sentry/types": "5.17.0",
+ "@sentry/utils": "5.17.0",
"tslib": "^1.9.3"
}
},
"@sentry/core": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.16.1.tgz",
- "integrity": "sha512-CDKUAUWefZ+bx7tUGm7pgkuJbwn+onAlwzKkLGVg730IP+N/AWSpVtbvFTPiel2+NPiFhWX5/F0SpxDMLPRKfg==",
- "requires": {
- "@sentry/hub": "5.16.1",
- "@sentry/minimal": "5.16.1",
- "@sentry/types": "5.16.1",
- "@sentry/utils": "5.16.1",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.17.0.tgz",
+ "integrity": "sha512-Kfx4rGKDC7V1YJjTGJXyl12VVHxM8Cjpu61YOyF8kXoXXg9u06C3n0G1dmfzLQERKXasUVMtXRBdKx/OjYpl1g==",
+ "requires": {
+ "@sentry/hub": "5.17.0",
+ "@sentry/minimal": "5.17.0",
+ "@sentry/types": "5.17.0",
+ "@sentry/utils": "5.17.0",
"tslib": "^1.9.3"
}
},
"@sentry/hub": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.16.1.tgz",
- "integrity": "sha512-Og4zxp0lM9yS6TyKbZ5lQR94f/fNOalodm71Dk4qfBWi0OzfFCVpO4fPOhHtbXEsvMNg5xh0Pe8ezqX3CZ3hTw==",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.17.0.tgz",
+ "integrity": "sha512-lyUbEmshwaMYdAzy4iwgizgvKODVVloB2trnefpq90AuWCdvzcxMLIGULx1ou+KohccqdNorYICKWeuRscKq5A==",
"requires": {
- "@sentry/types": "5.16.1",
- "@sentry/utils": "5.16.1",
+ "@sentry/types": "5.17.0",
+ "@sentry/utils": "5.17.0",
"tslib": "^1.9.3"
}
},
"@sentry/minimal": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.16.1.tgz",
- "integrity": "sha512-RCwEKLneV5BQlv1MEmsCR3I5jajHgVGusBgwGgnFv+4Cn4cNC7OHWH4QbuZ3IHOEHJl7YS074BeluM+7jn0+Tw==",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.17.0.tgz",
+ "integrity": "sha512-v8xfkySXKrliZO6er6evlVe/ViUcqN0O8BhGyauK28Mf+KnKEOs5W6oWbt4qCDIttw9ynKIYyRrkAl/9oUR76A==",
"requires": {
- "@sentry/hub": "5.16.1",
- "@sentry/types": "5.16.1",
+ "@sentry/hub": "5.17.0",
+ "@sentry/types": "5.17.0",
"tslib": "^1.9.3"
}
},
"@sentry/node": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.16.1.tgz",
- "integrity": "sha512-V4RFI1M8JweZdLlTWPGFgTeNL+PeX2k3qBIqzIH/3OwVdS2rGr8NsrELJ6R3T0M+XbyjvTRYgjOWVROFHdeIWg==",
- "requires": {
- "@sentry/apm": "5.16.1",
- "@sentry/core": "5.16.1",
- "@sentry/hub": "5.16.1",
- "@sentry/types": "5.16.1",
- "@sentry/utils": "5.16.1",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.17.0.tgz",
+ "integrity": "sha512-gaM+LNjQc7Wm+RG4f7KGZ/+An8RQ9/8CkJDB/DP4qwufsaIrcg1dZa6KeAUnh3KaXZ+ZuPji+agCIV/AQU4x8g==",
+ "requires": {
+ "@sentry/apm": "5.17.0",
+ "@sentry/core": "5.17.0",
+ "@sentry/hub": "5.17.0",
+ "@sentry/types": "5.17.0",
+ "@sentry/utils": "5.17.0",
"cookie": "^0.3.1",
"https-proxy-agent": "^4.0.0",
"lru_map": "^0.3.3",
@@ -1395,16 +1395,16 @@
}
},
"@sentry/types": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.16.1.tgz",
- "integrity": "sha512-uERNhBdsiWvWG7qTC9QVsvFmOSL8rFfy8usEXeH3l4oCQao9TvGUvXJv6gRfiWmoiJZ1A0608Lj15CORygdbng=="
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.17.0.tgz",
+ "integrity": "sha512-1z8EXzvg8GcsBNnSXgB5/G7mz2PwmMt9mjOrVG1jhtSGH1c7WvB32F5boqoMcjIJmy5MrBGaaXwrF/RRJrwUQg=="
},
"@sentry/utils": {
- "version": "5.16.1",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.16.1.tgz",
- "integrity": "sha512-hn2jTc6ZH1lXGij7yqkV6cGhEYxsdjqB5P4MjfrRHB5bk5opY9R89bsAhs1rpanTdwv6Ul0ieR1z18gdIgUf0g==",
+ "version": "5.17.0",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.17.0.tgz",
+ "integrity": "sha512-qn8WgZcSkV/rx0ezp9q/xFjP7aMaYZO1/JYLXV4o6pYrQ9tvMmmwAZT39FpJunhhbkR36WNEuRB9C2K250cb/A==",
"requires": {
- "@sentry/types": "5.16.1",
+ "@sentry/types": "5.17.0",
"tslib": "^1.9.3"
}
},
@@ -1480,25 +1480,6 @@
"@babel/types": "^7.3.0"
}
},
- "@types/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
- "dev": true,
- "requires": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "@types/bson": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.2.tgz",
- "integrity": "sha512-+uWmsejEHfmSjyyM/LkrP0orfE2m5Mx9Xel4tXNeqi1ldK5XMQcDsFkBmLDtuyKUbxj2jGDo0H240fbCRJZo7Q==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
@@ -1510,47 +1491,6 @@
"integrity": "sha512-SvCBBPzOIe/3Tu7jTl2Q8NjITjLmq9m7obzjSyb8PXWWZ31xVK6w4T6v8fOx+lrgQnqk3Yxc00LDolFsSakKCA==",
"dev": true
},
- "@types/connect": {
- "version": "3.4.33",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
- "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/cors": {
- "version": "2.8.6",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz",
- "integrity": "sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg==",
- "dev": true,
- "requires": {
- "@types/express": "*"
- }
- },
- "@types/express": {
- "version": "4.17.6",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.6.tgz",
- "integrity": "sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w==",
- "dev": true,
- "requires": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "*",
- "@types/qs": "*",
- "@types/serve-static": "*"
- }
- },
- "@types/express-serve-static-core": {
- "version": "4.17.7",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.7.tgz",
- "integrity": "sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*"
- }
- },
"@types/fs-extra": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.1.tgz",
@@ -1580,9 +1520,9 @@
}
},
"@types/istanbul-lib-coverage": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz",
- "integrity": "sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
+ "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
"dev": true
},
"@types/istanbul-lib-report": {
@@ -1604,70 +1544,12 @@
"@types/istanbul-lib-report": "*"
}
},
- "@types/mime": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.2.tgz",
- "integrity": "sha512-4kPlzbljFcsttWEq6aBW0OZe6BDajAmyvr2xknBG92tejQnvdGtT9+kXSZ580DqpxY9qG2xeQVF9Dq0ymUTo5Q==",
- "dev": true
- },
- "@types/mongodb": {
- "version": "3.5.20",
- "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.5.20.tgz",
- "integrity": "sha512-BN0wJn670DkivxiP7ZW0InX4qBtX01qITaucD+3A+sTgPQo4XUYay0Y+sGM4MJ9OyKDRlb3RQuVAlyeWzl/NoA==",
- "dev": true,
- "requires": {
- "@types/bson": "*",
- "@types/node": "*"
- }
- },
- "@types/mongoose": {
- "version": "5.7.23",
- "resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.7.23.tgz",
- "integrity": "sha512-Yh1vXr+Y+ro887sma0kihtvbazy3prC+gjT0FJZ/Kt6rOQoHnCRm8oiOvDWGncP3YVXAoCj4YeNLp7moIyBKIQ==",
- "dev": true,
- "requires": {
- "@types/mongodb": "*",
- "@types/node": "*"
- }
- },
- "@types/morgan": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.0.tgz",
- "integrity": "sha512-warrzirh5dlTMaETytBTKR886pRXwr+SMZD87ZE13gLMR8Pzz69SiYFkvoDaii78qGP1iyBIUYz5GiXyryO//A==",
- "dev": true,
- "requires": {
- "@types/express": "*"
- }
- },
"@types/node": {
- "version": "14.0.9",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.9.tgz",
- "integrity": "sha512-0sCTiXKXELOBxvZLN4krQ0FPOAA7ij+6WwvD0k/PHd9/KAkr4dXel5J9fh6F4x1FwAQILqAWkmpeuS6mjf1iKA==",
+ "version": "14.0.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz",
+ "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA==",
"dev": true
},
- "@types/node-fetch": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz",
- "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "form-data": "^3.0.0"
- },
- "dependencies": {
- "form-data": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
- "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- }
- }
- },
"@types/normalize-package-data": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
@@ -1680,43 +1562,6 @@
"integrity": "sha512-boy4xPNEtiw6N3abRhBi/e7hNvy3Tt8E9ZRAQrwAGzoCGZS/1wjo9KY7JHhnfnEsG5wSjDbymCozUM9a3ea7OQ==",
"dev": true
},
- "@types/prop-types": {
- "version": "15.7.3",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
- "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==",
- "dev": true
- },
- "@types/qs": {
- "version": "6.9.3",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.3.tgz",
- "integrity": "sha512-7s9EQWupR1fTc2pSMtXRQ9w9gLOcrJn+h7HOXw4evxyvVqMi4f+q7d2tnFe3ng3SNHjtK+0EzGMGFUQX4/AQRA==",
- "dev": true
- },
- "@types/range-parser": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
- "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==",
- "dev": true
- },
- "@types/react": {
- "version": "16.9.35",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.35.tgz",
- "integrity": "sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ==",
- "dev": true,
- "requires": {
- "@types/prop-types": "*",
- "csstype": "^2.2.0"
- }
- },
- "@types/react-dom": {
- "version": "16.9.8",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.8.tgz",
- "integrity": "sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==",
- "dev": true,
- "requires": {
- "@types/react": "*"
- }
- },
"@types/recursive-readdir": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz",
@@ -1735,16 +1580,6 @@
"@types/node": "*"
}
},
- "@types/serve-static": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.4.tgz",
- "integrity": "sha512-jTDt0o/YbpNwZbQmE/+2e+lfjJEJJR0I3OFaKQKPWkASkCoW3i6fsUnqudSMcNAfbtmADGu8f4MV4q+GqULmug==",
- "dev": true,
- "requires": {
- "@types/express-serve-static-core": "*",
- "@types/mime": "*"
- }
- },
"@types/stack-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
@@ -1796,20 +1631,10 @@
"integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==",
"dev": true
},
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
"acorn": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz",
- "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
+ "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
"dev": true
},
"acorn-globals": {
@@ -1947,12 +1772,6 @@
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true
},
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
- "dev": true
- },
"array-unique": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
@@ -2146,15 +1965,6 @@
}
}
},
- "basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -2164,95 +1974,6 @@
"tweetnacl": "^0.14.3"
}
},
- "bl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz",
- "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==",
- "dev": true,
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "bluebird": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
- "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
- "dev": true
- },
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "dev": true,
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true
- }
- }
- },
"boxen": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
@@ -2329,12 +2050,6 @@
"node-int64": "^0.4.0"
}
},
- "bson": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.4.tgz",
- "integrity": "sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==",
- "dev": true
- },
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -2346,12 +2061,6 @@
"resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
"integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og="
},
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "dev": true
- },
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -2410,9 +2119,9 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"caniuse-lite": {
- "version": "1.0.30001077",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001077.tgz",
- "integrity": "sha512-AEzsGvjBJL0lby/87W96PyEvwN0GsYvk5LHsglLg9tW37K4BqvAvoSCdWIE13OZQ8afupqZ73+oL/1LkedN8hA==",
+ "version": "1.0.30001081",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001081.tgz",
+ "integrity": "sha512-iZdh3lu09jsUtLE6Bp8NAbJskco4Y3UDtkR3GTCJGsbMowBU5IWDFF79sV2ws7lSqTzWyKazxam2thasHymENQ==",
"dev": true
},
"capture-exit": {
@@ -2431,9 +2140,9 @@
"dev": true
},
"chalk": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz",
- "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -2598,21 +2307,6 @@
"xdg-basedir": "^4.0.0"
}
},
- "content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
- "dev": true
- },
"convert-source-map": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
@@ -2627,12 +2321,6 @@
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
},
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
- "dev": true
- },
"copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -2677,16 +2365,6 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
- "cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "dev": true,
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -2745,12 +2423,6 @@
}
}
},
- "csstype": {
- "version": "2.6.10",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.10.tgz",
- "integrity": "sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==",
- "dev": true
- },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -2891,24 +2563,6 @@
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
- "denque": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
- "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
"detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -2961,16 +2615,10 @@
"safer-buffer": "^2.1.0"
}
},
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
"electron-to-chromium": {
- "version": "1.3.459",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.459.tgz",
- "integrity": "sha512-aN3Z89qEYIwVjzGi9SrcTjjopRZ3STUA6xTufS0fxZy8xOO2iqVw8rYKdT32CHgOKHOYj5KGmz3n6xUKE4QJiQ==",
+ "version": "1.3.467",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.467.tgz",
+ "integrity": "sha512-U+QgsL8TZDU/n+rDnYDa3hY5uy3C4iry9mrJS0PNBBGwnocuQ+aHSfgY44mdlaK9744X5YqrrGUvD9PxCLY1HA==",
"dev": true
},
"emoji-regex": {
@@ -2978,12 +2626,6 @@
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true
- },
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -3006,12 +2648,6 @@
"resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
"integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q=="
},
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
- },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -3048,12 +2684,6 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
- },
"exec-sh": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
@@ -3145,73 +2775,6 @@
"jest-regex-util": "^26.0.0"
}
},
- "express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "dev": true
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true
- }
- }
- },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -3321,9 +2884,9 @@
"dev": true
},
"fast-deep-equal": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
- "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"fast-json-stable-stringify": {
@@ -3364,38 +2927,6 @@
"to-regex-range": "^5.0.1"
}
},
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@@ -3429,12 +2960,6 @@
"mime-types": "^2.1.12"
}
},
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
- "dev": true
- },
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -3444,16 +2969,10 @@
"map-cache": "^0.2.2"
}
},
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
- },
"fs-extra": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz",
- "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+ "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
"requires": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
@@ -3689,27 +3208,6 @@
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
},
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
- }
- },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -3831,12 +3329,6 @@
"integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
"dev": true
},
- "ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "dev": true
- },
"is-accessor-descriptor": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@@ -4722,12 +4214,6 @@
"verror": "1.10.0"
}
},
- "kareem": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
- "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==",
- "dev": true
- },
"keyv": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
@@ -4919,37 +4405,12 @@
"object-visit": "^1.0.0"
}
},
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "dev": true
- },
- "memory-pager": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
- "dev": true,
- "optional": true
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
- "dev": true
- },
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "dev": true
- },
"micromatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
@@ -4960,12 +4421,6 @@
"picomatch": "^2.0.5"
}
},
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
"mime-db": {
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
@@ -5031,117 +4486,6 @@
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true
},
- "mongodb": {
- "version": "3.5.8",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.8.tgz",
- "integrity": "sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==",
- "dev": true,
- "requires": {
- "bl": "^2.2.0",
- "bson": "^1.1.4",
- "denque": "^1.4.1",
- "require_optional": "^1.0.1",
- "safe-buffer": "^5.1.2",
- "saslprep": "^1.0.0"
- }
- },
- "mongoose": {
- "version": "5.9.18",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.18.tgz",
- "integrity": "sha512-agZbIuQcN1gZ12BJn6KesA+bgsvoLVjCwhfPw88hggxX8O24SWK4EJwN35GEZKDej9AHUZKNAPgmdeXCVQxviA==",
- "dev": true,
- "requires": {
- "bson": "^1.1.4",
- "kareem": "2.3.1",
- "mongodb": "3.5.8",
- "mongoose-legacy-pluralize": "1.0.2",
- "mpath": "0.7.0",
- "mquery": "3.2.2",
- "ms": "2.1.2",
- "regexp-clone": "1.0.0",
- "safe-buffer": "5.1.2",
- "sift": "7.0.1",
- "sliced": "1.0.1"
- }
- },
- "mongoose-legacy-pluralize": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
- "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==",
- "dev": true
- },
- "morgan": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
- "dev": true,
- "requires": {
- "basic-auth": "~2.0.1",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.2"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "mpath": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz",
- "integrity": "sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg==",
- "dev": true
- },
- "mquery": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz",
- "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==",
- "dev": true,
- "requires": {
- "bluebird": "3.5.1",
- "debug": "3.1.0",
- "regexp-clone": "^1.0.0",
- "safe-buffer": "5.1.2",
- "sliced": "1.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -5177,24 +4521,12 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "dev": true
- },
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
- "node-fetch": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz",
- "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==",
- "dev": true
- },
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -5290,12 +4622,6 @@
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"dev": true
},
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
@@ -5363,21 +4689,6 @@
"isobject": "^3.0.1"
}
},
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true
- },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -5516,12 +4827,6 @@
"integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
"dev": true
},
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -5552,12 +4857,6 @@
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
- "dev": true
- },
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -5705,27 +5004,6 @@
"sisteransi": "^1.0.4"
}
},
- "prop-types": {
- "version": "15.7.2",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
- "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "proxy-addr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
- "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
- "dev": true,
- "requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.9.1"
- }
- },
"psl": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -5761,24 +5039,6 @@
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
"dev": true
},
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
- },
- "raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dev": true,
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -5790,29 +5050,6 @@
"strip-json-comments": "~2.0.1"
}
},
- "react": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
- "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- }
- },
- "react-dom": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
- "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- }
- },
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -5879,9 +5116,9 @@
}
},
"regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
+ "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==",
"dev": true
},
"regenerate-unicode-properties": {
@@ -5919,12 +5156,6 @@
"safe-regex": "^1.1.0"
}
},
- "regexp-clone": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
- "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==",
- "dev": true
- },
"regexpu-core": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
@@ -6086,30 +5317,6 @@
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true
},
- "require_optional": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
- "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
- "dev": true,
- "requires": {
- "resolve-from": "^2.0.0",
- "semver": "^5.1.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
- "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
@@ -6352,16 +5559,6 @@
}
}
},
- "saslprep": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
- "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
- "dev": true,
- "optional": true,
- "requires": {
- "sparse-bitfield": "^3.0.3"
- }
- },
"saxes": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
@@ -6371,16 +5568,6 @@
"xmlchars": "^2.2.0"
}
},
- "scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
@@ -6401,64 +5588,6 @@
}
}
},
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- }
- }
- },
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dev": true,
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@@ -6488,12 +5617,6 @@
}
}
},
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true
- },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -6516,12 +5639,6 @@
"dev": true,
"optional": true
},
- "sift": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
- "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==",
- "dev": true
- },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -6539,12 +5656,6 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
- "sliced": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
- "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=",
- "dev": true
- },
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -6708,16 +5819,6 @@
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true
},
- "sparse-bitfield": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
- "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
- "dev": true,
- "optional": true,
- "requires": {
- "memory-pager": "^1.0.2"
- }
- },
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@@ -6820,12 +5921,6 @@
}
}
},
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
- },
"stealthy-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
@@ -7058,12 +6153,6 @@
"is-number": "^7.0.0"
}
},
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "dev": true
- },
"tough-cookie": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
@@ -7124,16 +6213,6 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
"integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ=="
},
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
@@ -7143,9 +6222,9 @@
}
},
"typescript": {
- "version": "3.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz",
- "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==",
+ "version": "3.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz",
+ "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==",
"dev": true
},
"unicode-canonical-property-names-ecmascript": {
@@ -7201,12 +6280,6 @@
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
"integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
},
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
- },
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -7319,12 +6392,6 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true
- },
"uuid": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
@@ -7369,12 +6436,6 @@
"builtins": "^1.0.3"
}
},
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "dev": true
- },
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
diff --git a/package.json b/package.json
index e90c4a1..e3ddd7e 100644
--- a/package.json
+++ b/package.json
@@ -37,37 +37,23 @@
"devDependencies": {
"@babel/plugin-transform-runtime": "^7.10.1",
"@babel/preset-env": "^7.10.2",
- "@types/cors": "^2.8.6",
- "@types/express": "^4.17.6",
"@types/fs-extra": "^9.0.1",
"@types/inquirer": "^6.5.0",
- "@types/mongoose": "^5.7.23",
- "@types/morgan": "^1.9.0",
- "@types/node": "^14.0.9",
- "@types/node-fetch": "^2.5.7",
- "@types/react": "^16.9.35",
- "@types/react-dom": "^16.9.8",
+ "@types/node": "^14.0.13",
"@types/recursive-readdir": "^2.2.0",
"@types/semver": "^7.2.0",
"@types/update-notifier": "^4.1.0",
"@types/validate-npm-package-name": "^3.0.0",
"copyfiles": "^2.3.0",
- "cors": "^2.8.5",
- "express": "^4.17.1",
"jest": "^26.0.1",
- "mongoose": "^5.9.18",
- "morgan": "^1.10.0",
- "node-fetch": "^2.6.0",
"prettier": "^2.0.5",
- "react": "^16.13.1",
- "react-dom": "^16.13.1",
- "typescript": "^3.9.3"
+ "typescript": "^3.9.5"
},
"dependencies": {
- "@sentry/node": "^5.16.0",
- "chalk": "^4.0.0",
+ "@sentry/node": "^5.17.0",
+ "chalk": "^4.1.0",
"commander": "^5.1.0",
- "fs-extra": "^9.0.0",
+ "fs-extra": "^9.0.1",
"inquirer": "^7.1.0",
"ora": "^4.0.4",
"recursive-readdir": "^2.2.2",
From 972ec62a96a88a7a0defa90d529e91864bbfaea1 Mon Sep 17 00:00:00 2001
From: alexlee-dev
Date: Thu, 11 Jun 2020 21:44:29 -0700
Subject: [PATCH 5/8] =?UTF-8?q?=E2=9C=8F=EF=B8=8F=20Ensure=20Dependencies?=
=?UTF-8?q?=20and=20Add=20'Built=20With'=20Sections=20to=20README's=20-=20?=
=?UTF-8?q?#9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 5 +++--
README.md | 22 ++++++++++++++++++++++
src/constants.ts | 17 +++++++++--------
src/template/README.md | 36 ++++++++++++++++++++++++++++++++++++
4 files changed, 70 insertions(+), 10 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fcde6a1..bc794ca 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-# Changelog
+\# Changelog
All notable changes to this project will be documented in this file.
@@ -9,7 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
-- Comments in template files [#22](https://github.com/alexlee-dev/create-mern-application/issues/22)
+- Comments in template files - [#22](https://github.com/alexlee-dev/create-mern-application/issues/22)
+- README `Built With` section - [#9](https://github.com/alexlee-dev/create-mern-application/issues/9)
### Changed
diff --git a/README.md b/README.md
index b615a1a..4ceb731 100644
--- a/README.md
+++ b/README.md
@@ -83,6 +83,28 @@ Please be sure to have your MongoDB instance running prior to starting your appl
## ⛏️ Built Using
+### Dependencies
+
+- [@sentry/node](https://sentry.io/welcome/) - Sentry is cross-platform application monitoring, with a focus on error reporting.
+- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right.
+- [commander](https://github.com/tj/commander.js) - Node.js command-line interfaces made easy.
+- [fs-extra](https://github.com/jprichardson/node-fs-extra) - Node.js: extra methods for the fs object like copy(), remove(), mkdirs().
+- [inquirer](https://github.com/SBoudrias/Inquirer.js) - A collection of common interactive command line user interfaces.
+- [ora](https://github.com/sindresorhus/ora) - Elegant terminal spinner.
+- [recursive-readdir](https://github.com/jergason/recursive-readdir) - Node.js module to list all files in a directory or any subdirectories.
+- [semver](https://github.com/npm/node-semver) - The semver parser for node (the one npm uses).
+- [update-notifier](https://github.com/yeoman/update-notifier) - Update notifications for your CLI app.
+- [validate-npm-package-name](https://github.com/npm/validate-npm-package-name) - Is the given string an acceptable npm package name?
+
+### DevDependencies
+
+- [@babel/plugin-transform-runtime](https://www.npmjs.com/package/@babel/plugin-transform-runtime) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@babel/preset-env](https://www.npmjs.com/package/@babel/preset-env) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [copyfiles](https://github.com/calvinmetcalf/copyfiles) - Copy files on the command line.
+- [jest](https://jestjs.io/) - Delightful JavaScript Testing.
+- [prettier](https://prettier.io/) - Prettier is an opinionated code formatter.
+- [typescript](https://www.typescriptlang.org/) - A typed superset of JavaScript that compiles to plain JavaScript.
+
## ✍️ Authors
- [Alex Lee](https://github.com/alexlee-dev) - Application Developer
diff --git a/src/constants.ts b/src/constants.ts
index 69d9e25..daf7c10 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -16,8 +16,16 @@ export const dependencies = [
* These dev dependencies are for JavaScript projects.
*/
export const devDependencies = [
- "@babel/core",
+ "@types/react",
+ "@types/react-dom",
+ "@types/cors",
+ "@types/express",
+ "@types/mongoose",
+ "@types/morgan",
+ "@types/node-fetch",
"@babel/cli",
+ "@babel/core",
+ "@babel/plugin-proposal-class-properties",
"@babel/plugin-transform-runtime",
"@babel/preset-env",
"@babel/preset-react",
@@ -37,13 +45,6 @@ export const devDependencies = [
"webpack",
"webpack-cli",
"webpack-dev-server",
- "@types/react",
- "@types/react-dom",
- "@types/cors",
- "@types/express",
- "@types/mongoose",
- "@types/morgan",
- "@types/node-fetch",
];
/**
diff --git a/src/template/README.md b/src/template/README.md
index dda6599..24c6146 100644
--- a/src/template/README.md
+++ b/src/template/README.md
@@ -31,6 +31,42 @@ Please be sure to start your MongoDB instance prior to starting your application
## ⛏️ Built Using
+### Dependencies
+
+- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right.
+- [cors](https://github.com/expressjs/cors) - Node.js CORS middleware.
+- [express](https://expressjs.com/) - Fast, unopinionated, minimalist web framework for node.
+- [mongoose](https://mongoosejs.com/) - MongoDB object modeling designed to work in an asynchronous environment.
+- [morgan](https://github.com/expressjs/morgan) - HTTP request logger middleware for node.js.
+- [node-fetch](https://github.com/node-fetch/node-fetch) - A light-weight module that brings window.fetch to Node.js.
+- [react](https://reactjs.org/) - A declarative, efficient, and flexible JavaScript library for building user interfaces.
+- [react-dom](https://www.npmjs.com/package/react-dom) - A declarative, efficient, and flexible JavaScript library for building user interfaces.
+
+### DevDependencies
+
+- [@babel/cli](https://www.npmjs.com/package/@babel/cli) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@babel/core](https://www.npmjs.com/package/@babel/core) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@babel/runtime](https://www.npmjs.com/package/@babel/runtime) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@babel/plugin-proposal-class-properties](https://www.npmjs.com/package/@babel/plugin-proposal-class-properties) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@babel/plugin-transform-runtime](https://www.npmjs.com/package/@babel/plugin-transform-runtime) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@babel/preset-env](https://www.npmjs.com/package/@babel/preset-env) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@babel/preset-react](https://www.npmjs.com/package/@babel/preset-react) - 🐠 Babel is a compiler for writing next generation JavaScript.
+- [@svgr/webpack](https://github.com/gregberge/svgr/tree/master/packages/webpack) - Webpack loader for SVGR.
+- [babel-loader](https://github.com/babel/babel-loader) - 📦 Babel loader for webpack.
+- [clean-webpack-plugin](https://github.com/johnagan/clean-webpack-plugin) - A webpack plugin to remove your build folder(s) before building.
+- [copyfiles](https://github.com/calvinmetcalf/copyfiles) - Copy files on the command line.
+- [css-loader](https://github.com/webpack-contrib/css-loader) - CSS Loader.
+- [env-cmd](https://github.com/toddbluhm/env-cmd) - Setting the environment from a file.
+- [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin) - Simplifies creation of HTML files to serve your webpack bundles.
+- [rimraf](https://github.com/isaacs/rimraf) - A `rm -rf` util for nodejs.
+- [source-map-loader](https://webpack.js.org/loaders/source-map-loader/) - Source map loader.
+- [start-server-and-test](https://github.com/bahmutov/start-server-and-test) - Starts server, waits for URL, then runs test command; when the tests end, shuts down server.
+- [style-loader](https://github.com/webpack-contrib/style-loader) - Style loader.
+- [url-loader](https://webpack.js.org/loaders/url-loader/) - A loader for webpack which transforms files into base64 URIs.
+- [webpack](https://webpack.js.org/) - A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through "loaders", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.
+- [webpack-cli](https://webpack.js.org/api/cli/) - Webpack's Command Line Interface.
+- [webpack-dev-server](https://webpack.js.org/configuration/dev-server/) - Serves a webpack app. Updates the browser on changes.
+
## ✍️ Authors
- [YOUR NAME](YOUR WEBSITE URL) - YOUR TITLE
From 64aa92d584a262857254bf5e3dc3cbd82423f7b2 Mon Sep 17 00:00:00 2001
From: alexlee-dev
Date: Thu, 11 Jun 2020 22:27:50 -0700
Subject: [PATCH 6/8] =?UTF-8?q?=F0=9F=93=B8=20-=20GIF=20-=20#33?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 1 +
README.md | 4 +-
gifs/example.gif | Bin 0 -> 7409504 bytes
gifs/example.yml | 376 +++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 380 insertions(+), 1 deletion(-)
create mode 100644 gifs/example.gif
create mode 100644 gifs/example.yml
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc794ca..2893259 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Comments in template files - [#22](https://github.com/alexlee-dev/create-mern-application/issues/22)
- README `Built With` section - [#9](https://github.com/alexlee-dev/create-mern-application/issues/9)
+- GIF - [#33](https://github.com/alexlee-dev/create-mern-application/issues/33)
### Changed
diff --git a/README.md b/README.md
index 4ceb731..373d45f 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,8 @@
+![Example of create-mern-application running](gifs/example.gif)
+
## 📝 Table of Contents
- [About](#about)
@@ -73,7 +75,7 @@ Want support for an additional language? Feel free to open a [new issue](https:/
You can choose to use the application in an interactive mode by passing the flag `--interactive`.
-This mode grants you several additinoal options.
+This mode grants you several additional options.
### Starting the Application
diff --git a/gifs/example.gif b/gifs/example.gif
new file mode 100644
index 0000000000000000000000000000000000000000..0acf9d06d6ab2211f16d24415e9340db1ff9f85e
GIT binary patch
literal 7409504
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