From 25f99a003aa263d88cf0e9c6405bdab29ed7275f Mon Sep 17 00:00:00 2001 From: Abhishek Rathore Date: Mon, 13 Feb 2023 01:39:43 +0530 Subject: [PATCH 1/7] node-1 --- data.json | 555 +++++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 256 ++++++++++++++++++++++++ index.js | 55 +++++ package.json | 12 ++ 4 files changed, 878 insertions(+) create mode 100644 data.json create mode 100644 index.html create mode 100644 index.js create mode 100644 package.json diff --git a/data.json b/data.json new file mode 100644 index 0000000..894407d --- /dev/null +++ b/data.json @@ -0,0 +1,555 @@ +{ + "products": [ + { + "id": 1, + "title": "iPhone 9", + "description": "An apple mobile which is nothing like apple", + "price": 549, + "discountPercentage": 12.96, + "rating": 4.69, + "stock": 94, + "brand": "Apple", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/1/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/1/1.jpg", + "https://i.dummyjson.com/data/products/1/2.jpg", + "https://i.dummyjson.com/data/products/1/3.jpg", + "https://i.dummyjson.com/data/products/1/4.jpg", + "https://i.dummyjson.com/data/products/1/thumbnail.jpg" + ] + }, + { + "id": 2, + "title": "iPhone X", + "description": "SIM-Free, Model A19211 6.5-inch Super Retina HD display with OLED technology A12 Bionic chip with ...", + "price": 899, + "discountPercentage": 17.94, + "rating": 4.44, + "stock": 34, + "brand": "Apple", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/2/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/2/1.jpg", + "https://i.dummyjson.com/data/products/2/2.jpg", + "https://i.dummyjson.com/data/products/2/3.jpg", + "https://i.dummyjson.com/data/products/2/thumbnail.jpg" + ] + }, + { + "id": 3, + "title": "Samsung Universe 9", + "description": "Samsung's new variant which goes beyond Galaxy to the Universe", + "price": 1249, + "discountPercentage": 15.46, + "rating": 4.09, + "stock": 36, + "brand": "Samsung", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/3/thumbnail.jpg", + "images": ["https://i.dummyjson.com/data/products/3/1.jpg"] + }, + { + "id": 4, + "title": "OPPOF19", + "description": "OPPO F19 is officially announced on April 2021.", + "price": 280, + "discountPercentage": 17.91, + "rating": 4.3, + "stock": 123, + "brand": "OPPO", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/4/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/4/1.jpg", + "https://i.dummyjson.com/data/products/4/2.jpg", + "https://i.dummyjson.com/data/products/4/3.jpg", + "https://i.dummyjson.com/data/products/4/4.jpg", + "https://i.dummyjson.com/data/products/4/thumbnail.jpg" + ] + }, + { + "id": 5, + "title": "Huawei P30", + "description": "Huawei’s re-badged P30 Pro New Edition was officially unveiled yesterday in Germany and now the device has made its way to the UK.", + "price": 499, + "discountPercentage": 10.58, + "rating": 4.09, + "stock": 32, + "brand": "Huawei", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/5/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/5/1.jpg", + "https://i.dummyjson.com/data/products/5/2.jpg", + "https://i.dummyjson.com/data/products/5/3.jpg" + ] + }, + { + "id": 6, + "title": "MacBook Pro", + "description": "MacBook Pro 2021 with mini-LED display may launch between September, November", + "price": 1749, + "discountPercentage": 11.02, + "rating": 4.57, + "stock": 83, + "brand": "Apple", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/6/thumbnail.png", + "images": [ + "https://i.dummyjson.com/data/products/6/1.png", + "https://i.dummyjson.com/data/products/6/2.jpg", + "https://i.dummyjson.com/data/products/6/3.png", + "https://i.dummyjson.com/data/products/6/4.jpg" + ] + }, + { + "id": 7, + "title": "Samsung Galaxy Book", + "description": "Samsung Galaxy Book S (2020) Laptop With Intel Lakefield Chip, 8GB of RAM Launched", + "price": 1499, + "discountPercentage": 4.15, + "rating": 4.25, + "stock": 50, + "brand": "Samsung", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/7/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/7/1.jpg", + "https://i.dummyjson.com/data/products/7/2.jpg", + "https://i.dummyjson.com/data/products/7/3.jpg", + "https://i.dummyjson.com/data/products/7/thumbnail.jpg" + ] + }, + { + "id": 8, + "title": "Microsoft Surface Laptop 4", + "description": "Style and speed. Stand out on HD video calls backed by Studio Mics. Capture ideas on the vibrant touchscreen.", + "price": 1499, + "discountPercentage": 10.23, + "rating": 4.43, + "stock": 68, + "brand": "Microsoft Surface", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/8/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/8/1.jpg", + "https://i.dummyjson.com/data/products/8/2.jpg", + "https://i.dummyjson.com/data/products/8/3.jpg", + "https://i.dummyjson.com/data/products/8/4.jpg", + "https://i.dummyjson.com/data/products/8/thumbnail.jpg" + ] + }, + { + "id": 9, + "title": "Infinix INBOOK", + "description": "Infinix Inbook X1 Ci3 10th 8GB 256GB 14 Win10 Grey – 1 Year Warranty", + "price": 1099, + "discountPercentage": 11.83, + "rating": 4.54, + "stock": 96, + "brand": "Infinix", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/9/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/9/1.jpg", + "https://i.dummyjson.com/data/products/9/2.png", + "https://i.dummyjson.com/data/products/9/3.png", + "https://i.dummyjson.com/data/products/9/4.jpg", + "https://i.dummyjson.com/data/products/9/thumbnail.jpg" + ] + }, + { + "id": 10, + "title": "HP Pavilion 15-DK1056WM", + "description": "HP Pavilion 15-DK1056WM Gaming Laptop 10th Gen Core i5, 8GB, 256GB SSD, GTX 1650 4GB, Windows 10", + "price": 1099, + "discountPercentage": 6.18, + "rating": 4.43, + "stock": 89, + "brand": "HP Pavilion", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/10/thumbnail.jpeg", + "images": [ + "https://i.dummyjson.com/data/products/10/1.jpg", + "https://i.dummyjson.com/data/products/10/2.jpg", + "https://i.dummyjson.com/data/products/10/3.jpg", + "https://i.dummyjson.com/data/products/10/thumbnail.jpeg" + ] + }, + { + "id": 11, + "title": "perfume Oil", + "description": "Mega Discount, Impression of Acqua Di Gio by GiorgioArmani concentrated attar perfume Oil", + "price": 13, + "discountPercentage": 8.4, + "rating": 4.26, + "stock": 65, + "brand": "Impression of Acqua Di Gio", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/11/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/11/1.jpg", + "https://i.dummyjson.com/data/products/11/2.jpg", + "https://i.dummyjson.com/data/products/11/3.jpg", + "https://i.dummyjson.com/data/products/11/thumbnail.jpg" + ] + }, + { + "id": 12, + "title": "Brown Perfume", + "description": "Royal_Mirage Sport Brown Perfume for Men & Women - 120ml", + "price": 40, + "discountPercentage": 15.66, + "rating": 4, + "stock": 52, + "brand": "Royal_Mirage", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/12/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/12/1.jpg", + "https://i.dummyjson.com/data/products/12/2.jpg", + "https://i.dummyjson.com/data/products/12/3.png", + "https://i.dummyjson.com/data/products/12/4.jpg", + "https://i.dummyjson.com/data/products/12/thumbnail.jpg" + ] + }, + { + "id": 13, + "title": "Fog Scent Xpressio Perfume", + "description": "Product details of Best Fog Scent Xpressio Perfume 100ml For Men cool long lasting perfumes for Men", + "price": 13, + "discountPercentage": 8.14, + "rating": 4.59, + "stock": 61, + "brand": "Fog Scent Xpressio", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/13/thumbnail.webp", + "images": [ + "https://i.dummyjson.com/data/products/13/1.jpg", + "https://i.dummyjson.com/data/products/13/2.png", + "https://i.dummyjson.com/data/products/13/3.jpg", + "https://i.dummyjson.com/data/products/13/4.jpg", + "https://i.dummyjson.com/data/products/13/thumbnail.webp" + ] + }, + { + "id": 14, + "title": "Non-Alcoholic Concentrated Perfume Oil", + "description": "Original Al Munakh® by Mahal Al Musk | Our Impression of Climate | 6ml Non-Alcoholic Concentrated Perfume Oil", + "price": 120, + "discountPercentage": 15.6, + "rating": 4.21, + "stock": 114, + "brand": "Al Munakh", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/14/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/14/1.jpg", + "https://i.dummyjson.com/data/products/14/2.jpg", + "https://i.dummyjson.com/data/products/14/3.jpg", + "https://i.dummyjson.com/data/products/14/thumbnail.jpg" + ] + }, + { + "id": 15, + "title": "Eau De Perfume Spray", + "description": "Genuine Al-Rehab spray perfume from UAE/Saudi Arabia/Yemen High Quality", + "price": 30, + "discountPercentage": 10.99, + "rating": 4.7, + "stock": 105, + "brand": "Lord - Al-Rehab", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/15/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/15/1.jpg", + "https://i.dummyjson.com/data/products/15/2.jpg", + "https://i.dummyjson.com/data/products/15/3.jpg", + "https://i.dummyjson.com/data/products/15/4.jpg", + "https://i.dummyjson.com/data/products/15/thumbnail.jpg" + ] + }, + { + "id": 16, + "title": "Hyaluronic Acid Serum", + "description": "L'Oréal Paris introduces Hyaluron Expert Replumping Serum formulated with 1.5% Hyaluronic Acid", + "price": 19, + "discountPercentage": 13.31, + "rating": 4.83, + "stock": 110, + "brand": "L'Oreal Paris", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/16/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/16/1.png", + "https://i.dummyjson.com/data/products/16/2.webp", + "https://i.dummyjson.com/data/products/16/3.jpg", + "https://i.dummyjson.com/data/products/16/4.jpg", + "https://i.dummyjson.com/data/products/16/thumbnail.jpg" + ] + }, + { + "id": 17, + "title": "Tree Oil 30ml", + "description": "Tea tree oil contains a number of compounds, including terpinen-4-ol, that have been shown to kill certain bacteria,", + "price": 12, + "discountPercentage": 4.09, + "rating": 4.52, + "stock": 78, + "brand": "Hemani Tea", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/17/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/17/1.jpg", + "https://i.dummyjson.com/data/products/17/2.jpg", + "https://i.dummyjson.com/data/products/17/3.jpg", + "https://i.dummyjson.com/data/products/17/thumbnail.jpg" + ] + }, + { + "id": 18, + "title": "Oil Free Moisturizer 100ml", + "description": "Dermive Oil Free Moisturizer with SPF 20 is specifically formulated with ceramides, hyaluronic acid & sunscreen.", + "price": 40, + "discountPercentage": 13.1, + "rating": 4.56, + "stock": 88, + "brand": "Dermive", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/18/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/18/1.jpg", + "https://i.dummyjson.com/data/products/18/2.jpg", + "https://i.dummyjson.com/data/products/18/3.jpg", + "https://i.dummyjson.com/data/products/18/4.jpg", + "https://i.dummyjson.com/data/products/18/thumbnail.jpg" + ] + }, + { + "id": 19, + "title": "Skin Beauty Serum.", + "description": "Product name: rorec collagen hyaluronic acid white face serum riceNet weight: 15 m", + "price": 46, + "discountPercentage": 10.68, + "rating": 4.42, + "stock": 54, + "brand": "ROREC White Rice", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/19/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/19/1.jpg", + "https://i.dummyjson.com/data/products/19/2.jpg", + "https://i.dummyjson.com/data/products/19/3.png", + "https://i.dummyjson.com/data/products/19/thumbnail.jpg" + ] + }, + { + "id": 20, + "title": "Freckle Treatment Cream- 15gm", + "description": "Fair & Clear is Pakistan's only pure Freckle cream which helpsfade Freckles, Darkspots and pigments. Mercury level is 0%, so there are no side effects.", + "price": 70, + "discountPercentage": 16.99, + "rating": 4.06, + "stock": 140, + "brand": "Fair & Clear", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/20/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/20/1.jpg", + "https://i.dummyjson.com/data/products/20/2.jpg", + "https://i.dummyjson.com/data/products/20/3.jpg", + "https://i.dummyjson.com/data/products/20/4.jpg", + "https://i.dummyjson.com/data/products/20/thumbnail.jpg" + ] + }, + { + "id": 21, + "title": "- Daal Masoor 500 grams", + "description": "Fine quality Branded Product Keep in a cool and dry place", + "price": 20, + "discountPercentage": 4.81, + "rating": 4.44, + "stock": 133, + "brand": "Saaf & Khaas", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/21/thumbnail.png", + "images": [ + "https://i.dummyjson.com/data/products/21/1.png", + "https://i.dummyjson.com/data/products/21/2.jpg", + "https://i.dummyjson.com/data/products/21/3.jpg" + ] + }, + { + "id": 22, + "title": "Elbow Macaroni - 400 gm", + "description": "Product details of Bake Parlor Big Elbow Macaroni - 400 gm", + "price": 14, + "discountPercentage": 15.58, + "rating": 4.57, + "stock": 146, + "brand": "Bake Parlor Big", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/22/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/22/1.jpg", + "https://i.dummyjson.com/data/products/22/2.jpg", + "https://i.dummyjson.com/data/products/22/3.jpg" + ] + }, + { + "id": 23, + "title": "Orange Essence Food Flavou", + "description": "Specifications of Orange Essence Food Flavour For Cakes and Baking Food Item", + "price": 14, + "discountPercentage": 8.04, + "rating": 4.85, + "stock": 26, + "brand": "Baking Food Items", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/23/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/23/1.jpg", + "https://i.dummyjson.com/data/products/23/2.jpg", + "https://i.dummyjson.com/data/products/23/3.jpg", + "https://i.dummyjson.com/data/products/23/4.jpg", + "https://i.dummyjson.com/data/products/23/thumbnail.jpg" + ] + }, + { + "id": 24, + "title": "cereals muesli fruit nuts", + "description": "original fauji cereal muesli 250gm box pack original fauji cereals muesli fruit nuts flakes breakfast cereal break fast faujicereals cerels cerel foji fouji", + "price": 46, + "discountPercentage": 16.8, + "rating": 4.94, + "stock": 113, + "brand": "fauji", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/24/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/24/1.jpg", + "https://i.dummyjson.com/data/products/24/2.jpg", + "https://i.dummyjson.com/data/products/24/3.jpg", + "https://i.dummyjson.com/data/products/24/4.jpg", + "https://i.dummyjson.com/data/products/24/thumbnail.jpg" + ] + }, + { + "id": 25, + "title": "Gulab Powder 50 Gram", + "description": "Dry Rose Flower Powder Gulab Powder 50 Gram • Treats Wounds", + "price": 70, + "discountPercentage": 13.58, + "rating": 4.87, + "stock": 47, + "brand": "Dry Rose", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/25/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/25/1.png", + "https://i.dummyjson.com/data/products/25/2.jpg", + "https://i.dummyjson.com/data/products/25/3.png", + "https://i.dummyjson.com/data/products/25/4.jpg", + "https://i.dummyjson.com/data/products/25/thumbnail.jpg" + ] + }, + { + "id": 26, + "title": "Plant Hanger For Home", + "description": "Boho Decor Plant Hanger For Home Wall Decoration Macrame Wall Hanging Shelf", + "price": 41, + "discountPercentage": 17.86, + "rating": 4.08, + "stock": 131, + "brand": "Boho Decor", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/26/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/26/1.jpg", + "https://i.dummyjson.com/data/products/26/2.jpg", + "https://i.dummyjson.com/data/products/26/3.jpg", + "https://i.dummyjson.com/data/products/26/4.jpg", + "https://i.dummyjson.com/data/products/26/5.jpg", + "https://i.dummyjson.com/data/products/26/thumbnail.jpg" + ] + }, + { + "id": 27, + "title": "Flying Wooden Bird", + "description": "Package Include 6 Birds with Adhesive Tape Shape: 3D Shaped Wooden Birds Material: Wooden MDF, Laminated 3.5mm", + "price": 51, + "discountPercentage": 15.58, + "rating": 4.41, + "stock": 17, + "brand": "Flying Wooden", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/27/thumbnail.webp", + "images": [ + "https://i.dummyjson.com/data/products/27/1.jpg", + "https://i.dummyjson.com/data/products/27/2.jpg", + "https://i.dummyjson.com/data/products/27/3.jpg", + "https://i.dummyjson.com/data/products/27/4.jpg", + "https://i.dummyjson.com/data/products/27/thumbnail.webp" + ] + }, + { + "id": 28, + "title": "3D Embellishment Art Lamp", + "description": "3D led lamp sticker Wall sticker 3d wall art light on/off button cell operated (included)", + "price": 20, + "discountPercentage": 16.49, + "rating": 4.82, + "stock": 54, + "brand": "LED Lights", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/28/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/28/1.jpg", + "https://i.dummyjson.com/data/products/28/2.jpg", + "https://i.dummyjson.com/data/products/28/3.png", + "https://i.dummyjson.com/data/products/28/4.jpg", + "https://i.dummyjson.com/data/products/28/thumbnail.jpg" + ] + }, + { + "id": 29, + "title": "Handcraft Chinese style", + "description": "Handcraft Chinese style art luxury palace hotel villa mansion home decor ceramic vase with brass fruit plate", + "price": 60, + "discountPercentage": 15.34, + "rating": 4.44, + "stock": 7, + "brand": "luxury palace", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/29/thumbnail.webp", + "images": [ + "https://i.dummyjson.com/data/products/29/1.jpg", + "https://i.dummyjson.com/data/products/29/2.jpg", + "https://i.dummyjson.com/data/products/29/3.webp", + "https://i.dummyjson.com/data/products/29/4.webp", + "https://i.dummyjson.com/data/products/29/thumbnail.webp" + ] + }, + { + "id": 30, + "title": "Key Holder", + "description": "Attractive DesignMetallic materialFour key hooksReliable & DurablePremium Quality", + "price": 30, + "discountPercentage": 2.92, + "rating": 4.92, + "stock": 54, + "brand": "Golden", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/30/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/30/1.jpg", + "https://i.dummyjson.com/data/products/30/2.jpg", + "https://i.dummyjson.com/data/products/30/3.jpg", + "https://i.dummyjson.com/data/products/30/thumbnail.jpg" + ] + } + ] + +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..1826a18 --- /dev/null +++ b/index.html @@ -0,0 +1,256 @@ + + + + +
+
+
+
+
+
+
+ -25% + +
+
+ + +
+ +
+
+
**title**
+ +
+ ₹ **price** + ₹ 700 +
+
+ + + +
+
+ + **rating** +
+ + BUY + +
+
+
+ + +
+ +
+
diff --git a/index.js b/index.js new file mode 100644 index 0000000..0d0ce63 --- /dev/null +++ b/index.js @@ -0,0 +1,55 @@ +const http = require('http'); +const fs = require('fs'); + +const index = fs.readFileSync('index.html', 'utf-8'); +const data = JSON.parse(fs.readFileSync('data.json', 'utf-8')); +const products = data.products; + +const server = http.createServer((req, res) => { + console.log(req.url, req.method); + + if(req.url.startsWith('/product')){ + const id = req.url.split('/')[2] + const product = products.find(p=>p.id===(+id)) + console.log(product) + res.setHeader('Content-Type', 'text/html'); + let modifiedIndex = index.replace('**title**', product.title) + .replace('**url**', product.thumbnail) + .replace('**price**', product.price) + .replace('**rating**', product.rating) + res.end(modifiedIndex); + return; + } +// '/product': +// res.setHeader('Content-Type', 'text/html'); +// let modifiedIndex = index.replace('**title**', product.title) +// .replace('**url**', product.thumbnail) +// .replace('**price**', product.price) +// .replace('**rating**', product.rating) +// res.end(modifiedIndex); +// break; + + + + switch (req.url) { + case '/': + res.setHeader('Content-Type', 'text/html'); + res.end(index); + break; + case '/api': + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify(data)); + break; + + default: + res.writeHead(404); + res.end(); + } + + console.log('server started '); + // res.setHeader('Dummy', 'DummyValue'); + + // +}); + +server.listen(8080); diff --git a/package.json b/package.json new file mode 100644 index 0000000..54977d8 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "app", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} From 830cfcb188d0844761c73c794d72073e49dcce83 Mon Sep 17 00:00:00 2001 From: Abhishek Rathore Date: Mon, 13 Feb 2023 01:50:02 +0530 Subject: [PATCH 2/7] node-2 --- README.md | 384 ------------------------------------------- json-placeholder.png | Bin 195366 -> 0 bytes 2 files changed, 384 deletions(-) delete mode 100644 README.md delete mode 100644 json-placeholder.png diff --git a/README.md b/README.md deleted file mode 100644 index 0eb1f61..0000000 --- a/README.md +++ /dev/null @@ -1,384 +0,0 @@ - - -# FULL STACK COURSE 2023 - -## React JS MasterClass - -Hi, This is course page of **CoderDost Youtube Channel** React JS 2023 Course [Course Link ](https://youtu.be/6l8RWV8D-Yo), - -### How to use this code : - -#### You can **download code** in 2 ways : - -1. **Git Commands** - - - use `git clone ` - - - checkout branch according to Chapter number `git checkout react-1` - - - run `npm install` inside the root directory before running the code - - - -2. If you are not comfortable with git, directly **download the branch as Zip**. - - - Choose branch related to the Chapter e.g. `react-1` - - - run `npm install` inside the root directory before running the code - - - - -# React JS Series - - - - -## Chapter 1 - Introduction to React & Setup - - -- **Assignment 1** : If we delete `node_modules`. How to run our app again successfully ? - - -- **Assignment 2** : How to remove double `console.logs` from React ? [ it is not needed in real life to remove them, its just an assignment problem ]. [ *Hint: Some special Component at top level is of App is causing it* ]. We explore more about - why this is needed in later videos. - -### Special Assignments ============== - -- **Assignment 3** : Create a Page with multiple React Apps. Both React Apps should be independent of each other. - -- **Assignment 4** : Try to build a react app using other toolchains like `Vite` - - - -### Related Videos : -1. De-structuring Assignment : [Long Video](https://youtu.be/sNhqFofQhFs) | [Object De-structure Short Video](https://youtube.com/shorts/H3MKXE69_c8) | [Array De-structure Short Video](https://youtube.com/shorts/ONGyMq49kZY) -2. Import/Export : [Long Video](https://youtu.be/7P5JUMc1cI4) | [Short Video](https://youtube.com/shorts/sUUOSWlwfM8) - - - -## Chapter 2 - Components - JSX and Props - - -- **Assignment 1** : Create a simple React app for **RESUME Builder**. It will be static website. You have to make components like **Resume** as top level and under it - **Skills**, **Education**, **Experience** etc as components. All resume data will be under 1 big JavaScript object like which you can us in components via props. You can fix the number of items in **Skills**, **Education**, **Experience** or any section. Example you can say that only 3 experience items is allowed. - - ``` - resume = { - experience : [ { year:2012, company:'xyz', role:'something' }], - education:[ ], - skills : [ 'react js', 'node js'] - ..... - ... - } - ``` - - > You can choose any simple HTML layout and convert it to React Components - - Example Link : [ Resume HTML ](https://codepen.io/emzarts/pen/OXzmym) - - ### Special Assignments ============== - -- **Assignment 2** : Create a Parent Component called **Border** which can provide some CSS border to any component nested into it. [Hint : You will need to use `children` props here - < Border> - < Component > - < Border /> - - -### Related Videos : -1. De-structuring Assignment : [Long Video](https://youtu.be/sNhqFofQhFs) | [Object De-structure Short Video](https://youtube.com/shorts/H3MKXE69_c8) | [Array De-structure Short Video](https://youtube.com/shorts/ONGyMq49kZY) -2. Import/Export : [Long Video](https://youtu.be/7P5JUMc1cI4) | [Short Video](https://youtube.com/shorts/sUUOSWlwfM8) -3. Spread Operator : [Long Video](https://youtu.be/X4Iv0TBHDQ4) | [Short Video](https://youtube.com/shorts/5dBZGyXutx8) - - -## Chapter 3 - Conditional Rendering & Lists - - -- **Assignment 1** : Make a simple component which can conditionally render a list with **number** or **alphabets** or ***bullets*** in HTML for number. e..g. use a prop like `layout` for this. Also use a prop `items` for array of items in list. - ``` -< List layout="numbered" items={items}/> -< List layout="alpha" items={items}/> -< List layout="bullet" items={items}/> - ``` - -- **Assignment 2** : This is continuation of previous assignment **RESUME Builder** - 1. In this part you have to make some conditional rendering. Suppose if any section doesn't exist you have to remove that section from **Resume**. Example if `skills` is empty array than don't display `skills` section in Resume. - 2. You have to use `map` in most places where there are arrays. Like **Skills**, **Education**, **Experience** if there are 3 entries, use `map` to display 3 experience items. You don't need fix number of items. Any array can have 1 to 10(or some Limit) any number of items. You can put some Limit, so that your layout is not affected. - 3. Conditionally put some styling to **Resume**. Like `light` theme or `dark` theme or any other way you can switch the CSS layouts. - - ``` - resume = { - experience : [ { year:2012, company:'xyz', role:'something' }], - education:[ ], - skills : [ 'react js', 'node js'] - ..... - ... - } - ``` - - > You can choose any simple HTML layout and convert it to React Components - - Example Link : [ Resume HTML ](https://codepen.io/emzarts/pen/OXzmym) - - - - -### Related Videos : -1. Ternary Operator : [Video](https://youtu.be/F_95TPUIA2c) -2. Logical AND (&&) : [Video](https://youtu.be/7dXLYWWTRXI) -3. Higher Order functions (map, filter, reduce) : [Video](https://youtu.be/oGpA98nNx6Y) -4. Import/Export : [Long Video](https://youtu.be/7P5JUMc1cI4) | [Short Video](https://youtube.com/shorts/sUUOSWlwfM8) - - -## Chapter 4 - Events && Event Bubbling - - -- **Assignment 1** : Make a simple page with 1 Image, 1button, 1 form Input text box and try to apply these events . - - - Image : **onMouseOver** : when you hover on image. Image should increase in size. Think of any way where you can do it. Also, try that when you "move out" the mouse, it should be back to normal size. - - Button : **onDoubleClick**: when you doubleClick a button. show some alert box. Also make a console.log for single click event. Is console.log printed twice on double click ? check this ? - - Input Textbox : **onFocus**, **onBlur** are 2 events which occur when you enter or exit an input text box by click of mouse etc. Use it to display some console.log, which print "focused on the textbox", "out of textbox". - - **onCopy, onCut, onPaste** are 3 events which you can use on any text value etc. try to use it on a paragraph and just alert the user that something is copied, cut or pasted. - - - -- **Assignment 2** : Make a form using `` < Form> `` tag and put an textbox and button inside this form. try to click the button after entering into textbox. Does form reloads ? Can you try to stop is using `e.preventDefault`. Try it. - -- **Assignment 3** : use an Input Textbox : after you enter some text. try to press **ENTER** button and show the an alert or console.log. You can capture the **onKeyPress** event, button how you will you make it work only for "Enter" ? It should not work on pressing of other keys. [*Hint: Explore the synthetic event object* ] - - -- **Assignment 4** : This is continuation of previous assignment **RESUME Builder**. - - Add a **print** button to print the current resume. You can use a DOM method ``window.print`` to print the PDF. - - -- **Assignment 5** : Can you try the challenge of passing the function in one Prop like `onPlay` and the message inside that function to be accessed from other prop `message` [ As shown in Chapter Video ] - -### Special Assignments ============== - -- **Assignment 6** : Using **event bubbling** concept print the name of Parents to Child of any clicked element. It should be order in "**GrandParent >Parent > Child**" this kind of order. Where "Child" represents the current clicked element. - -- **Assignment 7** : Make a custom event called **onClose**. this event should close the current browser tab. you can apply it to a button on click or anywhere. - -### Related Videos : - -1. HTML DOM Elements and manipulation [Video](https://youtu.be/kwfbaHNZ_aU) -2. HTML DOM Events and manipulation : [Video](https://youtu.be/5kpe_tg_Cis) - - - - -## Chapter 5 - State, useState Hooks - -- **Assignment 1** : Make a digital **CLOCK** Component using useEffect Hook. We need to only update the time Upto seconds in it. HH:MM:SS format can be used. Can you make it send a Console.log at end of every minute ? - -- **Assignment 2** : Implement a simple **TIMER** that displays the elapsed time since the start button was pressed, and it can be stopped and reset. Like a stopwatch. - - - - -## Chapter 6 - Form , Synthetic Event Object & Lifting State up - - -- **Assignment 1** : Create a Dropdown (< Select >) menu which is formed by a `nations` array. You can push to this array new items using a 2 **input textbox** (for country name and code) and **button**. -On selection of the any option from dropdown, its value should be displayed on console.log - ``` - const nations = [ -{ name: 'India', value: 'IN' }, -{ name: 'Pak', value: 'PK' }, -{ name: 'Bangladesh', value: 'BG' }, -] - ``` - - -- **Assignment 2** : **FILTERED LIST** : Make a **List** of something using an Array (a list can of cricket player /countries/ movie name etc). Now make this list it searchable, you have to put a **input textbox** at top of list. When you type in **textbox** it should only show you items matching from text typed. For example - -If you type only "in" it should show things like "India" / "China" as both have `in` in it. -- **Assignment 2.1** : **FILTERED LIST** : Make above **List** as separate components for List, Input form and pass the states from each other using concepts learnt till now. - - -- **Assignment 3** : - - This is continuation of previous assignment **RESUME Builder**. Now you have to make a separate component **ResumeEditor** which has a **FORM**. This form will have many **input boxes**. Each one related to one section. For example you can have one input box or **experience** section. Another input box for **skill** section and like this. Every input box should have an **Add** button in front of it. Once you press this add button that information is stored in the state , which you can update at top of the App level. Now this state should update the **Resume** Component and its child you have built. - - first component will be your **RESUME** document which is only for reading purpose. -- second component will be this **FORM** -- you have to manage the state in between -- only Add functionality is required in this assignment -- you can change input boxes according to your need depending on your format of Resume. You can have multiple textboxes also for same section. Like for date + experience item etc. - -- **Assignment 4** : Try this challenge : https://beta.reactjs.org/learn/state-a-components-memory#challenges - -### Related Videos : - -1. HTML Forms-1 [Video](https://youtu.be/DUJEpSkzrVA) -2. HTML Forms-2 : [Video](https://youtu.be/Nj6Omw6zOok) - - - -## MINI PROJECT - - -# Project 1 - TODO App - -Todo app can be used to maintain a list of your pending daily items. A Simple todo list must have these features - - -* You can add any new item to TODO list -* You can click on any item to mark it as done, if you have done that by mistake - you can click again to undo. -* You can delete any item (completed or pending) -* You get a total of completed items and overall items on the list. -* You can move list items "Up" or "Down" using buttons. - - -![Output](https://raw.githubusercontent.com/abhishekrathore/fullstackbootcamp2019/master/01_REACT/2_PROJECT_1/images/todo-project.gif) - - -## Additional Features - - **KEYBOARD BASED Features** : - -- use **ENTER** key on keyboard to add a new item. -- when you click on an item, it should be selected (you can change style to show it is selected) -- If you press the **DELETE** key on the keyboard after selecting the list item it should delete that list item. If you have not selected any item the last item should be deleted. -- You can select list item and press **UP** arrow key to Move It Up. And you can press the **DOWN** key to move it down. - - -**Other Features** : - -* **Pin element to Top of List** : On double click make element reach top of list. You can show a different color also to show that element is pinned. -* **Show the date & time** at which list item was added. -* **Order** by : Todo Item names, Date added, Completed. -* **Due date feature** : Add a due date of task of any todo item. You will need to add another input box for this at top. Whenever you are in 24 hour limit of due date - Task outline will be shown in ORANGE color. e.g if a task is due on 23 May - from 22nd May it should show in ORANGE outline color. If a due date is passed task should show RED Outline. -* Use some component like `https://github.com/react-component/progress` to show a **progress bar** at top of list. This progress bar will show how much of total percent of tasks are completed. -* **Delete item via swipe gesture** - like swipe to right on mobile phone. [*Hint: You have to find an event type for this* ] - -**Advanced Features** : - -* **Use localStorage** in browser using libraries like `https://github.com/localForage/localForage` to make your todo list permanent in browser. This will have your list stored in browser database and will not delete it on refresh or closing of browser. -[LocalStorage Video](https://youtu.be/OTkQVPVYW7w) -[LocalForage Video](https://youtu.be/Rqyu9qzydoc) - - **ANIMATION BASED Features [optional]** : - -* Enter Animation : Animate list item on adding. -* Exit Animation : Animate list item at removal. - - - - - - - -## Chapter 7 - More State & useEffect hooks - -- **Assignment 1** : The method shown in this video was just to introduce **useEffect** hook. However that was not the correct use of useEffect hook. Can you change the code to remove useEffect and still have the editVideo functionality. [ *Hint : use the concept that Component is rendered every time prop changes* ] - -- **Assignment 2** : This is continuation of previous assignment **RESUME Builder**. - - Add functionality to **delete** the items from resume. - - Add functionality to **update** the items from resume. - - you have to manage the state in between - - you can change input boxes according to your need depending on your format of Resume. You can have multiple textboxes also for same section. Like for date + experience item etc. - - Check the output can be printed perfectly in PDF. - - -## Chapter 8 - useReducer - -- **Assignment 1** : Try this challenge : https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer#challenges - -- **Assignment 2** : Convert your **RESUME BUILDER** Application from `useState` to `useReducer` by converting states logic to a common reducer. Your reducer can have as many switch cases as you want. You can also divide them based on sections. `ADD_SKILL`, `ADD_EXPERIENCE` etc. to make logic even simpler for developer. - -### Related Videos : - -1. REDUX - Understand it in Simple way [Video](https://youtu.be/WdEQNzUMP_M) - - - -## Chapter 9 - Context API & useContext - -- **Assignment 1** : Try this challenge : -https://beta.reactjs.org/learn/passing-data-deeply-with-context#challenges - -- **Assignment 2** : Add a Context to your **RESUME BUILDER** to change font-size, font-color and some other font-properties. Also add a form to changed these property at top of App. - -- **Assignment 3** : Add a Context to your **RESUME BUILDER** to change Dark Mode and Light Mode. You can also use a `React Switch` kind of library to make it more user friendly to switch. - - -## Chapter 10 - Context API with useReducer [Redux architecture] - -### Special Assignments - -- **Assignment 1** : Make a **useCounter** Hook: To keep track of a number that can be incremented or decremented. -``` const [count, increment, decrement] = useCounter(0);``` - - -## Chapter 11 - useRef - -- **Assignment 1** : Try this challenge: - -https://beta.reactjs.org/learn/referencing-values-with-refs#challenges - -- **Assignment 2** : Try this challenge: -https://beta.reactjs.org/learn/manipulating-the-dom-with-refs#challenges - -- **Assignment 3** : Make a **useWindowSize** Hook: which returns size of current browser window. -``` const [width, height] = useWindowSize();``` - - - -### Related Videos : - -1. Complete DOM Course playlist [Video](https://bit.ly/35nMKB7) - - - -## Chapter 12 - useEffect and API calling - -- **Assignment 1** : Try this challenge : - -https://beta.reactjs.org/learn/synchronizing-with-effects#challenges - -- **Assignment 2** : Try this challenge : - -https://beta.reactjs.org/learn/removing-effect-dependencies#challenges - -- **Assignment 3** : Try this challenge : - -https://beta.reactjs.org/learn/reusing-logic-with-custom-hooks#challenges - -- **Assignment 4** Use **JSON Placeholder API** (link given below). - - You have to create a button which can get some posts and show them in a List. - - You have to a **show comments** button on each list item. On click of show comments, Post's comments should be fetched below that list item. [ Comments are available for each post in API] - - When you click on a particular list item's show comments, it should expand and **show** comments, otherwise it should collapse and **hide** the comments. - - Try to optimize by : - - - Only getting comments of required Post items (not all at a time) - - Storing somehow the old comments of closed list items. So you will not fetch them again, when your show comments again. - -![enter image description here](https://raw.githubusercontent.com/coderdost/full-stack-dev-2023/main/json-placeholder.png) - -### Related Links : - -1. Mockaroo fake data APIs [Link](https://www.mockaroo.com/) -2. JSON placeholder API [Link](https://jsonplaceholder.typicode.com/) - - - -## Chapter 13 - Memoization - useMemo, useCallback, memo - -- **Assignment 1** : Implement a component that displays a list of items. The component should memoize the list of items to prevent unnecessary re-rendering. - -- **Assignment 2**: How to use memoization in the **JSON Placeholder API** assignment in previous problem. Can you try to **optimize** it using **useMemo/useCallback** ? - -- **Assignment 3**: **useMemo** and **useCallback** are same hook. useCallback is just a convenient hook way to write **useMemo** for functions. Prove this using **useMemo** in place of **useCallback** in any previous problem. *[ Hint : you will have to change the useMemo callback and return the function definition ]* - - - -## Chapter 14 - Advanced React - Part 1 - - -- **Assignment 1** : -Try to apply `useDeferredValue` and `useTransistion` hooks on API based components. Either make a new one or use any existing code you have from other assignments. You can use `Chrome Network throttling` from **Devtools** > **Performance** Tabs and use **Slow 3G** option to see the effects - - - -## Chapter 15 - Advanced React - Part 2 - -- **Assignment 1** : -Try to use `window.print` functionality as show in code without flushSync and see if really make a difference. Also, try the same on `alert` functionality, can it also work ? - diff --git a/json-placeholder.png b/json-placeholder.png deleted file mode 100644 index 14a0b6ecade83ac021a61f99375788c1525b9b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195366 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 Date: Mon, 13 Feb 2023 02:55:30 +0530 Subject: [PATCH 3/7] node-3 --- index.js | 96 +++---- package-lock.json | 643 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 8 +- public/data.json | 555 +++++++++++++++++++++++++++++++++++++++ public/index.html | 256 ++++++++++++++++++ 5 files changed, 1514 insertions(+), 44 deletions(-) create mode 100644 package-lock.json create mode 100644 public/data.json create mode 100644 public/index.html diff --git a/index.js b/index.js index 0d0ce63..9f6e92b 100644 --- a/index.js +++ b/index.js @@ -1,55 +1,65 @@ -const http = require('http'); const fs = require('fs'); - const index = fs.readFileSync('index.html', 'utf-8'); const data = JSON.parse(fs.readFileSync('data.json', 'utf-8')); const products = data.products; -const server = http.createServer((req, res) => { - console.log(req.url, req.method); - - if(req.url.startsWith('/product')){ - const id = req.url.split('/')[2] - const product = products.find(p=>p.id===(+id)) - console.log(product) - res.setHeader('Content-Type', 'text/html'); - let modifiedIndex = index.replace('**title**', product.title) - .replace('**url**', product.thumbnail) - .replace('**price**', product.price) - .replace('**rating**', product.rating) - res.end(modifiedIndex); - return; - } -// '/product': -// res.setHeader('Content-Type', 'text/html'); -// let modifiedIndex = index.replace('**title**', product.title) -// .replace('**url**', product.thumbnail) -// .replace('**price**', product.price) -// .replace('**rating**', product.rating) -// res.end(modifiedIndex); -// break; - +const express = require('express'); +const morgan = require('morgan'); +const server = express(); +//bodyParser +server.use(express.json()); +// server.use(express.urlencoded()); +server.use(morgan('default')) +server.use(express.static('public')); +// server.use((req, res, next) => { +// console.log( +// req.method, +// req.ip, +// req.hostname, +// new Date(), +// req.get('User-Agent') +// ); +// next(); +// }); - switch (req.url) { - case '/': - res.setHeader('Content-Type', 'text/html'); - res.end(index); - break; - case '/api': - res.setHeader('Content-Type', 'application/json'); - res.end(JSON.stringify(data)); - break; +const auth = (req, res, next) => { + // console.log(req.query); - default: - res.writeHead(404); - res.end(); - } + // if (req.body.password == '123') { + // next(); + // } else { + // res.sendStatus(401); + // } + next() + +}; - console.log('server started '); - // res.setHeader('Dummy', 'DummyValue'); +// API - Endpoint - Route +server.get('/product/:id', auth, (req, res) => { + console.log(req.params) + res.json({ type: 'GET' }); +}); +server.post('/', auth, (req, res) => { + res.json({ type: 'POST' }); +}); +server.put('/', (req, res) => { + res.json({ type: 'PUT' }); +}); +server.delete('/', (req, res) => { + res.json({ type: 'DELETE' }); +}); +server.patch('/', (req, res) => { + res.json({ type: 'PATCH' }); +}); - // +server.get('/demo', (req, res) => { + // res.sendStatus(404); + // res.json(products) + // res.status(201).send('

hello

') + // res.sendFile('/Users/abhishekrathore/Desktop/node-app/index.html') }); -server.listen(8080); +server.listen(8080, () => { + console.log('server started'); +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..afd0b4b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,643 @@ +{ + "name": "app", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.18.2", + "morgan": "^1.10.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/package.json b/package.json index 54977d8..8d98c03 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,15 @@ "description": "", "main": "index.js", "scripts": { + "start": "node index.js", + "dev": "nodemon index.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", - "license": "ISC" + "license": "ISC", + "dependencies": { + "express": "^4.18.2", + "morgan": "^1.10.0" + } } diff --git a/public/data.json b/public/data.json new file mode 100644 index 0000000..894407d --- /dev/null +++ b/public/data.json @@ -0,0 +1,555 @@ +{ + "products": [ + { + "id": 1, + "title": "iPhone 9", + "description": "An apple mobile which is nothing like apple", + "price": 549, + "discountPercentage": 12.96, + "rating": 4.69, + "stock": 94, + "brand": "Apple", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/1/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/1/1.jpg", + "https://i.dummyjson.com/data/products/1/2.jpg", + "https://i.dummyjson.com/data/products/1/3.jpg", + "https://i.dummyjson.com/data/products/1/4.jpg", + "https://i.dummyjson.com/data/products/1/thumbnail.jpg" + ] + }, + { + "id": 2, + "title": "iPhone X", + "description": "SIM-Free, Model A19211 6.5-inch Super Retina HD display with OLED technology A12 Bionic chip with ...", + "price": 899, + "discountPercentage": 17.94, + "rating": 4.44, + "stock": 34, + "brand": "Apple", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/2/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/2/1.jpg", + "https://i.dummyjson.com/data/products/2/2.jpg", + "https://i.dummyjson.com/data/products/2/3.jpg", + "https://i.dummyjson.com/data/products/2/thumbnail.jpg" + ] + }, + { + "id": 3, + "title": "Samsung Universe 9", + "description": "Samsung's new variant which goes beyond Galaxy to the Universe", + "price": 1249, + "discountPercentage": 15.46, + "rating": 4.09, + "stock": 36, + "brand": "Samsung", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/3/thumbnail.jpg", + "images": ["https://i.dummyjson.com/data/products/3/1.jpg"] + }, + { + "id": 4, + "title": "OPPOF19", + "description": "OPPO F19 is officially announced on April 2021.", + "price": 280, + "discountPercentage": 17.91, + "rating": 4.3, + "stock": 123, + "brand": "OPPO", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/4/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/4/1.jpg", + "https://i.dummyjson.com/data/products/4/2.jpg", + "https://i.dummyjson.com/data/products/4/3.jpg", + "https://i.dummyjson.com/data/products/4/4.jpg", + "https://i.dummyjson.com/data/products/4/thumbnail.jpg" + ] + }, + { + "id": 5, + "title": "Huawei P30", + "description": "Huawei’s re-badged P30 Pro New Edition was officially unveiled yesterday in Germany and now the device has made its way to the UK.", + "price": 499, + "discountPercentage": 10.58, + "rating": 4.09, + "stock": 32, + "brand": "Huawei", + "category": "smartphones", + "thumbnail": "https://i.dummyjson.com/data/products/5/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/5/1.jpg", + "https://i.dummyjson.com/data/products/5/2.jpg", + "https://i.dummyjson.com/data/products/5/3.jpg" + ] + }, + { + "id": 6, + "title": "MacBook Pro", + "description": "MacBook Pro 2021 with mini-LED display may launch between September, November", + "price": 1749, + "discountPercentage": 11.02, + "rating": 4.57, + "stock": 83, + "brand": "Apple", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/6/thumbnail.png", + "images": [ + "https://i.dummyjson.com/data/products/6/1.png", + "https://i.dummyjson.com/data/products/6/2.jpg", + "https://i.dummyjson.com/data/products/6/3.png", + "https://i.dummyjson.com/data/products/6/4.jpg" + ] + }, + { + "id": 7, + "title": "Samsung Galaxy Book", + "description": "Samsung Galaxy Book S (2020) Laptop With Intel Lakefield Chip, 8GB of RAM Launched", + "price": 1499, + "discountPercentage": 4.15, + "rating": 4.25, + "stock": 50, + "brand": "Samsung", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/7/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/7/1.jpg", + "https://i.dummyjson.com/data/products/7/2.jpg", + "https://i.dummyjson.com/data/products/7/3.jpg", + "https://i.dummyjson.com/data/products/7/thumbnail.jpg" + ] + }, + { + "id": 8, + "title": "Microsoft Surface Laptop 4", + "description": "Style and speed. Stand out on HD video calls backed by Studio Mics. Capture ideas on the vibrant touchscreen.", + "price": 1499, + "discountPercentage": 10.23, + "rating": 4.43, + "stock": 68, + "brand": "Microsoft Surface", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/8/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/8/1.jpg", + "https://i.dummyjson.com/data/products/8/2.jpg", + "https://i.dummyjson.com/data/products/8/3.jpg", + "https://i.dummyjson.com/data/products/8/4.jpg", + "https://i.dummyjson.com/data/products/8/thumbnail.jpg" + ] + }, + { + "id": 9, + "title": "Infinix INBOOK", + "description": "Infinix Inbook X1 Ci3 10th 8GB 256GB 14 Win10 Grey – 1 Year Warranty", + "price": 1099, + "discountPercentage": 11.83, + "rating": 4.54, + "stock": 96, + "brand": "Infinix", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/9/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/9/1.jpg", + "https://i.dummyjson.com/data/products/9/2.png", + "https://i.dummyjson.com/data/products/9/3.png", + "https://i.dummyjson.com/data/products/9/4.jpg", + "https://i.dummyjson.com/data/products/9/thumbnail.jpg" + ] + }, + { + "id": 10, + "title": "HP Pavilion 15-DK1056WM", + "description": "HP Pavilion 15-DK1056WM Gaming Laptop 10th Gen Core i5, 8GB, 256GB SSD, GTX 1650 4GB, Windows 10", + "price": 1099, + "discountPercentage": 6.18, + "rating": 4.43, + "stock": 89, + "brand": "HP Pavilion", + "category": "laptops", + "thumbnail": "https://i.dummyjson.com/data/products/10/thumbnail.jpeg", + "images": [ + "https://i.dummyjson.com/data/products/10/1.jpg", + "https://i.dummyjson.com/data/products/10/2.jpg", + "https://i.dummyjson.com/data/products/10/3.jpg", + "https://i.dummyjson.com/data/products/10/thumbnail.jpeg" + ] + }, + { + "id": 11, + "title": "perfume Oil", + "description": "Mega Discount, Impression of Acqua Di Gio by GiorgioArmani concentrated attar perfume Oil", + "price": 13, + "discountPercentage": 8.4, + "rating": 4.26, + "stock": 65, + "brand": "Impression of Acqua Di Gio", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/11/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/11/1.jpg", + "https://i.dummyjson.com/data/products/11/2.jpg", + "https://i.dummyjson.com/data/products/11/3.jpg", + "https://i.dummyjson.com/data/products/11/thumbnail.jpg" + ] + }, + { + "id": 12, + "title": "Brown Perfume", + "description": "Royal_Mirage Sport Brown Perfume for Men & Women - 120ml", + "price": 40, + "discountPercentage": 15.66, + "rating": 4, + "stock": 52, + "brand": "Royal_Mirage", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/12/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/12/1.jpg", + "https://i.dummyjson.com/data/products/12/2.jpg", + "https://i.dummyjson.com/data/products/12/3.png", + "https://i.dummyjson.com/data/products/12/4.jpg", + "https://i.dummyjson.com/data/products/12/thumbnail.jpg" + ] + }, + { + "id": 13, + "title": "Fog Scent Xpressio Perfume", + "description": "Product details of Best Fog Scent Xpressio Perfume 100ml For Men cool long lasting perfumes for Men", + "price": 13, + "discountPercentage": 8.14, + "rating": 4.59, + "stock": 61, + "brand": "Fog Scent Xpressio", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/13/thumbnail.webp", + "images": [ + "https://i.dummyjson.com/data/products/13/1.jpg", + "https://i.dummyjson.com/data/products/13/2.png", + "https://i.dummyjson.com/data/products/13/3.jpg", + "https://i.dummyjson.com/data/products/13/4.jpg", + "https://i.dummyjson.com/data/products/13/thumbnail.webp" + ] + }, + { + "id": 14, + "title": "Non-Alcoholic Concentrated Perfume Oil", + "description": "Original Al Munakh® by Mahal Al Musk | Our Impression of Climate | 6ml Non-Alcoholic Concentrated Perfume Oil", + "price": 120, + "discountPercentage": 15.6, + "rating": 4.21, + "stock": 114, + "brand": "Al Munakh", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/14/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/14/1.jpg", + "https://i.dummyjson.com/data/products/14/2.jpg", + "https://i.dummyjson.com/data/products/14/3.jpg", + "https://i.dummyjson.com/data/products/14/thumbnail.jpg" + ] + }, + { + "id": 15, + "title": "Eau De Perfume Spray", + "description": "Genuine Al-Rehab spray perfume from UAE/Saudi Arabia/Yemen High Quality", + "price": 30, + "discountPercentage": 10.99, + "rating": 4.7, + "stock": 105, + "brand": "Lord - Al-Rehab", + "category": "fragrances", + "thumbnail": "https://i.dummyjson.com/data/products/15/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/15/1.jpg", + "https://i.dummyjson.com/data/products/15/2.jpg", + "https://i.dummyjson.com/data/products/15/3.jpg", + "https://i.dummyjson.com/data/products/15/4.jpg", + "https://i.dummyjson.com/data/products/15/thumbnail.jpg" + ] + }, + { + "id": 16, + "title": "Hyaluronic Acid Serum", + "description": "L'Oréal Paris introduces Hyaluron Expert Replumping Serum formulated with 1.5% Hyaluronic Acid", + "price": 19, + "discountPercentage": 13.31, + "rating": 4.83, + "stock": 110, + "brand": "L'Oreal Paris", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/16/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/16/1.png", + "https://i.dummyjson.com/data/products/16/2.webp", + "https://i.dummyjson.com/data/products/16/3.jpg", + "https://i.dummyjson.com/data/products/16/4.jpg", + "https://i.dummyjson.com/data/products/16/thumbnail.jpg" + ] + }, + { + "id": 17, + "title": "Tree Oil 30ml", + "description": "Tea tree oil contains a number of compounds, including terpinen-4-ol, that have been shown to kill certain bacteria,", + "price": 12, + "discountPercentage": 4.09, + "rating": 4.52, + "stock": 78, + "brand": "Hemani Tea", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/17/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/17/1.jpg", + "https://i.dummyjson.com/data/products/17/2.jpg", + "https://i.dummyjson.com/data/products/17/3.jpg", + "https://i.dummyjson.com/data/products/17/thumbnail.jpg" + ] + }, + { + "id": 18, + "title": "Oil Free Moisturizer 100ml", + "description": "Dermive Oil Free Moisturizer with SPF 20 is specifically formulated with ceramides, hyaluronic acid & sunscreen.", + "price": 40, + "discountPercentage": 13.1, + "rating": 4.56, + "stock": 88, + "brand": "Dermive", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/18/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/18/1.jpg", + "https://i.dummyjson.com/data/products/18/2.jpg", + "https://i.dummyjson.com/data/products/18/3.jpg", + "https://i.dummyjson.com/data/products/18/4.jpg", + "https://i.dummyjson.com/data/products/18/thumbnail.jpg" + ] + }, + { + "id": 19, + "title": "Skin Beauty Serum.", + "description": "Product name: rorec collagen hyaluronic acid white face serum riceNet weight: 15 m", + "price": 46, + "discountPercentage": 10.68, + "rating": 4.42, + "stock": 54, + "brand": "ROREC White Rice", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/19/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/19/1.jpg", + "https://i.dummyjson.com/data/products/19/2.jpg", + "https://i.dummyjson.com/data/products/19/3.png", + "https://i.dummyjson.com/data/products/19/thumbnail.jpg" + ] + }, + { + "id": 20, + "title": "Freckle Treatment Cream- 15gm", + "description": "Fair & Clear is Pakistan's only pure Freckle cream which helpsfade Freckles, Darkspots and pigments. Mercury level is 0%, so there are no side effects.", + "price": 70, + "discountPercentage": 16.99, + "rating": 4.06, + "stock": 140, + "brand": "Fair & Clear", + "category": "skincare", + "thumbnail": "https://i.dummyjson.com/data/products/20/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/20/1.jpg", + "https://i.dummyjson.com/data/products/20/2.jpg", + "https://i.dummyjson.com/data/products/20/3.jpg", + "https://i.dummyjson.com/data/products/20/4.jpg", + "https://i.dummyjson.com/data/products/20/thumbnail.jpg" + ] + }, + { + "id": 21, + "title": "- Daal Masoor 500 grams", + "description": "Fine quality Branded Product Keep in a cool and dry place", + "price": 20, + "discountPercentage": 4.81, + "rating": 4.44, + "stock": 133, + "brand": "Saaf & Khaas", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/21/thumbnail.png", + "images": [ + "https://i.dummyjson.com/data/products/21/1.png", + "https://i.dummyjson.com/data/products/21/2.jpg", + "https://i.dummyjson.com/data/products/21/3.jpg" + ] + }, + { + "id": 22, + "title": "Elbow Macaroni - 400 gm", + "description": "Product details of Bake Parlor Big Elbow Macaroni - 400 gm", + "price": 14, + "discountPercentage": 15.58, + "rating": 4.57, + "stock": 146, + "brand": "Bake Parlor Big", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/22/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/22/1.jpg", + "https://i.dummyjson.com/data/products/22/2.jpg", + "https://i.dummyjson.com/data/products/22/3.jpg" + ] + }, + { + "id": 23, + "title": "Orange Essence Food Flavou", + "description": "Specifications of Orange Essence Food Flavour For Cakes and Baking Food Item", + "price": 14, + "discountPercentage": 8.04, + "rating": 4.85, + "stock": 26, + "brand": "Baking Food Items", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/23/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/23/1.jpg", + "https://i.dummyjson.com/data/products/23/2.jpg", + "https://i.dummyjson.com/data/products/23/3.jpg", + "https://i.dummyjson.com/data/products/23/4.jpg", + "https://i.dummyjson.com/data/products/23/thumbnail.jpg" + ] + }, + { + "id": 24, + "title": "cereals muesli fruit nuts", + "description": "original fauji cereal muesli 250gm box pack original fauji cereals muesli fruit nuts flakes breakfast cereal break fast faujicereals cerels cerel foji fouji", + "price": 46, + "discountPercentage": 16.8, + "rating": 4.94, + "stock": 113, + "brand": "fauji", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/24/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/24/1.jpg", + "https://i.dummyjson.com/data/products/24/2.jpg", + "https://i.dummyjson.com/data/products/24/3.jpg", + "https://i.dummyjson.com/data/products/24/4.jpg", + "https://i.dummyjson.com/data/products/24/thumbnail.jpg" + ] + }, + { + "id": 25, + "title": "Gulab Powder 50 Gram", + "description": "Dry Rose Flower Powder Gulab Powder 50 Gram • Treats Wounds", + "price": 70, + "discountPercentage": 13.58, + "rating": 4.87, + "stock": 47, + "brand": "Dry Rose", + "category": "groceries", + "thumbnail": "https://i.dummyjson.com/data/products/25/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/25/1.png", + "https://i.dummyjson.com/data/products/25/2.jpg", + "https://i.dummyjson.com/data/products/25/3.png", + "https://i.dummyjson.com/data/products/25/4.jpg", + "https://i.dummyjson.com/data/products/25/thumbnail.jpg" + ] + }, + { + "id": 26, + "title": "Plant Hanger For Home", + "description": "Boho Decor Plant Hanger For Home Wall Decoration Macrame Wall Hanging Shelf", + "price": 41, + "discountPercentage": 17.86, + "rating": 4.08, + "stock": 131, + "brand": "Boho Decor", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/26/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/26/1.jpg", + "https://i.dummyjson.com/data/products/26/2.jpg", + "https://i.dummyjson.com/data/products/26/3.jpg", + "https://i.dummyjson.com/data/products/26/4.jpg", + "https://i.dummyjson.com/data/products/26/5.jpg", + "https://i.dummyjson.com/data/products/26/thumbnail.jpg" + ] + }, + { + "id": 27, + "title": "Flying Wooden Bird", + "description": "Package Include 6 Birds with Adhesive Tape Shape: 3D Shaped Wooden Birds Material: Wooden MDF, Laminated 3.5mm", + "price": 51, + "discountPercentage": 15.58, + "rating": 4.41, + "stock": 17, + "brand": "Flying Wooden", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/27/thumbnail.webp", + "images": [ + "https://i.dummyjson.com/data/products/27/1.jpg", + "https://i.dummyjson.com/data/products/27/2.jpg", + "https://i.dummyjson.com/data/products/27/3.jpg", + "https://i.dummyjson.com/data/products/27/4.jpg", + "https://i.dummyjson.com/data/products/27/thumbnail.webp" + ] + }, + { + "id": 28, + "title": "3D Embellishment Art Lamp", + "description": "3D led lamp sticker Wall sticker 3d wall art light on/off button cell operated (included)", + "price": 20, + "discountPercentage": 16.49, + "rating": 4.82, + "stock": 54, + "brand": "LED Lights", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/28/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/28/1.jpg", + "https://i.dummyjson.com/data/products/28/2.jpg", + "https://i.dummyjson.com/data/products/28/3.png", + "https://i.dummyjson.com/data/products/28/4.jpg", + "https://i.dummyjson.com/data/products/28/thumbnail.jpg" + ] + }, + { + "id": 29, + "title": "Handcraft Chinese style", + "description": "Handcraft Chinese style art luxury palace hotel villa mansion home decor ceramic vase with brass fruit plate", + "price": 60, + "discountPercentage": 15.34, + "rating": 4.44, + "stock": 7, + "brand": "luxury palace", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/29/thumbnail.webp", + "images": [ + "https://i.dummyjson.com/data/products/29/1.jpg", + "https://i.dummyjson.com/data/products/29/2.jpg", + "https://i.dummyjson.com/data/products/29/3.webp", + "https://i.dummyjson.com/data/products/29/4.webp", + "https://i.dummyjson.com/data/products/29/thumbnail.webp" + ] + }, + { + "id": 30, + "title": "Key Holder", + "description": "Attractive DesignMetallic materialFour key hooksReliable & DurablePremium Quality", + "price": 30, + "discountPercentage": 2.92, + "rating": 4.92, + "stock": 54, + "brand": "Golden", + "category": "home-decoration", + "thumbnail": "https://i.dummyjson.com/data/products/30/thumbnail.jpg", + "images": [ + "https://i.dummyjson.com/data/products/30/1.jpg", + "https://i.dummyjson.com/data/products/30/2.jpg", + "https://i.dummyjson.com/data/products/30/3.jpg", + "https://i.dummyjson.com/data/products/30/thumbnail.jpg" + ] + } + ] + +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..1826a18 --- /dev/null +++ b/public/index.html @@ -0,0 +1,256 @@ + + + + +
+
+
+
+
+
+
+ -25% + +
+
+ + +
+ +
+
+
**title**
+ +
+ ₹ **price** + ₹ 700 +
+
+ + + +
+
+ + **rating** +
+ + BUY + +
+
+
+ + +
+ +
+
From 907c26e3ad4a19ccdbd33ed972087377dd549ea2 Mon Sep 17 00:00:00 2001 From: Abhishek Rathore Date: Mon, 13 Feb 2023 03:34:15 +0530 Subject: [PATCH 4/7] node-4 --- index.js | 81 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 34 deletions(-) diff --git a/index.js b/index.js index 9f6e92b..61ed538 100644 --- a/index.js +++ b/index.js @@ -9,50 +9,63 @@ const server = express(); //bodyParser server.use(express.json()); -// server.use(express.urlencoded()); server.use(morgan('default')) server.use(express.static('public')); -// server.use((req, res, next) => { -// console.log( -// req.method, -// req.ip, -// req.hostname, -// new Date(), -// req.get('User-Agent') -// ); -// next(); -// }); - -const auth = (req, res, next) => { - // console.log(req.query); - - // if (req.body.password == '123') { - // next(); - // } else { - // res.sendStatus(401); - // } - next() - -}; + + + // API - Endpoint - Route -server.get('/product/:id', auth, (req, res) => { - console.log(req.params) - res.json({ type: 'GET' }); + +// Products +// API ROOT , base URL, example - google.com/api/v2/ + +//Create POST /products C R U D +server.post('/products', (req, res) => { + console.log(req.body); + products.push(req.body); + res.status(201).json(req.body); +}); + + + +// Read GET /products +server.get('/products', (req, res) => { + res.json(products); }); -server.post('/', auth, (req, res) => { - res.json({ type: 'POST' }); + +// Read GET /products/:id +server.get('/products/:id', (req, res) => { + const id = +req.params.id; + const product = products.find(p=>p.id===id) + res.json(product); }); -server.put('/', (req, res) => { - res.json({ type: 'PUT' }); + +// Update PUT /products/:id +server.put('/products/:id', (req, res) => { + const id = +req.params.id; + const productIndex = products.findIndex(p=>p.id===id) + products.splice(productIndex,1,{...req.body, id:id}) + res.status(201).json(); }); -server.delete('/', (req, res) => { - res.json({ type: 'DELETE' }); +// Update PATCH /products/:id +server.patch('/products/:id', (req, res) => { + const id = +req.params.id; + const productIndex = products.findIndex(p=>p.id===id) + const product = products[productIndex]; + products.splice(productIndex,1,{...product,...req.body}) + res.status(201).json(); }); -server.patch('/', (req, res) => { - res.json({ type: 'PATCH' }); +// Delete DELETE /products/:id +server.delete('/products/:id', (req, res) => { + const id = +req.params.id; + const productIndex = products.findIndex(p=>p.id===id) + const product = products[productIndex]; + products.splice(productIndex,1) + res.status(201).json(product); }); + server.get('/demo', (req, res) => { // res.sendStatus(404); // res.json(products) From 5b12491aa556f414ea373942c83cc895cab168e8 Mon Sep 17 00:00:00 2001 From: Abhishek Rathore Date: Tue, 14 Feb 2023 01:06:06 +0530 Subject: [PATCH 5/7] node-5 --- controller/product.js | 40 ++ controller/user.js | 40 ++ data.json | 1562 ++++++++++++++++++++++++++++++++++++++++- index.js | 72 +- routes/product.js | 14 + routes/user.js | 14 + 6 files changed, 1674 insertions(+), 68 deletions(-) create mode 100644 controller/product.js create mode 100644 controller/user.js create mode 100644 routes/product.js create mode 100644 routes/user.js diff --git a/controller/product.js b/controller/product.js new file mode 100644 index 0000000..4493e39 --- /dev/null +++ b/controller/product.js @@ -0,0 +1,40 @@ +const fs = require('fs'); +// const index = fs.readFileSync('index.html', 'utf-8'); +const data = JSON.parse(fs.readFileSync('data.json', 'utf-8')); +const products = data.products; + +exports.createProduct = (req, res) => { + console.log(req.body); + products.push(req.body); + res.status(201).json(req.body); +}; + +exports.getAllProducts = (req, res) => { + res.json(products); +}; + +exports.getProduct = (req, res) => { + const id = +req.params.id; + const product = products.find((p) => p.id === id); + res.json(product); +}; +exports.replaceProduct = (req, res) => { + const id = +req.params.id; + const productIndex = products.findIndex((p) => p.id === id); + products.splice(productIndex, 1, { ...req.body, id: id }); + res.status(201).json(); +}; +exports.updateProduct = (req, res) => { + const id = +req.params.id; + const productIndex = products.findIndex((p) => p.id === id); + const product = products[productIndex]; + products.splice(productIndex, 1, { ...product, ...req.body }); + res.status(201).json(); +}; +exports.deleteProduct = (req, res) => { + const id = +req.params.id; + const productIndex = products.findIndex((p) => p.id === id); + const product = products[productIndex]; + products.splice(productIndex, 1); + res.status(201).json(product); +}; diff --git a/controller/user.js b/controller/user.js new file mode 100644 index 0000000..bc0d2fe --- /dev/null +++ b/controller/user.js @@ -0,0 +1,40 @@ +const fs = require('fs'); +// const index = fs.readFileSync('index.html', 'utf-8'); +const data = JSON.parse(fs.readFileSync('data.json', 'utf-8')); +const users = data.users; + +exports.createUser = (req, res) => { + console.log(req.body); + users.push(req.body); + res.status(201).json(req.body); +}; + +exports.getAllUsers = (req, res) => { + res.json(users); +}; + +exports.getUser = (req, res) => { + const id = +req.params.id; + const user = users.find((p) => p.id === id); + res.json(user); +}; +exports.replaceUser = (req, res) => { + const id = +req.params.id; + const userIndex = users.findIndex((p) => p.id === id); + users.splice(userIndex, 1, { ...req.body, id: id }); + res.status(201).json(); +}; +exports.updateUser = (req, res) => { + const id = +req.params.id; + const userIndex = users.findIndex((p) => p.id === id); + const user = users[userIndex]; + users.splice(userIndex, 1, { ...user, ...req.body }); + res.status(201).json(); +}; +exports.deleteUser = (req, res) => { + const id = +req.params.id; + const userIndex = users.findIndex((p) => p.id === id); + const user = users[userIndex]; + users.splice(userIndex, 1); + res.status(201).json(user); +}; diff --git a/data.json b/data.json index 894407d..55cc92c 100644 --- a/data.json +++ b/data.json @@ -550,6 +550,1566 @@ "https://i.dummyjson.com/data/products/30/thumbnail.jpg" ] } + ], + "users": [ + { + "id": 1, + "firstName": "Terry", + "lastName": "Medhurst", + "maidenName": "Smitham", + "age": 50, + "gender": "male", + "email": "atuny0@sohu.com", + "phone": "+63 791 675 8914", + "username": "atuny0", + "password": "9uQFF1Lh", + "birthDate": "2000-12-25", + "image": "https://robohash.org/hicveldicta.png", + "bloodGroup": "A−", + "height": 189, + "weight": 75.4, + "eyeColor": "Green", + "hair": { "color": "Black", "type": "Strands" }, + "domain": "slashdot.org", + "ip": "117.29.86.254", + "address": { + "address": "1745 T Street Southeast", + "city": "Washington", + "coordinates": { "lat": 38.867033, "lng": -76.979235 }, + "postalCode": "20020", + "state": "DC" + }, + "macAddress": "13:69:BA:56:A3:74", + "university": "Capitol University", + "bank": { + "cardExpire": "06/22", + "cardNumber": "50380955204220685", + "cardType": "maestro", + "currency": "Peso", + "iban": "NO17 0695 2754 967" + }, + "company": { + "address": { + "address": "629 Debbie Drive", + "city": "Nashville", + "coordinates": { "lat": 36.208114, "lng": -86.58621199999999 }, + "postalCode": "37076", + "state": "TN" + }, + "department": "Marketing", + "name": "Blanda-O'Keefe", + "title": "Help Desk Operator" + }, + "ein": "20-9487066", + "ssn": "661-64-2976", + "userAgent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/12.0.702.0 Safari/534.24" + }, + { + "id": 2, + "firstName": "Sheldon", + "lastName": "Quigley", + "maidenName": "Cole", + "age": 28, + "gender": "male", + "email": "hbingley1@plala.or.jp", + "phone": "+7 813 117 7139", + "username": "hbingley1", + "password": "CQutx25i8r", + "birthDate": "2003-08-02", + "image": "https://robohash.org/doloremquesintcorrupti.png", + "bloodGroup": "O+", + "height": 187, + "weight": 74, + "eyeColor": "Brown", + "hair": { "color": "Blond", "type": "Curly" }, + "domain": "51.la", + "ip": "253.240.20.181", + "address": { + "address": "6007 Applegate Lane", + "city": "Louisville", + "coordinates": { "lat": 38.1343013, "lng": -85.6498512 }, + "postalCode": "40219", + "state": "KY" + }, + "macAddress": "13:F1:00:DA:A4:12", + "university": "Stavropol State Technical University", + "bank": { + "cardExpire": "10/23", + "cardNumber": "5355920631952404", + "cardType": "mastercard", + "currency": "Ruble", + "iban": "MD63 L6YC 8YH4 QVQB XHIK MTML" + }, + "company": { + "address": { + "address": "8821 West Myrtle Avenue", + "city": "Glendale", + "coordinates": { "lat": 33.5404296, "lng": -112.2488391 }, + "postalCode": "85305", + "state": "AZ" + }, + "department": "Services", + "name": "Aufderhar-Cronin", + "title": "Senior Cost Accountant" + }, + "ein": "52-5262907", + "ssn": "447-08-9217", + "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30" + }, + { + "id": 3, + "firstName": "Terrill", + "lastName": "Hills", + "maidenName": "Hoeger", + "age": 38, + "gender": "male", + "email": "rshawe2@51.la", + "phone": "+63 739 292 7942", + "username": "rshawe2", + "password": "OWsTbMUgFc", + "birthDate": "1992-12-30", + "image": "https://robohash.org/consequunturautconsequatur.png", + "bloodGroup": "A−", + "height": 200, + "weight": 105.3, + "eyeColor": "Gray", + "hair": { "color": "Blond", "type": "Very curly" }, + "domain": "earthlink.net", + "ip": "205.226.160.3", + "address": { + "address": "560 Penstock Drive", + "city": "Grass Valley", + "coordinates": { "lat": 39.213076, "lng": -121.077583 }, + "postalCode": "95945", + "state": "CA" + }, + "macAddress": "F2:88:58:64:F7:76", + "university": "University of Cagayan Valley", + "bank": { + "cardExpire": "10/23", + "cardNumber": "3586082982526703", + "cardType": "jcb", + "currency": "Peso", + "iban": "AT24 1095 9625 1434 9703" + }, + "company": { + "address": { + "address": "18 Densmore Drive", + "city": "Essex", + "coordinates": { "lat": 44.492953, "lng": -73.101883 }, + "postalCode": "05452", + "state": "VT" + }, + "department": "Marketing", + "name": "Lindgren LLC", + "title": "Mechanical Systems Engineer" + }, + "ein": "48-3951994", + "ssn": "633-89-1926", + "userAgent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0" + }, + { + "id": 4, + "firstName": "Miles", + "lastName": "Cummerata", + "maidenName": "Maggio", + "age": 49, + "gender": "male", + "email": "yraigatt3@nature.com", + "phone": "+86 461 145 4186", + "username": "yraigatt3", + "password": "sRQxjPfdS", + "birthDate": "1969-01-16", + "image": "https://robohash.org/facilisdignissimosdolore.png", + "bloodGroup": "B+", + "height": 157, + "weight": 95.9, + "eyeColor": "Gray", + "hair": { "color": "Blond", "type": "Very curly" }, + "domain": "homestead.com", + "ip": "243.20.78.113", + "address": { + "address": "150 Carter Street", + "city": "Manchester", + "coordinates": { "lat": 41.76556000000001, "lng": -72.473091 }, + "postalCode": "06040", + "state": "CT" + }, + "macAddress": "03:45:58:59:5A:7B", + "university": "Shenyang Pharmaceutical University", + "bank": { + "cardExpire": "07/24", + "cardNumber": "3580047879369323", + "cardType": "jcb", + "currency": "Yuan Renminbi", + "iban": "KZ43 658B M6VS TZOU OXSO" + }, + "company": { + "address": { + "address": "210 Green Road", + "city": "Manchester", + "coordinates": { "lat": 41.7909099, "lng": -72.51195129999999 }, + "postalCode": "06042", + "state": "CT" + }, + "department": "Business Development", + "name": "Wolff and Sons", + "title": "Paralegal" + }, + "ein": "71-3644334", + "ssn": "487-28-6642", + "userAgent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.17 Safari/537.11" + }, + { + "id": 5, + "firstName": "Mavis", + "lastName": "Schultz", + "maidenName": "Yundt", + "age": 38, + "gender": "male", + "email": "kmeus4@upenn.edu", + "phone": "+372 285 771 1911", + "username": "kmeus4", + "password": "aUTdmmmbH", + "birthDate": "1968-11-03", + "image": "https://robohash.org/adverovelit.png", + "bloodGroup": "O+", + "height": 188, + "weight": 106.3, + "eyeColor": "Brown", + "hair": { "color": "Brown", "type": "Curly" }, + "domain": "columbia.edu", + "ip": "103.72.86.183", + "address": { + "address": "2721 Lindsay Avenue", + "city": "Louisville", + "coordinates": { "lat": 38.263793, "lng": -85.700243 }, + "postalCode": "40206", + "state": "KY" + }, + "macAddress": "F8:04:9E:ED:C0:68", + "university": "Estonian University of Life Sciences", + "bank": { + "cardExpire": "01/24", + "cardNumber": "4917245076693618", + "cardType": "visa-electron", + "currency": "Euro", + "iban": "IT41 T114 5127 716J RGYB ZRUX DSJ" + }, + "company": { + "address": { + "address": "8398 West Denton Lane", + "city": "Glendale", + "coordinates": { "lat": 33.515353, "lng": -112.240812 }, + "postalCode": "85305", + "state": "AZ" + }, + "department": "Support", + "name": "Adams Inc", + "title": "Web Developer I" + }, + "ein": "18-7178563", + "ssn": "667-98-5357", + "userAgent": "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.1 Safari/535.1" + }, + { + "id": 6, + "firstName": "Alison", + "lastName": "Reichert", + "maidenName": "Franecki", + "age": 21, + "gender": "female", + "email": "jtreleven5@nhs.uk", + "phone": "+351 527 735 3642", + "username": "jtreleven5", + "password": "zY1nE46Zm", + "birthDate": "1969-07-21", + "image": "https://robohash.org/laboriosamfacilisrem.png", + "bloodGroup": "A+", + "height": 149, + "weight": 105.7, + "eyeColor": "Amber", + "hair": { "color": "Blond", "type": "Straight" }, + "domain": "bandcamp.com", + "ip": "49.201.206.36", + "address": { + "address": "18 Densmore Drive", + "city": "Essex", + "coordinates": { "lat": 44.492953, "lng": -73.101883 }, + "postalCode": "05452", + "state": "VT" + }, + "macAddress": "6C:34:D0:4B:4E:81", + "university": "Universidade da Beira Interior", + "bank": { + "cardExpire": "03/22", + "cardNumber": "345675888286047", + "cardType": "americanexpress", + "currency": "Euro", + "iban": "LB69 1062 QCY5 XS5T VOKU KJFG XP4S" + }, + "company": { + "address": { + "address": "6231 North 67th Avenue", + "city": "Glendale", + "coordinates": { "lat": 33.5279666, "lng": -112.2022551 }, + "postalCode": "85301", + "state": "AZ" + }, + "department": "Accounting", + "name": "D'Amore and Sons", + "title": "Civil Engineer" + }, + "ein": "78-3192791", + "ssn": "158-68-0184", + "userAgent": "Mozilla/5.0 (Windows; U; Windows NT 6.0; nb-NO) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5" + }, + { + "id": 7, + "firstName": "Oleta", + "lastName": "Abbott", + "maidenName": "Wyman", + "age": 31, + "gender": "female", + "email": "dpettegre6@columbia.edu", + "phone": "+62 640 802 7111", + "username": "dpettegre6", + "password": "YVmhktgYVS", + "birthDate": "1982-02-21", + "image": "https://robohash.org/cupiditatererumquos.png", + "bloodGroup": "B−", + "height": 172, + "weight": 78.1, + "eyeColor": "Blue", + "hair": { "color": "Chestnut", "type": "Wavy" }, + "domain": "ovh.net", + "ip": "25.207.107.146", + "address": { + "address": "637 Britannia Drive", + "city": "Vallejo", + "coordinates": { "lat": 38.10476999999999, "lng": -122.193849 }, + "postalCode": "94591", + "state": "CA" + }, + "macAddress": "48:2D:A0:67:19:E0", + "university": "Institut Sains dan Teknologi Al Kamal", + "bank": { + "cardExpire": "10/23", + "cardNumber": "3589640949470047", + "cardType": "jcb", + "currency": "Rupiah", + "iban": "GI97 IKPF 9DUO X25M FG8D UXY" + }, + "company": { + "address": { + "address": "1407 Walden Court", + "city": "Crofton", + "coordinates": { "lat": 39.019306, "lng": -76.660653 }, + "postalCode": "21114", + "state": "MD" + }, + "department": "Product Management", + "name": "Schimmel, Wilderman and Orn", + "title": "Sales Associate" + }, + "ein": "29-1568401", + "ssn": "478-11-2206", + "userAgent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5" + }, + { + "id": 8, + "firstName": "Ewell", + "lastName": "Mueller", + "maidenName": "Durgan", + "age": 29, + "gender": "male", + "email": "ggude7@chron.com", + "phone": "+86 946 297 2275", + "username": "ggude7", + "password": "MWwlaeWcOoF6", + "birthDate": "1964-08-24", + "image": "https://robohash.org/quiaharumsapiente.png", + "bloodGroup": "A−", + "height": 146, + "weight": 52.1, + "eyeColor": "Blue", + "hair": { "color": "Chestnut", "type": "Wavy" }, + "domain": "homestead.com", + "ip": "91.200.56.127", + "address": { + "address": "5601 West Crocus Drive", + "city": "Glendale", + "coordinates": { "lat": 33.6152469, "lng": -112.179737 }, + "postalCode": "85306", + "state": "AZ" + }, + "macAddress": "72:DA:1B:D7:30:E9", + "university": "Wenzhou Medical College", + "bank": { + "cardExpire": "09/23", + "cardNumber": "30549925358905", + "cardType": "diners-club-carte-blanche", + "currency": "Yuan Renminbi", + "iban": "CY02 9914 5346 0PMT G6XW TP0R AWRZ" + }, + "company": { + "address": { + "address": "81 Seaton Place Northwest", + "city": "Washington", + "coordinates": { "lat": 38.9149499, "lng": -77.01170259999999 }, + "postalCode": "20001", + "state": "DC" + }, + "department": "Services", + "name": "Corkery, Reichert and Hodkiewicz", + "title": "Clinical Specialist" + }, + "ein": "88-4396827", + "ssn": "238-41-5528", + "userAgent": "Mozilla/5.0 (X11; Linux amd64) AppleWebKit/534.36 (KHTML, like Gecko) Chrome/13.0.766.0 Safari/534.36" + }, + { + "id": 9, + "firstName": "Demetrius", + "lastName": "Corkery", + "maidenName": "Gleason", + "age": 22, + "gender": "male", + "email": "nloiterton8@aol.com", + "phone": "+86 356 590 9727", + "username": "nloiterton8", + "password": "HTQxxXV9Bq4", + "birthDate": "1971-03-11", + "image": "https://robohash.org/excepturiiuremolestiae.png", + "bloodGroup": "A+", + "height": 170, + "weight": 97.1, + "eyeColor": "Green", + "hair": { "color": "Brown", "type": "Strands" }, + "domain": "goodreads.com", + "ip": "78.170.185.120", + "address": { + "address": "5403 Illinois Avenue", + "city": "Nashville", + "coordinates": { "lat": 36.157077, "lng": -86.853827 }, + "postalCode": "37209", + "state": "TN" + }, + "macAddress": "98:EE:94:A2:91:C4", + "university": "Nanjing University of Economics", + "bank": { + "cardExpire": "02/24", + "cardNumber": "5372664789004621", + "cardType": "mastercard", + "currency": "Yuan Renminbi", + "iban": "BR68 9829 0581 3669 5088 5533 025N V" + }, + "company": { + "address": { + "address": "12245 West 71st Place", + "city": "Arvada", + "coordinates": { "lat": 39.8267078, "lng": -105.1366798 }, + "postalCode": "80004", + "state": "CO" + }, + "department": "Human Resources", + "name": "Gorczany Group", + "title": "Community Outreach Specialist" + }, + "ein": "14-1066382", + "ssn": "717-26-3759", + "userAgent": "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; de) AppleWebKit/528.4+ (KHTML, like Gecko) Version/4.0dp1 Safari/526.11.2" + }, + { + "id": 10, + "firstName": "Eleanora", + "lastName": "Price", + "maidenName": "Cummings", + "age": 37, + "gender": "female", + "email": "umcgourty9@jalbum.net", + "phone": "+60 184 408 0824", + "username": "umcgourty9", + "password": "i0xzpX", + "birthDate": "1958-08-11", + "image": "https://robohash.org/aliquamcumqueiure.png", + "bloodGroup": "O+", + "height": 198, + "weight": 48, + "eyeColor": "Blue", + "hair": { "color": "Chestnut", "type": "Wavy" }, + "domain": "alibaba.com", + "ip": "73.15.179.178", + "address": { + "address": "8821 West Myrtle Avenue", + "city": "Glendale", + "coordinates": { "lat": 33.5404296, "lng": -112.2488391 }, + "postalCode": "85305", + "state": "AZ" + }, + "macAddress": "BC:A9:D8:98:CB:0B", + "university": "Melaka City Polytechnic", + "bank": { + "cardExpire": "01/24", + "cardNumber": "3557806620295254", + "cardType": "jcb", + "currency": "Ringgit", + "iban": "GT40 DWAD 9UHA VEOZ ZF4J 2Y0F OOFD" + }, + "company": { + "address": { + "address": "1649 Timberridge Court", + "city": "Fayetteville", + "coordinates": { "lat": 36.084563, "lng": -94.206082 }, + "postalCode": "72704", + "state": "AR" + }, + "department": "Marketing", + "name": "Bins Group", + "title": "Senior Sales Associate" + }, + "ein": "21-5278484", + "ssn": "544-66-0745", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.6 Safari/537.11" + }, + { + "id": 11, + "firstName": "Marcel", + "lastName": "Jones", + "maidenName": "Smith", + "age": 39, + "gender": "male", + "email": "acharlota@liveinternet.ru", + "phone": "+967 253 210 0344", + "username": "acharlota", + "password": "M9lbMdydMN", + "birthDate": "1961-09-12", + "image": "https://robohash.org/impeditautest.png", + "bloodGroup": "B−", + "height": 203, + "weight": 63.7, + "eyeColor": "Amber", + "hair": { "color": "Black", "type": "Straight" }, + "domain": "feedburner.com", + "ip": "137.235.164.173", + "address": { + "address": "2203 7th Street Road", + "city": "Louisville", + "coordinates": { "lat": 38.218107, "lng": -85.779006 }, + "postalCode": "40208", + "state": "KY" + }, + "macAddress": "59:E8:70:5A:E5:D6", + "university": "Hodeidah University", + "bank": { + "cardExpire": "05/24", + "cardNumber": "5893925889459720", + "cardType": "maestro", + "currency": "Rial", + "iban": "NL97 UWMY 2503 2999 43" + }, + "company": { + "address": { + "address": "308 Woodleaf Court", + "city": "Glen Burnie", + "coordinates": { "lat": 39.1425931, "lng": -76.6238441 }, + "postalCode": "21061", + "state": "MD" + }, + "department": "Business Development", + "name": "Kuhn-Harber", + "title": "Account Executive" + }, + "ein": "09-3791007", + "ssn": "342-54-8422", + "userAgent": "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.792.0 Safari/535.1" + }, + { + "id": 12, + "firstName": "Assunta", + "lastName": "Rath", + "maidenName": "Heller", + "age": 42, + "gender": "female", + "email": "rhallawellb@dropbox.com", + "phone": "+380 962 542 6549", + "username": "rhallawellb", + "password": "esTkitT1r", + "birthDate": "1990-12-14", + "image": "https://robohash.org/namquaerataut.png", + "bloodGroup": "O−", + "height": 168, + "weight": 96.8, + "eyeColor": "Gray", + "hair": { "color": "Black", "type": "Very curly" }, + "domain": "123-reg.co.uk", + "ip": "74.80.53.208", + "address": { + "address": "6463 Vrain Street", + "city": "Arvada", + "coordinates": { "lat": 39.814056, "lng": -105.046913 }, + "postalCode": "80003", + "state": "CO" + }, + "macAddress": "9B:DC:21:C2:30:A3", + "university": "Kiev Slavonic University", + "bank": { + "cardExpire": "09/22", + "cardNumber": "5602230671060360", + "cardType": "bankcard", + "currency": "Hryvnia", + "iban": "KW76 VNLA LX0Y DMDE PFS8 FVKP VMDF AV" + }, + "company": { + "address": { + "address": "388 East Main Street", + "coordinates": { "lat": 43.9727945, "lng": -73.1023187 }, + "postalCode": "05753", + "state": "VT" + }, + "department": "Product Management", + "name": "Goodwin-Skiles", + "title": "Developer II" + }, + "ein": "14-1242349", + "ssn": "116-51-6131", + "userAgent": "Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36" + }, + { + "id": 13, + "firstName": "Trace", + "lastName": "Douglas", + "maidenName": "Lemke", + "age": 26, + "gender": "male", + "email": "lgribbinc@posterous.com", + "phone": "+1 609 937 3468", + "username": "lgribbinc", + "password": "ftGj8LZTtv9g", + "birthDate": "1967-07-23", + "image": "https://robohash.org/voluptatemsintnulla.png", + "bloodGroup": "O+", + "height": 181, + "weight": 56.5, + "eyeColor": "Amber", + "hair": { "color": "Auburn", "type": "Straight" }, + "domain": "histats.com", + "ip": "163.245.232.27", + "address": { + "address": "87 Horseshoe Drive", + "city": "West Windsor", + "coordinates": { "lat": 43.4731793, "lng": -72.4967532 }, + "postalCode": "05037", + "state": "VT" + }, + "macAddress": "B9:21:ED:9F:B8:9E", + "university": "Dallas Christian College", + "bank": { + "cardExpire": "01/23", + "cardNumber": "3556299106119514", + "cardType": "jcb", + "currency": "Dollar", + "iban": "AE47 4194 4544 3401 3419 286" + }, + "company": { + "address": { + "address": "310 Timrod Road", + "city": "Manchester", + "coordinates": { "lat": 41.756758, "lng": -72.493501 }, + "postalCode": "06040", + "state": "CT" + }, + "department": "Research and Development", + "name": "Casper Inc", + "title": "Sales Associate" + }, + "ein": "94-0648182", + "ssn": "217-05-3082", + "userAgent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4" + }, + { + "id": 14, + "firstName": "Enoch", + "lastName": "Lynch", + "maidenName": "Heidenreich", + "age": 21, + "gender": "male", + "email": "mturleyd@tumblr.com", + "phone": "+94 912 100 5118", + "username": "mturleyd", + "password": "GyLnCB8gNIp", + "birthDate": "1979-08-25", + "image": "https://robohash.org/quisequienim.png", + "bloodGroup": "O+", + "height": 150, + "weight": 100.3, + "eyeColor": "Green", + "hair": { "color": "Auburn", "type": "Strands" }, + "domain": "icio.us", + "ip": "174.238.43.126", + "address": { + "address": "60 Desousa Drive", + "city": "Manchester", + "coordinates": { "lat": 41.7409259, "lng": -72.5619104 }, + "postalCode": "06040", + "state": "CT" + }, + "macAddress": "52:11:E1:31:35:C1", + "university": "University of Sri Jayawardenapura", + "bank": { + "cardExpire": "11/23", + "cardNumber": "5339467937996728", + "cardType": "mastercard", + "currency": "Rupee", + "iban": "SI28 0812 7967 0952 944" + }, + "company": { + "address": { + "address": "21950 Arnold Center Road", + "city": "Carson", + "coordinates": { "lat": 33.8272706, "lng": -118.2302826 }, + "postalCode": "90810", + "state": "CA" + }, + "department": "Sales", + "name": "Schoen Inc", + "title": "Professor" + }, + "ein": "61-8316825", + "ssn": "742-81-1714", + "userAgent": "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-en) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16" + }, + { + "id": 15, + "firstName": "Jeanne", + "lastName": "Halvorson", + "maidenName": "Cummerata", + "age": 26, + "gender": "female", + "email": "kminchelle@qq.com", + "phone": "+86 581 108 7855", + "username": "kminchelle", + "password": "0lelplR", + "birthDate": "1996-02-02", + "image": "https://robohash.org/autquiaut.png", + "bloodGroup": "A+", + "height": 176, + "weight": 45.7, + "eyeColor": "Amber", + "hair": { "color": "Blond", "type": "Straight" }, + "domain": "google.co.uk", + "ip": "78.43.74.226", + "address": { + "address": "4 Old Colony Way", + "city": "Yarmouth", + "coordinates": { "lat": 41.697168, "lng": -70.189992 }, + "postalCode": "02664", + "state": "MA" + }, + "macAddress": "D9:DB:D9:5A:01:09", + "university": "Donghua University, Shanghai", + "bank": { + "cardExpire": "10/23", + "cardNumber": "3588859507772914", + "cardType": "jcb", + "currency": "Yuan Renminbi", + "iban": "FO12 1440 0396 8902 56" + }, + "company": { + "address": { + "address": "22572 Toreador Drive", + "city": "Salinas", + "coordinates": { "lat": 36.602449, "lng": -121.699071 }, + "postalCode": "93908", + "state": "CA" + }, + "department": "Marketing", + "name": "Hahn-MacGyver", + "title": "Software Test Engineer IV" + }, + "ein": "62-0561095", + "ssn": "855-43-8639", + "userAgent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.14 Safari/534.24" + }, + { + "id": 16, + "firstName": "Trycia", + "lastName": "Fadel", + "maidenName": "Rosenbaum", + "age": 41, + "gender": "female", + "email": "dpierrof@vimeo.com", + "phone": "+420 833 708 0340", + "username": "dpierrof", + "password": "Vru55Y4tufI4", + "birthDate": "1963-07-03", + "image": "https://robohash.org/porronumquamid.png", + "bloodGroup": "B+", + "height": 166, + "weight": 87.2, + "eyeColor": "Gray", + "hair": { "color": "Black", "type": "Very curly" }, + "domain": "tamu.edu", + "ip": "82.170.69.15", + "address": { + "address": "314 South 17th Street", + "city": "Nashville", + "coordinates": { "lat": 36.1719075, "lng": -86.740228 }, + "postalCode": "37206", + "state": "TN" + }, + "macAddress": "3D:21:5B:9F:76:FF", + "university": "Technical University of Mining and Metallurgy Ostrava", + "bank": { + "cardExpire": "07/23", + "cardNumber": "6378941710246212", + "cardType": "instapayment", + "currency": "Koruna", + "iban": "CH94 4961 5QY1 VPV1 NGIP P" + }, + "company": { + "address": { + "address": "1407 Walden Court", + "city": "Crofton", + "coordinates": { "lat": 39.019306, "lng": -76.660653 }, + "postalCode": "21114", + "state": "MD" + }, + "department": "Research and Development", + "name": "Steuber, Considine and Padberg", + "title": "Geological Engineer" + }, + "ein": "75-1816504", + "ssn": "677-73-1525", + "userAgent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.872.0 Safari/535.2" + }, + { + "id": 17, + "firstName": "Bradford", + "lastName": "Prohaska", + "maidenName": "Bins", + "age": 43, + "gender": "male", + "email": "vcholdcroftg@ucoz.com", + "phone": "+420 874 628 3710", + "username": "vcholdcroftg", + "password": "mSPzYZfR", + "birthDate": "1975-10-20", + "image": "https://robohash.org/accusantiumvoluptateseos.png", + "bloodGroup": "O−", + "height": 199, + "weight": 94.3, + "eyeColor": "Brown", + "hair": { "color": "Black", "type": "Curly" }, + "domain": "wix.com", + "ip": "75.75.234.243", + "address": { + "address": "1649 Timberridge Court", + "city": "Fayetteville", + "coordinates": { "lat": 36.084563, "lng": -94.206082 }, + "postalCode": "72704", + "state": "AR" + }, + "macAddress": "47:FA:F7:94:7B:5D", + "university": "Technical University of Mining and Metallurgy Ostrava", + "bank": { + "cardExpire": "05/24", + "cardNumber": "3574627048005672", + "cardType": "jcb", + "currency": "Koruna", + "iban": "SI81 7221 0344 9088 864" + }, + "company": { + "address": { + "address": "20930 Todd Valley Road", + "city": "Foresthill", + "coordinates": { "lat": 38.989466, "lng": -120.883108 }, + "postalCode": "95631", + "state": "CA" + }, + "department": "Sales", + "name": "Bogisich and Sons", + "title": "Operator" + }, + "ein": "92-8837697", + "ssn": "795-36-7752", + "userAgent": "Mozilla/5.0 (Windows NT 5.2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.813.0 Safari/535.1" + }, + { + "id": 18, + "firstName": "Arely", + "lastName": "Skiles", + "maidenName": "Monahan", + "age": 42, + "gender": "male", + "email": "sberminghamh@chron.com", + "phone": "+55 886 766 8617", + "username": "sberminghamh", + "password": "cAjfb8vg", + "birthDate": "1958-02-05", + "image": "https://robohash.org/nihilharumqui.png", + "bloodGroup": "AB−", + "height": 192, + "weight": 97, + "eyeColor": "Amber", + "hair": { "color": "Brown", "type": "Straight" }, + "domain": "seesaa.net", + "ip": "29.82.54.30", + "address": { + "address": "5461 West Shades Valley Drive", + "city": "Montgomery", + "coordinates": { "lat": 32.296422, "lng": -86.34280299999999 }, + "postalCode": "36108", + "state": "AL" + }, + "macAddress": "61:0C:8F:92:48:D5", + "university": "Universidade Estadual do Ceará", + "bank": { + "cardExpire": "09/24", + "cardNumber": "3578078357052002", + "cardType": "jcb", + "currency": "Real", + "iban": "FR79 7925 2903 77HF 2ZY6 TU4M T84" + }, + "company": { + "address": { + "address": "3162 Martin Luther King Junior Boulevard", + "city": "Fayetteville", + "coordinates": { "lat": 36.05233310000001, "lng": -94.2056987 }, + "postalCode": "72704", + "state": "AR" + }, + "department": "Support", + "name": "Metz Group", + "title": "VP Accounting" + }, + "ein": "55-4062919", + "ssn": "551-74-1349", + "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0" + }, + { + "id": 19, + "firstName": "Gust", + "lastName": "Purdy", + "maidenName": "Abshire", + "age": 46, + "gender": "male", + "email": "bleveragei@so-net.ne.jp", + "phone": "+86 886 889 0258", + "username": "bleveragei", + "password": "UZGAiqPqWQHQ", + "birthDate": "1989-10-15", + "image": "https://robohash.org/delenitipraesentiumvoluptatum.png", + "bloodGroup": "A−", + "height": 167, + "weight": 65.3, + "eyeColor": "Amber", + "hair": { "color": "Black", "type": "Straight" }, + "domain": "homestead.com", + "ip": "90.202.216.39", + "address": { + "address": "629 Debbie Drive", + "city": "Nashville", + "coordinates": { "lat": 36.208114, "lng": -86.58621199999999 }, + "postalCode": "37076", + "state": "TN" + }, + "macAddress": "22:98:8D:97:2D:AE", + "university": "Xinjiang University", + "bank": { + "cardExpire": "05/22", + "cardNumber": "5602214306858976", + "cardType": "bankcard", + "currency": "Yuan Renminbi", + "iban": "GB94 MOIU 1274 8449 9733 05" + }, + "company": { + "address": { + "address": "6463 Vrain Street", + "city": "Arvada", + "coordinates": { "lat": 39.814056, "lng": -105.046913 }, + "postalCode": "80003", + "state": "CO" + }, + "department": "Sales", + "name": "Bahringer, Auer and Wehner", + "title": "Financial Analyst" + }, + "ein": "53-7190545", + "ssn": "809-93-2422", + "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24" + }, + { + "id": 20, + "firstName": "Lenna", + "lastName": "Renner", + "maidenName": "Schumm", + "age": 41, + "gender": "female", + "email": "aeatockj@psu.edu", + "phone": "+1 904 601 7177", + "username": "aeatockj", + "password": "szWAG6hc", + "birthDate": "1980-01-19", + "image": "https://robohash.org/ipsumutofficiis.png", + "bloodGroup": "O−", + "height": 175, + "weight": 68, + "eyeColor": "Green", + "hair": { "color": "Black", "type": "Strands" }, + "domain": "sourceforge.net", + "ip": "59.43.194.22", + "address": { + "address": "22572 Toreador Drive", + "city": "Salinas", + "coordinates": { "lat": 36.602449, "lng": -121.699071 }, + "postalCode": "93908", + "state": "CA" + }, + "macAddress": "ED:64:AE:91:49:C9", + "university": "Moraine Valley Community College", + "bank": { + "cardExpire": "07/22", + "cardNumber": "3565173055875732", + "cardType": "jcb", + "currency": "Dollar", + "iban": "GT39 KL9Z CZYV XF26 UPYW SFPT H74U" + }, + "company": { + "address": { + "address": "491 Arabian Way", + "city": "Grand Junction", + "coordinates": { "lat": 39.07548999999999, "lng": -108.474785 }, + "postalCode": "81504", + "state": "CO" + }, + "department": "Support", + "name": "Hoppe Group", + "title": "Geologist III" + }, + "ein": "88-6715551", + "ssn": "389-03-0381", + "userAgent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/10.10 Chromium/12.0.702.0 Chrome/12.0.702.0 Safari/534.24" + }, + { + "id": 21, + "firstName": "Doyle", + "lastName": "Ernser", + "maidenName": "Feeney", + "age": 23, + "gender": "male", + "email": "ckensleyk@pen.io", + "phone": "+86 634 419 6839", + "username": "ckensleyk", + "password": "tq7kPXyf", + "birthDate": "1983-01-22", + "image": "https://robohash.org/providenttemporadelectus.png", + "bloodGroup": "A−", + "height": 173, + "weight": 69.9, + "eyeColor": "Brown", + "hair": { "color": "Black", "type": "Curly" }, + "domain": "free.fr", + "ip": "87.213.156.73", + "address": { + "address": "3034 Mica Street", + "city": "Fayetteville", + "coordinates": { "lat": 36.0807929, "lng": -94.2066449 }, + "postalCode": "72704", + "state": "AR" + }, + "macAddress": "E2:5A:A5:85:9B:6D", + "university": "Nanjing University of Traditional Chinese Medicine", + "bank": { + "cardExpire": "06/24", + "cardNumber": "30464640811198", + "cardType": "diners-club-carte-blanche", + "currency": "Yuan Renminbi", + "iban": "BE41 7150 0766 2980" + }, + "company": { + "address": { + "address": "5906 Milton Avenue", + "city": "Deale", + "coordinates": { "lat": 38.784451, "lng": -76.54125499999999 }, + "postalCode": "20751", + "state": "MD" + }, + "department": "Product Management", + "name": "Brekke Group", + "title": "Programmer Analyst I" + }, + "ein": "23-4116115", + "ssn": "562-46-9709", + "userAgent": "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3" + }, + { + "id": 22, + "firstName": "Tressa", + "lastName": "Weber", + "maidenName": "Williamson", + "age": 41, + "gender": "female", + "email": "froachel@howstuffworks.com", + "phone": "+34 517 104 6248", + "username": "froachel", + "password": "rfVSKImC", + "birthDate": "1987-11-11", + "image": "https://robohash.org/temporarecusandaeest.png", + "bloodGroup": "B−", + "height": 164, + "weight": 87.1, + "eyeColor": "Green", + "hair": { "color": "Black", "type": "Strands" }, + "domain": "indiatimes.com", + "ip": "71.57.235.192", + "address": { + "address": "3729 East Mission Boulevard", + "city": "Fayetteville", + "coordinates": { "lat": 36.0919353, "lng": -94.10654219999999 }, + "postalCode": "72703", + "state": "AR" + }, + "macAddress": "A4:8B:56:BC:ED:98", + "university": "Universitat Rámon Llull", + "bank": { + "cardExpire": "12/21", + "cardNumber": "342220243660686", + "cardType": "americanexpress", + "currency": "Euro", + "iban": "CY09 2675 2653 QNEJ JNSA 0E2V ONMM" + }, + "company": { + "address": { + "address": "8800 Cordell Circle", + "city": "Anchorage", + "coordinates": { "lat": 61.1409305, "lng": -149.9437822 }, + "postalCode": "99502", + "state": "AK" + }, + "department": "Research and Development", + "name": "Durgan Group", + "title": "VP Quality Control" + }, + "ein": "78-2846180", + "ssn": "155-87-0243", + "userAgent": "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; de-de) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16" + }, + { + "id": 23, + "firstName": "Felicity", + "lastName": "O'Reilly", + "maidenName": "Rosenbaum", + "age": 46, + "gender": "female", + "email": "beykelhofm@wikispaces.com", + "phone": "+63 919 564 1690", + "username": "beykelhofm", + "password": "zQwaHTHbuZyr", + "birthDate": "1967-10-05", + "image": "https://robohash.org/odioquivero.png", + "bloodGroup": "O−", + "height": 151, + "weight": 96.7, + "eyeColor": "Brown", + "hair": { "color": "Brown", "type": "Curly" }, + "domain": "tamu.edu", + "ip": "141.14.53.176", + "address": { + "address": "5114 Greentree Drive", + "city": "Nashville", + "coordinates": { "lat": 36.0618539, "lng": -86.738508 }, + "postalCode": "37211", + "state": "TN" + }, + "macAddress": "4D:AB:8D:9A:E5:02", + "university": "University of lloilo", + "bank": { + "cardExpire": "06/22", + "cardNumber": "6333837222395642", + "cardType": "switch", + "currency": "Peso", + "iban": "FR40 3929 7903 26S5 QL9A HUSV Z09" + }, + "company": { + "address": { + "address": "1770 Colony Way", + "city": "Fayetteville", + "coordinates": { "lat": 36.0867, "lng": -94.229754 }, + "postalCode": "72704", + "state": "AR" + }, + "department": "Legal", + "name": "Romaguera, Williamson and Kessler", + "title": "Assistant Manager" + }, + "ein": "92-4814248", + "ssn": "441-72-1229", + "userAgent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.872.0 Safari/535.2" + }, + { + "id": 24, + "firstName": "Jocelyn", + "lastName": "Schuster", + "maidenName": "Dooley", + "age": 19, + "gender": "male", + "email": "brickeardn@fema.gov", + "phone": "+7 968 462 1292", + "username": "brickeardn", + "password": "bMQnPttV", + "birthDate": "1966-06-02", + "image": "https://robohash.org/odiomolestiaealias.png", + "bloodGroup": "O+", + "height": 166, + "weight": 93.3, + "eyeColor": "Brown", + "hair": { "color": "Brown", "type": "Curly" }, + "domain": "pen.io", + "ip": "116.92.198.102", + "address": { + "address": "3466 Southview Avenue", + "city": "Montgomery", + "coordinates": { "lat": 32.341227, "lng": -86.2846859 }, + "postalCode": "36111", + "state": "AL" + }, + "macAddress": "AF:AA:20:8E:CA:CD", + "university": "Bashkir State Medical University", + "bank": { + "cardExpire": "11/21", + "cardNumber": "5007666357943463", + "cardType": "mastercard", + "currency": "Ruble", + "iban": "NL22 YBPM 0101 6695 08" + }, + "company": { + "address": { + "address": "80 North East Street", + "city": "Holyoke", + "coordinates": { "lat": 42.2041219, "lng": -72.5977704 }, + "postalCode": "01040", + "state": "MA" + }, + "department": "Product Management", + "name": "Wintheiser-Boehm", + "title": "Research Nurse" + }, + "ein": "77-6259466", + "ssn": "291-72-5526", + "userAgent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27" + }, + { + "id": 25, + "firstName": "Edwina", + "lastName": "Ernser", + "maidenName": "Kiehn", + "age": 21, + "gender": "female", + "email": "dfundello@amazon.co.jp", + "phone": "+86 376 986 8945", + "username": "dfundello", + "password": "k9zgV68UKw8m", + "birthDate": "2000-09-28", + "image": "https://robohash.org/doloremautdolores.png", + "bloodGroup": "O+", + "height": 180, + "weight": 102.1, + "eyeColor": "Blue", + "hair": { "color": "Brown", "type": "Wavy" }, + "domain": "apple.com", + "ip": "48.30.193.203", + "address": { + "address": "1513 Cathy Street", + "city": "Savannah", + "coordinates": { "lat": 32.067416, "lng": -81.125331 }, + "postalCode": "31415", + "state": "GA" + }, + "macAddress": "EC:59:D3:FC:65:92", + "university": "Wuhan University of Technology", + "bank": { + "cardExpire": "10/23", + "cardNumber": "3558628665594956", + "cardType": "jcb", + "currency": "Yuan Renminbi", + "iban": "RS85 6347 5884 2820 5764 23" + }, + "company": { + "address": { + "address": "125 John Street", + "city": "Santa Cruz", + "coordinates": { "lat": 36.950901, "lng": -122.046881 }, + "postalCode": "95060", + "state": "CA" + }, + "department": "Marketing", + "name": "Volkman Group", + "title": "Cost Accountant" + }, + "ein": "14-6307509", + "ssn": "266-43-5297", + "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3" + }, + { + "id": 26, + "firstName": "Griffin", + "lastName": "Braun", + "maidenName": "Deckow", + "age": 35, + "gender": "male", + "email": "lgronaverp@cornell.edu", + "phone": "+62 511 790 0161", + "username": "lgronaverp", + "password": "4a1dAKDv9KB9", + "birthDate": "1965-09-06", + "image": "https://robohash.org/laboriosammollitiaut.png", + "bloodGroup": "O−", + "height": 146, + "weight": 65.5, + "eyeColor": "Blue", + "hair": { "color": "Blond", "type": "Wavy" }, + "domain": "foxnews.com", + "ip": "93.246.47.59", + "address": { + "address": "600 West 19th Avenue", + "city": "Anchorage", + "coordinates": { "lat": 61.203115, "lng": -149.894107 }, + "postalCode": "99503", + "state": "AK" + }, + "macAddress": "34:06:26:95:37:D6", + "university": "Universitas Bojonegoro", + "bank": { + "cardExpire": "07/24", + "cardNumber": "3587188969123346", + "cardType": "jcb", + "currency": "Rupiah", + "iban": "AD24 9240 6903 OD2X OW1Y WD1K" + }, + "company": { + "address": { + "address": "1508 Massachusetts Avenue Southeast", + "city": "Washington", + "coordinates": { "lat": 38.887255, "lng": -76.98318499999999 }, + "postalCode": "20003", + "state": "DC" + }, + "department": "Engineering", + "name": "Boyle, Boyer and Lang", + "title": "Senior Cost Accountant" + }, + "ein": "38-0997138", + "ssn": "407-02-8915", + "userAgent": "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25" + }, + { + "id": 27, + "firstName": "Piper", + "lastName": "Schowalter", + "maidenName": "Wuckert", + "age": 47, + "gender": "female", + "email": "fokillq@amazon.co.jp", + "phone": "+60 785 960 7918", + "username": "fokillq", + "password": "xZnWSWnqH", + "birthDate": "1983-06-07", + "image": "https://robohash.org/nequeodiosapiente.png", + "bloodGroup": "A−", + "height": 197, + "weight": 71.5, + "eyeColor": "Brown", + "hair": { "color": "Black", "type": "Curly" }, + "domain": "toplist.cz", + "ip": "100.159.51.104", + "address": { + "address": "1208 Elkader Court North", + "city": "Nashville", + "coordinates": { "lat": 36.080049, "lng": -86.60116099999999 }, + "postalCode": "37013", + "state": "TN" + }, + "macAddress": "1F:42:5D:8C:66:3D", + "university": "Sultanah Bahiyah Polytechnic", + "bank": { + "cardExpire": "09/22", + "cardNumber": "6762169351744592", + "cardType": "maestro", + "currency": "Ringgit", + "iban": "BH05 STDW HECU HD4S L8U1 C6" + }, + "company": { + "address": { + "address": "600 West 19th Avenue", + "city": "Anchorage", + "coordinates": { "lat": 61.203115, "lng": -149.894107 }, + "postalCode": "99503", + "state": "AK" + }, + "department": "Human Resources", + "name": "O'Hara and Sons", + "title": "Sales Representative" + }, + "ein": "11-3129153", + "ssn": "408-90-5986", + "userAgent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36" + }, + { + "id": 28, + "firstName": "Kody", + "lastName": "Terry", + "maidenName": "Larkin", + "age": 28, + "gender": "male", + "email": "xisherwoodr@ask.com", + "phone": "+81 859 545 8951", + "username": "xisherwoodr", + "password": "HLDqN5vCF", + "birthDate": "1979-01-09", + "image": "https://robohash.org/consequunturabnon.png", + "bloodGroup": "B−", + "height": 172, + "weight": 90.2, + "eyeColor": "Blue", + "hair": { "color": "Brown", "type": "Wavy" }, + "domain": "elpais.com", + "ip": "51.102.180.216", + "address": { + "address": "210 Green Road", + "city": "Manchester", + "coordinates": { "lat": 41.7909099, "lng": -72.51195129999999 }, + "postalCode": "06042", + "state": "CT" + }, + "macAddress": "B4:B6:17:3C:41:E5", + "university": "Science University of Tokyo", + "bank": { + "cardExpire": "05/23", + "cardNumber": "201443655632569", + "cardType": "diners-club-enroute", + "currency": "Yen", + "iban": "GT70 4NNE RDSR 0AJV 6AQI 4XH1 RWOC" + }, + "company": { + "address": { + "address": "109 Summit Street", + "city": "Burlington", + "coordinates": { "lat": 44.4729749, "lng": -73.2026566 }, + "postalCode": "05401", + "state": "VT" + }, + "department": "Support", + "name": "Leffler, Beatty and Kilback", + "title": "Recruiting Manager" + }, + "ein": "09-1129306", + "ssn": "389-74-9456", + "userAgent": "Mozilla/6.0 (Macintosh; I; Intel Mac OS X 11_7_9; de-LI; rv:1.9b4) Gecko/2012010317 Firefox/10.0a4" + }, + { + "id": 29, + "firstName": "Macy", + "lastName": "Greenfelder", + "maidenName": "Koepp", + "age": 45, + "gender": "female", + "email": "jissetts@hostgator.com", + "phone": "+81 915 649 2384", + "username": "jissetts", + "password": "ePawWgrnZR8L", + "birthDate": "1976-09-07", + "image": "https://robohash.org/amettemporeea.png", + "bloodGroup": "A−", + "height": 166, + "weight": 93.7, + "eyeColor": "Amber", + "hair": { "color": "Black", "type": "Straight" }, + "domain": "ibm.com", + "ip": "197.37.13.163", + "address": { + "address": "49548 Road 200", + "city": "O'Neals", + "coordinates": { "lat": 37.153463, "lng": -119.648192 }, + "postalCode": "93645", + "state": "CA" + }, + "macAddress": "D7:14:C5:45:69:C1", + "university": "Fuji Women's College", + "bank": { + "cardExpire": "04/24", + "cardNumber": "633413352570887921", + "cardType": "solo", + "currency": "Yen", + "iban": "IS23 8410 4605 1294 9479 5900 11" + }, + "company": { + "address": { + "address": "5403 Illinois Avenue", + "city": "Nashville", + "coordinates": { "lat": 36.157077, "lng": -86.853827 }, + "postalCode": "37209", + "state": "TN" + }, + "department": "Product Management", + "name": "Bruen and Sons", + "title": "Structural Analysis Engineer" + }, + "ein": "31-6688179", + "ssn": "391-33-1550", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19" + }, + { + "id": 30, + "firstName": "Maurine", + "lastName": "Stracke", + "maidenName": "Abshire", + "age": 31, + "gender": "female", + "email": "kdulyt@umich.edu", + "phone": "+48 143 590 6847", + "username": "kdulyt", + "password": "5t6q4KC7O", + "birthDate": "1964-12-18", + "image": "https://robohash.org/perferendisideveniet.png", + "bloodGroup": "O−", + "height": 170, + "weight": 107.2, + "eyeColor": "Blue", + "hair": { "color": "Blond", "type": "Wavy" }, + "domain": "ow.ly", + "ip": "97.11.116.84", + "address": { + "address": "81 Seaton Place Northwest", + "city": "Washington", + "coordinates": { "lat": 38.9149499, "lng": -77.01170259999999 }, + "postalCode": "20001", + "state": "DC" + }, + "macAddress": "42:87:72:A1:4D:9A", + "university": "Poznan School of Banking", + "bank": { + "cardExpire": "02/24", + "cardNumber": "6331108070510590026", + "cardType": "switch", + "currency": "Zloty", + "iban": "MT70 MKRC 8244 59Z4 9UG1 1HY7 TKM6 1YX" + }, + "company": { + "address": { + "address": "816 West 19th Avenue", + "city": "Anchorage", + "coordinates": { "lat": 61.203221, "lng": -149.898655 }, + "postalCode": "99503", + "state": "AK" + }, + "department": "Support", + "name": "Balistreri-Kshlerin", + "title": "Quality Engineer" + }, + "ein": "51-7727524", + "ssn": "534-76-0952", + "userAgent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11" + } ] - } diff --git a/index.js b/index.js index 61ed538..5d61cbf 100644 --- a/index.js +++ b/index.js @@ -1,77 +1,15 @@ -const fs = require('fs'); -const index = fs.readFileSync('index.html', 'utf-8'); -const data = JSON.parse(fs.readFileSync('data.json', 'utf-8')); -const products = data.products; - const express = require('express'); const morgan = require('morgan'); const server = express(); +const productRouter = require('./routes/product') +const userRouter = require('./routes/user') //bodyParser server.use(express.json()); -server.use(morgan('default')) +server.use(morgan('default')); server.use(express.static('public')); - - - - -// API - Endpoint - Route - -// Products -// API ROOT , base URL, example - google.com/api/v2/ - -//Create POST /products C R U D -server.post('/products', (req, res) => { - console.log(req.body); - products.push(req.body); - res.status(201).json(req.body); -}); - - - -// Read GET /products -server.get('/products', (req, res) => { - res.json(products); -}); - -// Read GET /products/:id -server.get('/products/:id', (req, res) => { - const id = +req.params.id; - const product = products.find(p=>p.id===id) - res.json(product); -}); - -// Update PUT /products/:id -server.put('/products/:id', (req, res) => { - const id = +req.params.id; - const productIndex = products.findIndex(p=>p.id===id) - products.splice(productIndex,1,{...req.body, id:id}) - res.status(201).json(); -}); -// Update PATCH /products/:id -server.patch('/products/:id', (req, res) => { - const id = +req.params.id; - const productIndex = products.findIndex(p=>p.id===id) - const product = products[productIndex]; - products.splice(productIndex,1,{...product,...req.body}) - res.status(201).json(); -}); -// Delete DELETE /products/:id -server.delete('/products/:id', (req, res) => { - const id = +req.params.id; - const productIndex = products.findIndex(p=>p.id===id) - const product = products[productIndex]; - products.splice(productIndex,1) - res.status(201).json(product); -}); - - -server.get('/demo', (req, res) => { - // res.sendStatus(404); - // res.json(products) - // res.status(201).send('

hello

') - // res.sendFile('/Users/abhishekrathore/Desktop/node-app/index.html') -}); +server.use('/products',productRouter.router); +server.use('/users',userRouter.router); server.listen(8080, () => { console.log('server started'); diff --git a/routes/product.js b/routes/product.js new file mode 100644 index 0000000..5abf881 --- /dev/null +++ b/routes/product.js @@ -0,0 +1,14 @@ +const express = require('express'); +const productController = require('../controller/product'); + +const router = express.Router(); + +router + .post('/', productController.createProduct) + .get('/', productController.getAllProducts) + .get('/:id', productController.getProduct) + .put('/:id', productController.replaceProduct) + .patch('/:id', productController.updateProduct) + .delete('/:id', productController.deleteProduct); + +exports.router = router; \ No newline at end of file diff --git a/routes/user.js b/routes/user.js new file mode 100644 index 0000000..66a8c11 --- /dev/null +++ b/routes/user.js @@ -0,0 +1,14 @@ +const express = require('express'); +const userController = require('../controller/user'); + +const router = express.Router(); + +router + .post('/', userController.createUser) + .get('/', userController.getAllUsers) + .get('/:id', userController.getUser) + .put('/:id', userController.replaceUser) + .patch('/:id', userController.updateUser) + .delete('/:id', userController.deleteUser); + +exports.router = router; \ No newline at end of file From 3a9d37c852fdfef29fcd2d2f4b7c105e7b53b21a Mon Sep 17 00:00:00 2001 From: haiderGithubOfficial Date: Sat, 19 Aug 2023 20:28:12 +0500 Subject: [PATCH 6/7] learning-mongodb --- .env | 2 ++ index.js | 6 ++++-- package-lock.json | 29 +++++++++++++++++++++++++++++ package.json | 2 ++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..639b439 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +PORT=8080 +MONGO_PASSWORD=Haiderali_560 \ No newline at end of file diff --git a/index.js b/index.js index 5d61cbf..d7cdfce 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,4 @@ +require('dotenv').config(); const express = require('express'); const morgan = require('morgan'); const server = express(); @@ -8,9 +9,10 @@ const userRouter = require('./routes/user') server.use(express.json()); server.use(morgan('default')); server.use(express.static('public')); -server.use('/products',productRouter.router); -server.use('/users',userRouter.router); +server.use('/products', productRouter.router); +server.use('/users', userRouter.router); +console.log(process.env.MONGO_PASSWORD) server.listen(8080, () => { console.log('server started'); }); diff --git a/package-lock.json b/package-lock.json index afd0b4b..31c0ae8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,9 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "dotenv": "^16.3.1", "express": "^4.18.2", + "index": "^0.4.0", "morgan": "^1.10.0" } }, @@ -146,6 +148,17 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -312,6 +325,17 @@ "node": ">=0.10.0" } }, + "node_modules/index": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/index/-/index-0.4.0.tgz", + "integrity": "sha512-48AIN2XNXFXDb7muQD+4RZvXSy862VkXu5vkLh2zjikLOBWjI68OBUaRxt8ng1tolPlK9vrwMP/5th0VY53oNg==", + "dependencies": { + "step": ">= 0.0.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -595,6 +619,11 @@ "node": ">= 0.8" } }, + "node_modules/step": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/step/-/step-1.0.0.tgz", + "integrity": "sha512-sqFPUYBKa+XDdUz76UbHwUYP9eJ4i4aj/pm+4GkF1UQs5CcIdifZsGpyO3FASFv/ET2DtWLcrL8KfhjWwwwkfg==" + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", diff --git a/package.json b/package.json index 8d98c03..0ef8237 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,9 @@ "author": "", "license": "ISC", "dependencies": { + "dotenv": "^16.3.1", "express": "^4.18.2", + "index": "^0.4.0", "morgan": "^1.10.0" } } From 962c2344f4a2c16aa2ad96ad634cb6de7050dcc4 Mon Sep 17 00:00:00 2001 From: haiderGithubOfficial Date: Sun, 20 Aug 2023 19:00:23 +0500 Subject: [PATCH 7/7] rest-api-with-mongoose --- controller/product.js | 93 ++++++++++------ index.js | 10 ++ model/product.js | 17 +++ package-lock.json | 249 ++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 5 files changed, 338 insertions(+), 32 deletions(-) create mode 100644 model/product.js diff --git a/controller/product.js b/controller/product.js index 4493e39..50f9ed4 100644 --- a/controller/product.js +++ b/controller/product.js @@ -1,40 +1,69 @@ -const fs = require('fs'); -// const index = fs.readFileSync('index.html', 'utf-8'); -const data = JSON.parse(fs.readFileSync('data.json', 'utf-8')); -const products = data.products; +const model = require('../model/product') -exports.createProduct = (req, res) => { - console.log(req.body); - products.push(req.body); - res.status(201).json(req.body); -}; +console.log(model.Product); +const Product = model.Product; + +exports.createProduct = async (req, res) => { + try { + const product = new Product(req.body); + const dbResponse = await product.save(); + res.status(201).json(dbResponse); + } + catch (error) { + res.status(201).json(error); + } +} -exports.getAllProducts = (req, res) => { - res.json(products); +exports.getAllProducts = async (req, res) => { + try { + const dbResponse = await Product.find(); + res.status(201).json(dbResponse); + } + catch (error) { + res.status(201).json(error); + } }; -exports.getProduct = (req, res) => { - const id = +req.params.id; - const product = products.find((p) => p.id === id); - res.json(product); +exports.getProduct = async (req, res) => { + try { + const id = req.params.id; + const dbResponse = await Product.findById(id); + res.status(201).json(dbResponse); + } + catch (error) { + res.status(201).json(error); + } }; -exports.replaceProduct = (req, res) => { - const id = +req.params.id; - const productIndex = products.findIndex((p) => p.id === id); - products.splice(productIndex, 1, { ...req.body, id: id }); - res.status(201).json(); + +exports.replaceProduct = async (req, res) => { + try { + const id = req.params.id; + const dbResponse = await Product.findOneAndReplace({ _id: id }, req.body, { new: true }); + res.status(201).json(dbResponse); + } + catch (error) { + res.status(400).json(error); + } }; -exports.updateProduct = (req, res) => { - const id = +req.params.id; - const productIndex = products.findIndex((p) => p.id === id); - const product = products[productIndex]; - products.splice(productIndex, 1, { ...product, ...req.body }); - res.status(201).json(); + +exports.updateProduct = async (req, res) => { + try { + const id = req.params.id; + const dbResponse = await Product.findOneAndUpdate({ _id: id }, req.body, { new: true }); + res.status(201).json(dbResponse); + } + catch (error) { + res.status(400).json(error); + } }; -exports.deleteProduct = (req, res) => { - const id = +req.params.id; - const productIndex = products.findIndex((p) => p.id === id); - const product = products[productIndex]; - products.splice(productIndex, 1); - res.status(201).json(product); + +exports.deleteProduct = async (req, res) => { + try { + const id = req.params.id; + const dbResponse = await Product.findOneAndDelete({ _id: id }); + res.status(201).json(dbResponse); + } + catch (error) { + res.status(400).json(error); + } }; diff --git a/index.js b/index.js index d7cdfce..6bf5cbe 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,20 @@ require('dotenv').config(); const express = require('express'); const morgan = require('morgan'); +const mongoose = require('mongoose'); const server = express(); const productRouter = require('./routes/product') const userRouter = require('./routes/user') +main().catch((err) => console.log(err)) + +async function main() { + await mongoose.connect('mongodb+srv://haider:Haiderali_560@cluster0.otwulzw.mongodb.net/e-commerce?retryWrites=true&w=majority'); + console.log('connected') +} + + + //bodyParser server.use(express.json()); server.use(morgan('default')); diff --git a/model/product.js b/model/product.js new file mode 100644 index 0000000..ac8d418 --- /dev/null +++ b/model/product.js @@ -0,0 +1,17 @@ +const mongoose = require('mongoose'); + +const { Schema } = mongoose; + +const ProductSchema = new Schema({ + title: { type: String, required: true }, + description: String, + price: { type: Number, min: [0, 'Price should be greater than zero.'], required: true }, + discountPercentage: { type: Number, min: [0, 'wrong min value',], max: [50, 'wrong max value'] }, + rating: { type: Number, min: [0, 'wrong min rating'], max: [5, 'wrong max rating'] }, + brand: { type: String, required: true }, + category: { type: String, required: true }, + thumbnail: { type: String, required: true }, + images: [String] +}); + +exports.Product = mongoose.model('Product', ProductSchema) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 31c0ae8..4d39720 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,29 @@ "dotenv": "^16.3.1", "express": "^4.18.2", "index": "^0.4.0", + "mongoose": "^7.4.3", "morgan": "^1.10.0" } }, + "node_modules/@types/node": { + "version": "20.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", + "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -71,6 +91,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/bson": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", + "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", + "engines": { + "node": ">=14.20.1" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -341,6 +369,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -349,6 +382,14 @@ "node": ">= 0.10" } }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -357,6 +398,12 @@ "node": ">= 0.6" } }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -400,6 +447,81 @@ "node": ">= 0.6" } }, + "node_modules/mongodb": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz", + "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==", + "dependencies": { + "bson": "^5.4.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.201.0", + "@mongodb-js/zstd": "^1.1.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongoose": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.3.tgz", + "integrity": "sha512-eok0lW6mZJHK2vVSWyJb9tUfPMUuRF3h7YC4pU2K2/YSZBlNDUwvKsHgftMOANbokP2Ry+4ylvzAdW4KjkRFjw==", + "dependencies": { + "bson": "^5.4.0", + "kareem": "2.5.1", + "mongodb": "5.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -426,6 +548,46 @@ "node": ">= 0.8" } }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -491,6 +653,14 @@ "node": ">= 0.10" } }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -551,6 +721,18 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -611,6 +793,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -632,6 +850,17 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -667,6 +896,26 @@ "engines": { "node": ">= 0.8" } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } } } } diff --git a/package.json b/package.json index 0ef8237..86ef1d5 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "dotenv": "^16.3.1", "express": "^4.18.2", "index": "^0.4.0", + "mongoose": "^7.4.3", "morgan": "^1.10.0" } }