├── .gitignore
├── LICENSE
├── dist
├── controllers
│ ├── admin.js
│ ├── admin.js.map
│ ├── error.js
│ ├── error.js.map
│ ├── interface
│ │ ├── shop.js
│ │ └── shop.js.map
│ ├── shop.js
│ └── shop.js.map
├── css
│ ├── cart.css
│ ├── forms.css
│ ├── main.css
│ └── product.css
├── index.js
├── index.js.map
├── js
│ └── main.js
├── models
│ ├── cart-item.js
│ ├── cart-item.js.map
│ ├── cart.js
│ ├── cart.js.map
│ ├── order-item.js
│ ├── order-item.js.map
│ ├── order.js
│ ├── order.js.map
│ ├── product.js
│ ├── product.js.map
│ ├── user.js
│ └── user.js.map
└── routes
│ ├── add-products.js
│ ├── add-products.js.map
│ ├── admin.js
│ ├── admin.js.map
│ ├── form.js
│ ├── form.js.map
│ ├── home.js
│ ├── home.js.map
│ ├── shop.js
│ ├── shop.js.map
│ ├── user.js
│ └── user.js.map
├── ormconfig.json
├── package-lock.json
├── package.json
├── readme.md
├── src
├── controllers
│ ├── admin.ts
│ ├── error.ts
│ ├── interface
│ │ └── shop.ts
│ └── shop.ts
├── index.ts
├── models
│ ├── cart-item.ts
│ ├── cart.ts
│ ├── order-item.ts
│ ├── order.ts
│ ├── product.ts
│ └── user.ts
└── routes
│ ├── admin.ts
│ ├── shop.ts
│ └── user.ts
├── tsconfig.json
└── views
├── 404.ejs
├── admin
├── edit-product.ejs
└── products.ejs
├── includes
├── add-to-cart.ejs
├── end.ejs
├── head.ejs
└── navigation.ejs
└── shop
├── cart.ejs
├── checkout.ejs
├── index.ejs
├── orders.ejs
├── product-detail.ejs
└── product-list.ejs
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Aadarsh S
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/dist/controllers/admin.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const product_1 = require("../models/product");
4 | const user_1 = require("../models/user");
5 | const getAddProduct = (_req, res, _next) => {
6 | res.render('admin/edit-product', {
7 | pageTitle: 'ADD PRODUCTS',
8 | path: '/admin/add-product',
9 | editing: false,
10 | });
11 | };
12 | const postAddProduct = (req, res, _next) => {
13 | user_1.User.find({ select: ['id'] })
14 | .then(userID => {
15 | const product = new product_1.Product();
16 | product.title = req.body.title;
17 | product.imageUrl = req.body.imageUrl;
18 | product.price = req.body.price;
19 | product.description = req.body.description;
20 | product.userid = userID[userID.length - 1];
21 | product_1.Product.save(product);
22 | setTimeout(() => {
23 | res.redirect('/');
24 | }, 500);
25 | })
26 | .catch(console.log);
27 | };
28 | const getProducts = (_req, res, _next) => {
29 | product_1.Product.find({ where: { userid: 1 } })
30 | .then(products => {
31 | res.render('admin/products', {
32 | prods: products,
33 | pageTitle: 'ADMIN PRODUCTS',
34 | path: '/admin/products',
35 | });
36 | })
37 | .catch(console.log);
38 | };
39 | const getEditProduct = (req, res, _next) => {
40 | const prodId = +req.params.productId;
41 | const edit = req.query.edit;
42 | if (edit === 'false')
43 | res.redirect('/');
44 | product_1.Product.findOne({ id: +prodId })
45 | .then(prod => {
46 | if (!prod)
47 | res.redirect('/');
48 | res.render('admin/edit-product', {
49 | pageTitle: 'Edit Product',
50 | path: '/admin/edit-product',
51 | editing: edit,
52 | product: prod,
53 | });
54 | })
55 | .catch(console.log);
56 | };
57 | const postEditProduct = (req, res, _next) => {
58 | const prodId = +req.body.productId;
59 | if (typeof prodId === 'number') {
60 | product_1.Product.update({ id: prodId }, {
61 | title: req.body.title,
62 | imageUrl: req.body.imageUrl,
63 | price: req.body.price,
64 | description: req.body.description,
65 | });
66 | setTimeout(() => {
67 | res.redirect('/admin/products');
68 | }, 500);
69 | }
70 | };
71 | const postDeleteProduct = (req, res, _next) => {
72 | const prodId = +req.body.productId;
73 | if (typeof prodId === 'number') {
74 | product_1.Product.delete({ id: prodId });
75 | setTimeout(() => {
76 | res.redirect('/admin/products');
77 | }, 500);
78 | }
79 | };
80 | exports.default = module.exports = {
81 | getAddProduct,
82 | getProducts,
83 | postAddProduct,
84 | getEditProduct,
85 | postEditProduct,
86 | postDeleteProduct,
87 | };
88 | //# sourceMappingURL=admin.js.map
--------------------------------------------------------------------------------
/dist/controllers/admin.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/controllers/admin.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/dist/controllers/error.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | const error404 = (_req, res, _next) => {
4 | res.status(404).render('404', { pageTitle: 'Page Not Found', path: '/404' });
5 | };
6 | exports.default = module.exports = {
7 | error404,
8 | };
9 | //# sourceMappingURL=error.js.map
--------------------------------------------------------------------------------
/dist/controllers/error.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/controllers/error.ts"],"names":[],"mappings":";;AAEA,MAAM,QAAQ,GAAG,CAAC,IAAqB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC7F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC,OAAO,GAAG;IAC9B,QAAQ;CACT,CAAC"}
--------------------------------------------------------------------------------
/dist/controllers/interface/shop.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | //# sourceMappingURL=shop.js.map
--------------------------------------------------------------------------------
/dist/controllers/interface/shop.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"shop.js","sourceRoot":"","sources":["../../../src/controllers/interface/shop.ts"],"names":[],"mappings":""}
--------------------------------------------------------------------------------
/dist/controllers/shop.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | Object.defineProperty(exports, "__esModule", { value: true });
3 | exports.getHome = void 0;
4 | const cart_1 = require("../models/cart");
5 | const product_1 = require("../models/product");
6 | const cart_item_1 = require("../models/cart-item");
7 | const order_1 = require("../models/order");
8 | const user_1 = require("../models/user");
9 | const order_item_1 = require("../models/order-item");
10 | exports.getHome = (_req, res, _next) => {
11 | product_1.Product.find({ select: ['title', 'imageUrl', 'price', 'description', 'id'] })
12 | .then(products => {
13 | res.render('shop/index', {
14 | prods: products,
15 | pageTitle: 'SHOP',
16 | path: '/',
17 | });
18 | })
19 | .catch(console.log);
20 | };
21 | const getProducts = (_req, res, _next) => {
22 | product_1.Product.find({ select: ['title', 'imageUrl', 'price', 'description', 'id'] })
23 | .then(products => {
24 | res.render('shop/product-list', {
25 | prods: products,
26 | pageTitle: 'ALL PRODUCTS',
27 | path: '/products',
28 | });
29 | })
30 | .catch(console.log);
31 | };
32 | const getProduct = (req, res, _next) => {
33 | const prodID = +req.params.productId;
34 | product_1.Product.findOne({ id: prodID })
35 | .then(prod => {
36 | res.render('shop/product-detail', {
37 | product: prod,
38 | pageTitle: prod.title,
39 | path: '/products',
40 | });
41 | })
42 | .catch(console.log);
43 | };
44 | const getCart = (_req, res, _next) => {
45 | const product = [];
46 | cart_item_1.CartItem.find({ relations: ['prodid'] })
47 | .then(citem => {
48 | citem.forEach(item => {
49 | product.push({ id: item.id, title: item.prodid.title, cartItem: { quantity: item.quantity } });
50 | });
51 | res.render('shop/cart', {
52 | path: '/cart',
53 | pageTitle: 'Your Cart',
54 | products: product,
55 | });
56 | })
57 | .catch(console.log);
58 | };
59 | const postCart = (req, res, _next) => {
60 | const prodID = +req.body.productId;
61 | cart_item_1.CartItem.find({ relations: ['prodid'], where: { prodid: { id: prodID } } })
62 | .then(avaiProd => {
63 | if (avaiProd.length === 0) {
64 | product_1.Product.findOne({ where: { id: prodID } })
65 | .then(prod => {
66 | cart_1.Cart.find({ select: ['id'] })
67 | .then(cart => {
68 | const defQty = 1;
69 | const cartitem = new cart_item_1.CartItem();
70 | cartitem.quantity = defQty;
71 | cartitem.cartid = cart[cart.length - 1];
72 | cartitem.prodid = prod;
73 | cartitem.save();
74 | setTimeout(() => {
75 | res.redirect('/cart');
76 | }, 500);
77 | })
78 | .catch(console.log);
79 | })
80 | .catch(console.log);
81 | }
82 | else {
83 | const updateQty = avaiProd[0].quantity + 1;
84 | cart_item_1.CartItem.update({ id: avaiProd[0].id }, { quantity: updateQty });
85 | setTimeout(() => {
86 | res.redirect('/cart');
87 | }, 500);
88 | }
89 | })
90 | .catch(console.log);
91 | };
92 | const postDeleteCart = (req, res, _next) => {
93 | const prodId = +req.body.productId;
94 | cart_item_1.CartItem.delete({ id: prodId });
95 | setTimeout(() => {
96 | res.redirect('/cart');
97 | }, 300);
98 | };
99 | const getOrders = (_req, res, _next) => {
100 | const orders = [];
101 | order_item_1.OrderItem.find({ relations: ['orderid', 'prodid'], order: { id: 'ASC' } })
102 | .then(ord => {
103 | ord.forEach(singleOrd => {
104 | orders.push({
105 | id: singleOrd.id,
106 | products: [{ title: singleOrd.prodTitle, qty: singleOrd.quantity }],
107 | });
108 | });
109 | res.render('shop/orders', {
110 | path: '/orders',
111 | pageTitle: 'Your Orders',
112 | orders: orders,
113 | });
114 | })
115 | .catch(console.log);
116 | };
117 | const postOrder = (_req, res, _next) => {
118 | user_1.User.find({ select: ['id'] })
119 | .then(userId => {
120 | const userID = userId[userId.length - 1];
121 | const order = new order_1.Order();
122 | order.userid = userID;
123 | order.save();
124 | setTimeout(() => {
125 | order_1.Order.find({ relations: ['userid'], where: { userid: userID }, order: { id: 'DESC' }, take: 1 })
126 | .then(ord => {
127 | cart_item_1.CartItem.find({ relations: ['cartid', 'prodid'], where: { cartid: userID } })
128 | .then(cItem => {
129 | cItem.forEach(oItem => {
130 | const orderItem = new order_item_1.OrderItem();
131 | orderItem.quantity = oItem.quantity;
132 | orderItem.prodTitle = oItem.prodid.title;
133 | orderItem.orderid = ord[0];
134 | orderItem.prodid = oItem.prodid;
135 | orderItem.save();
136 | cart_item_1.CartItem.delete({ cartid: userID });
137 | });
138 | setTimeout(() => {
139 | res.redirect('/orders');
140 | }, 300);
141 | })
142 | .catch(console.log);
143 | })
144 | .catch(console.log);
145 | }, 700);
146 | })
147 | .catch(console.log);
148 | };
149 | exports.default = module.exports = {
150 | getHome: exports.getHome,
151 | getProducts,
152 | getCart,
153 | getOrders,
154 | postOrder,
155 | getProduct,
156 | postCart,
157 | postDeleteCart,
158 | };
159 | //# sourceMappingURL=shop.js.map
--------------------------------------------------------------------------------
/dist/controllers/shop.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"shop.js","sourceRoot":"","sources":["../../src/controllers/shop.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,+CAA4C;AAE5C,mDAA+C;AAC/C,2CAAwC;AACxC,yCAAsC;AACtC,qDAAiD;AAGpC,QAAA,OAAO,GAAG,CAAC,IAAqB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IACnG,iBAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;SAC1E,IAAI,CAAC,QAAQ,CAAC,EAAE;QACf,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE;YACvB,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,MAAM;YACjB,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;IACL,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAqB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAChG,iBAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC;SAC1E,IAAI,CAAC,QAAQ,CAAC,EAAE;QACf,GAAG,CAAC,MAAM,CAAC,mBAAmB,EAAE;YAC9B,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,cAAc;YACzB,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC9F,MAAM,MAAM,GAAW,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;IAC7C,iBAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,EAAE;QACX,GAAG,CAAC,MAAM,CAAC,qBAAqB,EAAE;YAChC,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,IAAK,CAAC,KAAK;YACtB,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,IAAqB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC5F,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,oBAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;SACrC,IAAI,CAAC,KAAK,CAAC,EAAE;QACZ,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;YACtB,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,WAAW;YACtB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;IACL,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC5F,MAAM,MAAM,GAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C,oBAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;SACxE,IAAI,CAAC,QAAQ,CAAC,EAAE;QACf,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,iBAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;iBACvC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACX,WAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;qBAC1B,IAAI,CAAC,IAAI,CAAC,EAAE;oBACX,MAAM,MAAM,GAAG,CAAC,CAAC;oBACjB,MAAM,QAAQ,GAAG,IAAI,oBAAQ,EAAE,CAAC;oBAChC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;oBAC3B,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACxC,QAAQ,CAAC,MAAM,GAAG,IAAe,CAAC;oBAClC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAChB,UAAU,CAAC,GAAG,EAAE;wBACd,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC,EAAE,GAAG,CAAC,CAAC;gBACV,CAAC,CAAC;qBACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC;iBACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SACvB;aAAM;YACL,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3C,oBAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,UAAU,CAAC,GAAG,EAAE;gBACd,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC,EAAE,GAAG,CAAC,CAAC;SACT;IACH,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAClG,MAAM,MAAM,GAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C,oBAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,UAAU,CAAC,GAAG,EAAE;QACd,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAqB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC9F,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,sBAAS,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;SACvE,IAAI,CAAC,GAAG,CAAC,EAAE;QACV,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;aACpE,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE;YACxB,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,aAAa;YACxB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAqB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC9F,WAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;SAC1B,IAAI,CAAC,MAAM,CAAC,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,UAAU,CAAC,GAAG,EAAE;YACd,aAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;iBAC7F,IAAI,CAAC,GAAG,CAAC,EAAE;gBACV,oBAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;qBAC1E,IAAI,CAAC,KAAK,CAAC,EAAE;oBACZ,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBACpB,MAAM,SAAS,GAAG,IAAI,sBAAS,EAAE,CAAC;wBAClC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;wBACpC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;wBACzC,SAAS,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;wBAChC,SAAS,CAAC,IAAI,EAAE,CAAC;wBACjB,oBAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;oBACH,UAAU,CAAC,GAAG,EAAE;wBACd,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC1B,CAAC,EAAE,GAAG,CAAC,CAAC;gBACV,CAAC,CAAC;qBACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC;iBACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC,OAAO,GAAG;IAC9B,OAAO,EAAP,eAAO;IACP,WAAW;IACX,OAAO;IACP,SAAS;IACT,SAAS;IACT,UAAU;IACV,QAAQ;IACR,cAAc;CACf,CAAC"}
--------------------------------------------------------------------------------
/dist/css/cart.css:
--------------------------------------------------------------------------------
1 | .cart__item-list {
2 | list-style: none;
3 | margin: 0;
4 | padding: 0;
5 | margin: auto;
6 | width: 40rem;
7 | max-width: 90%;
8 | }
9 |
10 | .cart__item {
11 | display: flex;
12 | align-items: center;
13 | justify-content: space-between;
14 | padding: 1rem;
15 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
16 | }
17 |
18 | .cart__item h1,
19 | .cart__item h2 {
20 | margin-right: 1rem;
21 | font-size: 1.2rem;
22 | margin: 0;
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/dist/css/forms.css:
--------------------------------------------------------------------------------
1 | .form-control {
2 | margin: 1rem 0;
3 | }
4 |
5 | .form-control label,
6 | .form-control input,
7 | .form-control textarea {
8 | display: block;
9 | width: 100%;
10 | margin-bottom: 0.25rem;
11 | }
12 |
13 | .form-control input,
14 | .form-control textarea {
15 | border: 1px solid #a1a1a1;
16 | font: inherit;
17 | border-radius: 2px;
18 | }
19 |
20 | .form-control input:focus,
21 | .form-control textarea:focus {
22 | outline-color: #00695c;
23 | }
24 |
--------------------------------------------------------------------------------
/dist/css/main.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700');
2 |
3 | * {
4 | box-sizing: border-box;
5 | }
6 |
7 | body {
8 | padding: 0;
9 | margin: 0;
10 | font-family: 'Open Sans', sans-serif;
11 | }
12 |
13 | main {
14 | padding: 1rem;
15 | margin: auto;
16 | }
17 |
18 | form {
19 | display: inline;
20 | }
21 |
22 | .centered {
23 | text-align: center;
24 | }
25 |
26 | .image {
27 | height: 20rem;
28 | }
29 |
30 | .image img {
31 | height: 100%;
32 | }
33 |
34 | .main-header {
35 | width: 100%;
36 | height: 3.5rem;
37 | background-color: #00695c;
38 | padding: 0 1.5rem;
39 | display: flex;
40 | align-items: center;
41 | }
42 |
43 | .main-header__nav {
44 | height: 100%;
45 | display: none;
46 | align-items: center;
47 | }
48 |
49 | .main-header__item-list {
50 | list-style: none;
51 | margin: 0;
52 | padding: 0;
53 | display: flex;
54 | }
55 |
56 | .main-header__item {
57 | margin: 0 1rem;
58 | padding: 0;
59 | }
60 |
61 | .main-header__item a {
62 | text-decoration: none;
63 | color: white;
64 | }
65 |
66 | .main-header__item a:hover,
67 | .main-header__item a:active,
68 | .main-header__item a.active {
69 | color: #ffeb3b;
70 | }
71 |
72 | .mobile-nav {
73 | width: 30rem;
74 | height: 100vh;
75 | max-width: 90%;
76 | position: fixed;
77 | left: 0;
78 | top: 0;
79 | background: white;
80 | z-index: 10;
81 | padding: 2rem 1rem 1rem 2rem;
82 | transform: translateX(-100%);
83 | transition: transform 0.3s ease-out;
84 | }
85 |
86 | .mobile-nav.open {
87 | transform: translateX(0);
88 | }
89 |
90 | .mobile-nav__item-list {
91 | list-style: none;
92 | display: flex;
93 | flex-direction: column;
94 | margin: 0;
95 | padding: 0;
96 | }
97 |
98 | .mobile-nav__item {
99 | margin: 1rem;
100 | padding: 0;
101 | }
102 |
103 | .mobile-nav__item a {
104 | text-decoration: none;
105 | color: black;
106 | font-size: 1.5rem;
107 | padding: 0.5rem 2rem;
108 | }
109 |
110 | .mobile-nav__item a:active,
111 | .mobile-nav__item a:hover,
112 | .mobile-nav__item a.active {
113 | background: #00695c;
114 | color: white;
115 | border-radius: 3px;
116 | }
117 |
118 | #side-menu-toggle {
119 | border: 1px solid white;
120 | font: inherit;
121 | padding: 0.5rem;
122 | display: block;
123 | background: transparent;
124 | color: white;
125 | cursor: pointer;
126 | }
127 |
128 | #side-menu-toggle:focus {
129 | outline: none;
130 | }
131 |
132 | #side-menu-toggle:active,
133 | #side-menu-toggle:hover {
134 | color: #ffeb3b;
135 | border-color: #ffeb3b;
136 | }
137 |
138 | .backdrop {
139 | position: fixed;
140 | top: 0;
141 | left: 0;
142 | width: 100%;
143 | height: 100vh;
144 | background: rgba(0, 0, 0, 0.5);
145 | z-index: 5;
146 | display: none;
147 | }
148 |
149 | .grid {
150 | display: flex;
151 | flex-wrap: wrap;
152 | justify-content: space-around;
153 | align-items: stretch;
154 | }
155 |
156 | .card {
157 | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
158 | }
159 |
160 | .card__header,
161 | .card__content {
162 | padding: 1rem;
163 | }
164 |
165 | .card__header h1,
166 | .card__content h1,
167 | .card__content h2,
168 | .card__content p {
169 | margin: 0;
170 | }
171 |
172 | .card__image {
173 | width: 100%;
174 | }
175 |
176 | .card__image img {
177 | width: 100%;
178 | }
179 |
180 | .card__actions {
181 | padding: 1rem;
182 | text-align: center;
183 | }
184 |
185 | .card__actions button,
186 | .card__actions a {
187 | margin: 0 0.25rem;
188 | }
189 |
190 | .btn {
191 | display: inline-block;
192 | padding: 0.25rem 1rem;
193 | text-decoration: none;
194 | font: inherit;
195 | border: 1px solid #00695c;
196 | color: #00695c;
197 | background: white;
198 | border-radius: 3px;
199 | cursor: pointer;
200 | }
201 |
202 | .btn:hover,
203 | .btn:active {
204 | background-color: #00695c;
205 | color: white;
206 | }
207 |
208 | .btn.danger {
209 | color: red;
210 | border-color: red;
211 | }
212 |
213 | .btn.danger:hover,
214 | .btn.danger:active {
215 | background: red;
216 | color: white;
217 | }
218 |
219 | @media (min-width: 768px) {
220 | .main-header__nav {
221 | display: flex;
222 | }
223 |
224 | #side-menu-toggle {
225 | display: none;
226 | }
227 | }
228 |
--------------------------------------------------------------------------------
/dist/css/product.css:
--------------------------------------------------------------------------------
1 | .product-form {
2 | width: 20rem;
3 | max-width: 90%;
4 | margin: auto;
5 | display: block;
6 | }
7 |
8 | .product-item {
9 | width: 20rem;
10 | max-width: 95%;
11 | margin: 1rem;
12 | }
13 |
14 | .product__title {
15 | font-size: 1.2rem;
16 | text-align: center;
17 | }
18 |
19 | .product__price {
20 | text-align: center;
21 | color: #4d4d4d;
22 | margin-bottom: 0.5rem;
23 | }
24 |
25 | .product__description {
26 | text-align: center;
27 | }
--------------------------------------------------------------------------------
/dist/index.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | require("reflect-metadata");
7 | const typeorm_1 = require("typeorm");
8 | const express_1 = __importDefault(require("express"));
9 | const body_parser_1 = __importDefault(require("body-parser"));
10 | const shop_1 = __importDefault(require("./routes/shop"));
11 | const admin_1 = __importDefault(require("./routes/admin"));
12 | const error_1 = __importDefault(require("./controllers/error"));
13 | const user_1 = __importDefault(require("./routes/user"));
14 | typeorm_1.createConnection()
15 | .then(_connection => {
16 | const app = express_1.default();
17 | app.set('view engine', 'ejs');
18 | app.use(body_parser_1.default.urlencoded({ extended: false }));
19 | app.use(express_1.default.static('dist'));
20 | app.use('/user', user_1.default.router);
21 | app.use('/admin', admin_1.default.router);
22 | app.use(shop_1.default);
23 | app.use(error_1.default.error404);
24 | app.listen(8080), console.log('Listening at 8080');
25 | })
26 | .catch(error => console.log(error));
27 | //# sourceMappingURL=index.js.map
--------------------------------------------------------------------------------
/dist/index.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,4BAA0B;AAC1B,qCAA2C;AAC3C,sDAA8B;AAC9B,8DAAqC;AACrC,yDAAuC;AACvC,2DAAuC;AACvC,gEAA6C;AAC7C,yDAAsC;AAEtC,0BAAgB,EAAE;KACf,IAAI,CAAC,WAAW,CAAC,EAAE;IAClB,MAAM,GAAG,GAAG,iBAAO,EAAE,CAAC;IAEtB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,qBAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACpD,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,cAAS,CAAC,MAAM,CAAC,CAAC;IAEnC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAS,CAAC,MAAM,CAAC,CAAC;IAEpC,GAAG,CAAC,GAAG,CAAC,cAAU,CAAC,CAAC;IAEpB,GAAG,CAAC,GAAG,CAAC,eAAU,CAAC,QAAQ,CAAC,CAAC;IAE7B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACrD,CAAC,CAAC;KACD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC"}
--------------------------------------------------------------------------------
/dist/js/main.js:
--------------------------------------------------------------------------------
1 | const backdrop = document.querySelector('.backdrop');
2 | const sideDrawer = document.querySelector('.mobile-nav');
3 | const menuToggle = document.querySelector('#side-menu-toggle');
4 |
5 | function backdropClickHandler() {
6 | backdrop.style.display = 'none';
7 | sideDrawer.classList.remove('open');
8 | }
9 |
10 | function menuToggleClickHandler() {
11 | backdrop.style.display = 'block';
12 | sideDrawer.classList.add('open');
13 | }
14 |
15 | backdrop.addEventListener('click', backdropClickHandler);
16 | menuToggle.addEventListener('click', menuToggleClickHandler);
17 |
--------------------------------------------------------------------------------
/dist/models/cart-item.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 | return c > 3 && r && Object.defineProperty(target, key, r), r;
7 | };
8 | var __metadata = (this && this.__metadata) || function (k, v) {
9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10 | };
11 | Object.defineProperty(exports, "__esModule", { value: true });
12 | exports.CartItem = void 0;
13 | const typeorm_1 = require("typeorm");
14 | const cart_1 = require("./cart");
15 | const product_1 = require("./product");
16 | let CartItem = class CartItem extends typeorm_1.BaseEntity {
17 | };
18 | __decorate([
19 | typeorm_1.PrimaryGeneratedColumn(),
20 | __metadata("design:type", Number)
21 | ], CartItem.prototype, "id", void 0);
22 | __decorate([
23 | typeorm_1.Column('smallint', { nullable: false }),
24 | __metadata("design:type", Number)
25 | ], CartItem.prototype, "quantity", void 0);
26 | __decorate([
27 | typeorm_1.ManyToOne(() => cart_1.Cart, cart => cart.cItem, { onDelete: 'CASCADE', onUpdate: 'CASCADE' }),
28 | typeorm_1.JoinColumn({ name: 'cartid' }),
29 | __metadata("design:type", cart_1.Cart)
30 | ], CartItem.prototype, "cartid", void 0);
31 | __decorate([
32 | typeorm_1.ManyToOne(() => product_1.Product, prod => prod.cItem, { onDelete: 'CASCADE', onUpdate: 'CASCADE' }),
33 | typeorm_1.JoinColumn({ name: 'productid' }),
34 | __metadata("design:type", product_1.Product)
35 | ], CartItem.prototype, "prodid", void 0);
36 | CartItem = __decorate([
37 | typeorm_1.Entity()
38 | ], CartItem);
39 | exports.CartItem = CartItem;
40 | //# sourceMappingURL=cart-item.js.map
--------------------------------------------------------------------------------
/dist/models/cart-item.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"cart-item.js","sourceRoot":"","sources":["../../src/models/cart-item.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAoG;AACpG,iCAA8B;AAC9B,uCAAoC;AAGpC,IAAa,QAAQ,GAArB,MAAa,QAAS,SAAQ,oBAAU;CAcvC,CAAA;AAZC;IADC,gCAAsB,EAAE;;oCACd;AAGX;IADC,gBAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;0CACvB;AAIjB;IAFC,mBAAS,CAAC,GAAG,EAAE,CAAC,WAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACvF,oBAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;8BACvB,WAAI;wCAAC;AAIb;IAFC,mBAAS,CAAC,GAAG,EAAE,CAAC,iBAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC1F,oBAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC1B,iBAAO;wCAAC;AAbL,QAAQ;IADpB,gBAAM,EAAE;GACI,QAAQ,CAcpB;AAdY,4BAAQ"}
--------------------------------------------------------------------------------
/dist/models/cart.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 | return c > 3 && r && Object.defineProperty(target, key, r), r;
7 | };
8 | var __metadata = (this && this.__metadata) || function (k, v) {
9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10 | };
11 | Object.defineProperty(exports, "__esModule", { value: true });
12 | exports.Cart = void 0;
13 | const typeorm_1 = require("typeorm");
14 | const user_1 = require("./user");
15 | const cart_item_1 = require("./cart-item");
16 | let Cart = class Cart extends typeorm_1.BaseEntity {
17 | };
18 | __decorate([
19 | typeorm_1.PrimaryGeneratedColumn(),
20 | __metadata("design:type", Number)
21 | ], Cart.prototype, "id", void 0);
22 | __decorate([
23 | typeorm_1.OneToOne(() => user_1.User, user => user.cartid, { onUpdate: 'CASCADE', onDelete: 'CASCADE' }),
24 | typeorm_1.JoinColumn({ name: 'userid' }),
25 | __metadata("design:type", user_1.User)
26 | ], Cart.prototype, "userid", void 0);
27 | __decorate([
28 | typeorm_1.OneToMany(() => cart_item_1.CartItem, cartitem => cartitem.cartid),
29 | __metadata("design:type", Array)
30 | ], Cart.prototype, "cItem", void 0);
31 | Cart = __decorate([
32 | typeorm_1.Entity()
33 | ], Cart);
34 | exports.Cart = Cart;
35 | //# sourceMappingURL=cart.js.map
--------------------------------------------------------------------------------
/dist/models/cart.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"cart.js","sourceRoot":"","sources":["../../src/models/cart.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAsG;AACtG,iCAA8B;AAC9B,2CAAuC;AAGvC,IAAa,IAAI,GAAjB,MAAa,IAAK,SAAQ,oBAAU;CAUnC,CAAA;AARC;IADC,gCAAsB,EAAE;;gCACd;AAIX;IAFC,kBAAQ,CAAC,GAAG,EAAE,CAAC,WAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACvF,oBAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;8BACvB,WAAI;oCAAC;AAGb;IADC,mBAAS,CAAC,GAAG,EAAE,CAAC,oBAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;;mCACrC;AATP,IAAI;IADhB,gBAAM,EAAE;GACI,IAAI,CAUhB;AAVY,oBAAI"}
--------------------------------------------------------------------------------
/dist/models/order-item.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 | return c > 3 && r && Object.defineProperty(target, key, r), r;
7 | };
8 | var __metadata = (this && this.__metadata) || function (k, v) {
9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10 | };
11 | Object.defineProperty(exports, "__esModule", { value: true });
12 | exports.OrderItem = void 0;
13 | const typeorm_1 = require("typeorm");
14 | const order_1 = require("./order");
15 | const product_1 = require("./product");
16 | let OrderItem = class OrderItem extends typeorm_1.BaseEntity {
17 | };
18 | __decorate([
19 | typeorm_1.PrimaryGeneratedColumn(),
20 | __metadata("design:type", Number)
21 | ], OrderItem.prototype, "id", void 0);
22 | __decorate([
23 | typeorm_1.Column('smallint', { nullable: false }),
24 | __metadata("design:type", Number)
25 | ], OrderItem.prototype, "quantity", void 0);
26 | __decorate([
27 | typeorm_1.Column('varchar', { nullable: false, length: 100 }),
28 | __metadata("design:type", String)
29 | ], OrderItem.prototype, "prodTitle", void 0);
30 | __decorate([
31 | typeorm_1.ManyToOne(() => order_1.Order, order => order.oItem, { onUpdate: 'CASCADE', onDelete: 'CASCADE' }),
32 | typeorm_1.JoinColumn({ name: 'orderid' }),
33 | __metadata("design:type", order_1.Order)
34 | ], OrderItem.prototype, "orderid", void 0);
35 | __decorate([
36 | typeorm_1.ManyToOne(() => product_1.Product, prod => prod.cItem, { onDelete: 'SET NULL', onUpdate: 'CASCADE' }),
37 | typeorm_1.JoinColumn({ name: 'productid' }),
38 | __metadata("design:type", product_1.Product)
39 | ], OrderItem.prototype, "prodid", void 0);
40 | OrderItem = __decorate([
41 | typeorm_1.Entity()
42 | ], OrderItem);
43 | exports.OrderItem = OrderItem;
44 | //# sourceMappingURL=order-item.js.map
--------------------------------------------------------------------------------
/dist/models/order-item.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"order-item.js","sourceRoot":"","sources":["../../src/models/order-item.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAoG;AACpG,mCAAgC;AAChC,uCAAoC;AAGpC,IAAa,SAAS,GAAtB,MAAa,SAAU,SAAQ,oBAAU;CAiBxC,CAAA;AAfC;IADC,gCAAsB,EAAE;;qCACd;AAGX;IADC,gBAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;2CACvB;AAGjB;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;4CAClC;AAIlB;IAFC,mBAAS,CAAC,GAAG,EAAE,CAAC,aAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC1F,oBAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;8BACvB,aAAK;0CAAC;AAIf;IAFC,mBAAS,CAAC,GAAG,EAAE,CAAC,iBAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC3F,oBAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC1B,iBAAO;yCAAC;AAhBL,SAAS;IADrB,gBAAM,EAAE;GACI,SAAS,CAiBrB;AAjBY,8BAAS"}
--------------------------------------------------------------------------------
/dist/models/order.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 | return c > 3 && r && Object.defineProperty(target, key, r), r;
7 | };
8 | var __metadata = (this && this.__metadata) || function (k, v) {
9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10 | };
11 | Object.defineProperty(exports, "__esModule", { value: true });
12 | exports.Order = void 0;
13 | const typeorm_1 = require("typeorm");
14 | const order_item_1 = require("./order-item");
15 | const user_1 = require("./user");
16 | let Order = class Order extends typeorm_1.BaseEntity {
17 | };
18 | __decorate([
19 | typeorm_1.PrimaryGeneratedColumn(),
20 | __metadata("design:type", Number)
21 | ], Order.prototype, "id", void 0);
22 | __decorate([
23 | typeorm_1.OneToMany(() => order_item_1.OrderItem, orderitem => orderitem.orderid),
24 | __metadata("design:type", Array)
25 | ], Order.prototype, "oItem", void 0);
26 | __decorate([
27 | typeorm_1.ManyToOne(() => user_1.User, user => user.ordid, { onUpdate: 'CASCADE', onDelete: 'CASCADE' }),
28 | typeorm_1.JoinColumn({ referencedColumnName: 'id', name: 'userid' }),
29 | __metadata("design:type", user_1.User)
30 | ], Order.prototype, "userid", void 0);
31 | Order = __decorate([
32 | typeorm_1.Entity()
33 | ], Order);
34 | exports.Order = Order;
35 | //# sourceMappingURL=order.js.map
--------------------------------------------------------------------------------
/dist/models/order.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"order.js","sourceRoot":"","sources":["../../src/models/order.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAuG;AACvG,6CAAyC;AACzC,iCAA8B;AAG9B,IAAa,KAAK,GAAlB,MAAa,KAAM,SAAQ,oBAAU;CAUpC,CAAA;AARC;IADC,gCAAsB,EAAE;;iCACd;AAGX;IADC,mBAAS,CAAC,GAAG,EAAE,CAAC,sBAAS,EAAE,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;;oCACxC;AAInB;IAFC,mBAAS,CAAC,GAAG,EAAE,CAAC,WAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACvF,oBAAU,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;8BACnD,WAAI;qCAAC;AATF,KAAK;IADjB,gBAAM,EAAE;GACI,KAAK,CAUjB;AAVY,sBAAK"}
--------------------------------------------------------------------------------
/dist/models/product.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 | return c > 3 && r && Object.defineProperty(target, key, r), r;
7 | };
8 | var __metadata = (this && this.__metadata) || function (k, v) {
9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10 | };
11 | Object.defineProperty(exports, "__esModule", { value: true });
12 | exports.Product = void 0;
13 | const typeorm_1 = require("typeorm");
14 | const cart_item_1 = require("./cart-item");
15 | const order_item_1 = require("./order-item");
16 | const user_1 = require("./user");
17 | let Product = class Product extends typeorm_1.BaseEntity {
18 | };
19 | __decorate([
20 | typeorm_1.PrimaryGeneratedColumn(),
21 | __metadata("design:type", Number)
22 | ], Product.prototype, "id", void 0);
23 | __decorate([
24 | typeorm_1.Column('varchar', { nullable: false, length: 100 }),
25 | __metadata("design:type", String)
26 | ], Product.prototype, "title", void 0);
27 | __decorate([
28 | typeorm_1.Column('numeric', { nullable: false }),
29 | __metadata("design:type", Number)
30 | ], Product.prototype, "price", void 0);
31 | __decorate([
32 | typeorm_1.Column('text', { nullable: false }),
33 | __metadata("design:type", String)
34 | ], Product.prototype, "imageUrl", void 0);
35 | __decorate([
36 | typeorm_1.Column('varchar', { nullable: false, length: 255 }),
37 | __metadata("design:type", String)
38 | ], Product.prototype, "description", void 0);
39 | __decorate([
40 | typeorm_1.OneToMany(() => cart_item_1.CartItem, cItem => cItem.prodid),
41 | __metadata("design:type", Array)
42 | ], Product.prototype, "cItem", void 0);
43 | __decorate([
44 | typeorm_1.OneToMany(() => order_item_1.OrderItem, oItem => oItem.prodid),
45 | __metadata("design:type", Array)
46 | ], Product.prototype, "oItem", void 0);
47 | __decorate([
48 | typeorm_1.ManyToOne(() => user_1.User, user => user.prodId, { onDelete: 'CASCADE', onUpdate: 'CASCADE' }),
49 | typeorm_1.JoinColumn({ referencedColumnName: 'id', name: 'userid' }),
50 | __metadata("design:type", user_1.User)
51 | ], Product.prototype, "userid", void 0);
52 | Product = __decorate([
53 | typeorm_1.Entity()
54 | ], Product);
55 | exports.Product = Product;
56 | //# sourceMappingURL=product.js.map
--------------------------------------------------------------------------------
/dist/models/product.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"product.js","sourceRoot":"","sources":["../../src/models/product.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAQiB;AACjB,2CAAuC;AACvC,6CAAyC;AACzC,iCAA8B;AAG9B,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,oBAAU;CAyBtC,CAAA;AAvBC;IADC,gCAAsB,EAAE;;mCACd;AAGX;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;sCACtC;AAGd;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;sCACzB;AAGd;IADC,gBAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;yCACnB;AAGjB;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;4CAChC;AAGpB;IADC,mBAAS,CAAC,GAAG,EAAE,CAAC,oBAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;;sCAC/B;AAGlB;IADC,mBAAS,CAAC,GAAG,EAAE,CAAC,sBAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;;sCAC/B;AAInB;IAFC,mBAAS,CAAC,GAAG,EAAE,CAAC,WAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACxF,oBAAU,CAAC,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;8BACnD,WAAI;uCAAC;AAxBF,OAAO;IADnB,gBAAM,EAAE;GACI,OAAO,CAyBnB;AAzBY,0BAAO"}
--------------------------------------------------------------------------------
/dist/models/user.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 | return c > 3 && r && Object.defineProperty(target, key, r), r;
7 | };
8 | var __metadata = (this && this.__metadata) || function (k, v) {
9 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10 | };
11 | Object.defineProperty(exports, "__esModule", { value: true });
12 | exports.User = void 0;
13 | const typeorm_1 = require("typeorm");
14 | const product_1 = require("./product");
15 | const cart_1 = require("./cart");
16 | const order_1 = require("./order");
17 | let User = class User extends typeorm_1.BaseEntity {
18 | constructor() {
19 | super(...arguments);
20 | this.cartid = cart_1.Cart;
21 | }
22 | };
23 | __decorate([
24 | typeorm_1.PrimaryGeneratedColumn(),
25 | __metadata("design:type", Number)
26 | ], User.prototype, "id", void 0);
27 | __decorate([
28 | typeorm_1.Column('varchar', { nullable: false, length: 100 }),
29 | __metadata("design:type", String)
30 | ], User.prototype, "username", void 0);
31 | __decorate([
32 | typeorm_1.Column('varchar', { nullable: false, length: 100 }),
33 | __metadata("design:type", String)
34 | ], User.prototype, "email", void 0);
35 | __decorate([
36 | typeorm_1.OneToOne(() => cart_1.Cart, cart => cart.userid),
37 | __metadata("design:type", Object)
38 | ], User.prototype, "cartid", void 0);
39 | __decorate([
40 | typeorm_1.OneToMany(() => product_1.Product, prod => prod.userid),
41 | __metadata("design:type", Array)
42 | ], User.prototype, "prodId", void 0);
43 | __decorate([
44 | typeorm_1.OneToMany(() => order_1.Order, ord => ord.userid),
45 | __metadata("design:type", Array)
46 | ], User.prototype, "ordid", void 0);
47 | User = __decorate([
48 | typeorm_1.Entity()
49 | ], User);
50 | exports.User = User;
51 | //# sourceMappingURL=user.js.map
--------------------------------------------------------------------------------
/dist/models/user.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/models/user.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAkG;AAClG,uCAAoC;AACpC,iCAA8B;AAC9B,mCAAgC;AAGhC,IAAa,IAAI,GAAjB,MAAa,IAAK,SAAQ,oBAAU;IAApC;;QAWE,WAAM,GAAG,WAAI,CAAC;IAOhB,CAAC;CAAA,CAAA;AAhBC;IADC,gCAAsB,EAAE;;gCACd;AAGX;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;sCACnC;AAGjB;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;mCACtC;AAGd;IADC,kBAAQ,CAAC,GAAG,EAAE,CAAC,WAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;;oCAC5B;AAGd;IADC,mBAAS,CAAC,GAAG,EAAE,CAAC,iBAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;;oCAC5B;AAGlB;IADC,mBAAS,CAAC,GAAG,EAAE,CAAC,aAAK,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;;mCAC3B;AAjBJ,IAAI;IADhB,gBAAM,EAAE;GACI,IAAI,CAkBhB;AAlBY,oBAAI"}
--------------------------------------------------------------------------------
/dist/routes/add-products.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const products = [];
9 | router.get('/add-product', (_req, res, _next) => {
10 | res.render('add-product', { pageTitle: 'ADD PRODUCTS' });
11 | });
12 | router.post('/add-product', (req, res, _next) => {
13 | res.redirect('/');
14 | products.push({ title: req.body.title });
15 | console.log(products);
16 | });
17 | exports.default = module.exports = {
18 | router,
19 | products,
20 | };
21 | //# sourceMappingURL=add-products.js.map
--------------------------------------------------------------------------------
/dist/routes/add-products.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"add-products.js","sourceRoot":"","sources":["../../src/routes/add-products.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAEhC,MAAM,QAAQ,GAAc,EAAE,CAAC;AAM/B,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC9C,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC9C,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC,OAAO,GAAG;IAC9B,MAAM;IACN,QAAQ;CACT,CAAC"}
--------------------------------------------------------------------------------
/dist/routes/admin.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const admin_1 = __importDefault(require("../controllers/admin"));
9 | router.get('/add-product', admin_1.default.getAddProduct);
10 | router.get('/products', admin_1.default.getProducts);
11 | router.post('/add-product', admin_1.default.postAddProduct);
12 | router.get('/edit-product/:productId', admin_1.default.getEditProduct);
13 | router.post('/edit-product', admin_1.default.postEditProduct);
14 | router.post('/delete-product', admin_1.default.postDeleteProduct);
15 | exports.default = module.exports = {
16 | router,
17 | };
18 | //# sourceMappingURL=admin.js.map
--------------------------------------------------------------------------------
/dist/routes/admin.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/routes/admin.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAChC,iEAAmD;AAEnD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC;AAE1D,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;AAErD,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;AAE5D,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;AAEvE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;AAE9D,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAElE,kBAAe,MAAM,CAAC,OAAO,GAAG;IAC9B,MAAM;CACP,CAAC"}
--------------------------------------------------------------------------------
/dist/routes/form.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const path_1 = __importDefault(require("path"));
9 | exports.default = router.get('/add-product', (_req, res, _next) => {
10 | res.sendFile(path_1.default.join(__dirname, '../', 'views', 'add-product.html'));
11 | });
12 | module.exports = router;
13 | //# sourceMappingURL=form.js.map
--------------------------------------------------------------------------------
/dist/routes/form.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"form.js","sourceRoot":"","sources":["../../src/routes/form.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAChC,gDAAwB;AAExB,kBAAe,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IAC7D,GAAG,CAAC,QAAQ,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC"}
--------------------------------------------------------------------------------
/dist/routes/home.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const add_products_1 = __importDefault(require("./add-products"));
9 | router.get('/', (_req, res, _next) => {
10 | res.render('shop', {
11 | pageTitle: 'SHOP',
12 | prods: add_products_1.default.products,
13 | hasProducts: add_products_1.default.products.length > 0,
14 | });
15 | });
16 | exports.default = module.exports = router;
17 | //# sourceMappingURL=home.js.map
--------------------------------------------------------------------------------
/dist/routes/home.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/routes/home.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAChC,kEAAuC;AAEvC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IACnC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;QACjB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,sBAAS,CAAC,QAAQ;QACzB,WAAW,EAAE,sBAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;KAC3C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC"}
--------------------------------------------------------------------------------
/dist/routes/shop.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const router = express_1.default.Router();
8 | const shop_1 = __importDefault(require("../controllers/shop"));
9 | router.get('/', shop_1.default.getHome);
10 | router.get('/products', shop_1.default.getProducts);
11 | router.get('/products/:productId', shop_1.default.getProduct);
12 | router.get('/cart', shop_1.default.getCart);
13 | router.post('/cart', shop_1.default.postCart);
14 | router.post('/cart-delete-item', shop_1.default.postDeleteCart);
15 | router.post('/create-order', shop_1.default.postOrder);
16 | router.get('/orders', shop_1.default.getOrders);
17 | exports.default = module.exports = router;
18 | //# sourceMappingURL=shop.js.map
--------------------------------------------------------------------------------
/dist/routes/shop.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"shop.js","sourceRoot":"","sources":["../../src/routes/shop.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAChC,+DAAiD;AAEjD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;AAExC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;AAEpD,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;AAE9D,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;AAE5C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;AAE9C,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;AAEhE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;AAEvD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;AAEhD,kBAAe,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC"}
--------------------------------------------------------------------------------
/dist/routes/user.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
4 | };
5 | Object.defineProperty(exports, "__esModule", { value: true });
6 | const express_1 = __importDefault(require("express"));
7 | const user_1 = require("../models/user");
8 | const cart_1 = require("../models/cart");
9 | const router = express_1.default.Router();
10 | router.get('/:username/:email', (req, res, _next) => {
11 | const uname = req.params.username;
12 | const uemail = req.params.email;
13 | res.send(`
14 |
User created ${uname} ${uemail}
15 |
20 | `);
21 | });
22 | router.post('/:username/:email', (req, res, _next) => {
23 | const user = new user_1.User();
24 | user.username = req.body.username;
25 | user.email = req.body.useremail;
26 | user.save();
27 | const cart = new cart_1.Cart();
28 | cart.userid = user;
29 | cart.save();
30 | res.redirect('/');
31 | });
32 | exports.default = module.exports = { router };
33 | //# sourceMappingURL=user.js.map
--------------------------------------------------------------------------------
/dist/routes/user.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"user.js","sourceRoot":"","sources":["../../src/routes/user.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,yCAAsC;AACtC,yCAAsC;AACtC,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAEhC,MAAM,CAAC,GAAG,CACR,mBAAmB,EACnB,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC3E,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;IAChC,GAAG,CAAC,IAAI,CAAC;qBACQ,KAAK,IAAI,MAAM;;gCAEJ,KAAK;gCACL,MAAM;;;GAGnC,CAAC,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAC3E,MAAM,IAAI,GAAG,IAAI,WAAI,EAAE,CAAC;IACxB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAClC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;IAEZ,MAAM,IAAI,GAAG,IAAI,WAAI,EAAE,CAAC;IACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,CAAC;IAEZ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC,CACF,CAAC;AAEF,kBAAe,MAAM,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,CAAC"}
--------------------------------------------------------------------------------
/ormconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "postgres",
3 | "host": "localhost",
4 | "port": 5432,
5 | "username": "postgres",
6 | "password": "rootadmin",
7 | "database": "e-commerce",
8 | "synchronize": true,
9 | "dropSchema": false,
10 | "entities": ["dist/models/**/*.js"]
11 | }
12 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "e-commerce-template",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@sindresorhus/is": {
8 | "version": "0.14.0",
9 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
10 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
11 | "dev": true
12 | },
13 | "@szmarczak/http-timer": {
14 | "version": "1.1.2",
15 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
16 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
17 | "dev": true,
18 | "requires": {
19 | "defer-to-connect": "^1.0.1"
20 | }
21 | },
22 | "@types/body-parser": {
23 | "version": "1.19.0",
24 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
25 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
26 | "dev": true,
27 | "requires": {
28 | "@types/connect": "*",
29 | "@types/node": "*"
30 | }
31 | },
32 | "@types/color-name": {
33 | "version": "1.1.1",
34 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
35 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
36 | },
37 | "@types/connect": {
38 | "version": "3.4.33",
39 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
40 | "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==",
41 | "dev": true,
42 | "requires": {
43 | "@types/node": "*"
44 | }
45 | },
46 | "@types/express": {
47 | "version": "4.17.7",
48 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.7.tgz",
49 | "integrity": "sha512-dCOT5lcmV/uC2J9k0rPafATeeyz+99xTt54ReX11/LObZgfzJqZNcW27zGhYyX+9iSEGXGt5qLPwRSvBZcLvtQ==",
50 | "dev": true,
51 | "requires": {
52 | "@types/body-parser": "*",
53 | "@types/express-serve-static-core": "*",
54 | "@types/qs": "*",
55 | "@types/serve-static": "*"
56 | }
57 | },
58 | "@types/express-serve-static-core": {
59 | "version": "4.17.9",
60 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.9.tgz",
61 | "integrity": "sha512-DG0BYg6yO+ePW+XoDENYz8zhNGC3jDDEpComMYn7WJc4mY1Us8Rw9ax2YhJXxpyk2SF47PQAoQ0YyVT1a0bEkA==",
62 | "dev": true,
63 | "requires": {
64 | "@types/node": "*",
65 | "@types/qs": "*",
66 | "@types/range-parser": "*"
67 | }
68 | },
69 | "@types/mime": {
70 | "version": "2.0.3",
71 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz",
72 | "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==",
73 | "dev": true
74 | },
75 | "@types/node": {
76 | "version": "8.10.62",
77 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.62.tgz",
78 | "integrity": "sha512-76fupxOYVxk36kb7O/6KtrAPZ9jnSK3+qisAX4tQMEuGNdlvl7ycwatlHqjoE6jHfVtXFM3pCrCixZOidc5cuw==",
79 | "dev": true
80 | },
81 | "@types/qs": {
82 | "version": "6.9.4",
83 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.4.tgz",
84 | "integrity": "sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ==",
85 | "dev": true
86 | },
87 | "@types/range-parser": {
88 | "version": "1.2.3",
89 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
90 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==",
91 | "dev": true
92 | },
93 | "@types/serve-static": {
94 | "version": "1.13.5",
95 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.5.tgz",
96 | "integrity": "sha512-6M64P58N+OXjU432WoLLBQxbA0LRGBCRm7aAGQJ+SMC1IMl0dgRVi9EFfoDcS2a7Xogygk/eGN94CfwU9UF7UQ==",
97 | "dev": true,
98 | "requires": {
99 | "@types/express-serve-static-core": "*",
100 | "@types/mime": "*"
101 | }
102 | },
103 | "abbrev": {
104 | "version": "1.1.1",
105 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
106 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
107 | "dev": true
108 | },
109 | "accepts": {
110 | "version": "1.3.7",
111 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
112 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
113 | "requires": {
114 | "mime-types": "~2.1.24",
115 | "negotiator": "0.6.2"
116 | }
117 | },
118 | "ansi-align": {
119 | "version": "3.0.0",
120 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
121 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
122 | "dev": true,
123 | "requires": {
124 | "string-width": "^3.0.0"
125 | },
126 | "dependencies": {
127 | "string-width": {
128 | "version": "3.1.0",
129 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
130 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
131 | "dev": true,
132 | "requires": {
133 | "emoji-regex": "^7.0.1",
134 | "is-fullwidth-code-point": "^2.0.0",
135 | "strip-ansi": "^5.1.0"
136 | }
137 | }
138 | }
139 | },
140 | "ansi-regex": {
141 | "version": "4.1.0",
142 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
143 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
144 | },
145 | "ansi-styles": {
146 | "version": "4.2.1",
147 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
148 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
149 | "requires": {
150 | "@types/color-name": "^1.1.1",
151 | "color-convert": "^2.0.1"
152 | }
153 | },
154 | "any-promise": {
155 | "version": "1.3.0",
156 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
157 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
158 | },
159 | "anymatch": {
160 | "version": "3.1.1",
161 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
162 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
163 | "dev": true,
164 | "requires": {
165 | "normalize-path": "^3.0.0",
166 | "picomatch": "^2.0.4"
167 | }
168 | },
169 | "app-root-path": {
170 | "version": "3.0.0",
171 | "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz",
172 | "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw=="
173 | },
174 | "argparse": {
175 | "version": "1.0.10",
176 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
177 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
178 | "requires": {
179 | "sprintf-js": "~1.0.2"
180 | }
181 | },
182 | "array-flatten": {
183 | "version": "1.1.1",
184 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
185 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
186 | },
187 | "arrify": {
188 | "version": "1.0.1",
189 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
190 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
191 | "dev": true
192 | },
193 | "async": {
194 | "version": "0.9.2",
195 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
196 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
197 | "dev": true
198 | },
199 | "balanced-match": {
200 | "version": "1.0.0",
201 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
202 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
203 | },
204 | "base64-js": {
205 | "version": "1.3.1",
206 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
207 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
208 | },
209 | "binary-extensions": {
210 | "version": "2.1.0",
211 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
212 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
213 | "dev": true
214 | },
215 | "body-parser": {
216 | "version": "1.19.0",
217 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
218 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
219 | "requires": {
220 | "bytes": "3.1.0",
221 | "content-type": "~1.0.4",
222 | "debug": "2.6.9",
223 | "depd": "~1.1.2",
224 | "http-errors": "1.7.2",
225 | "iconv-lite": "0.4.24",
226 | "on-finished": "~2.3.0",
227 | "qs": "6.7.0",
228 | "raw-body": "2.4.0",
229 | "type-is": "~1.6.17"
230 | },
231 | "dependencies": {
232 | "debug": {
233 | "version": "2.6.9",
234 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
235 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
236 | "requires": {
237 | "ms": "2.0.0"
238 | }
239 | },
240 | "ms": {
241 | "version": "2.0.0",
242 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
243 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
244 | }
245 | }
246 | },
247 | "boxen": {
248 | "version": "4.2.0",
249 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
250 | "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
251 | "dev": true,
252 | "requires": {
253 | "ansi-align": "^3.0.0",
254 | "camelcase": "^5.3.1",
255 | "chalk": "^3.0.0",
256 | "cli-boxes": "^2.2.0",
257 | "string-width": "^4.1.0",
258 | "term-size": "^2.1.0",
259 | "type-fest": "^0.8.1",
260 | "widest-line": "^3.1.0"
261 | }
262 | },
263 | "brace-expansion": {
264 | "version": "1.1.11",
265 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
266 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
267 | "requires": {
268 | "balanced-match": "^1.0.0",
269 | "concat-map": "0.0.1"
270 | }
271 | },
272 | "braces": {
273 | "version": "3.0.2",
274 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
275 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
276 | "dev": true,
277 | "requires": {
278 | "fill-range": "^7.0.1"
279 | }
280 | },
281 | "buffer": {
282 | "version": "5.6.0",
283 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz",
284 | "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==",
285 | "requires": {
286 | "base64-js": "^1.0.2",
287 | "ieee754": "^1.1.4"
288 | }
289 | },
290 | "buffer-writer": {
291 | "version": "2.0.0",
292 | "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
293 | "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
294 | },
295 | "bytes": {
296 | "version": "3.1.0",
297 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
298 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
299 | },
300 | "cacheable-request": {
301 | "version": "6.1.0",
302 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
303 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
304 | "dev": true,
305 | "requires": {
306 | "clone-response": "^1.0.2",
307 | "get-stream": "^5.1.0",
308 | "http-cache-semantics": "^4.0.0",
309 | "keyv": "^3.0.0",
310 | "lowercase-keys": "^2.0.0",
311 | "normalize-url": "^4.1.0",
312 | "responselike": "^1.0.2"
313 | },
314 | "dependencies": {
315 | "get-stream": {
316 | "version": "5.2.0",
317 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
318 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
319 | "dev": true,
320 | "requires": {
321 | "pump": "^3.0.0"
322 | }
323 | },
324 | "lowercase-keys": {
325 | "version": "2.0.0",
326 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
327 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
328 | "dev": true
329 | }
330 | }
331 | },
332 | "camelcase": {
333 | "version": "5.3.1",
334 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
335 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
336 | },
337 | "chalk": {
338 | "version": "3.0.0",
339 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
340 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
341 | "requires": {
342 | "ansi-styles": "^4.1.0",
343 | "supports-color": "^7.1.0"
344 | },
345 | "dependencies": {
346 | "has-flag": {
347 | "version": "4.0.0",
348 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
349 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
350 | },
351 | "supports-color": {
352 | "version": "7.1.0",
353 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
354 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
355 | "requires": {
356 | "has-flag": "^4.0.0"
357 | }
358 | }
359 | }
360 | },
361 | "chokidar": {
362 | "version": "3.4.2",
363 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz",
364 | "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==",
365 | "dev": true,
366 | "requires": {
367 | "anymatch": "~3.1.1",
368 | "braces": "~3.0.2",
369 | "fsevents": "~2.1.2",
370 | "glob-parent": "~5.1.0",
371 | "is-binary-path": "~2.1.0",
372 | "is-glob": "~4.0.1",
373 | "normalize-path": "~3.0.0",
374 | "readdirp": "~3.4.0"
375 | }
376 | },
377 | "ci-info": {
378 | "version": "2.0.0",
379 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
380 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
381 | "dev": true
382 | },
383 | "cli-boxes": {
384 | "version": "2.2.0",
385 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
386 | "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==",
387 | "dev": true
388 | },
389 | "cli-highlight": {
390 | "version": "2.1.4",
391 | "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.4.tgz",
392 | "integrity": "sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==",
393 | "requires": {
394 | "chalk": "^3.0.0",
395 | "highlight.js": "^9.6.0",
396 | "mz": "^2.4.0",
397 | "parse5": "^5.1.1",
398 | "parse5-htmlparser2-tree-adapter": "^5.1.1",
399 | "yargs": "^15.0.0"
400 | },
401 | "dependencies": {
402 | "ansi-regex": {
403 | "version": "5.0.0",
404 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
405 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
406 | },
407 | "cliui": {
408 | "version": "6.0.0",
409 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
410 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
411 | "requires": {
412 | "string-width": "^4.2.0",
413 | "strip-ansi": "^6.0.0",
414 | "wrap-ansi": "^6.2.0"
415 | }
416 | },
417 | "find-up": {
418 | "version": "4.1.0",
419 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
420 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
421 | "requires": {
422 | "locate-path": "^5.0.0",
423 | "path-exists": "^4.0.0"
424 | }
425 | },
426 | "locate-path": {
427 | "version": "5.0.0",
428 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
429 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
430 | "requires": {
431 | "p-locate": "^4.1.0"
432 | }
433 | },
434 | "p-locate": {
435 | "version": "4.1.0",
436 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
437 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
438 | "requires": {
439 | "p-limit": "^2.2.0"
440 | }
441 | },
442 | "path-exists": {
443 | "version": "4.0.0",
444 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
445 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
446 | },
447 | "strip-ansi": {
448 | "version": "6.0.0",
449 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
450 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
451 | "requires": {
452 | "ansi-regex": "^5.0.0"
453 | }
454 | },
455 | "wrap-ansi": {
456 | "version": "6.2.0",
457 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
458 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
459 | "requires": {
460 | "ansi-styles": "^4.0.0",
461 | "string-width": "^4.1.0",
462 | "strip-ansi": "^6.0.0"
463 | }
464 | },
465 | "yargs": {
466 | "version": "15.4.1",
467 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
468 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
469 | "requires": {
470 | "cliui": "^6.0.0",
471 | "decamelize": "^1.2.0",
472 | "find-up": "^4.1.0",
473 | "get-caller-file": "^2.0.1",
474 | "require-directory": "^2.1.1",
475 | "require-main-filename": "^2.0.0",
476 | "set-blocking": "^2.0.0",
477 | "string-width": "^4.2.0",
478 | "which-module": "^2.0.0",
479 | "y18n": "^4.0.0",
480 | "yargs-parser": "^18.1.2"
481 | }
482 | },
483 | "yargs-parser": {
484 | "version": "18.1.3",
485 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
486 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
487 | "requires": {
488 | "camelcase": "^5.0.0",
489 | "decamelize": "^1.2.0"
490 | }
491 | }
492 | }
493 | },
494 | "cliui": {
495 | "version": "5.0.0",
496 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
497 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
498 | "requires": {
499 | "string-width": "^3.1.0",
500 | "strip-ansi": "^5.2.0",
501 | "wrap-ansi": "^5.1.0"
502 | },
503 | "dependencies": {
504 | "string-width": {
505 | "version": "3.1.0",
506 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
507 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
508 | "requires": {
509 | "emoji-regex": "^7.0.1",
510 | "is-fullwidth-code-point": "^2.0.0",
511 | "strip-ansi": "^5.1.0"
512 | }
513 | }
514 | }
515 | },
516 | "clone-response": {
517 | "version": "1.0.2",
518 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
519 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
520 | "dev": true,
521 | "requires": {
522 | "mimic-response": "^1.0.0"
523 | }
524 | },
525 | "color-convert": {
526 | "version": "2.0.1",
527 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
528 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
529 | "requires": {
530 | "color-name": "~1.1.4"
531 | }
532 | },
533 | "color-name": {
534 | "version": "1.1.4",
535 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
536 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
537 | },
538 | "concat-map": {
539 | "version": "0.0.1",
540 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
541 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
542 | },
543 | "concurrently": {
544 | "version": "5.3.0",
545 | "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz",
546 | "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==",
547 | "dev": true,
548 | "requires": {
549 | "chalk": "^2.4.2",
550 | "date-fns": "^2.0.1",
551 | "lodash": "^4.17.15",
552 | "read-pkg": "^4.0.1",
553 | "rxjs": "^6.5.2",
554 | "spawn-command": "^0.0.2-1",
555 | "supports-color": "^6.1.0",
556 | "tree-kill": "^1.2.2",
557 | "yargs": "^13.3.0"
558 | },
559 | "dependencies": {
560 | "ansi-styles": {
561 | "version": "3.2.1",
562 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
563 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
564 | "dev": true,
565 | "requires": {
566 | "color-convert": "^1.9.0"
567 | }
568 | },
569 | "chalk": {
570 | "version": "2.4.2",
571 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
572 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
573 | "dev": true,
574 | "requires": {
575 | "ansi-styles": "^3.2.1",
576 | "escape-string-regexp": "^1.0.5",
577 | "supports-color": "^5.3.0"
578 | },
579 | "dependencies": {
580 | "supports-color": {
581 | "version": "5.5.0",
582 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
583 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
584 | "dev": true,
585 | "requires": {
586 | "has-flag": "^3.0.0"
587 | }
588 | }
589 | }
590 | },
591 | "color-convert": {
592 | "version": "1.9.3",
593 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
594 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
595 | "dev": true,
596 | "requires": {
597 | "color-name": "1.1.3"
598 | }
599 | },
600 | "color-name": {
601 | "version": "1.1.3",
602 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
603 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
604 | "dev": true
605 | },
606 | "supports-color": {
607 | "version": "6.1.0",
608 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
609 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
610 | "dev": true,
611 | "requires": {
612 | "has-flag": "^3.0.0"
613 | }
614 | }
615 | }
616 | },
617 | "configstore": {
618 | "version": "5.0.1",
619 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
620 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
621 | "dev": true,
622 | "requires": {
623 | "dot-prop": "^5.2.0",
624 | "graceful-fs": "^4.1.2",
625 | "make-dir": "^3.0.0",
626 | "unique-string": "^2.0.0",
627 | "write-file-atomic": "^3.0.0",
628 | "xdg-basedir": "^4.0.0"
629 | }
630 | },
631 | "content-disposition": {
632 | "version": "0.5.3",
633 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
634 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
635 | "requires": {
636 | "safe-buffer": "5.1.2"
637 | }
638 | },
639 | "content-type": {
640 | "version": "1.0.4",
641 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
642 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
643 | },
644 | "cookie": {
645 | "version": "0.4.0",
646 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
647 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
648 | },
649 | "cookie-signature": {
650 | "version": "1.0.6",
651 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
652 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
653 | },
654 | "crypto-random-string": {
655 | "version": "2.0.0",
656 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
657 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
658 | "dev": true
659 | },
660 | "date-fns": {
661 | "version": "2.15.0",
662 | "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.15.0.tgz",
663 | "integrity": "sha512-ZCPzAMJZn3rNUvvQIMlXhDr4A+Ar07eLeGsGREoWU19a3Pqf5oYa+ccd+B3F6XVtQY6HANMFdOQ8A+ipFnvJdQ==",
664 | "dev": true
665 | },
666 | "debug": {
667 | "version": "3.2.6",
668 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
669 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
670 | "dev": true,
671 | "requires": {
672 | "ms": "^2.1.1"
673 | }
674 | },
675 | "decamelize": {
676 | "version": "1.2.0",
677 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
678 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
679 | },
680 | "decompress-response": {
681 | "version": "3.3.0",
682 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
683 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
684 | "dev": true,
685 | "requires": {
686 | "mimic-response": "^1.0.0"
687 | }
688 | },
689 | "deep-extend": {
690 | "version": "0.6.0",
691 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
692 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
693 | "dev": true
694 | },
695 | "defer-to-connect": {
696 | "version": "1.1.3",
697 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
698 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
699 | "dev": true
700 | },
701 | "depd": {
702 | "version": "1.1.2",
703 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
704 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
705 | },
706 | "destroy": {
707 | "version": "1.0.4",
708 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
709 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
710 | },
711 | "diff": {
712 | "version": "3.5.0",
713 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
714 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
715 | "dev": true
716 | },
717 | "dot-prop": {
718 | "version": "5.2.0",
719 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
720 | "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
721 | "dev": true,
722 | "requires": {
723 | "is-obj": "^2.0.0"
724 | }
725 | },
726 | "dotenv": {
727 | "version": "6.2.0",
728 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
729 | "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w=="
730 | },
731 | "duplexer3": {
732 | "version": "0.1.4",
733 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
734 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
735 | "dev": true
736 | },
737 | "ee-first": {
738 | "version": "1.1.1",
739 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
740 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
741 | },
742 | "ejs": {
743 | "version": "3.1.5",
744 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz",
745 | "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==",
746 | "dev": true,
747 | "requires": {
748 | "jake": "^10.6.1"
749 | }
750 | },
751 | "emoji-regex": {
752 | "version": "7.0.3",
753 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
754 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
755 | },
756 | "encodeurl": {
757 | "version": "1.0.2",
758 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
759 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
760 | },
761 | "end-of-stream": {
762 | "version": "1.4.4",
763 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
764 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
765 | "dev": true,
766 | "requires": {
767 | "once": "^1.4.0"
768 | }
769 | },
770 | "error-ex": {
771 | "version": "1.3.2",
772 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
773 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
774 | "dev": true,
775 | "requires": {
776 | "is-arrayish": "^0.2.1"
777 | }
778 | },
779 | "escape-goat": {
780 | "version": "2.1.1",
781 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
782 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
783 | "dev": true
784 | },
785 | "escape-html": {
786 | "version": "1.0.3",
787 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
788 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
789 | },
790 | "escape-string-regexp": {
791 | "version": "1.0.5",
792 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
793 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
794 | },
795 | "esprima": {
796 | "version": "4.0.1",
797 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
798 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
799 | },
800 | "etag": {
801 | "version": "1.8.1",
802 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
803 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
804 | },
805 | "express": {
806 | "version": "4.17.1",
807 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
808 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
809 | "requires": {
810 | "accepts": "~1.3.7",
811 | "array-flatten": "1.1.1",
812 | "body-parser": "1.19.0",
813 | "content-disposition": "0.5.3",
814 | "content-type": "~1.0.4",
815 | "cookie": "0.4.0",
816 | "cookie-signature": "1.0.6",
817 | "debug": "2.6.9",
818 | "depd": "~1.1.2",
819 | "encodeurl": "~1.0.2",
820 | "escape-html": "~1.0.3",
821 | "etag": "~1.8.1",
822 | "finalhandler": "~1.1.2",
823 | "fresh": "0.5.2",
824 | "merge-descriptors": "1.0.1",
825 | "methods": "~1.1.2",
826 | "on-finished": "~2.3.0",
827 | "parseurl": "~1.3.3",
828 | "path-to-regexp": "0.1.7",
829 | "proxy-addr": "~2.0.5",
830 | "qs": "6.7.0",
831 | "range-parser": "~1.2.1",
832 | "safe-buffer": "5.1.2",
833 | "send": "0.17.1",
834 | "serve-static": "1.14.1",
835 | "setprototypeof": "1.1.1",
836 | "statuses": "~1.5.0",
837 | "type-is": "~1.6.18",
838 | "utils-merge": "1.0.1",
839 | "vary": "~1.1.2"
840 | },
841 | "dependencies": {
842 | "debug": {
843 | "version": "2.6.9",
844 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
845 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
846 | "requires": {
847 | "ms": "2.0.0"
848 | }
849 | },
850 | "ms": {
851 | "version": "2.0.0",
852 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
853 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
854 | }
855 | }
856 | },
857 | "figlet": {
858 | "version": "1.5.0",
859 | "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz",
860 | "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww=="
861 | },
862 | "filelist": {
863 | "version": "1.0.1",
864 | "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz",
865 | "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==",
866 | "dev": true,
867 | "requires": {
868 | "minimatch": "^3.0.4"
869 | }
870 | },
871 | "fill-range": {
872 | "version": "7.0.1",
873 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
874 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
875 | "dev": true,
876 | "requires": {
877 | "to-regex-range": "^5.0.1"
878 | }
879 | },
880 | "finalhandler": {
881 | "version": "1.1.2",
882 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
883 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
884 | "requires": {
885 | "debug": "2.6.9",
886 | "encodeurl": "~1.0.2",
887 | "escape-html": "~1.0.3",
888 | "on-finished": "~2.3.0",
889 | "parseurl": "~1.3.3",
890 | "statuses": "~1.5.0",
891 | "unpipe": "~1.0.0"
892 | },
893 | "dependencies": {
894 | "debug": {
895 | "version": "2.6.9",
896 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
897 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
898 | "requires": {
899 | "ms": "2.0.0"
900 | }
901 | },
902 | "ms": {
903 | "version": "2.0.0",
904 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
905 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
906 | }
907 | }
908 | },
909 | "find-up": {
910 | "version": "3.0.0",
911 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
912 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
913 | "requires": {
914 | "locate-path": "^3.0.0"
915 | }
916 | },
917 | "forwarded": {
918 | "version": "0.1.2",
919 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
920 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
921 | },
922 | "fresh": {
923 | "version": "0.5.2",
924 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
925 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
926 | },
927 | "fs.realpath": {
928 | "version": "1.0.0",
929 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
930 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
931 | },
932 | "fsevents": {
933 | "version": "2.1.3",
934 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
935 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
936 | "dev": true,
937 | "optional": true
938 | },
939 | "get-caller-file": {
940 | "version": "2.0.5",
941 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
942 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
943 | },
944 | "get-stream": {
945 | "version": "4.1.0",
946 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
947 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
948 | "dev": true,
949 | "requires": {
950 | "pump": "^3.0.0"
951 | }
952 | },
953 | "glob": {
954 | "version": "7.1.6",
955 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
956 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
957 | "requires": {
958 | "fs.realpath": "^1.0.0",
959 | "inflight": "^1.0.4",
960 | "inherits": "2",
961 | "minimatch": "^3.0.4",
962 | "once": "^1.3.0",
963 | "path-is-absolute": "^1.0.0"
964 | }
965 | },
966 | "glob-parent": {
967 | "version": "5.1.1",
968 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
969 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
970 | "dev": true,
971 | "requires": {
972 | "is-glob": "^4.0.1"
973 | }
974 | },
975 | "global-dirs": {
976 | "version": "2.0.1",
977 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz",
978 | "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==",
979 | "dev": true,
980 | "requires": {
981 | "ini": "^1.3.5"
982 | }
983 | },
984 | "got": {
985 | "version": "9.6.0",
986 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
987 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
988 | "dev": true,
989 | "requires": {
990 | "@sindresorhus/is": "^0.14.0",
991 | "@szmarczak/http-timer": "^1.1.2",
992 | "cacheable-request": "^6.0.0",
993 | "decompress-response": "^3.3.0",
994 | "duplexer3": "^0.1.4",
995 | "get-stream": "^4.1.0",
996 | "lowercase-keys": "^1.0.1",
997 | "mimic-response": "^1.0.1",
998 | "p-cancelable": "^1.0.0",
999 | "to-readable-stream": "^1.0.0",
1000 | "url-parse-lax": "^3.0.0"
1001 | }
1002 | },
1003 | "graceful-fs": {
1004 | "version": "4.2.4",
1005 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
1006 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
1007 | "dev": true
1008 | },
1009 | "has-ansi": {
1010 | "version": "2.0.0",
1011 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
1012 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
1013 | "requires": {
1014 | "ansi-regex": "^2.0.0"
1015 | },
1016 | "dependencies": {
1017 | "ansi-regex": {
1018 | "version": "2.1.1",
1019 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1020 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
1021 | }
1022 | }
1023 | },
1024 | "has-flag": {
1025 | "version": "3.0.0",
1026 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1027 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
1028 | },
1029 | "has-yarn": {
1030 | "version": "2.1.0",
1031 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
1032 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==",
1033 | "dev": true
1034 | },
1035 | "highlight.js": {
1036 | "version": "9.18.3",
1037 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz",
1038 | "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ=="
1039 | },
1040 | "homedir-polyfill": {
1041 | "version": "1.0.3",
1042 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
1043 | "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
1044 | "dev": true,
1045 | "requires": {
1046 | "parse-passwd": "^1.0.0"
1047 | }
1048 | },
1049 | "hosted-git-info": {
1050 | "version": "2.8.8",
1051 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
1052 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
1053 | "dev": true
1054 | },
1055 | "http-cache-semantics": {
1056 | "version": "4.1.0",
1057 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
1058 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
1059 | "dev": true
1060 | },
1061 | "http-errors": {
1062 | "version": "1.7.2",
1063 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
1064 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
1065 | "requires": {
1066 | "depd": "~1.1.2",
1067 | "inherits": "2.0.3",
1068 | "setprototypeof": "1.1.1",
1069 | "statuses": ">= 1.5.0 < 2",
1070 | "toidentifier": "1.0.0"
1071 | }
1072 | },
1073 | "iconv-lite": {
1074 | "version": "0.4.24",
1075 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1076 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1077 | "requires": {
1078 | "safer-buffer": ">= 2.1.2 < 3"
1079 | }
1080 | },
1081 | "ieee754": {
1082 | "version": "1.1.13",
1083 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
1084 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
1085 | },
1086 | "ignore-by-default": {
1087 | "version": "1.0.1",
1088 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
1089 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
1090 | "dev": true
1091 | },
1092 | "import-lazy": {
1093 | "version": "2.1.0",
1094 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
1095 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
1096 | "dev": true
1097 | },
1098 | "imurmurhash": {
1099 | "version": "0.1.4",
1100 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1101 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1102 | "dev": true
1103 | },
1104 | "inflight": {
1105 | "version": "1.0.6",
1106 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1107 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1108 | "requires": {
1109 | "once": "^1.3.0",
1110 | "wrappy": "1"
1111 | }
1112 | },
1113 | "inherits": {
1114 | "version": "2.0.3",
1115 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1116 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
1117 | },
1118 | "ini": {
1119 | "version": "1.3.5",
1120 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
1121 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
1122 | "dev": true
1123 | },
1124 | "ipaddr.js": {
1125 | "version": "1.9.1",
1126 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1127 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1128 | },
1129 | "is-arrayish": {
1130 | "version": "0.2.1",
1131 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
1132 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
1133 | "dev": true
1134 | },
1135 | "is-binary-path": {
1136 | "version": "2.1.0",
1137 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1138 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1139 | "dev": true,
1140 | "requires": {
1141 | "binary-extensions": "^2.0.0"
1142 | }
1143 | },
1144 | "is-ci": {
1145 | "version": "2.0.0",
1146 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
1147 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
1148 | "dev": true,
1149 | "requires": {
1150 | "ci-info": "^2.0.0"
1151 | }
1152 | },
1153 | "is-extglob": {
1154 | "version": "2.1.1",
1155 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1156 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
1157 | "dev": true
1158 | },
1159 | "is-fullwidth-code-point": {
1160 | "version": "2.0.0",
1161 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1162 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
1163 | },
1164 | "is-glob": {
1165 | "version": "4.0.1",
1166 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
1167 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
1168 | "dev": true,
1169 | "requires": {
1170 | "is-extglob": "^2.1.1"
1171 | }
1172 | },
1173 | "is-installed-globally": {
1174 | "version": "0.3.2",
1175 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
1176 | "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
1177 | "dev": true,
1178 | "requires": {
1179 | "global-dirs": "^2.0.1",
1180 | "is-path-inside": "^3.0.1"
1181 | }
1182 | },
1183 | "is-npm": {
1184 | "version": "4.0.0",
1185 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
1186 | "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
1187 | "dev": true
1188 | },
1189 | "is-number": {
1190 | "version": "7.0.0",
1191 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1192 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1193 | "dev": true
1194 | },
1195 | "is-obj": {
1196 | "version": "2.0.0",
1197 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
1198 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
1199 | "dev": true
1200 | },
1201 | "is-path-inside": {
1202 | "version": "3.0.2",
1203 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
1204 | "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
1205 | "dev": true
1206 | },
1207 | "is-typedarray": {
1208 | "version": "1.0.0",
1209 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1210 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1211 | "dev": true
1212 | },
1213 | "is-yarn-global": {
1214 | "version": "0.3.0",
1215 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
1216 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
1217 | "dev": true
1218 | },
1219 | "jake": {
1220 | "version": "10.8.2",
1221 | "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
1222 | "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
1223 | "dev": true,
1224 | "requires": {
1225 | "async": "0.9.x",
1226 | "chalk": "^2.4.2",
1227 | "filelist": "^1.0.1",
1228 | "minimatch": "^3.0.4"
1229 | },
1230 | "dependencies": {
1231 | "ansi-styles": {
1232 | "version": "3.2.1",
1233 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1234 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1235 | "dev": true,
1236 | "requires": {
1237 | "color-convert": "^1.9.0"
1238 | }
1239 | },
1240 | "chalk": {
1241 | "version": "2.4.2",
1242 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1243 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1244 | "dev": true,
1245 | "requires": {
1246 | "ansi-styles": "^3.2.1",
1247 | "escape-string-regexp": "^1.0.5",
1248 | "supports-color": "^5.3.0"
1249 | }
1250 | },
1251 | "color-convert": {
1252 | "version": "1.9.3",
1253 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1254 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1255 | "dev": true,
1256 | "requires": {
1257 | "color-name": "1.1.3"
1258 | }
1259 | },
1260 | "color-name": {
1261 | "version": "1.1.3",
1262 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1263 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1264 | "dev": true
1265 | }
1266 | }
1267 | },
1268 | "js-yaml": {
1269 | "version": "3.14.0",
1270 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
1271 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
1272 | "requires": {
1273 | "argparse": "^1.0.7",
1274 | "esprima": "^4.0.0"
1275 | }
1276 | },
1277 | "json-buffer": {
1278 | "version": "3.0.0",
1279 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
1280 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
1281 | "dev": true
1282 | },
1283 | "json-parse-better-errors": {
1284 | "version": "1.0.2",
1285 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
1286 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
1287 | "dev": true
1288 | },
1289 | "keyv": {
1290 | "version": "3.1.0",
1291 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
1292 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
1293 | "dev": true,
1294 | "requires": {
1295 | "json-buffer": "3.0.0"
1296 | }
1297 | },
1298 | "latest-version": {
1299 | "version": "5.1.0",
1300 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
1301 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
1302 | "dev": true,
1303 | "requires": {
1304 | "package-json": "^6.3.0"
1305 | }
1306 | },
1307 | "locate-path": {
1308 | "version": "3.0.0",
1309 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
1310 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
1311 | "requires": {
1312 | "p-locate": "^3.0.0",
1313 | "path-exists": "^3.0.0"
1314 | }
1315 | },
1316 | "lodash": {
1317 | "version": "4.17.20",
1318 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
1319 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
1320 | "dev": true
1321 | },
1322 | "lowercase-keys": {
1323 | "version": "1.0.1",
1324 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
1325 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
1326 | "dev": true
1327 | },
1328 | "make-dir": {
1329 | "version": "3.1.0",
1330 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
1331 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
1332 | "dev": true,
1333 | "requires": {
1334 | "semver": "^6.0.0"
1335 | },
1336 | "dependencies": {
1337 | "semver": {
1338 | "version": "6.3.0",
1339 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1340 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1341 | "dev": true
1342 | }
1343 | }
1344 | },
1345 | "make-error": {
1346 | "version": "1.3.6",
1347 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
1348 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
1349 | "dev": true
1350 | },
1351 | "media-typer": {
1352 | "version": "0.3.0",
1353 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1354 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
1355 | },
1356 | "merge-descriptors": {
1357 | "version": "1.0.1",
1358 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1359 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
1360 | },
1361 | "methods": {
1362 | "version": "1.1.2",
1363 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1364 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
1365 | },
1366 | "mime": {
1367 | "version": "1.6.0",
1368 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1369 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1370 | },
1371 | "mime-db": {
1372 | "version": "1.44.0",
1373 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
1374 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
1375 | },
1376 | "mime-types": {
1377 | "version": "2.1.27",
1378 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
1379 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
1380 | "requires": {
1381 | "mime-db": "1.44.0"
1382 | }
1383 | },
1384 | "mimic-response": {
1385 | "version": "1.0.1",
1386 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
1387 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
1388 | "dev": true
1389 | },
1390 | "minimatch": {
1391 | "version": "3.0.4",
1392 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1393 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1394 | "requires": {
1395 | "brace-expansion": "^1.1.7"
1396 | }
1397 | },
1398 | "minimist": {
1399 | "version": "1.2.5",
1400 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1401 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1402 | "dev": true
1403 | },
1404 | "mkdirp": {
1405 | "version": "1.0.4",
1406 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1407 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
1408 | },
1409 | "ms": {
1410 | "version": "2.1.2",
1411 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1412 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1413 | },
1414 | "mz": {
1415 | "version": "2.7.0",
1416 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
1417 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
1418 | "requires": {
1419 | "any-promise": "^1.0.0",
1420 | "object-assign": "^4.0.1",
1421 | "thenify-all": "^1.0.0"
1422 | }
1423 | },
1424 | "negotiator": {
1425 | "version": "0.6.2",
1426 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
1427 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
1428 | },
1429 | "nodemon": {
1430 | "version": "2.0.4",
1431 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz",
1432 | "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==",
1433 | "dev": true,
1434 | "requires": {
1435 | "chokidar": "^3.2.2",
1436 | "debug": "^3.2.6",
1437 | "ignore-by-default": "^1.0.1",
1438 | "minimatch": "^3.0.4",
1439 | "pstree.remy": "^1.1.7",
1440 | "semver": "^5.7.1",
1441 | "supports-color": "^5.5.0",
1442 | "touch": "^3.1.0",
1443 | "undefsafe": "^2.0.2",
1444 | "update-notifier": "^4.0.0"
1445 | }
1446 | },
1447 | "nopt": {
1448 | "version": "1.0.10",
1449 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1450 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
1451 | "dev": true,
1452 | "requires": {
1453 | "abbrev": "1"
1454 | }
1455 | },
1456 | "normalize-package-data": {
1457 | "version": "2.5.0",
1458 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
1459 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
1460 | "dev": true,
1461 | "requires": {
1462 | "hosted-git-info": "^2.1.4",
1463 | "resolve": "^1.10.0",
1464 | "semver": "2 || 3 || 4 || 5",
1465 | "validate-npm-package-license": "^3.0.1"
1466 | }
1467 | },
1468 | "normalize-path": {
1469 | "version": "3.0.0",
1470 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1471 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1472 | "dev": true
1473 | },
1474 | "normalize-url": {
1475 | "version": "4.5.0",
1476 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
1477 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
1478 | "dev": true
1479 | },
1480 | "object-assign": {
1481 | "version": "4.1.1",
1482 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1483 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
1484 | },
1485 | "on-finished": {
1486 | "version": "2.3.0",
1487 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1488 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1489 | "requires": {
1490 | "ee-first": "1.1.1"
1491 | }
1492 | },
1493 | "once": {
1494 | "version": "1.4.0",
1495 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1496 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1497 | "requires": {
1498 | "wrappy": "1"
1499 | }
1500 | },
1501 | "p-cancelable": {
1502 | "version": "1.1.0",
1503 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
1504 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
1505 | "dev": true
1506 | },
1507 | "p-limit": {
1508 | "version": "2.3.0",
1509 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
1510 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
1511 | "requires": {
1512 | "p-try": "^2.0.0"
1513 | }
1514 | },
1515 | "p-locate": {
1516 | "version": "3.0.0",
1517 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
1518 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
1519 | "requires": {
1520 | "p-limit": "^2.0.0"
1521 | }
1522 | },
1523 | "p-try": {
1524 | "version": "2.2.0",
1525 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1526 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
1527 | },
1528 | "package-json": {
1529 | "version": "6.5.0",
1530 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
1531 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
1532 | "dev": true,
1533 | "requires": {
1534 | "got": "^9.6.0",
1535 | "registry-auth-token": "^4.0.0",
1536 | "registry-url": "^5.0.0",
1537 | "semver": "^6.2.0"
1538 | },
1539 | "dependencies": {
1540 | "semver": {
1541 | "version": "6.3.0",
1542 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1543 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1544 | "dev": true
1545 | }
1546 | }
1547 | },
1548 | "packet-reader": {
1549 | "version": "1.0.0",
1550 | "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
1551 | "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
1552 | },
1553 | "parent-require": {
1554 | "version": "1.0.0",
1555 | "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz",
1556 | "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc="
1557 | },
1558 | "parse-json": {
1559 | "version": "4.0.0",
1560 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
1561 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
1562 | "dev": true,
1563 | "requires": {
1564 | "error-ex": "^1.3.1",
1565 | "json-parse-better-errors": "^1.0.1"
1566 | }
1567 | },
1568 | "parse-passwd": {
1569 | "version": "1.0.0",
1570 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
1571 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
1572 | "dev": true
1573 | },
1574 | "parse5": {
1575 | "version": "5.1.1",
1576 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
1577 | "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
1578 | },
1579 | "parse5-htmlparser2-tree-adapter": {
1580 | "version": "5.1.1",
1581 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz",
1582 | "integrity": "sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==",
1583 | "requires": {
1584 | "parse5": "^5.1.1"
1585 | }
1586 | },
1587 | "parseurl": {
1588 | "version": "1.3.3",
1589 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1590 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1591 | },
1592 | "path-exists": {
1593 | "version": "3.0.0",
1594 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1595 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
1596 | },
1597 | "path-is-absolute": {
1598 | "version": "1.0.1",
1599 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1600 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
1601 | },
1602 | "path-parse": {
1603 | "version": "1.0.6",
1604 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1605 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1606 | "dev": true
1607 | },
1608 | "path-to-regexp": {
1609 | "version": "0.1.7",
1610 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1611 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1612 | },
1613 | "pg": {
1614 | "version": "8.3.3",
1615 | "resolved": "https://registry.npmjs.org/pg/-/pg-8.3.3.tgz",
1616 | "integrity": "sha512-wmUyoQM/Xzmo62wgOdQAn5tl7u+IA1ZYK7qbuppi+3E+Gj4hlUxVHjInulieWrd0SfHi/ADriTb5ILJ/lsJrSg==",
1617 | "requires": {
1618 | "buffer-writer": "2.0.0",
1619 | "packet-reader": "1.0.0",
1620 | "pg-connection-string": "^2.3.0",
1621 | "pg-pool": "^3.2.1",
1622 | "pg-protocol": "^1.2.5",
1623 | "pg-types": "^2.1.0",
1624 | "pgpass": "1.x",
1625 | "semver": "4.3.2"
1626 | },
1627 | "dependencies": {
1628 | "semver": {
1629 | "version": "4.3.2",
1630 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz",
1631 | "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c="
1632 | }
1633 | }
1634 | },
1635 | "pg-connection-string": {
1636 | "version": "2.3.0",
1637 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.3.0.tgz",
1638 | "integrity": "sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w=="
1639 | },
1640 | "pg-int8": {
1641 | "version": "1.0.1",
1642 | "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
1643 | "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
1644 | },
1645 | "pg-pool": {
1646 | "version": "3.2.1",
1647 | "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.1.tgz",
1648 | "integrity": "sha512-BQDPWUeKenVrMMDN9opfns/kZo4lxmSWhIqo+cSAF7+lfi9ZclQbr9vfnlNaPr8wYF3UYjm5X0yPAhbcgqNOdA=="
1649 | },
1650 | "pg-protocol": {
1651 | "version": "1.2.5",
1652 | "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.2.5.tgz",
1653 | "integrity": "sha512-1uYCckkuTfzz/FCefvavRywkowa6M5FohNMF5OjKrqo9PSR8gYc8poVmwwYQaBxhmQdBjhtP514eXy9/Us2xKg=="
1654 | },
1655 | "pg-types": {
1656 | "version": "2.2.0",
1657 | "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
1658 | "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
1659 | "requires": {
1660 | "pg-int8": "1.0.1",
1661 | "postgres-array": "~2.0.0",
1662 | "postgres-bytea": "~1.0.0",
1663 | "postgres-date": "~1.0.4",
1664 | "postgres-interval": "^1.1.0"
1665 | }
1666 | },
1667 | "pgpass": {
1668 | "version": "1.0.2",
1669 | "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz",
1670 | "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=",
1671 | "requires": {
1672 | "split": "^1.0.0"
1673 | }
1674 | },
1675 | "picomatch": {
1676 | "version": "2.2.2",
1677 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
1678 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
1679 | "dev": true
1680 | },
1681 | "pify": {
1682 | "version": "3.0.0",
1683 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
1684 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
1685 | "dev": true
1686 | },
1687 | "postgres-array": {
1688 | "version": "2.0.0",
1689 | "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
1690 | "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
1691 | },
1692 | "postgres-bytea": {
1693 | "version": "1.0.0",
1694 | "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
1695 | "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
1696 | },
1697 | "postgres-date": {
1698 | "version": "1.0.7",
1699 | "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
1700 | "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
1701 | },
1702 | "postgres-interval": {
1703 | "version": "1.2.0",
1704 | "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
1705 | "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
1706 | "requires": {
1707 | "xtend": "^4.0.0"
1708 | }
1709 | },
1710 | "prepend-http": {
1711 | "version": "2.0.0",
1712 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
1713 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
1714 | "dev": true
1715 | },
1716 | "proxy-addr": {
1717 | "version": "2.0.6",
1718 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
1719 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
1720 | "requires": {
1721 | "forwarded": "~0.1.2",
1722 | "ipaddr.js": "1.9.1"
1723 | }
1724 | },
1725 | "pstree.remy": {
1726 | "version": "1.1.8",
1727 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
1728 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
1729 | "dev": true
1730 | },
1731 | "pump": {
1732 | "version": "3.0.0",
1733 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
1734 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
1735 | "dev": true,
1736 | "requires": {
1737 | "end-of-stream": "^1.1.0",
1738 | "once": "^1.3.1"
1739 | }
1740 | },
1741 | "pupa": {
1742 | "version": "2.0.1",
1743 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz",
1744 | "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==",
1745 | "dev": true,
1746 | "requires": {
1747 | "escape-goat": "^2.0.0"
1748 | }
1749 | },
1750 | "qs": {
1751 | "version": "6.7.0",
1752 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
1753 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
1754 | },
1755 | "range-parser": {
1756 | "version": "1.2.1",
1757 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1758 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1759 | },
1760 | "raw-body": {
1761 | "version": "2.4.0",
1762 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
1763 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
1764 | "requires": {
1765 | "bytes": "3.1.0",
1766 | "http-errors": "1.7.2",
1767 | "iconv-lite": "0.4.24",
1768 | "unpipe": "1.0.0"
1769 | }
1770 | },
1771 | "rc": {
1772 | "version": "1.2.8",
1773 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1774 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1775 | "dev": true,
1776 | "requires": {
1777 | "deep-extend": "^0.6.0",
1778 | "ini": "~1.3.0",
1779 | "minimist": "^1.2.0",
1780 | "strip-json-comments": "~2.0.1"
1781 | }
1782 | },
1783 | "read-pkg": {
1784 | "version": "4.0.1",
1785 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
1786 | "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
1787 | "dev": true,
1788 | "requires": {
1789 | "normalize-package-data": "^2.3.2",
1790 | "parse-json": "^4.0.0",
1791 | "pify": "^3.0.0"
1792 | }
1793 | },
1794 | "readdirp": {
1795 | "version": "3.4.0",
1796 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
1797 | "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
1798 | "dev": true,
1799 | "requires": {
1800 | "picomatch": "^2.2.1"
1801 | }
1802 | },
1803 | "reflect-metadata": {
1804 | "version": "0.1.13",
1805 | "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
1806 | "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg=="
1807 | },
1808 | "registry-auth-token": {
1809 | "version": "4.2.0",
1810 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
1811 | "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==",
1812 | "dev": true,
1813 | "requires": {
1814 | "rc": "^1.2.8"
1815 | }
1816 | },
1817 | "registry-url": {
1818 | "version": "5.1.0",
1819 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
1820 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
1821 | "dev": true,
1822 | "requires": {
1823 | "rc": "^1.2.8"
1824 | }
1825 | },
1826 | "require-directory": {
1827 | "version": "2.1.1",
1828 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1829 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
1830 | },
1831 | "require-main-filename": {
1832 | "version": "2.0.0",
1833 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
1834 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
1835 | },
1836 | "resolve": {
1837 | "version": "1.17.0",
1838 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
1839 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
1840 | "dev": true,
1841 | "requires": {
1842 | "path-parse": "^1.0.6"
1843 | }
1844 | },
1845 | "responselike": {
1846 | "version": "1.0.2",
1847 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
1848 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
1849 | "dev": true,
1850 | "requires": {
1851 | "lowercase-keys": "^1.0.0"
1852 | }
1853 | },
1854 | "rxjs": {
1855 | "version": "6.6.2",
1856 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz",
1857 | "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==",
1858 | "dev": true,
1859 | "requires": {
1860 | "tslib": "^1.9.0"
1861 | }
1862 | },
1863 | "safe-buffer": {
1864 | "version": "5.1.2",
1865 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1866 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1867 | },
1868 | "safer-buffer": {
1869 | "version": "2.1.2",
1870 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1871 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1872 | },
1873 | "sax": {
1874 | "version": "1.2.4",
1875 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1876 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
1877 | },
1878 | "semver": {
1879 | "version": "5.7.1",
1880 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1881 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1882 | "dev": true
1883 | },
1884 | "semver-diff": {
1885 | "version": "3.1.1",
1886 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
1887 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
1888 | "dev": true,
1889 | "requires": {
1890 | "semver": "^6.3.0"
1891 | },
1892 | "dependencies": {
1893 | "semver": {
1894 | "version": "6.3.0",
1895 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1896 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
1897 | "dev": true
1898 | }
1899 | }
1900 | },
1901 | "send": {
1902 | "version": "0.17.1",
1903 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1904 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1905 | "requires": {
1906 | "debug": "2.6.9",
1907 | "depd": "~1.1.2",
1908 | "destroy": "~1.0.4",
1909 | "encodeurl": "~1.0.2",
1910 | "escape-html": "~1.0.3",
1911 | "etag": "~1.8.1",
1912 | "fresh": "0.5.2",
1913 | "http-errors": "~1.7.2",
1914 | "mime": "1.6.0",
1915 | "ms": "2.1.1",
1916 | "on-finished": "~2.3.0",
1917 | "range-parser": "~1.2.1",
1918 | "statuses": "~1.5.0"
1919 | },
1920 | "dependencies": {
1921 | "debug": {
1922 | "version": "2.6.9",
1923 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1924 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1925 | "requires": {
1926 | "ms": "2.0.0"
1927 | },
1928 | "dependencies": {
1929 | "ms": {
1930 | "version": "2.0.0",
1931 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1932 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1933 | }
1934 | }
1935 | },
1936 | "ms": {
1937 | "version": "2.1.1",
1938 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1939 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1940 | }
1941 | }
1942 | },
1943 | "serve-static": {
1944 | "version": "1.14.1",
1945 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1946 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1947 | "requires": {
1948 | "encodeurl": "~1.0.2",
1949 | "escape-html": "~1.0.3",
1950 | "parseurl": "~1.3.3",
1951 | "send": "0.17.1"
1952 | }
1953 | },
1954 | "set-blocking": {
1955 | "version": "2.0.0",
1956 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1957 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
1958 | },
1959 | "setprototypeof": {
1960 | "version": "1.1.1",
1961 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1962 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1963 | },
1964 | "sha.js": {
1965 | "version": "2.4.11",
1966 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
1967 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
1968 | "requires": {
1969 | "inherits": "^2.0.1",
1970 | "safe-buffer": "^5.0.1"
1971 | }
1972 | },
1973 | "signal-exit": {
1974 | "version": "3.0.3",
1975 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
1976 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
1977 | "dev": true
1978 | },
1979 | "source-map": {
1980 | "version": "0.5.7",
1981 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1982 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
1983 | "dev": true
1984 | },
1985 | "source-map-support": {
1986 | "version": "0.4.18",
1987 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
1988 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
1989 | "dev": true,
1990 | "requires": {
1991 | "source-map": "^0.5.6"
1992 | }
1993 | },
1994 | "spawn-command": {
1995 | "version": "0.0.2-1",
1996 | "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
1997 | "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
1998 | "dev": true
1999 | },
2000 | "spdx-correct": {
2001 | "version": "3.1.1",
2002 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
2003 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
2004 | "dev": true,
2005 | "requires": {
2006 | "spdx-expression-parse": "^3.0.0",
2007 | "spdx-license-ids": "^3.0.0"
2008 | }
2009 | },
2010 | "spdx-exceptions": {
2011 | "version": "2.3.0",
2012 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
2013 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
2014 | "dev": true
2015 | },
2016 | "spdx-expression-parse": {
2017 | "version": "3.0.1",
2018 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
2019 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
2020 | "dev": true,
2021 | "requires": {
2022 | "spdx-exceptions": "^2.1.0",
2023 | "spdx-license-ids": "^3.0.0"
2024 | }
2025 | },
2026 | "spdx-license-ids": {
2027 | "version": "3.0.5",
2028 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
2029 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
2030 | "dev": true
2031 | },
2032 | "split": {
2033 | "version": "1.0.1",
2034 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
2035 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
2036 | "requires": {
2037 | "through": "2"
2038 | }
2039 | },
2040 | "sprintf-js": {
2041 | "version": "1.0.3",
2042 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
2043 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
2044 | },
2045 | "statuses": {
2046 | "version": "1.5.0",
2047 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
2048 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
2049 | },
2050 | "string-width": {
2051 | "version": "4.2.0",
2052 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
2053 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
2054 | "requires": {
2055 | "emoji-regex": "^8.0.0",
2056 | "is-fullwidth-code-point": "^3.0.0",
2057 | "strip-ansi": "^6.0.0"
2058 | },
2059 | "dependencies": {
2060 | "ansi-regex": {
2061 | "version": "5.0.0",
2062 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
2063 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
2064 | },
2065 | "emoji-regex": {
2066 | "version": "8.0.0",
2067 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2068 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
2069 | },
2070 | "is-fullwidth-code-point": {
2071 | "version": "3.0.0",
2072 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2073 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
2074 | },
2075 | "strip-ansi": {
2076 | "version": "6.0.0",
2077 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
2078 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
2079 | "requires": {
2080 | "ansi-regex": "^5.0.0"
2081 | }
2082 | }
2083 | }
2084 | },
2085 | "strip-ansi": {
2086 | "version": "5.2.0",
2087 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
2088 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
2089 | "requires": {
2090 | "ansi-regex": "^4.1.0"
2091 | }
2092 | },
2093 | "strip-bom": {
2094 | "version": "3.0.0",
2095 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
2096 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
2097 | "dev": true
2098 | },
2099 | "strip-json-comments": {
2100 | "version": "2.0.1",
2101 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
2102 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
2103 | "dev": true
2104 | },
2105 | "supports-color": {
2106 | "version": "5.5.0",
2107 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
2108 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2109 | "requires": {
2110 | "has-flag": "^3.0.0"
2111 | }
2112 | },
2113 | "term-size": {
2114 | "version": "2.2.0",
2115 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz",
2116 | "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==",
2117 | "dev": true
2118 | },
2119 | "thenify": {
2120 | "version": "3.3.1",
2121 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
2122 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
2123 | "requires": {
2124 | "any-promise": "^1.0.0"
2125 | }
2126 | },
2127 | "thenify-all": {
2128 | "version": "1.6.0",
2129 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
2130 | "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
2131 | "requires": {
2132 | "thenify": ">= 3.1.0 < 4"
2133 | }
2134 | },
2135 | "through": {
2136 | "version": "2.3.8",
2137 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2138 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
2139 | },
2140 | "to-readable-stream": {
2141 | "version": "1.0.0",
2142 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
2143 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
2144 | "dev": true
2145 | },
2146 | "to-regex-range": {
2147 | "version": "5.0.1",
2148 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2149 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2150 | "dev": true,
2151 | "requires": {
2152 | "is-number": "^7.0.0"
2153 | }
2154 | },
2155 | "toidentifier": {
2156 | "version": "1.0.0",
2157 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
2158 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
2159 | },
2160 | "touch": {
2161 | "version": "3.1.0",
2162 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
2163 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
2164 | "dev": true,
2165 | "requires": {
2166 | "nopt": "~1.0.10"
2167 | }
2168 | },
2169 | "tree-kill": {
2170 | "version": "1.2.2",
2171 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
2172 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
2173 | "dev": true
2174 | },
2175 | "ts-node": {
2176 | "version": "3.3.0",
2177 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz",
2178 | "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=",
2179 | "dev": true,
2180 | "requires": {
2181 | "arrify": "^1.0.0",
2182 | "chalk": "^2.0.0",
2183 | "diff": "^3.1.0",
2184 | "make-error": "^1.1.1",
2185 | "minimist": "^1.2.0",
2186 | "mkdirp": "^0.5.1",
2187 | "source-map-support": "^0.4.0",
2188 | "tsconfig": "^6.0.0",
2189 | "v8flags": "^3.0.0",
2190 | "yn": "^2.0.0"
2191 | },
2192 | "dependencies": {
2193 | "ansi-styles": {
2194 | "version": "3.2.1",
2195 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2196 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2197 | "dev": true,
2198 | "requires": {
2199 | "color-convert": "^1.9.0"
2200 | }
2201 | },
2202 | "chalk": {
2203 | "version": "2.4.2",
2204 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2205 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2206 | "dev": true,
2207 | "requires": {
2208 | "ansi-styles": "^3.2.1",
2209 | "escape-string-regexp": "^1.0.5",
2210 | "supports-color": "^5.3.0"
2211 | }
2212 | },
2213 | "color-convert": {
2214 | "version": "1.9.3",
2215 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2216 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2217 | "dev": true,
2218 | "requires": {
2219 | "color-name": "1.1.3"
2220 | }
2221 | },
2222 | "color-name": {
2223 | "version": "1.1.3",
2224 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2225 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
2226 | "dev": true
2227 | },
2228 | "mkdirp": {
2229 | "version": "0.5.5",
2230 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
2231 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
2232 | "dev": true,
2233 | "requires": {
2234 | "minimist": "^1.2.5"
2235 | }
2236 | }
2237 | }
2238 | },
2239 | "tsconfig": {
2240 | "version": "6.0.0",
2241 | "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz",
2242 | "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=",
2243 | "dev": true,
2244 | "requires": {
2245 | "strip-bom": "^3.0.0",
2246 | "strip-json-comments": "^2.0.0"
2247 | }
2248 | },
2249 | "tslib": {
2250 | "version": "1.13.0",
2251 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
2252 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q=="
2253 | },
2254 | "type-fest": {
2255 | "version": "0.8.1",
2256 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
2257 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
2258 | "dev": true
2259 | },
2260 | "type-is": {
2261 | "version": "1.6.18",
2262 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
2263 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
2264 | "requires": {
2265 | "media-typer": "0.3.0",
2266 | "mime-types": "~2.1.24"
2267 | }
2268 | },
2269 | "typedarray-to-buffer": {
2270 | "version": "3.1.5",
2271 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
2272 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
2273 | "dev": true,
2274 | "requires": {
2275 | "is-typedarray": "^1.0.0"
2276 | }
2277 | },
2278 | "typeorm": {
2279 | "version": "0.2.25",
2280 | "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.25.tgz",
2281 | "integrity": "sha512-yzQ995fyDy5wolSLK9cmjUNcmQdixaeEm2TnXB5HN++uKbs9TiR6Y7eYAHpDlAE8s9J1uniDBgytecCZVFergQ==",
2282 | "requires": {
2283 | "app-root-path": "^3.0.0",
2284 | "buffer": "^5.1.0",
2285 | "chalk": "^2.4.2",
2286 | "cli-highlight": "^2.0.0",
2287 | "debug": "^4.1.1",
2288 | "dotenv": "^6.2.0",
2289 | "glob": "^7.1.2",
2290 | "js-yaml": "^3.13.1",
2291 | "mkdirp": "^1.0.3",
2292 | "reflect-metadata": "^0.1.13",
2293 | "sha.js": "^2.4.11",
2294 | "tslib": "^1.9.0",
2295 | "xml2js": "^0.4.17",
2296 | "yargonaut": "^1.1.2",
2297 | "yargs": "^13.2.1"
2298 | },
2299 | "dependencies": {
2300 | "ansi-styles": {
2301 | "version": "3.2.1",
2302 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2303 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2304 | "requires": {
2305 | "color-convert": "^1.9.0"
2306 | }
2307 | },
2308 | "chalk": {
2309 | "version": "2.4.2",
2310 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2311 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2312 | "requires": {
2313 | "ansi-styles": "^3.2.1",
2314 | "escape-string-regexp": "^1.0.5",
2315 | "supports-color": "^5.3.0"
2316 | }
2317 | },
2318 | "color-convert": {
2319 | "version": "1.9.3",
2320 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2321 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2322 | "requires": {
2323 | "color-name": "1.1.3"
2324 | }
2325 | },
2326 | "color-name": {
2327 | "version": "1.1.3",
2328 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2329 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
2330 | },
2331 | "debug": {
2332 | "version": "4.1.1",
2333 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
2334 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
2335 | "requires": {
2336 | "ms": "^2.1.1"
2337 | }
2338 | }
2339 | }
2340 | },
2341 | "typescript": {
2342 | "version": "4.0.2",
2343 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
2344 | "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ=="
2345 | },
2346 | "undefsafe": {
2347 | "version": "2.0.3",
2348 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
2349 | "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
2350 | "dev": true,
2351 | "requires": {
2352 | "debug": "^2.2.0"
2353 | },
2354 | "dependencies": {
2355 | "debug": {
2356 | "version": "2.6.9",
2357 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2358 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2359 | "dev": true,
2360 | "requires": {
2361 | "ms": "2.0.0"
2362 | }
2363 | },
2364 | "ms": {
2365 | "version": "2.0.0",
2366 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2367 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
2368 | "dev": true
2369 | }
2370 | }
2371 | },
2372 | "unique-string": {
2373 | "version": "2.0.0",
2374 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
2375 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
2376 | "dev": true,
2377 | "requires": {
2378 | "crypto-random-string": "^2.0.0"
2379 | }
2380 | },
2381 | "unpipe": {
2382 | "version": "1.0.0",
2383 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2384 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
2385 | },
2386 | "update-notifier": {
2387 | "version": "4.1.1",
2388 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz",
2389 | "integrity": "sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==",
2390 | "dev": true,
2391 | "requires": {
2392 | "boxen": "^4.2.0",
2393 | "chalk": "^3.0.0",
2394 | "configstore": "^5.0.1",
2395 | "has-yarn": "^2.1.0",
2396 | "import-lazy": "^2.1.0",
2397 | "is-ci": "^2.0.0",
2398 | "is-installed-globally": "^0.3.1",
2399 | "is-npm": "^4.0.0",
2400 | "is-yarn-global": "^0.3.0",
2401 | "latest-version": "^5.0.0",
2402 | "pupa": "^2.0.1",
2403 | "semver-diff": "^3.1.1",
2404 | "xdg-basedir": "^4.0.0"
2405 | }
2406 | },
2407 | "url-parse-lax": {
2408 | "version": "3.0.0",
2409 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
2410 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
2411 | "dev": true,
2412 | "requires": {
2413 | "prepend-http": "^2.0.0"
2414 | }
2415 | },
2416 | "utils-merge": {
2417 | "version": "1.0.1",
2418 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2419 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
2420 | },
2421 | "v8flags": {
2422 | "version": "3.2.0",
2423 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
2424 | "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
2425 | "dev": true,
2426 | "requires": {
2427 | "homedir-polyfill": "^1.0.1"
2428 | }
2429 | },
2430 | "validate-npm-package-license": {
2431 | "version": "3.0.4",
2432 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
2433 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
2434 | "dev": true,
2435 | "requires": {
2436 | "spdx-correct": "^3.0.0",
2437 | "spdx-expression-parse": "^3.0.0"
2438 | }
2439 | },
2440 | "vary": {
2441 | "version": "1.1.2",
2442 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2443 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
2444 | },
2445 | "which-module": {
2446 | "version": "2.0.0",
2447 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
2448 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
2449 | },
2450 | "widest-line": {
2451 | "version": "3.1.0",
2452 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
2453 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
2454 | "dev": true,
2455 | "requires": {
2456 | "string-width": "^4.0.0"
2457 | }
2458 | },
2459 | "wrap-ansi": {
2460 | "version": "5.1.0",
2461 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
2462 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
2463 | "requires": {
2464 | "ansi-styles": "^3.2.0",
2465 | "string-width": "^3.0.0",
2466 | "strip-ansi": "^5.0.0"
2467 | },
2468 | "dependencies": {
2469 | "ansi-styles": {
2470 | "version": "3.2.1",
2471 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
2472 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
2473 | "requires": {
2474 | "color-convert": "^1.9.0"
2475 | }
2476 | },
2477 | "color-convert": {
2478 | "version": "1.9.3",
2479 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
2480 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
2481 | "requires": {
2482 | "color-name": "1.1.3"
2483 | }
2484 | },
2485 | "color-name": {
2486 | "version": "1.1.3",
2487 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
2488 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
2489 | },
2490 | "string-width": {
2491 | "version": "3.1.0",
2492 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2493 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2494 | "requires": {
2495 | "emoji-regex": "^7.0.1",
2496 | "is-fullwidth-code-point": "^2.0.0",
2497 | "strip-ansi": "^5.1.0"
2498 | }
2499 | }
2500 | }
2501 | },
2502 | "wrappy": {
2503 | "version": "1.0.2",
2504 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2505 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
2506 | },
2507 | "write-file-atomic": {
2508 | "version": "3.0.3",
2509 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
2510 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
2511 | "dev": true,
2512 | "requires": {
2513 | "imurmurhash": "^0.1.4",
2514 | "is-typedarray": "^1.0.0",
2515 | "signal-exit": "^3.0.2",
2516 | "typedarray-to-buffer": "^3.1.5"
2517 | }
2518 | },
2519 | "xdg-basedir": {
2520 | "version": "4.0.0",
2521 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
2522 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
2523 | "dev": true
2524 | },
2525 | "xml2js": {
2526 | "version": "0.4.23",
2527 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
2528 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
2529 | "requires": {
2530 | "sax": ">=0.6.0",
2531 | "xmlbuilder": "~11.0.0"
2532 | }
2533 | },
2534 | "xmlbuilder": {
2535 | "version": "11.0.1",
2536 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
2537 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
2538 | },
2539 | "xtend": {
2540 | "version": "4.0.2",
2541 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
2542 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
2543 | },
2544 | "y18n": {
2545 | "version": "4.0.0",
2546 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
2547 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
2548 | },
2549 | "yargonaut": {
2550 | "version": "1.1.4",
2551 | "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz",
2552 | "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==",
2553 | "requires": {
2554 | "chalk": "^1.1.1",
2555 | "figlet": "^1.1.1",
2556 | "parent-require": "^1.0.0"
2557 | },
2558 | "dependencies": {
2559 | "ansi-regex": {
2560 | "version": "2.1.1",
2561 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
2562 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
2563 | },
2564 | "ansi-styles": {
2565 | "version": "2.2.1",
2566 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
2567 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
2568 | },
2569 | "chalk": {
2570 | "version": "1.1.3",
2571 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
2572 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
2573 | "requires": {
2574 | "ansi-styles": "^2.2.1",
2575 | "escape-string-regexp": "^1.0.2",
2576 | "has-ansi": "^2.0.0",
2577 | "strip-ansi": "^3.0.0",
2578 | "supports-color": "^2.0.0"
2579 | }
2580 | },
2581 | "strip-ansi": {
2582 | "version": "3.0.1",
2583 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2584 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2585 | "requires": {
2586 | "ansi-regex": "^2.0.0"
2587 | }
2588 | },
2589 | "supports-color": {
2590 | "version": "2.0.0",
2591 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
2592 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
2593 | }
2594 | }
2595 | },
2596 | "yargs": {
2597 | "version": "13.3.2",
2598 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
2599 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
2600 | "requires": {
2601 | "cliui": "^5.0.0",
2602 | "find-up": "^3.0.0",
2603 | "get-caller-file": "^2.0.1",
2604 | "require-directory": "^2.1.1",
2605 | "require-main-filename": "^2.0.0",
2606 | "set-blocking": "^2.0.0",
2607 | "string-width": "^3.0.0",
2608 | "which-module": "^2.0.0",
2609 | "y18n": "^4.0.0",
2610 | "yargs-parser": "^13.1.2"
2611 | },
2612 | "dependencies": {
2613 | "string-width": {
2614 | "version": "3.1.0",
2615 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
2616 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
2617 | "requires": {
2618 | "emoji-regex": "^7.0.1",
2619 | "is-fullwidth-code-point": "^2.0.0",
2620 | "strip-ansi": "^5.1.0"
2621 | }
2622 | }
2623 | }
2624 | },
2625 | "yargs-parser": {
2626 | "version": "13.1.2",
2627 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
2628 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
2629 | "requires": {
2630 | "camelcase": "^5.0.0",
2631 | "decamelize": "^1.2.0"
2632 | }
2633 | },
2634 | "yn": {
2635 | "version": "2.0.0",
2636 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz",
2637 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=",
2638 | "dev": true
2639 | }
2640 | }
2641 | }
2642 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "e-commerce-template",
3 | "version": "1.0.0",
4 | "description": "e-commerce website template",
5 | "main": "index.js",
6 | "scripts": {
7 | "start:build": "tsc -w",
8 | "start:run": "nodemon dist/index.js",
9 | "start": "concurrently npm:start:*"
10 | },
11 | "author": "Aadarsh",
12 | "license": "MIT",
13 | "devDependencies": {
14 | "@types/express": "^4.17.7",
15 | "@types/node": "^8.0.29",
16 | "body-parser": "^1.19.0",
17 | "concurrently": "^5.3.0",
18 | "ejs": "^3.1.5",
19 | "nodemon": "^2.0.4",
20 | "ts-node": "3.3.0"
21 | },
22 | "dependencies": {
23 | "express": "^4.17.1",
24 | "pg": "^8.3.3",
25 | "reflect-metadata": "^0.1.10",
26 | "typeorm": "0.2.25",
27 | "typescript": "^4.0.2"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # E-Commerce Website Template
2 |
3 | [](https://github.com/Itsaadarsh/nodeJS-express-postgreSQL/blob/master/LICENSE)
4 | 
5 |
6 | An e-commerce site template built with TypeScript, NodeJS, Express, PostgreSQL, TypeORM, EJS.
7 |
8 | ## Getting started
9 |
10 | This project will run on **Express** using **PostgreSQL** as database. Project is open for suggestions, bug reports and pull requests.
11 |
12 | ## Features
13 |
14 | - EJS Templates
15 | - Types Support
16 | - Active Record Pattern
17 | - MVC Architecture
18 | - TypeORM
19 | - Middleware
20 | - ES6 Syntax
21 | - Light-weight project
22 |
23 | ## Dependencies
24 |
25 | - express
26 | - postgresql(pg)
27 | - typeorm
28 | - typescript
29 | - reflect-metadata
30 |
31 | ## Dev Dependencies
32 |
33 | - @types/express
34 | - @types/node
35 | - body-parser
36 | - concurrently
37 | - ejs
38 | - nodemon
39 | - ts-node
40 |
41 | ## How to run
42 |
43 | ### Running server locally
44 |
45 | ```
46 | npm install
47 | npm start
48 | ```
49 |
50 | Press `CTRL + C` to stop the process.
51 |
52 | ```
53 | ## Bugs or improvements
54 |
55 | Every project needs improvements, Feel free to report any bugs or improvements. Pull requests are always welcomed.
56 |
57 | ## License
58 |
59 | This project is open-sourced software licensed under the MIT License. See the LICENSE file for more information.
60 | ```
61 |
62 | ## Support & Feedbacks
63 |
64 | - [LinkedIN](https://www.linkedin.com/in/itsaadarsh/ 'Linkedin') - Aadarsh S (itsaadarsh)
65 | - [Twitter](https://www.twitter.com/itsaadarsh_ 'Twitter') - itsaadarsh\_
66 | - [Instagram](https://www.instagram.com/itsaadarsh/ '@itsaadarsh') - itsaadarsh
67 | - aadarsh-s@outlook.com
68 |
--------------------------------------------------------------------------------
/src/controllers/admin.ts:
--------------------------------------------------------------------------------
1 | import { Product } from '../models/product';
2 | import express from 'express';
3 | import { User } from '../models/user';
4 |
5 | const getAddProduct = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
6 | res.render('admin/edit-product', {
7 | pageTitle: 'ADD PRODUCTS',
8 | path: '/admin/add-product',
9 | editing: false,
10 | });
11 | };
12 |
13 | const postAddProduct = (req: express.Request, res: express.Response, _next: express.NextFunction) => {
14 | User.find({ select: ['id'] })
15 | .then(userID => {
16 | const product = new Product();
17 | const { title, imageUrl, price, description } = req.body;
18 | Product.save({
19 | title,
20 | imageUrl,
21 | price,
22 | description,
23 | userid: userID[userID.length - 1],
24 | });
25 | setTimeout(() => {
26 | res.redirect('/');
27 | }, 500);
28 | })
29 | .catch(console.log);
30 | };
31 |
32 | const getProducts = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
33 | Product.find({ where: { userid: 1 } })
34 | .then(products => {
35 | res.render('admin/products', {
36 | prods: products,
37 | pageTitle: 'ADMIN PRODUCTS',
38 | path: '/admin/products',
39 | });
40 | })
41 | .catch(console.log);
42 | };
43 |
44 | const getEditProduct = (req: express.Request, res: express.Response, _next: express.NextFunction) => {
45 | const prodId = +req.params.productId;
46 | const { edit } = req.query;
47 | if (edit === 'false') res.redirect('/');
48 | Product.findOne({ id: +prodId })
49 | .then(prod => {
50 | if (!prod) res.redirect('/');
51 | res.render('admin/edit-product', {
52 | pageTitle: 'Edit Product',
53 | path: '/admin/edit-product',
54 | editing: edit,
55 | product: prod,
56 | });
57 | })
58 | .catch(console.log);
59 | };
60 |
61 | const postEditProduct = (req: express.Request, res: express.Response, _next: express.NextFunction) => {
62 | const prodId: number = +req.body.productId;
63 | if (typeof prodId === 'number') {
64 | const { title, imageUrl, price, description } = req.body;
65 | Product.update(
66 | { id: prodId },
67 | {
68 | title,
69 | imageUrl,
70 | price,
71 | description,
72 | }
73 | );
74 | setTimeout(() => {
75 | res.redirect('/admin/products');
76 | }, 500);
77 | }
78 | };
79 |
80 | const postDeleteProduct = (req: express.Request, res: express.Response, _next: express.NextFunction) => {
81 | const prodId: number = +req.body.productId;
82 | if (typeof prodId === 'number') {
83 | Product.delete({ id: prodId });
84 | setTimeout(() => {
85 | res.redirect('/admin/products');
86 | }, 500);
87 | }
88 | };
89 |
90 | export default module.exports = {
91 | getAddProduct,
92 | getProducts,
93 | postAddProduct,
94 | getEditProduct,
95 | postEditProduct,
96 | postDeleteProduct,
97 | };
98 |
--------------------------------------------------------------------------------
/src/controllers/error.ts:
--------------------------------------------------------------------------------
1 | import express from 'express';
2 |
3 | const error404 = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
4 | res.status(404).render('404', { pageTitle: 'Page Not Found', path: '/404' });
5 | };
6 |
7 | export default module.exports = {
8 | error404,
9 | };
10 |
--------------------------------------------------------------------------------
/src/controllers/interface/shop.ts:
--------------------------------------------------------------------------------
1 | export interface CartItems {
2 | id: number;
3 | title: string;
4 | cartItem: { quantity: number };
5 | }
6 |
7 | export interface OrderItems {
8 | id: number;
9 | products: [{ title: string; qty: number }];
10 | }
11 |
--------------------------------------------------------------------------------
/src/controllers/shop.ts:
--------------------------------------------------------------------------------
1 | import { Cart } from '../models/cart';
2 | import { Product } from '../models/product';
3 | import express from 'express';
4 | import { CartItem } from '../models/cart-item';
5 | import { Order } from '../models/order';
6 | import { User } from '../models/user';
7 | import { OrderItem } from '../models/order-item';
8 | import { CartItems, OrderItems } from '../controllers/interface/shop';
9 |
10 | export const getHome = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
11 | Product.find({ select: ['title', 'imageUrl', 'price', 'description', 'id'] })
12 | .then(products => {
13 | res.render('shop/index', {
14 | prods: products,
15 | pageTitle: 'SHOP',
16 | path: '/',
17 | });
18 | })
19 | .catch(console.log);
20 | };
21 |
22 | const getProducts = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
23 | Product.find({ select: ['title', 'imageUrl', 'price', 'description', 'id'] })
24 | .then(products => {
25 | res.render('shop/product-list', {
26 | prods: products,
27 | pageTitle: 'ALL PRODUCTS',
28 | path: '/products',
29 | });
30 | })
31 | .catch(console.log);
32 | };
33 |
34 | const getProduct = (req: express.Request, res: express.Response, _next: express.NextFunction) => {
35 | const prodID: number = +req.params.productId;
36 | Product.findOne({ id: prodID })
37 | .then(prod => {
38 | res.render('shop/product-detail', {
39 | product: prod,
40 | pageTitle: prod!.title,
41 | path: '/products',
42 | });
43 | })
44 | .catch(console.log);
45 | };
46 |
47 | const getCart = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
48 | const product: CartItems[] = [];
49 | CartItem.find({ relations: ['prodid'] })
50 | .then(citem => {
51 | citem.forEach(item => {
52 | product.push({ id: item.id, title: item.prodid.title, cartItem: { quantity: item.quantity } });
53 | });
54 | res.render('shop/cart', {
55 | path: '/cart',
56 | pageTitle: 'Your Cart',
57 | products: product,
58 | });
59 | })
60 | .catch(console.log);
61 | };
62 |
63 | const postCart = (req: express.Request, res: express.Response, _next: express.NextFunction) => {
64 | const prodID: number = +req.body.productId;
65 | CartItem.find({ relations: ['prodid'], where: { prodid: { id: prodID } } })
66 | .then(avaiProd => {
67 | if (avaiProd.length === 0) {
68 | Product.findOne({ where: { id: prodID } })
69 | .then(prod => {
70 | Cart.find({ select: ['id'] })
71 | .then(cart => {
72 | const defQty = 1;
73 | const cartitem = new CartItem();
74 | cartitem.quantity = defQty;
75 | cartitem.cartid = cart[cart.length - 1];
76 | cartitem.prodid = prod as Product;
77 | cartitem.save();
78 | setTimeout(() => {
79 | res.redirect('/cart');
80 | }, 500);
81 | })
82 | .catch(console.log);
83 | })
84 | .catch(console.log);
85 | } else {
86 | const updateQty = avaiProd[0].quantity + 1;
87 | CartItem.update({ id: avaiProd[0].id }, { quantity: updateQty });
88 | setTimeout(() => {
89 | res.redirect('/cart');
90 | }, 500);
91 | }
92 | })
93 | .catch(console.log);
94 | };
95 |
96 | const postDeleteCart = (req: express.Request, res: express.Response, _next: express.NextFunction) => {
97 | const prodId: number = +req.body.productId;
98 | CartItem.delete({ id: prodId });
99 | setTimeout(() => {
100 | res.redirect('/cart');
101 | }, 300);
102 | };
103 |
104 | const getOrders = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
105 | const orders: OrderItems[] = [];
106 | OrderItem.find({ relations: ['orderid', 'prodid'], order: { id: 'ASC' } })
107 | .then(ord => {
108 | ord.forEach(singleOrd => {
109 | orders.push({
110 | id: singleOrd.id,
111 | products: [{ title: singleOrd.prodTitle, qty: singleOrd.quantity }],
112 | });
113 | });
114 | res.render('shop/orders', {
115 | path: '/orders',
116 | pageTitle: 'Your Orders',
117 | orders: orders,
118 | });
119 | })
120 | .catch(console.log);
121 | };
122 |
123 | const postOrder = (_req: express.Request, res: express.Response, _next: express.NextFunction) => {
124 | User.find({ select: ['id'] })
125 | .then(userId => {
126 | const userID = userId[userId.length - 1];
127 | const order = new Order();
128 | order.userid = userID;
129 | order.save();
130 |
131 | setTimeout(() => {
132 | Order.find({ relations: ['userid'], where: { userid: userID }, order: { id: 'DESC' }, take: 1 })
133 | .then(ord => {
134 | CartItem.find({ relations: ['cartid', 'prodid'], where: { cartid: userID } })
135 | .then(cItem => {
136 | cItem.forEach(oItem => {
137 | const orderItem = new OrderItem();
138 | orderItem.quantity = oItem.quantity;
139 | orderItem.prodTitle = oItem.prodid.title;
140 | orderItem.orderid = ord[0];
141 | orderItem.prodid = oItem.prodid;
142 | orderItem.save();
143 | CartItem.delete({ cartid: userID });
144 | });
145 | setTimeout(() => {
146 | res.redirect('/orders');
147 | }, 300);
148 | })
149 | .catch(console.log);
150 | })
151 | .catch(console.log);
152 | }, 700);
153 | })
154 | .catch(console.log);
155 | };
156 |
157 | export default module.exports = {
158 | getHome,
159 | getProducts,
160 | getCart,
161 | getOrders,
162 | postOrder,
163 | getProduct,
164 | postCart,
165 | postDeleteCart,
166 | };
167 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import 'reflect-metadata';
2 | import { createConnection } from 'typeorm';
3 | import express from 'express';
4 | import bodyParser from 'body-parser';
5 | import homeRouter from './routes/shop';
6 | import adminData from './routes/admin';
7 | import errorRoute from './controllers/error';
8 | import userRoute from './routes/user';
9 |
10 | createConnection()
11 | .then(_connection => {
12 | const app = express();
13 |
14 | app.set('view engine', 'ejs');
15 | app.use(bodyParser.urlencoded({ extended: false }));
16 | app.use(express.static('dist'));
17 |
18 | app.use('/user', userRoute.router);
19 |
20 | app.use('/admin', adminData.router);
21 |
22 | app.use(homeRouter);
23 |
24 | app.use(errorRoute.error404);
25 |
26 | app.listen(8080), console.log('Listening at 8080');
27 | })
28 | .catch(error => console.log(error));
29 |
--------------------------------------------------------------------------------
/src/models/cart-item.ts:
--------------------------------------------------------------------------------
1 | import { Entity, PrimaryGeneratedColumn, BaseEntity, Column, JoinColumn, ManyToOne } from 'typeorm';
2 | import { Cart } from './cart';
3 | import { Product } from './product';
4 |
5 | @Entity()
6 | export class CartItem extends BaseEntity {
7 | @PrimaryGeneratedColumn()
8 | id: number;
9 |
10 | @Column('smallint', { nullable: false })
11 | quantity: number;
12 |
13 | @ManyToOne(() => Cart, cart => cart.cItem, { onDelete: 'CASCADE', onUpdate: 'CASCADE' })
14 | @JoinColumn({ name: 'cartid' })
15 | cartid: Cart;
16 |
17 | @ManyToOne(() => Product, prod => prod.cItem, { onDelete: 'CASCADE', onUpdate: 'CASCADE' })
18 | @JoinColumn({ name: 'productid' })
19 | prodid: Product;
20 | }
21 |
--------------------------------------------------------------------------------
/src/models/cart.ts:
--------------------------------------------------------------------------------
1 | import { Entity, PrimaryGeneratedColumn, BaseEntity, OneToOne, JoinColumn, OneToMany } from 'typeorm';
2 | import { User } from './user';
3 | import { CartItem } from './cart-item';
4 |
5 | @Entity()
6 | export class Cart extends BaseEntity {
7 | @PrimaryGeneratedColumn()
8 | id: number;
9 |
10 | @OneToOne(() => User, user => user.cartid, { onUpdate: 'CASCADE', onDelete: 'CASCADE' })
11 | @JoinColumn({ name: 'userid' })
12 | userid: User;
13 |
14 | @OneToMany(() => CartItem, cartitem => cartitem.cartid)
15 | cItem: CartItem[];
16 | }
17 |
--------------------------------------------------------------------------------
/src/models/order-item.ts:
--------------------------------------------------------------------------------
1 | import { Entity, PrimaryGeneratedColumn, BaseEntity, Column, JoinColumn, ManyToOne } from 'typeorm';
2 | import { Order } from './order';
3 | import { Product } from './product';
4 |
5 | @Entity()
6 | export class OrderItem extends BaseEntity {
7 | @PrimaryGeneratedColumn()
8 | id: number;
9 |
10 | @Column('smallint', { nullable: false })
11 | quantity: number;
12 |
13 | @Column('varchar', { nullable: false, length: 100 })
14 | prodTitle: string;
15 |
16 | @ManyToOne(() => Order, order => order.oItem, { onUpdate: 'CASCADE', onDelete: 'CASCADE' })
17 | @JoinColumn({ name: 'orderid' })
18 | orderid: Order;
19 |
20 | @ManyToOne(() => Product, prod => prod.cItem, { onDelete: 'SET NULL', onUpdate: 'CASCADE' })
21 | @JoinColumn({ name: 'productid' })
22 | prodid: Product;
23 | }
24 |
--------------------------------------------------------------------------------
/src/models/order.ts:
--------------------------------------------------------------------------------
1 | import { Entity, PrimaryGeneratedColumn, BaseEntity, ManyToOne, JoinColumn, OneToMany } from 'typeorm';
2 | import { OrderItem } from './order-item';
3 | import { User } from './user';
4 |
5 | @Entity()
6 | export class Order extends BaseEntity {
7 | @PrimaryGeneratedColumn()
8 | id: number;
9 |
10 | @OneToMany(() => OrderItem, orderitem => orderitem.orderid)
11 | oItem: OrderItem[];
12 |
13 | @ManyToOne(() => User, user => user.ordid, { onUpdate: 'CASCADE', onDelete: 'CASCADE' })
14 | @JoinColumn({ referencedColumnName: 'id', name: 'userid' })
15 | userid: User;
16 | }
17 |
--------------------------------------------------------------------------------
/src/models/product.ts:
--------------------------------------------------------------------------------
1 | import {
2 | Entity,
3 | PrimaryGeneratedColumn,
4 | Column,
5 | BaseEntity,
6 | ManyToOne,
7 | JoinColumn,
8 | OneToMany,
9 | } from 'typeorm';
10 | import { CartItem } from './cart-item';
11 | import { OrderItem } from './order-item';
12 | import { User } from './user';
13 |
14 | @Entity()
15 | export class Product extends BaseEntity {
16 | @PrimaryGeneratedColumn()
17 | id: number;
18 |
19 | @Column('varchar', { nullable: false, length: 100 })
20 | title: string;
21 |
22 | @Column('numeric', { nullable: false })
23 | price: number;
24 |
25 | @Column('text', { nullable: false })
26 | imageUrl: string;
27 |
28 | @Column('varchar', { nullable: false, length: 255 })
29 | description: string;
30 |
31 | @OneToMany(() => CartItem, cItem => cItem.prodid)
32 | cItem: CartItem[];
33 |
34 | @OneToMany(() => OrderItem, oItem => oItem.prodid)
35 | oItem: OrderItem[];
36 |
37 | @ManyToOne(() => User, user => user.prodId, { onDelete: 'CASCADE', onUpdate: 'CASCADE' })
38 | @JoinColumn({ referencedColumnName: 'id', name: 'userid' })
39 | userid: User;
40 | }
41 |
--------------------------------------------------------------------------------
/src/models/user.ts:
--------------------------------------------------------------------------------
1 | import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, OneToMany, OneToOne } from 'typeorm';
2 | import { Product } from './product';
3 | import { Cart } from './cart';
4 | import { Order } from './order';
5 |
6 | @Entity()
7 | export class User extends BaseEntity {
8 | @PrimaryGeneratedColumn()
9 | id: number;
10 |
11 | @Column('varchar', { nullable: false, length: 100 })
12 | username: string;
13 |
14 | @Column('varchar', { nullable: false, length: 100 })
15 | email: string;
16 |
17 | @OneToOne(() => Cart, cart => cart.userid)
18 | cartid = Cart;
19 |
20 | @OneToMany(() => Product, prod => prod.userid)
21 | prodId: Product[];
22 |
23 | @OneToMany(() => Order, ord => ord.userid)
24 | ordid: Order[];
25 | }
26 |
--------------------------------------------------------------------------------
/src/routes/admin.ts:
--------------------------------------------------------------------------------
1 | import express from 'express';
2 | const router = express.Router();
3 | import adminController from '../controllers/admin';
4 |
5 | router.get('/add-product', adminController.getAddProduct);
6 |
7 | router.get('/products', adminController.getProducts);
8 |
9 | router.post('/add-product', adminController.postAddProduct);
10 |
11 | router.get('/edit-product/:productId', adminController.getEditProduct);
12 |
13 | router.post('/edit-product', adminController.postEditProduct);
14 |
15 | router.post('/delete-product', adminController.postDeleteProduct);
16 |
17 | export default module.exports = {
18 | router,
19 | };
20 |
--------------------------------------------------------------------------------
/src/routes/shop.ts:
--------------------------------------------------------------------------------
1 | import express from 'express';
2 | const router = express.Router();
3 | import shopController from '../controllers/shop';
4 |
5 | router.get('/', shopController.getHome);
6 |
7 | router.get('/products', shopController.getProducts);
8 |
9 | router.get('/products/:productId', shopController.getProduct);
10 |
11 | router.get('/cart', shopController.getCart);
12 |
13 | router.post('/cart', shopController.postCart);
14 |
15 | router.post('/cart-delete-item', shopController.postDeleteCart);
16 |
17 | router.post('/create-order', shopController.postOrder);
18 |
19 | router.get('/orders', shopController.getOrders);
20 |
21 | export default module.exports = router;
22 |
--------------------------------------------------------------------------------
/src/routes/user.ts:
--------------------------------------------------------------------------------
1 | import express from 'express';
2 | import { User } from '../models/user';
3 | import { Cart } from '../models/cart';
4 | const router = express.Router();
5 |
6 | router.get(
7 | '/:username/:email',
8 | (req: express.Request, res: express.Response, _next: express.NextFunction) => {
9 | const { username, email } = req.params;
10 | res.send(`
11 | User created ${uname} ${uemail}
12 |
17 | `);
18 | }
19 | );
20 |
21 | router.post(
22 | '/:username/:email',
23 | (req: express.Request, res: express.Response, _next: express.NextFunction) => {
24 | const user = new User();
25 | const { username, email } = req.body;
26 | user.username = username;
27 | user.email = useremail;
28 | user.save();
29 |
30 | const cart = new Cart();
31 | cart.userid = user;
32 | cart.save();
33 |
34 | res.redirect('/');
35 | }
36 | );
37 |
38 | export default module.exports = { router };
39 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es6",
4 | "module": "commonjs",
5 | "lib": ["dom", "es6", "es2017", "esnext.asynciterable"],
6 | "sourceMap": true,
7 | "outDir": "./dist",
8 | "moduleResolution": "node",
9 | "removeComments": true,
10 | "noImplicitAny": true,
11 | "strictNullChecks": true,
12 | "strictFunctionTypes": true,
13 | "noImplicitThis": true,
14 | "noUnusedLocals": true,
15 | "noUnusedParameters": true,
16 | "noImplicitReturns": true,
17 | "noFallthroughCasesInSwitch": true,
18 | "allowSyntheticDefaultImports": true,
19 | "esModuleInterop": true,
20 | "emitDecoratorMetadata": true,
21 | "experimentalDecorators": true,
22 | "resolveJsonModule": true,
23 | "baseUrl": "."
24 | },
25 | "exclude": ["node_modules"],
26 | "include": ["./src/**/*.tsx", "./src/**/*.ts"]
27 | }
28 |
--------------------------------------------------------------------------------
/views/404.ejs:
--------------------------------------------------------------------------------
1 | <%- include('includes/head.ejs') %>
2 |
3 |
4 |
5 | <%- include('includes/navigation.ejs') %>
6 | Page Not Found!
7 |
8 | <%- include('includes/end.ejs') %>
--------------------------------------------------------------------------------
/views/admin/edit-product.ejs:
--------------------------------------------------------------------------------
1 | <%- include('../includes/head.ejs') %>
2 |
3 |
4 |
5 |
6 |
7 | <%- include('../includes/navigation.ejs') %>
8 |
9 |
10 |
33 |
34 | <%- include('../includes/end.ejs') %>
--------------------------------------------------------------------------------
/views/admin/products.ejs:
--------------------------------------------------------------------------------
1 | <%- include('../includes/head.ejs') %>
2 |
3 |
4 |
5 |
6 | <%- include('../includes/navigation.ejs') %>
7 |
8 |
9 | <% if (prods.length > 0) { %>
10 |
11 | <% for (let product of prods) { %>
12 |
13 |
18 |
19 |

20 |
21 |
22 |
$
23 | <%= product.price %>
24 |
25 |
26 | <%= product.description %>
27 |
28 |
29 |
30 |
Edit
31 |
35 |
36 |
37 |
38 | <% } %>
39 |
40 | <% } else { %>
41 | No Products Found!
42 | <% } %>
43 |
44 | <%- include('../includes/end.ejs') %>
--------------------------------------------------------------------------------
/views/includes/add-to-cart.ejs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/views/includes/end.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |