├── .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":";;AAAA,+CAA4C;AAE5C,yCAAsC;AAEtC,MAAM,aAAa,GAAG,CAAC,IAAqB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAClG,GAAG,CAAC,MAAM,CAAC,oBAAoB,EAAE;QAC/B,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IAClG,WAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;SAC1B,IAAI,CAAC,MAAM,CAAC,EAAE;QACb,MAAM,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QAC3C,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3C,iBAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,UAAU,CAAC,GAAG,EAAE;YACd,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,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,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;SACnC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACf,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAC3B,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,gBAAgB;YAC3B,IAAI,EAAE,iBAAiB;SACxB,CAAC,CAAC;IACL,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,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B,IAAI,IAAI,KAAK,OAAO;QAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxC,iBAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,EAAE;QACX,IAAI,CAAC,IAAI;YAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7B,GAAG,CAAC,MAAM,CAAC,oBAAoB,EAAE;YAC/B,SAAS,EAAE,cAAc;YACzB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IACnG,MAAM,MAAM,GAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,iBAAO,CAAC,MAAM,CACZ,EAAE,EAAE,EAAE,MAAM,EAAE,EACd;YACE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;YACrB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;YAC3B,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;YACrB,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW;SAClC,CACF,CAAC;QACF,UAAU,CAAC,GAAG,EAAE;YACd,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAClC,CAAC,EAAE,GAAG,CAAC,CAAC;KACT;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,GAAoB,EAAE,GAAqB,EAAE,KAA2B,EAAE,EAAE;IACrG,MAAM,MAAM,GAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;IAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9B,iBAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/B,UAAU,CAAC,GAAG,EAAE;YACd,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAClC,CAAC,EAAE,GAAG,CAAC,CAAC;KACT;AACH,CAAC,CAAC;AAEF,kBAAe,MAAM,CAAC,OAAO,GAAG;IAC9B,aAAa;IACb,WAAW;IACX,cAAc;IACd,cAAc;IACd,eAAe;IACf,iBAAiB;CAClB,CAAC"} -------------------------------------------------------------------------------- /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":"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"} -------------------------------------------------------------------------------- /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 |
16 | 17 | 18 | 19 |
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 | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/Itsaadarsh/nodeJS-express-postgreSQL/blob/master/LICENSE) 4 | ![GitHub repo size](https://img.shields.io/github/repo-size/Itsaadarsh/nodeJS-express-postgreSQL) 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 |
13 | 14 | 15 | 16 |
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 |
11 |
12 | 13 | 14 |
15 |
16 | 17 | 18 |
19 |
20 | 21 | 22 |
23 |
24 | 25 | 26 |
27 | <% if (editing) { %> 28 | 29 | <% } %> 30 | 31 | 32 |
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 |
14 |

15 | <%= product.title %> 16 |

17 |
18 |
19 | <%= product.title %> 20 |
21 |
22 |

$ 23 | <%= product.price %> 24 |

25 |

26 | <%= product.description %> 27 |

28 |
29 |
30 | Edit 31 |
32 | 33 | 34 |
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 |
2 | 3 | 4 |
-------------------------------------------------------------------------------- /views/includes/end.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /views/includes/head.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= pageTitle %> 9 | -------------------------------------------------------------------------------- /views/includes/navigation.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 28 |
29 | 30 | -------------------------------------------------------------------------------- /views/shop/cart.ejs: -------------------------------------------------------------------------------- 1 | <%- include('../includes/head.ejs') %> 2 | 3 | 4 | 5 | 6 | <%- include('../includes/navigation.ejs') %> 7 |
8 | <% if (products.length > 0) { %> 9 | 21 |
22 |
23 |
24 | 25 |
26 |
27 | 28 | <% } else { %> 29 |

No Products in Cart!

30 | <% } %> 31 |
32 | <%- include('../includes/end.ejs') %> -------------------------------------------------------------------------------- /views/shop/checkout.ejs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Itsaadarsh/nodeJS-express-postgresql/d0b62771335bc15378c94b030679c83d4ed46e58/views/shop/checkout.ejs -------------------------------------------------------------------------------- /views/shop/index.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 |
14 |

<%= product.title %>

15 |
16 |
17 | <%= product.title %> 19 |
20 |
21 |

$<%= product.price %>

22 |

<%= product.description %>

23 |
24 |
25 | Details 26 | <%- include('../includes/add-to-cart.ejs', {product: product}) %> 27 |
28 |
29 | <% } %> 30 |
31 | <% } else { %> 32 |

No Products Found!

33 | <% } %> 34 |
35 | <%- include('../includes/end.ejs') %> -------------------------------------------------------------------------------- /views/shop/orders.ejs: -------------------------------------------------------------------------------- 1 | <%- include('../includes/head.ejs') %> 2 | 3 | 4 | 5 | <%- include('../includes/navigation.ejs') %> 6 |
7 | <% if (orders.length <= 0) { %> 8 |

Nothing there!

9 | <% } else { %> 10 | 22 | <% } %> 23 |
24 | <%- include('../includes/end.ejs') %> -------------------------------------------------------------------------------- /views/shop/product-detail.ejs: -------------------------------------------------------------------------------- 1 | <%- include('../includes/head.ejs') %> 2 | 3 | 4 | 5 | <%- include('../includes/navigation.ejs') %> 6 |
7 |

<%= product.title %>

8 |
9 |
10 | <%= product.title %> 11 |
12 |

<%= product.price %>

13 |

<%= product.description %>

14 | <%- include('../includes/add-to-cart.ejs') %> 15 |
16 | <%- include('../includes/end.ejs') %> -------------------------------------------------------------------------------- /views/shop/product-list.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 |
14 |

15 | <%= product.title %> 16 |

17 |
18 |
19 | <%= product.title %> 20 |
21 |
22 |

$ 23 | <%= product.price %> 24 |

25 |

26 | <%= product.description %> 27 |

28 |
29 |
30 | Details 31 | <%- include('../includes/add-to-cart.ejs', {product: product}) %> 32 |
33 |
34 | <% } %> 35 |
36 | <% } else { %> 37 |

No Products Found!

38 | <% } %> 39 |
40 | <%- include('../includes/end.ejs') %> --------------------------------------------------------------------------------