From 715e9f0ca0dd46bca15a75dfbce5ea705cd8cf08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaume=20Sol=C3=ADs?= Date: Thu, 11 Jan 2024 11:16:45 +0100 Subject: [PATCH 1/7] Creamos api en node para la conexion y cambios que pidio pablo --- .env | 4 + .gitignore | 1 + api/controller/product.controller.js | 58 + api/controller/products.json | 1657 +++++++++++++++++ api/index.html | 14 + api/index.js | 27 + api/package-lock.json | 951 ++++++++++ api/package.json | 15 + package-lock.json | 619 +++--- package.json | 38 +- public/assets/empty-img.jpg | Bin 0 -> 44064 bytes public/assets/empty-img.png | Bin 2846 -> 0 bytes quasar.config.js | 2 +- src/App.vue | 16 +- src/boot/axios.js | 6 +- src/boot/i18n.js | 2 +- src/components/@inputs/Calendar.vue | 123 +- src/components/@inputs/PostalCode.vue | 74 +- src/components/@inputs/PriceRange.vue | 30 +- src/components/@inputs/SortSelect.vue | 44 +- src/components/footer/FooterComponent.vue | 72 +- src/components/header/HeaderPrimary.vue | 50 +- src/components/header/HeaderSecondary.vue | 46 +- src/components/header/NavLinks.vue | 24 +- src/components/header/UserArea.vue | 73 +- .../carousel/ProductCarousel.vue | 24 +- .../carousel/VerticalCarouselImgs.vue | 91 +- .../dropdown/DropdownGroup.vue | 30 +- .../dropdown/DropdownItem.vue | 32 +- src/components/sections/DudasSection.vue | 34 +- src/components/sections/InfoSection.vue | 36 +- src/components/sections/QuestionSection.vue | 42 +- src/components/sections/ReasonsSection.vue | 52 +- src/components/swiper/Swiper.vue | 120 +- src/components/ui/Button.vue | 16 +- src/components/ui/Card.vue | 152 +- src/components/ui/Chat.vue | 18 +- src/components/ui/Container.vue | 20 +- src/components/ui/MobileNav.vue | 84 +- src/components/ui/Modal.vue | 93 +- src/components/ui/QuestionForm.vue | 134 +- src/components/ui/SendBanner.vue | 50 +- src/css/app.scss | 47 +- src/functions/quasarNotify.js | 35 + src/i18n/en-US/index.js | 3 - src/i18n/es/index.js | 4 + src/i18n/index.js | 4 + src/i18n/pt/index.js | 4 + src/layouts/CategoryLayout.vue | 38 +- src/layouts/CheckoutLayout.vue | 58 +- src/layouts/DefaultLayout.vue | 44 +- src/layouts/HomeLayout.vue | 62 +- src/mock/cards.js | 64 +- src/pages/CategoryPage.vue | 209 ++- src/pages/CheckoutPage.vue | 482 ++--- src/pages/ContactaPage.vue | 24 +- src/pages/ErrorNotFound.vue | 51 +- src/pages/ExamplePage.vue | 21 + src/pages/FaqPage.vue | 24 +- src/pages/HomePage.vue | 159 +- src/pages/ProductPage.vue | 285 ++- src/router/routes.js | 6 + src/services/json-server/db.json | 122 +- src/services/json-server/routes.json | 3 + src/stores/cart.js | 74 +- src/utils/zod/globalProperties.js | 4 +- src/utils/zod/schemas/checkoutSchema.js | 2 +- 67 files changed, 4973 insertions(+), 1830 deletions(-) create mode 100644 .env create mode 100644 api/controller/product.controller.js create mode 100644 api/controller/products.json create mode 100644 api/index.html create mode 100644 api/index.js create mode 100644 api/package-lock.json create mode 100644 api/package.json create mode 100644 public/assets/empty-img.jpg delete mode 100644 public/assets/empty-img.png create mode 100644 src/functions/quasarNotify.js create mode 100644 src/i18n/es/index.js create mode 100644 src/i18n/pt/index.js create mode 100644 src/pages/ExamplePage.vue create mode 100644 src/services/json-server/routes.json diff --git a/.env b/.env new file mode 100644 index 0000000..6bf2637 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +STRIPE_PUBLISHABLE_KEY='' +STRIPE_ACCOUNT='' +API_VERSION='' +LOCALE='' diff --git a/.gitignore b/.gitignore index 147199f..917c0b2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ node_modules # Quasar core related directories .quasar /dist +dist.rar /quasar.config.*.temporary.compiled* # Cordova related directories and files diff --git a/api/controller/product.controller.js b/api/controller/product.controller.js new file mode 100644 index 0000000..dff060a --- /dev/null +++ b/api/controller/product.controller.js @@ -0,0 +1,58 @@ + +const productsJson = require("./products.json") +class ProductController { + findAll(req, res) { + //Gerar produtos fake + /* const fakeProducts = generateFlowers(50) + console.log(fakeProducts); */ + const params = req.query; + let productsFilter = productsJson + + if (Number(params.featured)) { + productsFilter = productsFilter.filter(item => item.featured === Number(params.featured)) + } + /*let productsFilterPages = [] + + const totalItens = params?.itens ? Number(params.itens) : 200 + const productFilterItens = params?.itens ? products.slice(0, totalItens) : products + + + if (Number(params.itensPerPage) > 1) { + const itensPerPage = Number(params.itensPerPage) + const totalPages = Math.ceil(productFilterItens.length / itensPerPage) + for (let i = 1; i <= totalPages; i++) { + const startIndex = (i - 1) * itensPerPage; + const endIndex = i * itensPerPage; + const lastestIndex = endIndex > totalItens ? totalItens : endIndex + productsFilterPages.push({ + page: i, + itensPerProduct: lastestIndex - startIndex, + products: productFilterItens.slice(startIndex, lastestIndex) + }) + } + } + else { + productsFilterPages.push({ + page: 1, + itensPerProduct: totalItens, + products: productFilterItens + }) + } */ + + return res.status(200).send({ + data: productsFilter + }) + } + + findBySlug(req, res) { + const slug = req.params.slug + const products = productsJson + const filterSlug = products.filter(item => item.slug === slug) + + return res.status(200).send({ + data: filterSlug + }) + } +} + +module.exports = new ProductController(); \ No newline at end of file diff --git a/api/controller/products.json b/api/controller/products.json new file mode 100644 index 0000000..516a6c2 --- /dev/null +++ b/api/controller/products.json @@ -0,0 +1,1657 @@ +[ + { + "id": 1, + "name": "Ergonómico Algodón Pelota", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€113", + "specialPrice": "€37", + "slug": "978-0-330-96578-1", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/JH9dPie/640/480", + "https://picsum.photos/seed/h2KQG6yc/640/480", + "https://picsum.photos/seed/WFwyX/640/480" + ], + "featured": 1, + "position": 1 + }, + { + "id": 2, + "name": "Refinado Metal Pollo", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€126", + "specialPrice": "€53", + "slug": "978-0-9844558-6-7", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/yKV3gyI80/640/480", + "https://picsum.photos/seed/unHLnqP/640/480", + "https://picsum.photos/seed/53FPGjTYT/640/480", + "https://picsum.photos/seed/IFxZB6GXV/640/480", + "https://picsum.photos/seed/WPmRkW/640/480" + ], + "featured": 1, + "position": 2 + }, + { + "id": 3, + "name": "Práctico Madera Ensalada", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€200", + "specialPrice": "€25", + "slug": "978-1-154-04862-9", + "category": "Metal", + "images": [ + "https://picsum.photos/seed/2vUEN/640/480", + "https://picsum.photos/seed/961SDjaXH/640/480" + ], + "featured": 0 + }, + { + "id": 4, + "name": "Increible Hormigon Camiseta", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€93", + "specialPrice": "€56", + "slug": "978-1-213-72072-5", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/GBasmlrOV/640/480", + "https://picsum.photos/seed/LN6joo2/640/480", + "https://picsum.photos/seed/wWzbx4j/640/480", + "https://picsum.photos/seed/1Nz4ysU/640/480" + ], + "featured": 1 + }, + { + "id": 5, + "name": "Sorprendente Algodón Mesa", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€34", + "specialPrice": "€49", + "slug": "978-0-7392-6231-3", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/dUJLXmr0/640/480", + "https://picsum.photos/seed/yjPwsBW/640/480", + "https://picsum.photos/seed/8ZgcpeSB/640/480", + "https://picsum.photos/seed/8o9RQxgUMX/640/480", + "https://picsum.photos/seed/SBoKu/640/480", + "https://picsum.photos/seed/Vyw7g0bpx2/640/480" + ], + "featured": 1 + }, + { + "id": 6, + "name": "Rústico Madera Ensalada", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€194", + "specialPrice": "€40", + "slug": "978-1-284-04063-0", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/mQVUrz65d/640/480", + "https://picsum.photos/seed/igrWSfSZ/640/480", + "https://picsum.photos/seed/ciRaPt3/640/480", + "https://picsum.photos/seed/CuAhLLVWl/640/480", + "https://picsum.photos/seed/t0teUjmTTo/640/480" + ], + "featured": 0 + }, + { + "id": 7, + "name": "Rústico Hormigon Mesa", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€27", + "specialPrice": "€53", + "slug": "978-1-6690-4562-5", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/TSj7zu/640/480", + "https://picsum.photos/seed/JNzgCUxLj6/640/480", + "https://picsum.photos/seed/SkdNDb/640/480" + ], + "featured": 0 + }, + { + "id": 8, + "name": "Rústico Metal Coche", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€26", + "specialPrice": "€21", + "slug": "978-0-09-885523-2", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/0EGrrUV/640/480", + "https://picsum.photos/seed/u3mrd3X/640/480" + ], + "featured": 0 + }, + { + "id": 9, + "name": "Práctico Metal Zapatos", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€188", + "specialPrice": "€47", + "slug": "978-0-640-37623-9", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/MXwOY54Ry/640/480", + "https://picsum.photos/seed/m6pqab/640/480" + ], + "featured": 1, + "position": 9 + }, + { + "id": 10, + "name": "Artesanal Granito Silla", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€172", + "specialPrice": "€56", + "slug": "978-0-311-92573-5", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/oHexBP/640/480", + "https://picsum.photos/seed/8UiGRV9/640/480", + "https://picsum.photos/seed/zjDG05/640/480", + "https://picsum.photos/seed/KAMweQmv/640/480", + "https://picsum.photos/seed/XGkjTtJz11/640/480", + "https://picsum.photos/seed/EHj8KWsq/640/480" + ], + "featured": 0 + }, + { + "id": 11, + "name": "Guapo Acero Toallas", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€29", + "specialPrice": "€30", + "slug": "978-1-130-35237-5", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/YJaac93xt/640/480", + "https://picsum.photos/seed/A4EZfX/640/480", + "https://picsum.photos/seed/T1MpekqR6/640/480", + "https://picsum.photos/seed/zMkYSk/640/480" + ], + "featured": 1, + "position": 11 + }, + { + "id": 12, + "name": "Rústico Granito Ordenador", + "description": "Carbonite web goalkeeper gloves are ergonomically designed to give easy fit", + "price": "€29", + "specialPrice": "€55", + "slug": "978-1-5038-9221-7", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/PdHPjQ4/640/480", + "https://picsum.photos/seed/GgLv2V/640/480" + ], + "featured": 0, + "position": 12 + }, + { + "id": 13, + "name": "Pequeño Metal Zapatos", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€189", + "specialPrice": "€52", + "slug": "978-0-925111-78-4", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/hkFCx8pbe/640/480", + "https://picsum.photos/seed/Qfsgnonns/640/480", + "https://picsum.photos/seed/AqZQ4TaOUR/640/480", + "https://picsum.photos/seed/HAmupz5Nbt/640/480", + "https://picsum.photos/seed/ffq8pt/640/480", + "https://picsum.photos/seed/l3lPOlDBK4/640/480" + ], + "featured": 1, + "position": 13 + }, + { + "id": 14, + "name": "Increible Plástico Ensalada", + "description": "The beautiful range of Apple Naturalé that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients", + "price": "€128", + "specialPrice": "€44", + "slug": "978-0-688-36649-0", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/CVrt1Jr/640/480", + "https://picsum.photos/seed/2jXRVLjSW/640/480", + "https://picsum.photos/seed/AMjUQJD1CY/640/480", + "https://picsum.photos/seed/zoB2zfp3/640/480", + "https://picsum.photos/seed/6kBBSUUlw/640/480", + "https://picsum.photos/seed/P4JlwffPH1/640/480" + ], + "featured": 1 + }, + { + "id": 15, + "name": "Refinado Madera Ordenador", + "description": "Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals", + "price": "€39", + "specialPrice": "€44", + "slug": "978-0-409-27658-9", + "category": "Metal", + "images": [ + "https://picsum.photos/seed/s29CAI/640/480", + "https://picsum.photos/seed/jsZcD55W0/640/480", + "https://picsum.photos/seed/tUdhhDdC/640/480", + "https://picsum.photos/seed/guPuEND/640/480", + "https://picsum.photos/seed/0viAY2KY/640/480", + "https://picsum.photos/seed/VYaIS/640/480" + ], + "featured": 0, + "position": 15 + }, + { + "id": 16, + "name": "Rústico Hormigon Raton", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€106", + "specialPrice": "€57", + "slug": "978-0-02-263607-4", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/CkrAPMN9g/640/480", + "https://picsum.photos/seed/zEuKn/640/480", + "https://picsum.photos/seed/7hM2lmPbO/640/480" + ], + "featured": 0 + }, + { + "id": 17, + "name": "Inteligente Ladrillo Bicicleta", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€55", + "specialPrice": "€40", + "slug": "978-1-7355901-4-1", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/diRuMR/640/480", + "https://picsum.photos/seed/fttiI/640/480", + "https://picsum.photos/seed/ki1VfE/640/480", + "https://picsum.photos/seed/TAMSlnz/640/480", + "https://picsum.photos/seed/wdLpNEP4/640/480", + "https://picsum.photos/seed/RsdLp8/640/480" + ], + "featured": 1 + }, + { + "id": 18, + "name": "Artesanal Metal Coche", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€99", + "specialPrice": "€45", + "slug": "978-1-906950-21-7", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/RysYC4/640/480", + "https://picsum.photos/seed/5ZcMhN19/640/480", + "https://picsum.photos/seed/ZyBDo/640/480" + ], + "featured": 1 + }, + { + "id": 19, + "name": "Genérico Plástico Ensalada", + "description": "Carbonite web goalkeeper gloves are ergonomically designed to give easy fit", + "price": "€30", + "specialPrice": "€47", + "slug": "978-0-86565-724-3", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/NXofCcE87X/640/480", + "https://picsum.photos/seed/ksr2mqYZD/640/480", + "https://picsum.photos/seed/ezFMFEJ/640/480", + "https://picsum.photos/seed/Y56O06H8P/640/480" + ], + "featured": 0 + }, + { + "id": 20, + "name": "Inteligente Plástico Pescado", + "description": "Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals", + "price": "€88", + "specialPrice": "€35", + "slug": "978-1-59240-842-9", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/OiDjBii/640/480", + "https://picsum.photos/seed/hIjShLf/640/480", + "https://picsum.photos/seed/aqAtUHkQx/640/480", + "https://picsum.photos/seed/CRLEeLr/640/480" + ], + "featured": 1 + }, + { + "id": 21, + "name": "Guapa Madera Teclado", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€35", + "specialPrice": "€53", + "slug": "978-1-9860-7915-0", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/XEj5b15z/640/480", + "https://picsum.photos/seed/KAY5NGL/640/480" + ], + "featured": 0, + "position": 21 + }, + { + "id": 22, + "name": "Artesanal Acero Bacon", + "description": "The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design", + "price": "€24", + "specialPrice": "€42", + "slug": "978-0-574-04018-3", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/80cdm/640/480", + "https://picsum.photos/seed/XxeWG/640/480", + "https://picsum.photos/seed/dZdQhi3/640/480", + "https://picsum.photos/seed/ta9294/640/480", + "https://picsum.photos/seed/FJUDA1wZE/640/480", + "https://picsum.photos/seed/70zs5/640/480" + ], + "featured": 1 + }, + { + "id": 23, + "name": "Guapo Granito Teclado", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€127", + "specialPrice": "€43", + "slug": "978-0-8248-0927-0", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/1rYlrjKoZ/640/480", + "https://picsum.photos/seed/0BM4LLulDs/640/480", + "https://picsum.photos/seed/ckxYxdCV/640/480" + ], + "featured": 1 + }, + { + "id": 24, + "name": "Sabroso Madera Ordenador", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€130", + "specialPrice": "€25", + "slug": "978-0-7920-5668-3", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/URiMV6t8/640/480", + "https://picsum.photos/seed/nUgoe/640/480", + "https://picsum.photos/seed/1SAkJtnKW/640/480", + "https://picsum.photos/seed/JJ8wc/640/480" + ], + "featured": 1 + }, + { + "id": 25, + "name": "Sabroso Granito Pantalones", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€125", + "specialPrice": "€60", + "slug": "978-1-59233-540-4", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/eLxBcR/640/480", + "https://picsum.photos/seed/VsocYDcUz/640/480", + "https://picsum.photos/seed/xixdY8Z/640/480", + "https://picsum.photos/seed/Xrc7x2tZh/640/480" + ], + "featured": 0 + }, + { + "id": 26, + "name": "Genérico Plástico Pescado", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€35", + "specialPrice": "€26", + "slug": "978-0-7237-0947-3", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/0yzhikOlJ/640/480", + "https://picsum.photos/seed/08jlh/640/480", + "https://picsum.photos/seed/vtGSBFCJ/640/480", + "https://picsum.photos/seed/Stxuzcu/640/480", + "https://picsum.photos/seed/da2w0/640/480", + "https://picsum.photos/seed/Gl25k/640/480" + ], + "featured": 0 + }, + { + "id": 27, + "name": "Pequeño Granito Pelota", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€77", + "specialPrice": "€52", + "slug": "978-1-4765-9706-5", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/pdyXAHaTc/640/480", + "https://picsum.photos/seed/B0hEG/640/480", + "https://picsum.photos/seed/Otjhh1gHnP/640/480", + "https://picsum.photos/seed/PdriXTv5Sy/640/480", + "https://picsum.photos/seed/eIKDx/640/480", + "https://picsum.photos/seed/THcaI3/640/480" + ], + "featured": 1 + }, + { + "id": 28, + "name": "Guapa Ladrillo Salchichas", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€146", + "specialPrice": "€20", + "slug": "978-1-05-528016-6", + "category": "Metal", + "images": [ + "https://picsum.photos/seed/e4IPBmvS0B/640/480", + "https://picsum.photos/seed/hD6xKn/640/480" + ], + "featured": 1 + }, + { + "id": 29, + "name": "Práctico Plástico Bacon", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€72", + "specialPrice": "€51", + "slug": "978-1-01-345029-7", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/ZPev9Tpky/640/480", + "https://picsum.photos/seed/g7fB4EV4/640/480", + "https://picsum.photos/seed/QKeDRA/640/480" + ], + "featured": 0, + "position": 29 + }, + { + "id": 30, + "name": "Increible Granito Mesa", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€170", + "specialPrice": "€21", + "slug": "978-0-523-20890-9", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/duQVQ4/640/480", + "https://picsum.photos/seed/2mePIdCq/640/480", + "https://picsum.photos/seed/q6v0mpw9u/640/480", + "https://picsum.photos/seed/GiGOF7zpC/640/480", + "https://picsum.photos/seed/mzyVdeWqo4/640/480" + ], + "featured": 1, + "position": 30 + }, + { + "id": 31, + "name": "Refinado Hormigon Camiseta", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€155", + "specialPrice": "€32", + "slug": "978-0-454-04945-9", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/k574ZF/640/480", + "https://picsum.photos/seed/UFA26bigFx/640/480", + "https://picsum.photos/seed/oBgKK81j38/640/480", + "https://picsum.photos/seed/nTJHUM5y/640/480", + "https://picsum.photos/seed/QnMFukw8D/640/480", + "https://picsum.photos/seed/Z6YcL/640/480" + ], + "featured": 1 + }, + { + "id": 32, + "name": "Genérico Madera Bicicleta", + "description": "The beautiful range of Apple Naturalé that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients", + "price": "€132", + "specialPrice": "€38", + "slug": "978-1-86557-977-1", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/MbKHRq8T/640/480", + "https://picsum.photos/seed/msQwQJx/640/480", + "https://picsum.photos/seed/JXEas/640/480", + "https://picsum.photos/seed/NN3adg7L/640/480", + "https://picsum.photos/seed/qikAoPBvO1/640/480" + ], + "featured": 1, + "position": 32 + }, + { + "id": 33, + "name": "Práctico Madera Queso", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€34", + "specialPrice": "€56", + "slug": "978-0-356-07329-3", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/A6WRMpPu2/640/480", + "https://picsum.photos/seed/ncQLYI/640/480", + "https://picsum.photos/seed/vChXR1xG7/640/480", + "https://picsum.photos/seed/Z8EVc6QGGU/640/480" + ], + "featured": 0 + }, + { + "id": 34, + "name": "Inteligente Algodón Guantes", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€55", + "specialPrice": "€37", + "slug": "978-0-04-972352-8", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/TOSHa5/640/480", + "https://picsum.photos/seed/BNZhhu6/640/480", + "https://picsum.photos/seed/HDZoRLb/640/480", + "https://picsum.photos/seed/ZgKkO2PpJ/640/480" + ], + "featured": 0, + "position": 34 + }, + { + "id": 35, + "name": "Ergonómico Acero Salchichas", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€141", + "specialPrice": "€27", + "slug": "978-0-08-608001-1", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/oxH2yAf/640/480", + "https://picsum.photos/seed/FAQ5A5r/640/480", + "https://picsum.photos/seed/MFncPF/640/480" + ], + "featured": 0, + "position": 35 + }, + { + "id": 36, + "name": "Artesanal Granito Gorro", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€57", + "specialPrice": "€25", + "slug": "978-0-9921971-3-1", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/6zhKBTYMN/640/480", + "https://picsum.photos/seed/tCCkWoRr7/640/480" + ], + "featured": 1, + "position": 36 + }, + { + "id": 37, + "name": "Práctico Plástico Pescado", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€99", + "specialPrice": "€39", + "slug": "978-0-501-95656-3", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/mCm0n0y/640/480", + "https://picsum.photos/seed/MUnxdH/640/480", + "https://picsum.photos/seed/9p9aBGLmP/640/480", + "https://picsum.photos/seed/MlHX6K/640/480", + "https://picsum.photos/seed/CG4E6Q/640/480" + ], + "featured": 0 + }, + { + "id": 38, + "name": "Guapa Ladrillo Bacon", + "description": "The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design", + "price": "€135", + "specialPrice": "€34", + "slug": "978-1-7243-9214-5", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/Ds9sWe/640/480", + "https://picsum.photos/seed/WSVQQu6/640/480", + "https://picsum.photos/seed/MeMyYy5YDF/640/480", + "https://picsum.photos/seed/PEXYiKp/640/480", + "https://picsum.photos/seed/eBq22t/640/480" + ], + "featured": 0, + "position": 38 + }, + { + "id": 39, + "name": "Sabroso Madera Pollo", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€139", + "specialPrice": "€22", + "slug": "978-1-879998-53-7", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/Whxgwy/640/480", + "https://picsum.photos/seed/anXq6D/640/480", + "https://picsum.photos/seed/Tj11xyyg/640/480", + "https://picsum.photos/seed/6Xljd/640/480", + "https://picsum.photos/seed/SFUXc/640/480" + ], + "featured": 0, + "position": 39 + }, + { + "id": 40, + "name": "Ergonómico Ladrillo Camiseta", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€141", + "specialPrice": "€43", + "slug": "978-0-9698137-8-1", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/7vD0Q5PW/640/480", + "https://picsum.photos/seed/7P2pqCEW93/640/480", + "https://picsum.photos/seed/WmW1I31fP/640/480", + "https://picsum.photos/seed/6wzLMm/640/480" + ], + "featured": 0 + }, + { + "id": 41, + "name": "Refinado Plástico Coche", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€102", + "specialPrice": "€33", + "slug": "978-1-133-53369-6", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/0OR9k/640/480", + "https://picsum.photos/seed/kjIEOLUzQ/640/480", + "https://picsum.photos/seed/p8thZFYeSp/640/480", + "https://picsum.photos/seed/Hb8bx4f/640/480", + "https://picsum.photos/seed/81XIMa/640/480", + "https://picsum.photos/seed/LaE8OGZ9a/640/480" + ], + "featured": 0, + "position": 41 + }, + { + "id": 42, + "name": "Ergonómico Granito Ensalada", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€103", + "specialPrice": "€29", + "slug": "978-0-09-633154-7", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/imIuNqd/640/480", + "https://picsum.photos/seed/2RmRIXY/640/480", + "https://picsum.photos/seed/0KciB/640/480", + "https://picsum.photos/seed/3dzqm/640/480", + "https://picsum.photos/seed/jhHsUu/640/480" + ], + "featured": 1 + }, + { + "id": 43, + "name": "Guapa Metal Silla", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€31", + "specialPrice": "€50", + "slug": "978-1-0380-4389-4", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/DC182cBdF/640/480", + "https://picsum.photos/seed/M7tGNzV/640/480", + "https://picsum.photos/seed/efurDAA/640/480", + "https://picsum.photos/seed/0Xzzdjm/640/480" + ], + "featured": 0 + }, + { + "id": 44, + "name": "Fantástico Ladrillo Camiseta", + "description": "The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J", + "price": "€103", + "specialPrice": "€33", + "slug": "978-1-4693-6281-6", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/Yt4cYSCxv/640/480", + "https://picsum.photos/seed/ZkxwK1/640/480", + "https://picsum.photos/seed/mPWqzNqec0/640/480" + ], + "featured": 1, + "position": 44 + }, + { + "id": 45, + "name": "Artesanal Hormigon Zapatos", + "description": "The beautiful range of Apple Naturalé that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients", + "price": "€63", + "specialPrice": "€23", + "slug": "978-1-4218-4339-1", + "category": "Metal", + "images": [ + "https://picsum.photos/seed/kwQSxn/640/480", + "https://picsum.photos/seed/iTyV0EB/640/480" + ], + "featured": 0 + }, + { + "id": 46, + "name": "Pequeño Ladrillo Pescado", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€34", + "specialPrice": "€57", + "slug": "978-0-8149-0652-1", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/qb7Ay/640/480", + "https://picsum.photos/seed/ZOZvZYM/640/480", + "https://picsum.photos/seed/E7b3w5PKLH/640/480", + "https://picsum.photos/seed/hBT9v/640/480", + "https://picsum.photos/seed/fGexUqzE6z/640/480" + ], + "featured": 0, + "position": 46 + }, + { + "id": 47, + "name": "Hecho a mano Metal Teclado", + "description": "The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J", + "price": "€161", + "specialPrice": "€35", + "slug": "978-1-5024-1777-0", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/FG2OSE56/640/480", + "https://picsum.photos/seed/59oCcFx/640/480", + "https://picsum.photos/seed/UkLPf/640/480", + "https://picsum.photos/seed/flqpbUJdwD/640/480", + "https://picsum.photos/seed/L6EriVd/640/480" + ], + "featured": 0 + }, + { + "id": 48, + "name": "Práctico Algodón Mesa", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€84", + "specialPrice": "€36", + "slug": "978-0-7038-8227-1", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/pgB553/640/480", + "https://picsum.photos/seed/ARKR3t8qi0/640/480", + "https://picsum.photos/seed/rmpuznUaGy/640/480" + ], + "featured": 0, + "position": 48 + }, + { + "id": 49, + "name": "Ergonómico Metal Guantes", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€155", + "specialPrice": "€24", + "slug": "978-1-122-52014-0", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/3sbOBdZ8sJ/640/480", + "https://picsum.photos/seed/ni0yXqnnXd/640/480", + "https://picsum.photos/seed/1jylbk/640/480", + "https://picsum.photos/seed/jpSoMNFK/640/480" + ], + "featured": 1 + }, + { + "id": 50, + "name": "Genérico Granito Gorro", + "description": "The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J", + "price": "€173", + "specialPrice": "€26", + "slug": "978-1-63419-529-4", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/ZGDcLErJ/640/480", + "https://picsum.photos/seed/cxJx8a/640/480", + "https://picsum.photos/seed/x6v2z/640/480" + ], + "featured": 1, + "position": 50 + }, + { + "id": 51, + "name": "Sorprendente Acero Raton", + "description": "The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design", + "price": "€149", + "specialPrice": "€35", + "slug": "978-1-324-75375-9", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/M2xs9P62sl/640/480", + "https://picsum.photos/seed/CRa7ExrLU/640/480", + "https://picsum.photos/seed/xgnpN/640/480", + "https://picsum.photos/seed/Sp1T7xgMt/640/480", + "https://picsum.photos/seed/2qSQxPrW/640/480" + ], + "featured": 1 + }, + { + "id": 52, + "name": "Increible Ladrillo Salchichas", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€81", + "specialPrice": "€52", + "slug": "978-1-77863-300-3", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/kjzU5MY/640/480", + "https://picsum.photos/seed/y1UFM8/640/480", + "https://picsum.photos/seed/81diG0J7aS/640/480" + ], + "featured": 1 + }, + { + "id": 53, + "name": "Rústico Ladrillo Gorro", + "description": "The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J", + "price": "€193", + "specialPrice": "€23", + "slug": "978-1-86340-267-5", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/6iCZbb/640/480", + "https://picsum.photos/seed/ylPLAL/640/480", + "https://picsum.photos/seed/gdxzNIfU2/640/480" + ], + "featured": 0, + "position": 53 + }, + { + "id": 54, + "name": "Hecho a mano Hormigon Guantes", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€159", + "specialPrice": "€28", + "slug": "978-1-3996-9414-8", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/8WAmX/640/480", + "https://picsum.photos/seed/bnIeqQPA/640/480", + "https://picsum.photos/seed/Ksxetz/640/480" + ], + "featured": 1 + }, + { + "id": 55, + "name": "Sorprendente Granito Salchichas", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€134", + "specialPrice": "€29", + "slug": "978-1-56934-754-6", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/8BkyWVEm/640/480", + "https://picsum.photos/seed/cGBzP/640/480", + "https://picsum.photos/seed/fowsh6YxI/640/480", + "https://picsum.photos/seed/E6YjYtzON/640/480" + ], + "featured": 1, + "position": 55 + }, + { + "id": 56, + "name": "Fantástico Granito Pescado", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€125", + "specialPrice": "€32", + "slug": "978-0-905647-64-7", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/uW2tjq/640/480", + "https://picsum.photos/seed/fpx0K2hClm/640/480", + "https://picsum.photos/seed/G2gAmZl1/640/480" + ], + "featured": 1, + "position": 56 + }, + { + "id": 57, + "name": "Sabroso Algodón Pizza", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€186", + "specialPrice": "€33", + "slug": "978-1-972153-22-2", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/ygZhwPZi8y/640/480", + "https://picsum.photos/seed/pWOwZnYloo/640/480", + "https://picsum.photos/seed/TQ6r2/640/480", + "https://picsum.photos/seed/1Zqd64/640/480", + "https://picsum.photos/seed/Is00Ch/640/480" + ], + "featured": 0, + "position": 57 + }, + { + "id": 58, + "name": "Guapa Plástico Pollo", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€135", + "specialPrice": "€21", + "slug": "978-1-182-41595-0", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/pjiW2/640/480", + "https://picsum.photos/seed/WJ9BV/640/480", + "https://picsum.photos/seed/CbsJe/640/480", + "https://picsum.photos/seed/KjckmCzV8s/640/480", + "https://picsum.photos/seed/eskOEZdU/640/480", + "https://picsum.photos/seed/ErZTlTk/640/480" + ], + "featured": 1, + "position": 58 + }, + { + "id": 59, + "name": "Guapa Plástico Silla", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€164", + "specialPrice": "€40", + "slug": "978-1-931439-56-5", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/J3OPDtC/640/480", + "https://picsum.photos/seed/NmYYYFQ/640/480", + "https://picsum.photos/seed/IoFUC/640/480", + "https://picsum.photos/seed/c2cyddMfl/640/480", + "https://picsum.photos/seed/eFrB6qIjUW/640/480", + "https://picsum.photos/seed/WGPPJRAA/640/480" + ], + "featured": 1 + }, + { + "id": 60, + "name": "Práctico Hormigon Ordenador", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€49", + "specialPrice": "€55", + "slug": "978-1-341-37261-2", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/nVqFbeY4x/640/480", + "https://picsum.photos/seed/lKI8qAQ/640/480", + "https://picsum.photos/seed/JD5TJaIjQ/640/480" + ], + "featured": 1, + "position": 60 + }, + { + "id": 61, + "name": "Sabroso Metal Bicicleta", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€128", + "specialPrice": "€32", + "slug": "978-0-394-68287-7", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/Pop9JS/640/480", + "https://picsum.photos/seed/OFEHeOa/640/480", + "https://picsum.photos/seed/M8ERCNt/640/480", + "https://picsum.photos/seed/YPfgIzBS/640/480", + "https://picsum.photos/seed/9Na65C/640/480", + "https://picsum.photos/seed/sPSDNTA/640/480" + ], + "featured": 1, + "position": 61 + }, + { + "id": 62, + "name": "Pequeño Granito Toallas", + "description": "Ergonomic executive chair upholstered in bonded black leather and PVC padded seat and back for all-day comfort and support", + "price": "€98", + "specialPrice": "€50", + "slug": "978-1-297-18741-4", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/8EHPFzjYLH/640/480", + "https://picsum.photos/seed/w5oufa3I7/640/480" + ], + "featured": 0, + "position": 62 + }, + { + "id": 63, + "name": "Refinado Algodón Raton", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€188", + "specialPrice": "€52", + "slug": "978-1-248-31968-0", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/PClre/640/480", + "https://picsum.photos/seed/Z0uDbtB7JZ/640/480", + "https://picsum.photos/seed/OUfrTW70Vx/640/480", + "https://picsum.photos/seed/VHiyb2g1cW/640/480", + "https://picsum.photos/seed/NzyF4/640/480" + ], + "featured": 0, + "position": 63 + }, + { + "id": 64, + "name": "Inteligente Hormigon Mesa", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€108", + "specialPrice": "€49", + "slug": "978-1-75861-031-4", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/XHdVeBnj/640/480", + "https://picsum.photos/seed/kZSCq/640/480", + "https://picsum.photos/seed/vQTDdeXd/640/480", + "https://picsum.photos/seed/cOH7BtlSf/640/480", + "https://picsum.photos/seed/zlrJQRM/640/480", + "https://picsum.photos/seed/uqFiQEoI/640/480" + ], + "featured": 1, + "position": 64 + }, + { + "id": 65, + "name": "Guapa Ladrillo Bicicleta", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€181", + "specialPrice": "€45", + "slug": "978-1-900795-68-5", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/zSs9gnFWLK/640/480", + "https://picsum.photos/seed/J6TtOvU/640/480", + "https://picsum.photos/seed/NDSwG8/640/480" + ], + "featured": 0 + }, + { + "id": 66, + "name": "Artesanal Granito Ordenador", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€135", + "specialPrice": "€30", + "slug": "978-1-4837-9777-9", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/VqZN8f/640/480", + "https://picsum.photos/seed/gpPzgr9GI/640/480", + "https://picsum.photos/seed/NkV5la64/640/480" + ], + "featured": 0 + }, + { + "id": 67, + "name": "Inteligente Acero Ordenador", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€71", + "specialPrice": "€29", + "slug": "978-0-7356-8288-7", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/kOyE3a/640/480", + "https://picsum.photos/seed/C6vjXTxc/640/480", + "https://picsum.photos/seed/UcgTO/640/480", + "https://picsum.photos/seed/OpgakRKqy/640/480", + "https://picsum.photos/seed/OOAntuhFI/640/480" + ], + "featured": 1 + }, + { + "id": 68, + "name": "Hecho a mano Metal Ordenador", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€96", + "specialPrice": "€41", + "slug": "978-1-78363-216-9", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/tp3YatJ/640/480", + "https://picsum.photos/seed/FLOHDmkMu8/640/480" + ], + "featured": 0, + "position": 68 + }, + { + "id": 69, + "name": "Pequeño Madera Patatas fritas", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€127", + "specialPrice": "€59", + "slug": "978-0-03-001557-1", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/xO3HsGJA/640/480", + "https://picsum.photos/seed/IFWQSQM5/640/480" + ], + "featured": 0, + "position": 69 + }, + { + "id": 70, + "name": "Ergonómico Madera Bacon", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€161", + "specialPrice": "€49", + "slug": "978-0-594-66216-7", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/DPbyAPR/640/480", + "https://picsum.photos/seed/8ncEc/640/480", + "https://picsum.photos/seed/XLuu6Y/640/480" + ], + "featured": 0 + }, + { + "id": 71, + "name": "Hecho a mano Metal Patatas fritas", + "description": "Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals", + "price": "€46", + "specialPrice": "€60", + "slug": "978-1-81286-751-7", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/UAzkHS/640/480", + "https://picsum.photos/seed/AAdVugUL/640/480", + "https://picsum.photos/seed/lSmOoZBn/640/480" + ], + "featured": 1, + "position": 71 + }, + { + "id": 72, + "name": "Artesanal Plástico Mesa", + "description": "The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J", + "price": "€38", + "specialPrice": "€41", + "slug": "978-1-57541-212-2", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/yD0k3/640/480", + "https://picsum.photos/seed/MlD5NtKd/640/480", + "https://picsum.photos/seed/u9lFXo/640/480", + "https://picsum.photos/seed/8l3UAYUE7j/640/480", + "https://picsum.photos/seed/25wmeS4cZ/640/480", + "https://picsum.photos/seed/tFAXpIwgTE/640/480" + ], + "featured": 1 + }, + { + "id": 73, + "name": "Ergonómico Acero Zapatos", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€68", + "specialPrice": "€46", + "slug": "978-1-005-35954-6", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/mbwCRFAew/640/480", + "https://picsum.photos/seed/ta8ijA2MN/640/480", + "https://picsum.photos/seed/R8Pib/640/480", + "https://picsum.photos/seed/dQqKGqD8f7/640/480", + "https://picsum.photos/seed/5GDDu4/640/480", + "https://picsum.photos/seed/0hi1MXbLO/640/480" + ], + "featured": 1, + "position": 73 + }, + { + "id": 74, + "name": "Guapa Granito Ordenador", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€66", + "specialPrice": "€50", + "slug": "978-1-123-88585-9", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/LZf92bGP/640/480", + "https://picsum.photos/seed/2uz8Dpzd5/640/480", + "https://picsum.photos/seed/sEeBljThC8/640/480", + "https://picsum.photos/seed/1gRLel745/640/480", + "https://picsum.photos/seed/vtCnxcK/640/480" + ], + "featured": 0, + "position": 74 + }, + { + "id": 75, + "name": "Inteligente Algodón Pescado", + "description": "The beautiful range of Apple Naturalé that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients", + "price": "€100", + "specialPrice": "€51", + "slug": "978-1-05-905419-0", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/IxIVn/640/480", + "https://picsum.photos/seed/BF0VlxE/640/480", + "https://picsum.photos/seed/oapFmVBF/640/480", + "https://picsum.photos/seed/paJHu7/640/480" + ], + "featured": 0, + "position": 75 + }, + { + "id": 76, + "name": "Guapo Acero Coche", + "description": "The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design", + "price": "€90", + "specialPrice": "€42", + "slug": "978-0-583-06252-7", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/XnB4aWpz/640/480", + "https://picsum.photos/seed/myJ7f/640/480", + "https://picsum.photos/seed/PcFcEsb/640/480", + "https://picsum.photos/seed/SrIJi/640/480" + ], + "featured": 0 + }, + { + "id": 77, + "name": "Sabroso Hormigon Gorro", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€108", + "specialPrice": "€38", + "slug": "978-0-944577-98-1", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/y6lzJkKkuG/640/480", + "https://picsum.photos/seed/zRhN87T7/640/480" + ], + "featured": 1, + "position": 77 + }, + { + "id": 78, + "name": "Genérico Hormigon Guantes", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€119", + "specialPrice": "€55", + "slug": "978-0-02-315165-1", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/KWa9XIZ/640/480", + "https://picsum.photos/seed/6pyMtw/640/480", + "https://picsum.photos/seed/e6qodt/640/480", + "https://picsum.photos/seed/FgKc77VYNJ/640/480" + ], + "featured": 1 + }, + { + "id": 79, + "name": "Genérico Hormigon Patatas fritas", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€89", + "specialPrice": "€21", + "slug": "978-1-183-99370-9", + "category": "Metal", + "images": [ + "https://picsum.photos/seed/4bsms/640/480", + "https://picsum.photos/seed/7zX3VnnFLc/640/480", + "https://picsum.photos/seed/MRSBKn16/640/480", + "https://picsum.photos/seed/gT8HAbfozo/640/480", + "https://picsum.photos/seed/kmGYj4uX/640/480", + "https://picsum.photos/seed/ujVI1Jtr/640/480" + ], + "featured": 1, + "position": 79 + }, + { + "id": 80, + "name": "Fantástico Hormigon Salchichas", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€149", + "specialPrice": "€50", + "slug": "978-1-9737-1486-6", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/A5WYCJbA/640/480", + "https://picsum.photos/seed/1QDFgoiz/640/480", + "https://picsum.photos/seed/SWjsy/640/480", + "https://picsum.photos/seed/nFaBD/640/480" + ], + "featured": 0, + "position": 80 + }, + { + "id": 81, + "name": "Genérico Acero Ordenador", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€172", + "specialPrice": "€22", + "slug": "978-1-6975-6930-8", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/HqJlb/640/480", + "https://picsum.photos/seed/hmesQ2rjLz/640/480", + "https://picsum.photos/seed/s6Mor/640/480", + "https://picsum.photos/seed/Trthhmo1J4/640/480" + ], + "featured": 1, + "position": 81 + }, + { + "id": 82, + "name": "Sorprendente Granito Sopa", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€21", + "specialPrice": "€37", + "slug": "978-0-08-728984-0", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/hGiUg/640/480", + "https://picsum.photos/seed/cglme/640/480", + "https://picsum.photos/seed/HRFf6n5/640/480", + "https://picsum.photos/seed/SQ2Tfv2FZ/640/480" + ], + "featured": 0 + }, + { + "id": 83, + "name": "Fantástico Ladrillo Pantalones", + "description": "The beautiful range of Apple Naturalé that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients", + "price": "€47", + "specialPrice": "€53", + "slug": "978-1-218-66481-9", + "category": "Madera", + "images": [ + "https://picsum.photos/seed/3iNKb47jVR/640/480", + "https://picsum.photos/seed/jojjveYE/640/480", + "https://picsum.photos/seed/tj5eAM5rT/640/480", + "https://picsum.photos/seed/gCsMt/640/480" + ], + "featured": 0, + "position": 83 + }, + { + "id": 84, + "name": "Ergonómico Madera Teclado", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€169", + "specialPrice": "€22", + "slug": "978-0-679-81348-4", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/UtjQy/640/480", + "https://picsum.photos/seed/1KCHfF6tuf/640/480", + "https://picsum.photos/seed/ZAGrr5U/640/480", + "https://picsum.photos/seed/OqQaNND/640/480", + "https://picsum.photos/seed/VzdyH/640/480" + ], + "featured": 0, + "position": 84 + }, + { + "id": 85, + "name": "Guapo Acero Sopa", + "description": "The slim & simple Maple Gaming Keyboard from Dev Byte comes with a sleek body and 7- Color RGB LED Back-lighting for smart functionality", + "price": "€165", + "specialPrice": "€39", + "slug": "978-1-4971-9271-3", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/7cJAXY7YgC/640/480", + "https://picsum.photos/seed/j1hxqljXd/640/480" + ], + "featured": 0 + }, + { + "id": 86, + "name": "Artesanal Hormigon Pizza", + "description": "The Nagasaki Lander is the trademarked name of several series of Nagasaki sport bikes, that started with the 1984 ABC800J", + "price": "€146", + "specialPrice": "€59", + "slug": "978-1-208-99565-7", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/TwcwlqBRs/640/480", + "https://picsum.photos/seed/wjVVcxqpE/640/480", + "https://picsum.photos/seed/b3jqK1QxSo/640/480", + "https://picsum.photos/seed/i9EKiBjLS/640/480", + "https://picsum.photos/seed/JFj1G/640/480", + "https://picsum.photos/seed/jpHibCB0/640/480" + ], + "featured": 1 + }, + { + "id": 87, + "name": "Pequeño Ladrillo Queso", + "description": "The beautiful range of Apple Naturalé that has an exciting mix of natural ingredients. With the Goodness of 100% Natural Ingredients", + "price": "€81", + "specialPrice": "€20", + "slug": "978-0-85268-200-5", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/Tk0ky3b/640/480", + "https://picsum.photos/seed/ykM95k0/640/480" + ], + "featured": 1 + }, + { + "id": 88, + "name": "Sabroso Granito Pelota", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€137", + "specialPrice": "€53", + "slug": "978-1-139-33774-8", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/FS46tC/640/480", + "https://picsum.photos/seed/VKVWlzG/640/480", + "https://picsum.photos/seed/JCupotSG4/640/480", + "https://picsum.photos/seed/ZgMcaWQ/640/480", + "https://picsum.photos/seed/rxDJdZ5YhG/640/480", + "https://picsum.photos/seed/YBSbF52/640/480" + ], + "featured": 0 + }, + { + "id": 89, + "name": "Artesanal Plástico Pollo", + "description": "Boston's most advanced compression wear technology increases muscle oxygenation, stabilizes active muscles", + "price": "€113", + "specialPrice": "€24", + "slug": "978-0-622-48993-3", + "category": "Acero", + "images": [ + "https://picsum.photos/seed/I1Hdq/640/480", + "https://picsum.photos/seed/gml38gVes9/640/480" + ], + "featured": 0 + }, + { + "id": 90, + "name": "Refinado Algodón Pollo", + "description": "The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design", + "price": "€159", + "specialPrice": "€54", + "slug": "978-0-212-43855-6", + "category": "Metal", + "images": [ + "https://picsum.photos/seed/OYtsqcLt/640/480", + "https://picsum.photos/seed/dIR0VA/640/480", + "https://picsum.photos/seed/j2VMki/640/480", + "https://picsum.photos/seed/oAUJizLD/640/480" + ], + "featured": 0, + "position": 90 + }, + { + "id": 91, + "name": "Refinado Ladrillo Salchichas", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€111", + "specialPrice": "€52", + "slug": "978-1-58184-209-8", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/PnFv2dXxa/640/480", + "https://picsum.photos/seed/Gpg2EX/640/480", + "https://picsum.photos/seed/x7Mttzp/640/480", + "https://picsum.photos/seed/q8umE1g/640/480", + "https://picsum.photos/seed/ottxxTr/640/480", + "https://picsum.photos/seed/U1uxYH/640/480" + ], + "featured": 1, + "position": 91 + }, + { + "id": 92, + "name": "Genérico Granito Pescado", + "description": "The Apollotech B340 is an affordable wireless mouse with reliable connectivity, 12 months battery life and modern design", + "price": "€193", + "specialPrice": "€47", + "slug": "978-1-78675-491-2", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/T7zknDEA81/640/480", + "https://picsum.photos/seed/Uz7r9gmFw/640/480", + "https://picsum.photos/seed/C7QnK74d/640/480", + "https://picsum.photos/seed/rTme53M/640/480", + "https://picsum.photos/seed/hGLAv0xx/640/480" + ], + "featured": 0, + "position": 92 + }, + { + "id": 93, + "name": "Guapa Granito Raton", + "description": "Carbonite web goalkeeper gloves are ergonomically designed to give easy fit", + "price": "€59", + "specialPrice": "€49", + "slug": "978-0-206-27519-8", + "category": "Algodón", + "images": [ + "https://picsum.photos/seed/U0yNxq/640/480", + "https://picsum.photos/seed/MqxI1kFPH/640/480", + "https://picsum.photos/seed/9TbIUTpQ/640/480" + ], + "featured": 1 + }, + { + "id": 94, + "name": "Artesanal Granito Silla", + "description": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive", + "price": "€99", + "specialPrice": "€59", + "slug": "978-1-78829-362-4", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/HWnLPO/640/480", + "https://picsum.photos/seed/jErkSvs0/640/480", + "https://picsum.photos/seed/lG2KTjTLZ/640/480", + "https://picsum.photos/seed/Qy4pmwoT/640/480", + "https://picsum.photos/seed/WJhaFYsz5/640/480", + "https://picsum.photos/seed/vTCrquOUM/640/480" + ], + "featured": 1, + "position": 94 + }, + { + "id": 95, + "name": "Inteligente Ladrillo Guantes", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€66", + "specialPrice": "€31", + "slug": "978-0-437-28956-8", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/e9QdJFx/640/480", + "https://picsum.photos/seed/HrzhF/640/480", + "https://picsum.photos/seed/6S53na76/640/480" + ], + "featured": 1 + }, + { + "id": 96, + "name": "Guapo Ladrillo Silla", + "description": "The Football Is Good For Training And Recreational Purposes", + "price": "€194", + "specialPrice": "€32", + "slug": "978-0-555-46871-5", + "category": "Plástico", + "images": [ + "https://picsum.photos/seed/zVLi6Awq/640/480", + "https://picsum.photos/seed/aVIdXP1h/640/480" + ], + "featured": 1, + "position": 96 + }, + { + "id": 97, + "name": "Genérico Madera Silla", + "description": "New ABC 13 9370, 13.3, 5th Gen CoreA5-8250U, 8GB RAM, 256GB SSD, power UHD Graphics, OS 10 Home, OS Office A & J 2016", + "price": "€140", + "specialPrice": "€20", + "slug": "978-0-89331-225-1", + "category": "Hormigon", + "images": [ + "https://picsum.photos/seed/ECO5c5NqX/640/480", + "https://picsum.photos/seed/v6JZqsJ/640/480", + "https://picsum.photos/seed/5OOyP1KCf/640/480", + "https://picsum.photos/seed/KS2cvX8tt/640/480" + ], + "featured": 1, + "position": 97 + }, + { + "id": 98, + "name": "Hecho a mano Algodón Ordenador", + "description": "Andy shoes are designed to keeping in mind durability as well as trends, the most stylish range of shoes & sandals", + "price": "€150", + "specialPrice": "€48", + "slug": "978-1-05-994044-8", + "category": "Granito", + "images": [ + "https://picsum.photos/seed/piI5lsx0nd/640/480", + "https://picsum.photos/seed/7ku9MSBNDN/640/480" + ], + "featured": 0, + "position": 98 + }, + { + "id": 99, + "name": "Sorprendente Hormigon Raton", + "description": "New range of formal shirts are designed keeping you in mind. With fits and styling that will make you stand apart", + "price": "€182", + "specialPrice": "€48", + "slug": "978-1-964085-45-6", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/oarOs3BBU/640/480", + "https://picsum.photos/seed/KmjYN/640/480" + ], + "featured": 1, + "position": 99 + }, + { + "id": 100, + "name": "Hecho a mano Algodón Queso", + "description": "Carbonite web goalkeeper gloves are ergonomically designed to give easy fit", + "price": "€184", + "specialPrice": "€26", + "slug": "978-0-05-016160-9", + "category": "Ladrillo", + "images": [ + "https://picsum.photos/seed/ACC1SNHN/640/480", + "https://picsum.photos/seed/sOGtUVhZ/640/480", + "https://picsum.photos/seed/13uqWnh/640/480", + "https://picsum.photos/seed/MtIkBUG4/640/480" + ], + "featured": 1 + } +] diff --git a/api/index.html b/api/index.html new file mode 100644 index 0000000..a2159c1 --- /dev/null +++ b/api/index.html @@ -0,0 +1,14 @@ + + + + + + + Document + + + + + + + \ No newline at end of file diff --git a/api/index.js b/api/index.js new file mode 100644 index 0000000..240daa2 --- /dev/null +++ b/api/index.js @@ -0,0 +1,27 @@ +const cors = require('cors'); +const express = require('express'); +const path = require('path'); +const productController = require('./controller/product.controller'); + +const app = express(); +const port = 9999; + +const allowedOrigins = ['http://localhost:9100', 'https://floranet.onecommerce.dev/']; +const corsOptions = { + origin: allowedOrigins, + optionsSuccessStatus: 200, +}; +app.use(cors(corsOptions)); + +app.get('/', (req, res) => { + const indexPath = path.join(__dirname, './', 'index.html'); + res.sendFile(indexPath); +}); + +//Products +app.get('/api/products', productController.findAll); +app.get('/api/products/slug/:slug', productController.findBySlug); + +app.listen(port, () => { + console.log(`Server listening at http://localhost:${port}`); +}); \ No newline at end of file diff --git a/api/package-lock.json b/api/package-lock.json new file mode 100644 index 0000000..68a648d --- /dev/null +++ b/api/package-lock.json @@ -0,0 +1,951 @@ +{ + "name": "api", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "api", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@faker-js/faker": "^8.3.1", + "class-validator": "^0.14.0", + "cors": "^2.8.5", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "reflect-metadata": "^0.2.1" + }, + "devDependencies": { + "@types/cors": "^2.8.17", + "@types/node": "^20.10.7", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@faker-js/faker": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.3.1.tgz", + "integrity": "sha512-FdgpFxY6V6rLZE9mmIBb9hM0xpfvQOSNOLnzolzKwsE1DH+gC7lEKV1p1IbR0lAYyvYd5a4u3qWJzowUkw1bIw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0", + "npm": ">=6.14.13" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.10.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", + "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/validator": { + "version": "13.11.7", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.7.tgz", + "integrity": "sha512-q0JomTsJ2I5Mv7dhHhQLGjMvX0JJm5dyZ1DXQySIUzU1UlwzB8bt+R6+LODUbz0UDIOvEzGc28tk27gBJw2N8Q==" + }, + "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/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", + "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "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/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.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, + "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/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "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/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "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", + "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.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/libphonenumber-js": { + "version": "1.10.53", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.53.tgz", + "integrity": "sha512-sDTnnqlWK4vH4AlDQuswz3n4Hx7bIQWTpIcScJX+Sp7St3LXHmfiax/ZFfyYxHmkdCvydOLSuvtAO/XpXiSySw==" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "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/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-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "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/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/reflect-metadata": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", + "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==" + }, + "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/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "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/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "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/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validator": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", + "engines": { + "node": ">= 0.10" + } + }, + "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" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + } +} diff --git a/api/package.json b/api/package.json new file mode 100644 index 0000000..879cd23 --- /dev/null +++ b/api/package.json @@ -0,0 +1,15 @@ +{ + "name": "backend", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.18.2" + } +} diff --git a/package-lock.json b/package-lock.json index 1f42626..c6a94a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@quasar/extras": "^1.16.4", "@vee-validate/zod": "^4.12.2", + "@vue-stripe/vue-stripe": "^4.5.0", "@vueuse/core": "^10.7.0", "axios": "^1.2.1", "pinia": "^2.0.11", @@ -31,7 +32,9 @@ "eslint-plugin-vue": "^9.0.0", "json-server": "^0.17.4", "postcss": "^8.4.14", - "prettier": "^2.5.1" + "prettier": "^2.5.1", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" }, "engines": { "node": "^18 || ^16 || ^14.19", @@ -59,6 +62,18 @@ "node": ">=6.0.0" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -107,9 +122,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -189,12 +204,12 @@ } }, "node_modules/@intlify/core-base": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.8.0.tgz", - "integrity": "sha512-UxaSZVZ1DwqC/CltUZrWZNaWNhfmKtfyV4BJSt/Zt4Or/fZs1iFj0B+OekYk1+MRHfIOe3+x00uXGQI4PbO/9g==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.9.0.tgz", + "integrity": "sha512-C7UXPymDIOlMGSNjAhNLtKgzITc/8BjINK5gNKXg8GiWCTwL6n3MWr55czksxn8RM5wTMz0qcLOFT+adtaVQaA==", "dependencies": { - "@intlify/message-compiler": "9.8.0", - "@intlify/shared": "9.8.0" + "@intlify/message-compiler": "9.9.0", + "@intlify/shared": "9.9.0" }, "engines": { "node": ">= 16" @@ -204,11 +219,11 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.8.0.tgz", - "integrity": "sha512-McnYWhcoYmDJvssVu6QGR0shqlkJuL1HHdi5lK7fNqvQqRYaQ4lSLjYmZxwc8tRNMdIe9/KUKfyPxU9M6yCtNQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.9.0.tgz", + "integrity": "sha512-yDU/jdUm9KuhEzYfS+wuyja209yXgdl1XFhMlKtXEgSFTxz4COZQCRXXbbH8JrAjMsaJ7bdoPSLsKlY6mXG2iA==", "dependencies": { - "@intlify/shared": "9.8.0", + "@intlify/shared": "9.9.0", "source-map-js": "^1.0.2" }, "engines": { @@ -219,9 +234,9 @@ } }, "node_modules/@intlify/shared": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.8.0.tgz", - "integrity": "sha512-TmgR0RCLjzrSo+W3wT0ALf9851iFMlVI9EYNGeWvZFUQTAJx0bvfsMlPdgVtV1tDNRiAfhkFsMKu6jtUY1ZLKQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.9.0.tgz", + "integrity": "sha512-1ECUyAHRrzOJbOizyGufYP2yukqGrWXtkmTu4PcswVnWbkcjzk3YQGmJ0bLkM7JZ0ZYAaohLGdYvBYnTOGYJ9g==", "engines": { "node": ">= 16" }, @@ -259,11 +274,30 @@ } } }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -384,6 +418,22 @@ } } }, + "node_modules/@quasar/app-vite/node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/@quasar/extras": { "version": "1.16.9", "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.16.9.tgz", @@ -441,6 +491,35 @@ "node": ">= 8.0.0" } }, + "node_modules/@stripe/stripe-js": { + "version": "1.54.2", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-1.54.2.tgz", + "integrity": "sha512-R1PwtDvUfs99cAjfuQ/WpwJ3c92+DAMy9xGApjqlWQMj0FKQabUAys2swfTRNzuYAYJh7NqK2dzcYVNkKLEKUg==" + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -543,15 +622,18 @@ "dev": true }, "node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true + "version": "20.10.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.8.tgz", + "integrity": "sha512-f8nQs3cLxbAFc00vEU59yf9UyGUftkPaLGfvbVOIDdx2i1b8epBqj2aNGyP19fiyXWvlmZ7qC1XLjAzw/OKIeA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", "dev": true }, "node_modules/@types/range-parser": { @@ -593,12 +675,12 @@ "dev": true }, "node_modules/@vee-validate/zod": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@vee-validate/zod/-/zod-4.12.2.tgz", - "integrity": "sha512-+g9lk8hO0FJCDGfjhuxUtFV44NVowu7cBvJiNr2x8DpWhBUXcfcE+XAJB0JjDQeT1O9lgO+mskZ+k8EdbAk0xw==", + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@vee-validate/zod/-/zod-4.12.4.tgz", + "integrity": "sha512-iNFhkBfGkre2b+eBXgBpNlNVStxDrI59sJUbzBr01EjyTkFOUgc/0wPJrhY/kBp+0pnGzNi04jklJaKfNK2ibg==", "dependencies": { - "type-fest": "^4.8.2", - "vee-validate": "4.12.2", + "type-fest": "^4.8.3", + "vee-validate": "4.12.4", "zod": "^3.22.4" } }, @@ -615,37 +697,46 @@ "vue": "^3.2.25" } }, - "node_modules/@vue/compiler-core": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.11.tgz", - "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==", + "node_modules/@vue-stripe/vue-stripe": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@vue-stripe/vue-stripe/-/vue-stripe-4.5.0.tgz", + "integrity": "sha512-BU449XT5zegjNQirl+SSztbzGIvPjhxlHv8ybomSZcI1jB6qEpLgpk2eHMFDKnOGZZRhqtg4C5FiErwSJ/yuRw==", "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/shared": "3.3.11", + "@stripe/stripe-js": "^1.13.2", + "vue-coerce-props": "^1.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.7.tgz", + "integrity": "sha512-hhCaE3pTMrlIJK7M/o3Xf7HV8+JoNTGOQ/coWS+V+pH6QFFyqtoXqQzpqsNp7UK17xYKua/MBiKj4e1vgZOBYw==", + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.7", + "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.0.2" } }, "node_modules/@vue/compiler-dom": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz", - "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.7.tgz", + "integrity": "sha512-qDKBAIurCTub4n/6jDYkXwgsFuriqqmmLrIq1N2QDfYJA/mwiwvxi09OGn28g+uDdERX9NaKDLji0oTjE3sScg==", "dependencies": { - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-core": "3.4.7", + "@vue/shared": "3.4.7" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz", - "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.7.tgz", + "integrity": "sha512-Gec6CLkReVswDYjQFq79O5rktri4R7TsD/VPCiUoJw40JhNNxaNJJa8mrQrWoJluW4ETy6QN0NUyC/JO77OCOw==", "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-ssr": "3.3.11", - "@vue/reactivity-transform": "3.3.11", - "@vue/shared": "3.3.11", + "@babel/parser": "^7.23.6", + "@vue/compiler-core": "3.4.7", + "@vue/compiler-dom": "3.4.7", + "@vue/compiler-ssr": "3.4.7", + "@vue/shared": "3.4.7", "estree-walker": "^2.0.2", "magic-string": "^0.30.5", "postcss": "^8.4.32", @@ -653,12 +744,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz", - "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.7.tgz", + "integrity": "sha512-PvYeSOvnCkST5mGS0TLwEn5w+4GavtEn6adcq8AspbHaIr+mId5hp7cG3ASy3iy8b+LuXEG2/QaV/nj5BQ/Aww==", "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-dom": "3.4.7", + "@vue/shared": "3.4.7" } }, "node_modules/@vue/devtools-api": { @@ -667,69 +758,57 @@ "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" }, "node_modules/@vue/reactivity": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.11.tgz", - "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.7.tgz", + "integrity": "sha512-F539DO0ogH0+L8F9Pnw7cjqibcmSOh5UTk16u5f4MKQ8fraqepI9zdh+sozPX6VmEHOcjo8qw3Or9ZcFFw4SZA==", "dependencies": { - "@vue/shared": "3.3.11" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz", - "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==", - "dependencies": { - "@babel/parser": "^7.23.5", - "@vue/compiler-core": "3.3.11", - "@vue/shared": "3.3.11", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" + "@vue/shared": "3.4.7" } }, "node_modules/@vue/runtime-core": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.11.tgz", - "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.7.tgz", + "integrity": "sha512-QMMsWRQaD3BpGyjjChthpl4Mji4Fjx1qfdufsXlDkKU3HV+hWNor2z+29F+E1MmVcP0ZfRZUfqYgtsQoL7IGwQ==", "dependencies": { - "@vue/reactivity": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/reactivity": "3.4.7", + "@vue/shared": "3.4.7" } }, "node_modules/@vue/runtime-dom": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz", - "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.7.tgz", + "integrity": "sha512-XwegyUY1rw8zxsX1Z36vwYcqo+uOgih5ti7y9vx+pPFhNdSQmN4LqK2RmSeAJG1oKV8NqSUmjpv92f/x6h0SeQ==", "dependencies": { - "@vue/runtime-core": "3.3.11", - "@vue/shared": "3.3.11", - "csstype": "^3.1.2" + "@vue/runtime-core": "3.4.7", + "@vue/shared": "3.4.7", + "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.11.tgz", - "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.7.tgz", + "integrity": "sha512-3bWnYLEkLLhkDWqvNk7IvbQD4UcxvFKxELBiOO2iG3m6AniFIsBWfHOO5tLVQnjdWkODu4rq0GipmfEenVAK5Q==", "dependencies": { - "@vue/compiler-ssr": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-ssr": "3.4.7", + "@vue/shared": "3.4.7" }, "peerDependencies": { - "vue": "3.3.11" + "vue": "3.4.7" } }, "node_modules/@vue/shared": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.11.tgz", - "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==" + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.7.tgz", + "integrity": "sha512-G+i4glX1dMJk88sbJEcQEGWRQnVm9eIY7CcQbO5dpdsD9SF8jka3Mr5OqZYGjczGN1+D6EUwdu6phcmcx9iuPA==" }, "node_modules/@vueuse/core": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz", - "integrity": "sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==", + "version": "10.7.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.1.tgz", + "integrity": "sha512-74mWHlaesJSWGp1ihg76vAnfVq9NTv1YT0SYhAQ6zwFNdBkkP+CKKJmVOEHcdSnLXCXYiL5e7MaewblfiYLP7g==", "dependencies": { "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.7.0", - "@vueuse/shared": "10.7.0", + "@vueuse/metadata": "10.7.1", + "@vueuse/shared": "10.7.1", "vue-demi": ">=0.14.6" }, "funding": { @@ -762,17 +841,17 @@ } }, "node_modules/@vueuse/metadata": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz", - "integrity": "sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==", + "version": "10.7.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.1.tgz", + "integrity": "sha512-jX8MbX5UX067DYVsbtrmKn6eG6KMcXxLRLlurGkZku5ZYT3vxgBjui2zajvUZ18QLIjrgBkFRsu7CqTAg18QFw==", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@vueuse/shared": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz", - "integrity": "sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==", + "version": "10.7.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.1.tgz", + "integrity": "sha512-v0jbRR31LSgRY/C5i5X279A/WQjD6/JsMzGa+eqt658oJ75IvQXAeONmwvEMrvJQKnRElq/frzBR7fhmWY5uLw==", "dependencies": { "vue-demi": ">=0.14.6" }, @@ -819,9 +898,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -839,6 +918,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", + "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -982,6 +1070,12 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1052,11 +1146,11 @@ } }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.4", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -1303,9 +1397,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001568", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001568.tgz", - "integrity": "sha512-vSUkH84HontZJ88MiNrOau1EBrCqEQYgkC5gIySiDlpsm8sGVrhU7Kx4V6h0tnqaHzIHZv08HlJIwPbL4XL9+A==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "dev": true, "funding": [ { @@ -1695,6 +1789,12 @@ "node": ">= 10" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1811,6 +1911,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1845,9 +1954,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.610", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.610.tgz", - "integrity": "sha512-mqi2oL1mfeHYtOdCxbPQYV/PL7YrQlxbvFEZ0Ee8GbDdShimqt2/S6z2RWqysuvlwdOrQdqvE0KZrBTipAeJzg==", + "version": "1.4.625", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.625.tgz", + "integrity": "sha512-DENMhh3MFgaPDoXWrVIqSPInQoLImywfCwrSmVl3cf9QHzoZSiutHwGaB/Ql3VkqcQV30rzgdM+BjKqBAJxo5Q==", "dev": true }, "node_modules/elementtree": { @@ -1886,6 +1995,17 @@ "once": "^1.4.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/errorhandler": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", @@ -2282,15 +2402,15 @@ } }, "node_modules/eslint": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.55.0", + "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -2369,6 +2489,22 @@ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", @@ -2405,31 +2541,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2471,15 +2582,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -2492,7 +2594,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -2647,9 +2749,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -2675,9 +2777,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -2810,9 +2912,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", @@ -3790,6 +3892,12 @@ "node": ">=12" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4382,9 +4490,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "funding": [ { "type": "opencollective", @@ -4409,9 +4517,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -4500,9 +4608,9 @@ } }, "node_modules/quasar": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.14.1.tgz", - "integrity": "sha512-TAIGUgHASlL7COS9qqfDKyV2+WGFcHQseIDTzN+yfXaXY5gn/FZqwkEnb87bgOqgGYw8KJerkfZg3aSel+bLPw==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.14.2.tgz", + "integrity": "sha512-f5KliWtM5BEuFsDU4yvuP+dlVIWZNrGu5VpWFsxzjpoykcP4B2HIOUiCl3mx2NCqERHd4Ts0aeioRkt9TTeExA==", "engines": { "node": ">= 10.18.1", "npm": ">= 6.13.4", @@ -4744,9 +4852,9 @@ } }, "node_modules/rollup-plugin-visualizer": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.11.0.tgz", - "integrity": "sha512-exM0Ms2SN3AgTzMeW7y46neZQcyLY7eKwWAop1ZoRTCZwyrIRdMMJ6JjToAJbML77X/9N8ZEpmXG4Z/Clb9k8g==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz", + "integrity": "sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==", "dev": true, "dependencies": { "open": "^8.4.0", @@ -4832,9 +4940,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "version": "1.69.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.7.tgz", + "integrity": "sha512-rzj2soDeZ8wtE2egyLXgOOHQvaC2iosZrkF6v3EUG+tBwEvhqUCzm0VP3k9gHF9LXbSrRhT5SksoI56Iw8NPnQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -4921,9 +5029,9 @@ "dev": true }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -5275,6 +5383,49 @@ "node": ">=0.6" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -5294,9 +5445,9 @@ } }, "node_modules/type-fest": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.3.tgz", - "integrity": "sha512-//BaTm14Q/gHBn09xlnKNqfI8t6bmdzx2DXYfPBNofN0WUybCEUDcbCWcTa0oF09lzLjZgPphXAsvRiMK0V6Bw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz", + "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==", "engines": { "node": ">=16" }, @@ -5318,17 +5469,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "optional": true, - "peer": true, + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uglify-js": { @@ -5343,6 +5493,12 @@ "node": ">=0.8.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -5421,6 +5577,12 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -5431,15 +5593,15 @@ } }, "node_modules/vee-validate": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-4.12.2.tgz", - "integrity": "sha512-SF5AOHbyW8vy09FgMRVHxCtK/3D5Jsk0VyvMf/HZhwPgpjGCCBW6ZWDW11/HC6pRbMOjTcg3YueBI6hb3oveYg==", + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-4.12.4.tgz", + "integrity": "sha512-rqSjMdl0l/RiGKywKhkXttUKwDlQOoxTxe31uMQiMlwK4Hbtlvr3OcQvpREp/qPTARxNKudKWCUVW/mfzuxUVQ==", "dependencies": { "@vue/devtools-api": "^6.5.1", - "type-fest": "^4.8.2" + "type-fest": "^4.8.3" }, "peerDependencies": { - "vue": "^3.3.8" + "vue": "^3.3.11" } }, "node_modules/vite": { @@ -5480,15 +5642,15 @@ } }, "node_modules/vue": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.11.tgz", - "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.7.tgz", + "integrity": "sha512-4urmkWpudekq0CPNMO7p6mBGa9qmTXwJMO2r6CT4EzIJVG7WoSReiysiNb7OSi/WI113oX0Srn9Rz1k/DCXKFQ==", "dependencies": { - "@vue/compiler-dom": "3.3.11", - "@vue/compiler-sfc": "3.3.11", - "@vue/runtime-dom": "3.3.11", - "@vue/server-renderer": "3.3.11", - "@vue/shared": "3.3.11" + "@vue/compiler-dom": "3.4.7", + "@vue/compiler-sfc": "3.4.7", + "@vue/runtime-dom": "3.4.7", + "@vue/server-renderer": "3.4.7", + "@vue/shared": "3.4.7" }, "peerDependencies": { "typescript": "*" @@ -5499,10 +5661,15 @@ } } }, + "node_modules/vue-coerce-props": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vue-coerce-props/-/vue-coerce-props-1.0.0.tgz", + "integrity": "sha512-4fdRMXO6FHzmE7H4soAph6QmPg3sL/RiGdd+axuxuU07f02LNMns0jMM88fmt1bvSbN+2Wyd8raho6p6nXUzag==" + }, "node_modules/vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.0.tgz", + "integrity": "sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -5523,38 +5690,13 @@ "eslint": ">=6.0.0" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/vue-i18n": { - "version": "9.8.0", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.8.0.tgz", - "integrity": "sha512-Izho+6PYjejsTq2mzjcRdBZ5VLRQoSuuexvR8029h5CpN03FYqiqBrShMyf2I1DKkN6kw/xmujcbvC+4QybpsQ==", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.9.0.tgz", + "integrity": "sha512-xQ5SxszUAqK5n84N+uUyHH/PiQl9xZ24FOxyAaNonmOQgXeN+rD9z/6DStOpOxNFQn4Cgcquot05gZc+CdOujA==", "dependencies": { - "@intlify/core-base": "9.8.0", - "@intlify/shared": "9.8.0", + "@intlify/core-base": "9.9.0", + "@intlify/shared": "9.9.0", "@vue/devtools-api": "^6.5.0" }, "engines": { @@ -5733,6 +5875,15 @@ "node": ">=12" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 19a5d09..effa109 100644 --- a/package.json +++ b/package.json @@ -9,35 +9,41 @@ "lint": "eslint --ext .js,.vue ./", "format": "prettier --write \"**/*.{js,vue,scss,html,md,json}\" --ignore-path .gitignore", "dev": "quasar dev -m ssr", + "api": "cd api && node index.js", "build": "quasar build -m ssr", + "build:api": "cd api && tsc", "start:build": "npm run build && cd dist/ssr && npm i && npm run start", - "backend": "json-server -p 5000 -d 600 -w src/services/json-server/db.json" + "backend": "json-server -p 3000 -d 600 -w src/services/json-server/db.json --routes src/services/json-server/routes.json" }, "dependencies": { - "@vee-validate/zod": "^4.12.2", - "@vueuse/core": "^10.7.0", - "vee-validate": "^4.12.2", - "vue-image-zoomer": "^2.2.3", - "zod": "^3.22.4", - "axios": "^1.2.1", - "vue-i18n": "^9.0.0", - "pinia": "^2.0.11", "@quasar/extras": "^1.16.4", + "@vee-validate/zod": "^4.12.2", + "@vue-stripe/vue-stripe": "^4.5.0", + "@vueuse/core": "^10.7.0", + "axios": "^1.2.1", + "express": "^4.18.2", + "pinia": "^2.0.11", "quasar": "^2.6.0", + "vee-validate": "^4.12.2", "vue": "^3.0.0", - "vue-router": "^4.0.0" + "vue-i18n": "^9.0.0", + "vue-image-zoomer": "^2.2.3", + "vue-router": "^4.0.0", + "zod": "^3.22.4" }, "devDependencies": { "@faker-js/faker": "^8.3.1", - "json-server": "^0.17.4", - "eslint": "^8.10.0", - "eslint-plugin-vue": "^9.0.0", - "eslint-config-prettier": "^8.1.0", - "prettier": "^2.5.1", "@intlify/vite-plugin-vue-i18n": "^3.3.1", "@quasar/app-vite": "^1.3.0", "autoprefixer": "^10.4.2", - "postcss": "^8.4.14" + "eslint": "^8.10.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-vue": "^9.0.0", + "json-server": "^0.17.4", + "postcss": "^8.4.14", + "prettier": "^2.5.1", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" }, "engines": { "node": "^18 || ^16 || ^14.19", diff --git a/public/assets/empty-img.jpg b/public/assets/empty-img.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f50017de1f3c678532a0fb25ab232ad271cf9501 GIT binary patch literal 44064 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 iAdyQ#>Bx z+t)5U%o~^P>nmPsw);FZ6~tHtgep(8OH5y5^YNsr#o^&`0pL{J0IsNt2pDFkLMxiW zAQ#L|nkrG`fu95b$xdl7jw!#ibkl4n=NHUc;6|fLS8XBGGyfx+0G6I6TFC17XNk^8KF3!OMOz3kUJdul}Cq*r{NF4?V~`ln7tmt z3Mr6f51jLWDx3J$LL4m)k3*d<@A7}EUUg}fuW}|2v6XE)Z4P_-O>KA8F7!IfJ(sxV z_4$QDc%zLNDTJF-WsX|i?AwP$`0&z`J&{E^eNohx>p(%C#O`_pVwf{pbE`g+!(w8; z_QKpqicyC1`8;tW{hN7|66rgiYu-TvfyN&P<_muSPv35Beym<}-f*q=U6Btv5)i=k z`hXPnXtQgU+qhFhhT|8hijkX8wyokvi5?;I}52iK&YB`)arR9cxcw}I6< zE3XrhF>!yg^_7HV%b8;}-$#+4(c}+cZL-tkTJPyi3`CMq`L|a-$Y*nUkKn=TPD4#N z&$e^gPKAulcl5)I`mcjfl3@$+x!w7*N|otM`7FRzr{(YOc>;@xesoCz9$(RZ^q0np zlOGNw;HPrQDaVOOHWSP?U3g>9DIdu>ha9<^^)X-CthS%0li8*xzBPw%5G8=sdM8?ikrT_gzI;FJx-m z)wM*8T|c8ULk39CW`Fs4M*lfG^gEW`dTfw$q2FD$K8YZT)rRL);2+bo6B8emO41>+ z)!X9R7BhuwDT6*s53|UGt4^A~Rp$xSigk>=QCwh;YXd3kC(=w?Xbi#inhVnEPn)Q$ zQL2FhBSv}%Mk77zT}tz|KqmeVPu)F3paMa$K4L>20&gb6tlm|BEBXT{N>p1N^bt%O zg!*t6XQ;R8u;`(;12Y-mjm^lHInrJnXCEK77!_LG#HR-M0$ zOiQYo12y8P?+jR7Ey3nhYu@A~iO??RW4*d(E|X`Bs^LbFa|{t-V(;$iQ@&y^P?}O9 z`qneCy%F;)d$M}yb>(~+PJ0q`#Vp-#W*bWVVybWWN;Z4d=0R|+@afv2mg-jXTSLgx zlN5m6*1Af4Um#IHZsCk$n^5}1Oc&PAy5{4;Kr^59Ef0lnAv+$8CIz1k1%`%55TJ!LM+?$>&*? zPx`3MCB8=v6D)zS-%|e9VD4&FZ_hDs4z@{nsWLECNq*zYD2eyrb+mg=7Q61eexdTo9lQ6qV zQ6c=H(vKmXVAQs|k8<1yS4Mh`S68{E@3zG|UZFywa%&;|=J!soLKvIgvbjCenenZs zNB8x5(O-W?e4%jkb5=<5%cw4XcGq0n6GwVsQ5#%E@&Xk$@$O`CazEiK&1mzo=fK1P z#9w=W)kE(MjHIc#u9P;b7@_y0`DbnzaB<4K^33Gim4~NuzLn3~@`AbAagF@OBKXUZ zyS%L%V6t)~E{AWKGhtDM{}70y(SjSRn@gZsGjihKD!e-um8beM!(f4DY3*#6&N9!s z?F{U|J@%^2^Ak*2`rX%E$#znPCFPaQtSwIgC8;x6xx$h`5U%?)w4?}LKkq73dugRD zp2`Sve}S7BbqJ7cOK^rf8zx(s>N>V*c6Utn*qrijkME&my?=9fc5H3+(kkhYk*V;F z12`2@J9jc!u&95p8H)EzNmyF9vh!Dn#P-=K&!WJ)nOr)9i%jNczDpBeWZ##APmD2f z1je0LoQVVHJs!qXs1%6R7vSn7&{X$RF9elJeUJ|53(#F87u&1s z`R%A|KukYdo9Lv$(8VyZ0?2250(o4-MM|w=q+$A#hZwuUgjn?$v(sy4S`tyLs|F%| zNXu@7`7#Xi@f?^3v-X(bs2ntS`3Un35-H8=FB*iHkMzQESyv*cvf$=6QwK{xkqM+{TWnf_#isD%@bik|}$<9p_q9yTY zqt**d6Tm`yZ1pssy(iLo(r#LJNhi>WV|ex(Ndd3LPbT=1N?5L-ldA=+r1CN5cU;YEoJWM$7uXr zgd6$ufrb@ZSXk9TyH$A21KAcqwC2o0@8>7Nm$7E3yVCt}ZRV3vEcYSkH5{`1Uqd4S zN)TR0C~aa|D=ma&uL9fPk`+|_nr0^0%f}s3yC>;sNUNm zvMb*I2QUj!iJmaxJ<3Ibaa&805F~9?V){rhL_Ag{tWou&ZzZNI*5M22c z66ah%`LPH{`dAViM9O5rXvSYM>pI2Unj_@gA<#5EF%qC0vgVk@@p~!mf)dUYyl7R3 zlThr=gmpdvGccfZNl4?B5b_eAh*hU%@^5GMgu7eqO}r zJ>oUK&%m!9K+4Kq)6r#;G7;4NtKn^&$DNOV01ARo4u}d~>+>*<+?k=YbgvtIb%^h1 zDMVl{(f57P>h!lRXdua|!WEHkpq0Vbw@`J(T3#K775uHFFuhso*;gO(vdlk@rIHM( z!X&CRI=acSrAyfZzMSZ{m4!=~A4Fe27DFK-Py2iNBfMDzVt=)k?6@w5ei+?LAfCy{ zwhEMTKFnQwAuXAmNg-}|NYB{}*PJV{1j66N#vnvUmK_>phUo-;_HzU!aFTfpOUQdy zNlWf~)0RXT)x3|DT}||FF;2lO`yN{FL=rU{Qm#0Tp2U`ulqW z1w+NvVm=L*&~pVIV*iD1Ml726F(>kvm2r#ojH8|EQg2?*U4&1;wjp;5-a$<~%R zy}bA64+ZmmLJqinm|Y|M@3D;gK{~qggR3808X)PUNelCE7ax;LFtZ5k)~{6`TRiLX zeKzL4{p654!=|iC2lD2ru%IBy+P`*`AyCAt=^~ppp;f=Q=a~|L-gT0mP(4Z4PbP;> z|HG$y@0oH;dV73H41f8|1djeVlD^C^xVI8FJAbYH)Bl4)tUR=A$2rI|U6|&aqAlwZ3&-cc{i7bP{|VXyxS=6%v>sV4gNFmWHKBl4@7H3`C&p9@V$ zwrKd+!_P`oeEE%+CnL^klB~&Hk`uVkqR}J1lE>YtldD}C3dlLWN<aEjH!Da*lDA|eO*sTXs?*!pdS45p{voHyvX99Lbn`6CzTA@^&Ea`uVZ z%zaP|KOB$FbK~gu;z4_HKla{T;HkJ2Z1a`oxb;asSr8fUglV?yl9vL0l=o({wX)K8 zVXpM^lFP>I0qT=A>uD}Ka-+S|NoI~IJ#nI_3grGo%xIf}`S7M1Z03`T9P0xw%}o?Znq>ADw}Pi*DlSr zN1&Iqb*uj93izu{*Go*2{Y{@Ek4jDe#7}m>rYr!LPXq zRUgT9kHaER$f{UojD>mpA;W~<<9(eMmt!fAc0DJqKY%OQ(3(Ghyh9i3?BGpV%aiHz z@ULsHmRIj=)^0TE&Y*v!9kU2buZns)dK_GXP7a@=e^dVfz*Vo>3Am97pKR9cILo-h zR>yPJm+q++u-=!fE`U|mB-hZM|0?}(;}d4-e=r%+xt*1@C@<9TDY&zCzGBbV%{b&9 zH*O*ssW(&|S%`3BQlvCfIdxDueN*kxS)rIH@8T4dqTu76c%}V)B@{leys&Y=(TS8y z(tR#N*AZ2F((Ehb{cg;GOnId}M#|**k^H{IdELm1l-dnOZ-PD1a746LOuOp7iHWI& zhN{ktzKM#_Ls~!ui#C3_S`i*ku`zZUvFbxML7Gn~X1JKY92ilUrfaAHj7^l{*dM_8 zqX4EQ#tP%a6@jIum6z;T9FMv=%CPGecAc4qJxhDcC?8xUGOA$B3`AJH;EWsz3=;7o z$794VsB()mM??<1G|*~9V&}3u?ZzKZK;;T0%4`~LN~41W4M5&Pfn_V09VZY-nw%V1 z2p5RhR@-fffr~B80e{FA2VJ=YNfa~K<5~9$6slV*nK!@zHD_+EkK(UYHY+AxpbXjr zcdHK_Cqe};Cem|O4i=dCtqE@oSLl9-^=D0Q4`tP{BKmD~xSo3EznZjSciOrmboF9b z-y0WdJ?p!A4HvLo=knO#(ZBF=O6r%AHgSqgTD6FUn1y7$`0xs5J^zGpnL2w`cX4UE zrCk~UhfP=GrdsN!J-Y-sS8)!b$%lMoAg-SI+cU#9l;S8ZF?%vaZrK9`!?4d1N& z@UvyA4Zhn)UFtzsWu>hp$qhP2XVtU@+~?O`>bUiP=XouI91b6916^gQSDetbEa>UE zXBePn<}xRaT=qrx?{f7YIll^G_++VMZz}L&F|XxbsQ#}}UP`XV*7C)$u!}e%c)H&s z(Q6=s4C2iCqJ=S=h2C|$fv!o~zMx8CuvM~I#9$XHc94M6JN&sV(k&mAVXHnN6%m3 z0-8t9SN{NPPOpodSA9IuCC~HCElqw`z2|7S_K2nfD{x^&22D6U#uV+>@ep8$}w0NCc z$(+4HnlNV$`b(L?d?!^OB^n&FkCiI^4Zk;Ao_|ckOY=0IKHqNe_VX&%F2`|*w2yW% zE4tuteKJIgZj$i7blO<+NKgOO)e(=<#Mf0HLhO{1{?fOc!+)VKBQj1Wb7L-c?bB#v z{a}{f$^8*B3E&OM#Ty4SAtmLjk_{RtY-LZA!yITk0|3BWV~2f`V9atv48b1f&t#pKxBZ>@>W$5CQZ0 z{7C)-aOr~wXu+GHFu$bBKn5RfU*u{@TW-ZkrCAk|uC!Qk@#2(>AA0NAxkXykvW*18 z=ewp3kKwfQ1tK_M@-#`DRAP}4_)F!t zyp}g;=4~(Z=4mzEC7u4VQxNl==p&^epD&u9gF?+M>ICvCljs+?E~V-%#lOYNR=sg! z_@(W+E0VM#E}bzaCB@vep4R(#D+6Nd^wbgDOz?Pm*9nqk{VZEIy@QtN)1ec*%4T}Y zFRk)A1h`m_c5ff9ovm)gCfR!UY3dI3#L1AZDPUzXG_$6c{P*G#)rJe+toO$XhCsh} z7b;`lnZsuK5ABcY4tRny5);U&?In{Gcb_3a=^m$VpHVpLcG6rSC}h6F0xQF?KcT$_UDC;!#gf8 z=u7O*QjJQtEt@V|(udV3taS?pyrhROtbER&vt5v~{^%%7ZnCbP*)+;Q>3_P)&SQL2 z@dhY-J%;1-HjM1lilaI4J#Q}xwDsHUXj~rdsGWp(hx#J| zt2`TP`Mzti{p7ZIbL8%RDMfb`LYEdElirkye>0j`bdR2IqcQwiKf29h)Ut7I*QRr6 z?d~)EqWAdGC;IeNSZgG1vemfSk1krs?Oa1ibN}R zVNq0%F*b5dQFX$#;4$99{}TYAjI)C<#)Q@>-myPGdpV;eDmDV zYubyI_C4mQYm+ij2BEY0Lyt~0bP*+G_i1*E%;Zj0j4R4nh@$Yw_@BStjmR(8mV6lg zIHFip`ym^DnGP{FF}$qo{v$3U;|V}}N+7pcO@QB?<)s#Gri9Ev{1O{UZs=g4^~6XY zR??YB;)mv@hK?3@>O}^XIrFI57tnGfQjT=MxN$@?R(+Uuef#rb!rmL`Tz?OXE!dH? z^YY;*&{A;^;t2fPsNOEX)eEze-6Nof0Ym&*+n2dqPY;mjfhH}<8&#`3c}|3k!@-{EgZ1t)hW+m)g?(;5Y|YDe zGC8IyCZv`M;tRtcg6tWGg_cW^t4CATGeP^C*=H)~=ohV451&14c~ZgkQehgE*BuM3TmvL~gMcr-`+)$kx_W5O7fnbG zS+x;!ChE2QN#(#YAhFnw!~JLPKhB99ynC)+TSp>ODPpXZJe}csZJ693WPf$IXMk#G zY;H}w6!FVfhulM5aRFMY&=6!51H8SFC@^o~n(@xI zkLz0Mobb=5nNEkpWAWx)+|TNJlbVDIi{?pfxtn6_Kfj zHupGucA9nV`**jLT;D|GuRK87v9hu<>RXuK_&N=b2qiJ6j*(mcMuC<*78EAOLLas2-m{H6g}Fe{ak? zoryf<;FSU;t8@DB^xzJ^oJ>p{u#h%yG_c3>32FUJwk0*W{uM?MS)#q{BW?Pf3#+R! z9jmyNw*NTGqufhoCj3R=Ml{h*!Pa#+@@tCJ*QC|YsIQJaKVP{|_4Bla69SS?y zua^5aY;@f9dwTuk5ZkFU{%j|Aw~uTM%o*(ZbSnlCBouh8SQDO{WVk-I zPX82XIbZmQ7M^JjseJ`ooXFBHZft^ftjyFT6;}h5u-sgPz1(YrYP#;UHc2iWFakXp zZ6`L4dRt{W(S82=z3Y+Qf;hVl@5ewiyUnLd5Y0q@T^eoi1{t!&$@S$Pa;+UU)g5>x zyBB8n{{gZZj<_hQc9$mQH zMa0fN;KwpBdA;Ln0Q*-$`{^<8Iqocm2x|Adnluh>abG3RcNhNvV#pZc1(pzQb-Pc@ z^T5jC<4yyRUo(f>TikoAJpL{_O`f>_0ADtGdAYwI5}4l9Lhs+mI5Cs|0862N*6jT~gH7V6aczGUD8E9}oylSA z=6sfMNd>xnoSgy;2iP>r)buTqkn_UjV^13n;h2HP+jh)0qDEdH&JbS*!Mlsf(+yu0@1axl4+)zc(0Af+=ad9 z>03o*bYXC{INy1K7dYka{xVn&yO;Lz#- zTU{#R(e|$mc{bZ}ZeLTs9VVWw7KrURtYnX!u`)N@7fClsfr3d58@=0UR}j%vxoc|Y zRq?nwNT^=VUjyW|<}B%Lk-$8fFb*NymTO(Gg3(jESv4bZ{{RKme)+amvTOeU&MSwa zM?sE?X#*bOB#hJ($kK~IMJ7IJ?p!*DmhB5cG$+w@p^iCXYq+$x+s$%weOE~gVf{b` z*;*^1ciQJ!iuvpVUC-he$TKelkws=vK@*4BfoqdpIM=;|oV# z-WR#I(4HIEC8TpS{!l?&!pnJ_9YRY^((zroaz1Nz)=BN2*RjE)lZLu@8m@din{6?V z16W(b*obJ1ML-KnM!st`@sqgo*c;h! zSqyGY%3h_zCXJ=CTQlAdR-iX*lml?)y$ic}xm=_3Ig4i6T?pL_F0#0AlWT_1>0ZXS zbHj88lAC&0qu2Yg9h=OHEvJss7~geuDIu(hj(b?v@qEr_$~?H0%C+vC6U}AIM#&ya zT-%S+b4WXOh-pSp{$o{+JP&Z$O3{t(2Mbn^MYYT=a3FGbPi=j8sm%5^BQrDaH$KYx zU1pZvhBvyJxzRsL`HB^(yUJ1E!Rc+xPitq6ZoG02Y=ObdBl&jwQnHZCX$+*)y}PUG zNeju~duK1&(p){6IOoKerF@pgH#OVC32WFYTE|z7IImY=!ySdJZuy%GVcxq%e)Xi= z)j;TM*Hu8N35r!{78CGN6F^ugsZR#6Srnn^TapqXsGz#)wq^vVFj*0A(<#3?`ip#2oLqbT2wTt>~sEyG9wm4qP zc7PAMD$<^REf%HDLeMeRJ;46}rRxpQlN*~t*J$?58IhG^zZQ#+knRiI9`-;XkUWjO zcRQAq4QU*_)}|l6ayJA|$8Emtb$`weA#(Uu#_M!YfcORdaJac_vO%=+;13YI-K_b&t+}(B(<_f4hq2Ce zwZl)7)1g2c0H?)! zJeF*C1=P1-8110k>u6-4Eo-XNyKgdRSDn1?yqtJj{101 zv-+%cEEo!U&+2ZsF5jGwm)bt|EL38IKcA z;>IrEitf_=m9cXTw9Pt)4s`xur4J&$P29h(X} zsu>w`q5DYG21zSy{>cp<+6jqrM}&~*Q9f)7GMD$8b*cGB4EvD3GM3yz&Z`Ca4iUd0uxOn9DKdaT?} zhftn;P3&)t)L@mRt_HD^2;sS;Yw=$V&*E8v&SYhtcir2vmn^uM#qvnUkJ63Lcg)~M z)%ARfV6!4|D;aMyfCbJ1GUt4>anoKwd|SP5<&(H?<2MF)qIiZKL2FpSxHsFO+FV6f z8*b$EI9=naGs>!}nr~cq9qf1;qR&B1ja6H#u&mq*gg2Ql$ zuYF~6O$ngg?)BlS_@t5wg2A>%x}o5Ze7?o#yHmIF`I((PywY0P*Z%-&@Dox;;AMVi z{{RJx`&6dewyw}xbG%nomT0#n)vG;N3lLOw%S+Pe9rCeY4$g8cexnH3F0FJa+PRTva98bj~NL-tXcMT(z#(|(z2XiLAiNx89NRnor znA`!-oj5VSh?S2cBR-;H#)h%((6H&h@ohep%%I)Q9|5i66MPayG{+jIh17C;itrN3@N1 zhs5GqLE%QPp<6ww6VtXnXV0`t^F259Tn0OPCdyk0ovhMJJZ49c&GbKDr3WPu_g8I5 z?UCi}OOF6$Yis`iRTma~43pdJ?t^J)=TtWG*46_aycsmpGjNm7Kz&yp)As)Wwx*S` zVl(Z0@wn6xZ8)!oP1@$@4Rc=5<`Cw%Rjz5MAn+iLDyq3S%x+%5v6p#c zcW%K(!0T9{&~T%o;5`EBwyrd2ucGL@pc?rGnXSd6Ne1c7gt&5LcgTG4%Cc?zf$IXQs0xD6DOcX5P$&uoP*M{>SWJ1Ts$l_DLJ)wG zpwU@SR4FA%OsOaV2_}GvBxFt8)UzGy4lX|flD=$mWF-ES(DNi#?{Hw6zxLk-?b`<T>ei03ox!(Q$Ck?@ob#>KqnOthNE`vE0MJuZ-SWT#T3Qou##1VT+#PAmGoaxO;8mCY7Kb=WtzDCmTxJ zwd~{QUF~BJ%_e%5H@jFsmDt;c*IlA$olbNFxK(ORm&ljNZxx(xdn(fIquEM+W|7C@ zybagy7HT_|MGhX_&2w8O!0Dtr9rC+)4Q{@R&|-VpnYTFIVq~?u0E0E8fbCMV=b4|eH>p!q@;pu_w(vGhGIwNG!zFofGht*84TcEI=-1pmp5PowB<|q5 z7N591vxCQ8;q34NYb$0*VYn@4PIvsR>oP&qEpv#Yt5xT--Pvb(cEDMvOqXQSJynzgmm z)sC%v7I`=q73*bguVrITh-lN36CNw6V))$8>N~F?xPFm37+hH!BPN@jyWJ;-fq7RG z3=WcJI!CfW(GEH^fw|!EuPqn7%EjEB(G|8D-pFGx&=%cEdvaUTGPRvPxsid+0PkER!?lnr)y+`A;{8R2uN$zc^#?S6Pgut~(bQ zGhRp{V+RIQ>mmL?Do>*Q4ci^9Z`x3sOFW&;+%5yF4BG?-PIAV^im3E=?gY?{2|56})uwT}b-~2XN*Qe6(pg__;l`&;7sj(# zj^FJZzAv~eArZ97<9BZN?=KA%bg&sXIBwJh_RPh^P}r7ADB>vAk*tT7*7Nn`zH!`r zrH<})Hhi6{;<#fvcGE=tg`&HtSWdzT@?1Gzt5}to$*R_P@Uu97*yUY!))HyyZFc^X z!2MRl=L#PRkDK@}P;$01TE{#yRshlO*Ku(iDaO7_;@4rZx$UD{)2mB{jU6+z)9hZq zx32}&g{+0m5Vejikm%O2f{re)4Ybv8R%_I>c*(9lM|T#4tJwNJHsQ15;+zee!2zdQ zYek&iiz%aIlrhNnG5$@^SM6Uq?au2m*RVdg5gU2zd23>z{{ZAQqU+DxF<*Bh z@NNNVd!5H@GPU&rv<)@fzNY^Ck-J-K(R*AfC2r>$ zaNI_Vm$;d(8&UN-aWs={$3y6Z4W)op-;dY9WVL~fxNF?Tx#hmvfx4rc4<)IHxwW{k zh4!*-Csz;6DOf`A%(ouD=HE0wU7+L(rQqnEWfnLQ{M zO>5Z((bP3`hP56e;~!-S-o?r=PQ!lmyi?N1W2`cFtTTEknK&TwFoJy^oc(Ndrt4R|cj z#|V>aYS2Dv@B^NzV{<|AJ_pHUwYI#-87=MH)<{95&Ti<~N~Y0t>a}&2z0L$`rSu zt6i$OerL?=yZT&bab&WSKJNhlX)<*ko*IyV(k^cbYl5LG+Px1xyQc<@=cxNonhV1U_j!2!Iy_(k@ zAP&ejJEutE-ej;_ZD$ZZ&a+)R$o^+;V6UK9G#71mDQ2{omOKyT zEpm>jC$}%eA4H3^v$&~8^giR7I7bUx_I*TPcvp(?9n+fbTdV18Gn4-SO@h^>&|9^# zMIFS9I|Jej1@doq%dHmv6D{41W3c#Q`;%=b zsmPvSC-uq`qD-2XSfRVCoZ9(Ab z6_+aMtgI0F`e9&#b1?V8EChZTS_jx#=K`}YNGw%QQ$;}mK&BLhND5S>DnK+Ms6ZmI zm5{7uLXv!xl|@PQKp={taXX*5S=-hEcCbx%JGyp|of=#PT<6p9w0)@9J7myTfE@S@ z7QM&oewaJSjm~d6@Bw&S1(sL2p6r%R;m?C{9aq#ak;RtqiZ+A9uUJ^jb=8y>qiY?x zvQ*TNXaV>h3!e7oR98v*5YW12Ke?hh-q&?ZOwsIk)V>lwg2fH(-fI^mSvy#+ z;bWr`h{KDe)~tKurwWgC7b`apj`FOuYpOuv;$|1v=Hw+{lj`3in`>xG8yJY}6^*oM zI(e;|KIe-OXz0WG(Y8lFr6H?`arX$w@bFy=lW%Ee85xcknBUQgGt=qU@QMZUtkuLZ zUA%`Ll+Ldr1M5oEer3bfujp~rK^?xQyqot!95PI?xU-hl)?aKlk~xoIC-a8(*L}V}Fzk)|H?#Pd$yNsTsMW=HpYx0L{qUB|aaxk`y)r|s1fl^#F>Nn5DcQL(z zl@=EFuDgbK8xtj)Ztv0$r|7ZnsFCA#p}GzgTASW3o84Vf`< z&dOWI7#$gl=u8H__CC9VN4c8RQj5EBhmW^d9o$%!!xRx0MSW*J$2vppW9EWRq*6Q| zX`t7d>-SDV{{XN}wWcE>A+?YfTG%zLbggxExVRS3wnuP0O7oKUCEswi(jM%!{-bX@ zWsF+b5d^T*icH5JX_1?C-9gD}%_#mBl%AV=xAG!tPeX~Z#`i0Q-K*^Tjm&5g;;+n> z7jUFA=gt!-}XkLVxd}S9m+cPUUJ^0;jU3lB?rzrrTj{Fwak~0kXt3Uozr<*~k7L|8 zOFJkTki{^6N|r+D*%N_^7fA1aOb!ftkIVQ^s^R4OLpyJZj^Y?ybJlCjkwQQAAZ(Qz z9?$!XEj2XMa9Oc^`G~rU9S%whhh*&7&#!A7)?3{^FK+o;pnJndQM|?vL6?1OO3kk`Egh4H=Zh~!$_Pf~d z1dXo{;JXjV%6o9^4madVUVyw8L{Egx>gE;Nz$WHMf9xHliJzI9kcrV!IK8g z$mPqVBE&A|KM!@5$mGU3_mWv)Vy{p};Tz^|pfi6KwDZ?N=DE3d;j-CBvl96q z(0gHu?ZoZ`3TgS{sL;DwEgSddpoZoqTnnoi9{7HyAx1gF<`KE$LryD|X@7NRHK>LL zk#1c`*-&H;pm>ng)h3!Paq+lqI^z|Ot9~qsbUuOmU14z_?iphuE-=~8^`+*57McL~ zwA47z0p?fRF74x~djVy5fuQ>r!zRvTG2O{)k?lG9H}?_4WjK|9#`7zKL{qW)dt6&n z$$jmX^FwUN@2&;K(;6FbaMm^^IsX8Rv4XU1crQ;4m8lD+4bhxgYAZ)q?^&Z|BZ>8? z)DS%RQ<}*)OLyqT=^geDwCndQ5$|`fhL^_b?Pmtm{x1@a6KATqU5`E8IT@dpKnq}Nuwm&?%O~~`_>-WzLHrb4s?>p*(q>e_{+8S7xLGZi_m2;ZOFqYiNHEm z?UD4{0jA24N*7S*<(D6fg2eR&X&4M<gR= zyGp&aYYFFC>OA-^oC4x_1IybPJO~?{JxSB-T(b+@YpIm}lo2!rf_b=}LWk^K*qX?q z5U|sx18L2DUM1;E!1Ho+dbV?B#Yecz=XIt(jzVkqFQ0d{&Qg1MFxa>s)R;Ounc{F^ zg}X^SMV5;`{rHQ~)Av~y18ojJ7dS?%v{?62d=Th8Hm8~Tm7 z-MPiw_ip*C&b(Kt?q14uiGAJ}x>y?B(%HLNSO*fr_}V_zXo&#E=$O}! zi(FgqqU&BtUar;3(WuYJnLUNq?tVh*#%p(2vOB4mVly%B5$t!*`e$14r@Kn8DHK*0 zP7Q)XWiz!A%uC@Ua1E3V&Hn&U_@?_C7n<5+B0Tn7HPAcl_p|R=pu=Qc6ppumZjFwV zyK`J#*3!KvG?3>3sc6=NN~o0-?ew?bA9A}pYnT)4B!z*uO><;-2Z|WnE2E=(eXgq4 zd@qfTb6r*uM?0AE_^O8T_Z_{WO|5bLNFFya=lP>{i((hsUy|5%+s;S27oX91Kb7a? zKj!;X^(?%u>q7@QmbVu(HalotERXpkjBYdwZ?V(O6}+N{IWE_RPP?e^D>S zgJ343cgG+a9&QXS0e9u@eC*La(px)u=YwnHcIO938~B*m{jQ+nLtiE0J7Q+O;wyH` z6f)d7u(kIN>BJ3m>PbVe6Qx$=wr3*y+1;_CD4ZH%bu}Tyu5(;Cn)7c3=D!`3q?9iB zlS<7t<*Dp_Hx1p8XBiV|^tm{iTPzMWYuH6M#_z-_#BmF~aXTk)jwX==4BHtzNjkXv zPX+T{-iIxk%nW^#Ad*)`ZmndM#tBFtI~eA)hdw&%!l7f#9^kXOeUq~cn&KxreY7`$ z<~=qRxzMtW(@GMtw$Zx^t~2@_S29)gCfe+J9N&85@e@AQ5N>Yc6p}c=+Q$~uZ+pGE zR8$4$r|;~Q!MD1zf*f8=kiO36BWzydHN2di6aAsgB)N{_9l?2@>DOeP*2R?6o%@A- zNm<4+aqc8Ekx**2TUMGpvz7TRXW1jCb!qiB_L0NfthlqYYoo_Sk&1gbhTUHrPjg=m z^UkiRD^~&AnO^0(o(x0`m!!tcAd*(Z85_>f;$6gU@K|wO$#vVeFO9Ia`yFs;kj7lI zb-lv}H#R{=xN>;ZE_J8X%`A~x^+Rt9fwi;WO{DMG*0Qd9Tlq@#tfb8No~legY~iP6 zjz=OgnJJzlm9{Sb0MfGuM?QI;=5^$6DB44RF<$o*js3oTlW~#U;|;hJdrXnbc`-a+ zHPgd(li?84#e9;-wlmooT?RiFb8=&IV~~i;8p1~4AHQg3n(DolH}-cmbXx4a)wPUY zia5c!mYyGmG4_>I^g?_Ou~}PL+1f{MkBTU4+y2yW2K4pg^6@?=incM(J8N}>@M+@D zPvu;0*zHVjYFbHck9^XZh;-7<>h3MAHZing2ET+Z@Z(k0c>`M^j~`WEy0z{x3`6%t!|BLS~xYW{@}RQZl5oZ7vYX& zn`jtar9*W9c#?H1y7=ReQbsl7hz|k4eW*02kkWx>)OKoK7GNH0H{STHCCs*x$28Y4 zfMja`jiRG)0!c{S{*|SS?+hKmb>uO9CDqM$!8Fmbpc-#!;CFd1TQo4v(AlDnR*e9W zt#v&&0=%Dh_GTwDjr|B&X?<=U`)MIy4J7-W8`#mPaU6Jsj!oL`h<&CBnLO8d_eb?R zR@pYhL>m3yRA(OHLfQhx@YcLnmc(|1`TJ+jCCt|GI!427a$u|yz0_-3*SYO;j_UlP zfCH-6#CDH!&yu#zwz{#gn;-u6=`|HnK3vHHnXr%`!Eh08ip^s=ngvhxaaOe4{34bTcqE$hMpIjpf_? zOSPpnTyE~bWwUoz3!79#@vY#&u{HEw!#*OWsJz;2|mh~8V(vRb`P}=Wo9mICzflh zc2+jO7agE$WR~(HSuHlWlG4^Vo&NwRV5uv;mF(H_wl^$o+<5zonMKL5w~ux?vVpd; zN9}a4pc|y%PN9pM;(M=Vw@*g%Kj5&>o#$=4THiJAyAt-@tPO3163t7t8kdJ!0q=Yv z+&a3raL@v^ySF}jk@hp)#@uYp>Rrk8Bc>;7BdlF1njF~-fM|59mdxL?-Qgt9CgQ_u z+)JhsxK^j;Ep%n|UF&Ym%66_R>GL zWp*`Z$#%Xgv~6tPBVOyaLvSR4o6Y2MIg1l$)|$_2!$hDLQd$n3L8m&QjJvGatKH_$5v$cwL?Y6gh4%rluy{>!Y(8(av51i_5%-H&4>p}5NV^@=C@PRao1?mj|I%J&D~h!EH7qz zuA7aSvcqpX-9fd%&R{22f=4A?S1nfM5dQ%AM3(hGMc8&m63!^%xnu6!*q;T!d&^;$ zsq;9(J-*NTXNX>6Z`#Q0arCykGsz8PbEIg9fYZ1UsjUYc#ZxRev! z1y*@D_@5P&I;!Z_9IxxCsf_A;((2ap2bqH@ac(7ScP+SV4&diR;USFw0GJAe`Wn{y z*DYslkg_6gu8Fh95FqVrgLmpUb7|3d9Bfuy`PnvCvTbGHgQXw}55;cw zcSp0a^IEyDoL)Jz%IK+9%T1eF4L!R@_pW?)w*{R!TH4gB^!SxTQZ!HyIJK4I{$;Um*U4Kp=Ha3XX$djF(^BSxqosF0L89n% zn{NoySB*#i0IOH2C1`6#rh38Cd@X#JL!EHeHMF62&>GgZfNpW1{{R(o!T@OubC_J# z?r0Pm?G@d}UMfu;D~UB^B=2{N>ACdsX!fp;Oq_c`9`2Uve>FFxCnmQM}Ux5xm6Sq1<$3DafynWv}JV z_goo0rU+z~D4=KKY)lkkdxsM4Ys}vDWo0TFP4`CmRce$tc849un}OFbIJShw@(aqb&l;*u0GvYClMUSq79!grDip}vhv6ZTi@J8Q5%)7TIW56#ocC8>({mX6+*u0C}%ZJ1rLIY1s zpTCOe-{x{wGq}SGKx210O{KwrouIm!Qo2;HH+_@7x^#x-=W~v<9^dq|Hk@m!=||0U zrKF$4p02n(CHzuG#y;l#w#;K&5o<$z#e?U29lEb~GBhhj*34aX9US)ag406ywmrj{ zZrTDCg{|g1*goeWB=>o1SH&JS-g--C(4pShK_TO9YS1)QZ*b`#4vagkY6+3xXz1L2 z>Q9}X)iBv{!db1s`BVYiBH9jTy-H=V=WblC5LcUY+Km*P8# zan-&0h7W>-7H1J=VP1$n_rc~ zMS?!y%--C+m(%@oZsqDt9pLJ{Qbi{{UIJmNNSrm~Nw| z7E~H}jaNp>(nie7Nk3jf=EZK!&5uK)cLtJAkP57D7k$qK)HOYTVbKwzX z`ZG!vUQb?oVJZtw#L#~V>fY05!%rCS~_nAx=7AMw0Y{UC23qbw~b~AC$h$NA8=j49n7LE zduDBV7kiAMr-t~OT35i8u^;WHSYAUF%Q3n8Cr2fX)vIKQq*ASs;5b#U)NW`FX&Tje z*gKE7MWoowUUFd@99SOlS(+QpGcMbch*k1m_Jx;f;4WkB_PAtXjrVWAkOMTbL_Li(6b$ztXk0(r9BiLkk;uYW=CTOw zgXG+HnH*l`G_dIHtsGZp>O0>HdU4WQ4&t_vgtg@DlcanfrAR*4HQMtErj-(D#j!E+ z31i5~f*0M(16_YT)G-#5a_eW9dhV?o9F73Gtrf1<1?o21Su)n%*hdUdxI-1ZboRCN zZh%zr)UFTG_XcXhJ7yN)tjXIWW1uCYLdJ$w{-&XHV#ZtIY@@WdbEUYHhB3~dbG%3% z8fvE-b*#g9{m&ENkUBRlww52Jz7fd;=cHkn2S)Pl3@v_!tHj-QZI@`|2Xyw#=ESgw zt}w6NBo~5LZEd6kexn~FkF(|tI_LpjyC~MWG9{0z7SbLLp~UiDV>M@$xx!?!4!nD> zaW>|B7T;{KNgwJy;#2azU7*Ad%gdH(>obv%Ig%#pLk$>S7ct!%6w0qqYTabF?6&rSP}knN7ygn@4OqR8i8 z7Y?f$<0CwSS~z}Z`7f{l00FJq&?wf901W{61-0NnTKDj_YZ>BuL)utLX%z;V@LMVA zz>1D)wJEOZ0m|*hn6Yt259!3`h=JnP0!U?f&~RKEMv2>!$j&KmX$8~CJj}7Zp|t-1 zDPESs32jZysR!xDy4~l&;MKqBTujZk^p4WLwJ#5z>a2UlfVyXE@M{{lI=!@SN+&*R z2p<-=#oV^a8>rk^$=$nmQ>D_L5L?s_Z3{!$rAIKF8Lr`;TUUQoj#jo-+uJtc2&bue z_Yc*L~)c8ZLyKBo#B*z-LcncdE!anvqi}hr04q)O6qD)VP|KQn&&r*n>CM;7h1m7 z(m&L-V}o|xTeXyIWrS(VlKJ)1Vza%T-ooeVV1?(Qanmrp%^HGO?|U8ME5&}Sf(R|E z^szPyl21%f)S8`muOs`DgU4jMUjG0gJOJL~Vs*u(#9#>l1P3wX4|5z2p!%-0<8`Li z<)X$9oBq}3MWyyn4{>njjHElQqCYFHSnb~jIz7Y9eQw!-FFrG0|U?0q)q90^`ubNlH!HIJEAhM#bE{5_t? z?QZNPyo^9(wR9u_yQ#OQFm*KBQXD-fy=9hK4&kx2%Hib_+TS*|a&RrDwnFyudk8J3 zBEA>S!pA+=HQO&Znd=YWlB5#Rv&r#(60HvXI z*>xPYa9lU!cF^XIRrZj+L)>4wAJT3uA;@BzE9V_qTNL#%H*jmmxwLbsT6!&9=kDGe zwlZ4wi&CS~Q+uXIlZOa}S_CnVNmz^6%AI(i^01JKHtX*Bf_|!&b(|u#g*FYPfi8gc97^!E!devNvRdKwVxQ zRa`lPM1(hh(y726W?_uc>>I62}xbA16*m`%edZnD3WPYlv;bz%h`~P|{!cb>i(Z4FM~>JmJcs|}{Q1q9sWZZp@ih$3~JtGa~RTM1@+ zt;>XhDK>oVjDbzTaHaZY%rrlv^Q^WNaVONw+;M7Xh${E zzU_-Fn{oM0)tXzpW#!u}?rq-M-Pt-qDILpOQ09?ck_``yq z%eQPWy^(HTbsTLM*8(8n9Hb7UrLQA%q<7rHs(UaMtS^+&#@}xQ#;kH)MB*Z`*dY_8&Iee0|t2WD*!0P0r>x#`(({;#|jj zNhgBvcDGh=HL%?^(qU$ij<|e9+q#VeNA(Qk=7MRV@+*5Jdt%w$8%d>QV-iPkYU6Ve z4&k^ulyiR*OGOG!tyX6bsWYj_zl$5wk1JtFw>Wj|3#lX$@!b`F+=a*GJX^r{uSnZG z``eCd>|ZxAq^!xjtlauGk zP4b-gec$`s`+lG2-q*|iG2z0AS%Z)Fw$h7Kp|Q2r>U#qz&rIe|*B3vu<(LzETa@dS z)RMd@*Xzi+bdW^|zmb_C>;yPSD{99ERgxPXIrpUZ9DLfDuY9}YG`qXw7W-9j+TdpJ z)&Bqnl_C2dY$-zr&^F>jbMDVm4-}82(ne?hJ~wRd6pGs#S_uhJzH}Uuo(=tYr10c{ zfYY_9nZD13Y!BG@u8!l%{q}d_uYdi1F3(o@IL`k`;}b#G#?CuA^US+X-w9Kfx06w0 zy(U7?9lzY^gm;5m;kM6|1;>6lm^+B-G9LKG7;A2HTtD_r8Ccy7Xm4e3H@Nw`2@kTw z8^TWu!=L^=!}Z5z^!h>3CC_Cg8TW4&km-U-8_q~>p^bqEkX_M=G4hwKQP`g$*^dCt z)4YQ;A?1|CSL*#XsXJU%J@fTbE5~!^AqtrfL;wnOmfuZFqQp4edg$aLWL?M9VD9}hM{`p!NyZ+m^HN2k}_Y#8LsyI_B_wu=Q3;oBY2_KNZ#FfCR#OxSc`KwsUerH|7(scbN&$aEm zg}+OjSz|F1PcP(cZX%r%q93d0i&Z7PJM|ynQf_^r_i(_kGnllm(xWo~rK`^;mNvPi zJ@xipqfO52Uh3%NdG}Re{Wzz5Ho5-GRXdHp!m`+(jT?NQx8cIFan&$yB`NC?O6HpH ze*mAoGZ$4uZt=W*FY@v1&izGC&^ht}Ipq5HaN}cv%LdaEFS{2|rOT!V%fk%j1FJhJ zP}$Ld>y6%RB;%5{2x5n7kGRZqR{aar31!Xy05e|-lp;czgmpwt-Pj0?7~V>E(42~~ zkbc|rIN*NJ0;{%fuZ2T}&nlVFkY>x?*idgcYT>csy{#R;`BB-zh!W@o^5p@sO#4c& zyKN7z8Mz!k8!orr3HY5mUr{C5GT!a?RnZLeOUTRFOmj+pc*xMr&hbTCu*!b`>)C_f z`D*!%t4X8EO)TFJ@*<&+<@8%sQv!3XJIAvRm2r_?3eR@aJ=Z;Uk>6-5#AU5|=>nCC zzUCLkex0PuoWCO>VE^=<&CP?f1$!5PGtL^?ua?3Y*sFQFEaJT;%4ZfHmOY#~^0?U) z)$rP_d5XW$ZpAHal21^a7fw6_l8Yj;J~ z4Y@|jG`t_*ayXruapkaV=hIA^trD0H^ow!k-00H04_4&qoY* z9)~N$?_SxCTjBQ3J(;Vucg6~saKT}g8>ssQRnyxOwcYc!S=-^yMW*Aw?9edLfzN^9v9InUDiO!dqYv%H^(UrGIw?z*7?U8tuH~Hu-HiDdSm#~ON;}Qve<9Da~1J-Fj*Hz;0IrIbfgYHYu zU0%ey-#?g+-siObg?R0_Fw()(7`T%QoxGYQi~kSsvN)vrV?;$|=g>{K{}&6Mwzw*I z)(|i6;Cy6ePsfw3Z~7wpLo6eoAeBJ@HG7JFGlqT8x}1v3%FV%s3=npYx$*hS%nY8B zCxhB4H?O;KuAWrS*qcv(oidoxh`^>gooFqxMDv!sHi_iye*faInu;O#%aorklGMjG z3FJD2)NN|_JihSM-BoZ3>E{J-7Y9U9L#pCL!Nu~EK=k=k24l~y1n{9Hf)=gs>Y~X5 zwSelzL#0xP1(pzX1egJwOXi7X!xU7+p)Dy4td2XzD72AvH;zvNKuE_KLs%e5IH(+l zygD)ymSB>{kx|wUl$JIe=$3kSSfKv=UU6n@)3NEt7Is z7q`}ML)nbP{{X0s668U@!dr9pF3tGMJ1!sh2Vj(^UR@GhT7_NeE%98F69IA>`)kbs ze&gxC$`}p2>F@4W-WNX95hGX=d>kxxU3&tO5L{;1B%ZtHe44q zR$$PcmJ+@sv#9 z!PZ(q8t{@ZlJ7&WK5?Fx+3lSQ_4|(It{%NhHCp(LzZ3Ruy1cEqnW9!-oNdltB*xUw z6I_Iv9_VYQ=R7=%Yvpg9dpPNa(@(4)}SgRE|w6(1Co=YxGZ+XS1 zme!Qd6spMXnvaq58rI)}*B6dq{T0d6#D#ct;bN<8W>Hd;b(om_)Wyr05fL_0oH=DI z%EoYRSW66}9N5&&GPH?Xe6dBzI=6{imy=|$pisy{$=c`kZLVUA*MS>U}> z?x-fIPxss2eoL!+Xi?Yt_kMkYR@e7)I!VcYwxl#QKIL{q*uIZG?d3AfUf-o&?NM%| z5znNqJZcl5(W>vMsr~au$I$Mjd#-)+Ee%8=)UU{yw1L(C08$;RAxAfN8gkF7tKIRX zeK#EYvPg>H0-vFLi-!Y33s}UDV4CX@%igtG^$&hlJ)g?*zWmAo_4#b`d1RK(5vP;G z{OcC*M%(or(bTi|M&|A*5na1Zo+gb?=vn0uUx}$pR(UZWG z@clTed)>c1GqL}H=%)bt4g=HsADJt)+66RjjY}<;Hu=o<;(x@Gc!%@~Sk2^zlX!Le zVEzTiV^l#i33B9oKVSfgHj+lNvZ76H6v#cKWiSf;#XJXysn1Y$SV(LSQ)(>i5>)zM zuP>{y4K{;C2u>~gj*^z`w!&EQVXjdu`67t&zx^2G&J=6YaXf|BC|8B9BF8+Wq+yK* z8!;83l62HOV}aNsRu%IXe=JXrNG-*7Dfx-XSxeb3cWvgxA(`=S#wf3zISFru@x^Al z0zIUx_U&BgCfug(b??iWKNcPn9;cBH@a{o-cFsH+0eg;B?#sW<`S{db_3SO9+pV{V zvnC#_;9J-(^c9c4r~Jmb-BM|Pk?kOki=7cQQ&Vc4{ai}wIry?O77|jSjr0z)sea#?0Hp78 zhfBScAUL!2QVqRKjczfU7SZi{$RmPQE>8#DN-QvGVapir~3 zJ?OWY%6Rk`w<+-Hu9%Z%w%(`@1vS#jX?9(=>GwD1957eCwyA;KOc%mkUGW)Z>gkWe zidHE0_>9kOM&q*US*iJ!@IZQgUsj4&$`O7mOd0qg+dTQe)D5e;c8P)Utkt_q`wbA| zobP@3$D`dwyz6Lg;^W}-z#7O5vVT}rD%JnXto%5o`GQtWm$TcwPn+tu)KoQgl1fK@ z%xIY$WI)H!Lq#Zdn3llftAfMAPve$9O|}l1P37H^H#mO}&vvM)dOESp@vnl4z4zt^ z7Mw_G9b1ZIwl+t>X(U|5VtO$u@&U~g7l=|ZF`Qk>9~c5U$dYxtH8$hq{-ps4)E~{v zH~>IvLBgc4ApzBJW_uVkoqo%Hr{6S5llIE{ zEKM16DJoMlq(Gd2XckL=CoAyJVqRe*N6^I)V^a1ztG!*{+56FV*jsg8WhKq2VD{Af z#S-jQas@R`hJ~M-RK|nzzuL`BtI^4&UFYh2Wr}9hM2%Knsux)(ahA+^Pqd^8ohEdC zVXC{BG_hDir~I+FD#f<>9^c|IxNmnmsa_~xshzXt(ZCrqYpPxH=?@A@#W#yQ2VSH_ zxsO}-dyLYZyZlA6srR{Ke6if{FV*5i)xjqH%q^f*3JSh`J!t3>w2?Lwati3qPKy}g?GUgtj#P^ zkzCw~ue(5%r}rGsLH$aB)!pVryfKZl-%hm6N6jH=1!=_ycf*Aaau8fO{bSPr67J9K zl@##;{JXb4IK^;gbEhH$xrud6fitUrx>V-3L)fkJ-BoeV1LzBiRNg^K>RE9`ll?F;Pxl}PzE@5BC4?@g^xvNiJe4#z4VFYVxUcMXWL@gsPr>E(9`~X6(U$jwvaHh!^`FW!7(TZvjJn}5k1b!y~;ogtsDVP$AFbu5ZKj_DvAcibUf_Wfje}oojdfEq z#w1}amf0Xt{Bt+7426`&q+D$VjEjFLJ{eq!@`#f%gR(FSZ9FsbyB2`LJzCYpNs%5U zaDv+)vE7X4x^d?ez)S^EHDxH9C|V(0f(u_zu5i|p{?B_L0F0b5h}GCk8Z8giN24Uu z7^oN=CWHi9`XZGtU0+XL4lTV#a;itcJMj$qM3NDZ1N&VEm;!z2xisHrom}XJbE}sM zW$(WGsXnK4*I?cu*ntjn-FZ>hS8oA<*R7CNtx7=CcmmrMFBFs#;Z^Fk>FV#m2$shdgXuV@3$$gTo34bXm z>0(I>sY*ptU`ladGnr&{>wNmRCh=yse!Z_W6%kfryC=q#laGV*zDoD*vh%ys(M9#n z(+11b2{DM%c9w?Y#w@2hmlviulLV=^&Uy#_)mG;%-7?wdPwx8ysC?w}h;yv7(Z}gm zeYMBE8@Po>z)Q33AnDA-4l~N$n9>#HrLe2A;z1!p2J6iGfJppwNa5Jl@+xjhH5QLN z{ioDi1V7%)i?(BIdX`F+rIS)@V?4L?({m&O9Xt(6Q}$>RshBDekLyQDalHl6ncRHY z<1?p$>x(t|igi)(jb7!$tEFHf=8V7AO_HL=LtO)MsRiK0{jYNoY^0NV1vfgYHXoG}1Aw~w>W^;^8BM6%AER33?>QmR7sX-S4kzWGl-=rG zao zV0W+(4a`Jg#aXUE@U+eVCVb&y0fH@olYzqm1|MpWi#D4?J{D4tyijFN8aU?KZ+X~Wp<}Fk0m@_S5bm|uh}^?i z5*gh#tZ|9gyF+=YY}S@XtJ={lq}yT~mMPNBEhls#>f$3t@gvw`qBA+8{Nx&EXD9CEVp~>SgyXo){Zd3^s_|7R@KJaX@DX;jH z+t-zs$4Q>@Z=txq3uXMTNd;rC*D8E`|L6?5JVH2mnS8_WQa;9wj5E?G0y!2SahJjF zsmUEPsr$qbxJi*5-u7$@5m$NjPjG4AG| zieS4XwoHZR8SQ!RC6ITk=MS4$Cj)a9n{vAjPA+*O=dyYxY!$=I_1gO%c^EuS4jRYQ zzCwOk%uMmWT}<&G`{v|v-3&FJ;6NO-*mn{og*Ajh`Txob?k;@MD#$D4^K8cS=?;H_ z6&{i*Kf0)tLK9>8hk*{Gev)o8eA@R)RxcsT{k?Mk|NDzEibQBY&{8Kvn`L7%Ue^TeFa z)O>e|e6`HGT%7+O;9LfK-+Al9%#F*+g*y}e)o0y?e{qL;e~vCFo3DQSf^U8#SS>3K zx|V4MO}#zd54GF+B^3}gNT~Q1sr0t`fth0E9NN;tWxd2$MPj4<3?QX$;~Z6B&^i4K^9X(t#`?jOCpX2!o?b^6;*eJduVl zWN>sfzAj-O%d3+uihEBjB{P9camLn@K)HgYT+Q_3RLJ}Lhu=)c2T1qmvYtUs_iDr3 zS7p%Nr-}Flq&+AAzbTYj>nkIx;wmxuZO?x0vq^L{{`DpUt(KUI{TN$eE@pZuO0u5r z`hbhO1EGU_9@jPL*3bXbkbX0;Ises&@6xSDzs$d8WpG{~HYRcX%I05bYVQ*LQ8~V^ zwC~56{VZ`>po(khU9cv$ws)}TP4^PTHIc!8Ejz8d#~EPDsC%Ap7obo8D7esO+m6&k z4w8~sfa|+F;?*JWxOq3&F4(K>9q~hIGKBU%-C4f$SH21+T3Gmf zV4eRy-P%dvdXHKt9X%E(yKC?LIf$r2@%$#l8hL>X?KA%I6k>2nB}cUA#b{A{&gkkG zT+t>kM_4%ILSfMuSaxEn{L3`dwASeG;HQ1Z&MUVEiKY+LD<2g~D^9LdJde5EiEUK$ z9-NEphofJ%EB+3xfNDsVNyl8a-ZuCd|A3&5gQK6d6}L^gYJ-e&6HhEl&!`=(UG_++=k&{;j^Yrp=jbe@#sr zN7eKT>OQX!5=k!`6ooWxp1iPO7s|D9-1d~UCI^z3Tz^j9c;x40*8z2!o+|w|PM8ke zJIsgGYLix5*#sYV5`Zi!2;z&aFV5xVo|-d%H1SN%wQyI zxzhY61}sbFti^eweTM+|#qlzDX4XjYT+gC0@`s%Zpm3^frUAsQjqW_j!0ePQ}5I_(!qn7SG_y!c! zHQn#5iQ&?OJ}v|R_xA0Xm~qk71Rk^<$K!IKB|riA?^UnUA_1I{kSs&MV6oJS*aR%E z9>W`WV(AEkQNjO2se&76oDvuvCb>-LzbK+drN;6^F=9=vm87;DsF)A&g@&C3!b9ZA zLwXFaDCU#WCnmx!&><^aIxSWZt1?7yI`@p)mQEz0?{{>ya{aybwz58V8}DlQHZNV*=0v=i%nmsRL18a*NV`U%T>w%j6{!_0V>wO=B?ddwcSd>0XDdr1)D z(piYeSS}7xwB4SkjdIDln!O~71Qjk@NGIDMJ@o6o#2LAw#&znYQ@4iuUl7A7)u>`($YZOlMf%d64?)JFbf8uU*uQUi^;oRLXha=Cq7}x;lFw=*FX1ovVgXFe>eFd)d@pR) z@?clw#llqv>?ZzArpYkI+kxwHjoR+hn3FaE_6tizqy?hd%F)c}e3j^_`XjNmBk>3O zPV?fr^`U2+gxESXHS6p?l}a}qdl5WdPW<%Ur}Z3``U;AC6^(_CObuiIS|4bXPi{<) zYOiHPO-$o^eg(QC7aKm6BtJIzJ{g^THK#qJ;Ipq8!DlOM45XY`2-lh^BFuc0#J z`oX!^YjfbAY~y8PW0j#*l~TgFmxOVT|Jc6W$c{M@ypBQC?P~p4)veAI@KC-ta56LD z&*eY9C=m1YW`+&hh}=|;ME3Qo8UA*ms?odd9!e_v(w=XAxAAYh%72dhW-yEALxAM!XGp`xwscTDU?%3^uas`6W}{(}*yg3hsWGK;{JgpCFXTpOctz1|aSP_K zWcCwk`$DD^dLQTYq_tIITJhY|O$njtKfCK2?I+cqGmhs~1xc@y%^-g{3&n&~1IQaq zBzlB}R&!}}*LSroV_3M6H-P-pufM$@A3rRhp-Q3$!5Y2v&p23BnxAR8n;J88m*+@v zpJxyEo|(8+x86kO$=|b)C>B_J8iM%vhOi@bH{W!~GSU0qH;Y?n_|zBKaYtd^nsTOV zOj;_()?X@)BbTE3*hHgB1Z%gy8T7Gf6`rRr*50$Y#iUAOj>Za=`y_yX=b?{FgrZWR z0IG^5hy!?Dj&bw^veAI&`GG*>zwkC`j4@%tAP7br@(5!f0+)%1mbW4DWF%m9^nq}B z8-@={n6$v7i2oc`hsm8t;nj&END_!BGejDABa;#Gtep8I&RRj}#^8-KOFAo>t@sX^ z$Rqe=#Q3j*ga}a)Eprj#Uv_wo;+f`7X6En?+1tao`l=>HWId!A9rGB+luSImk(uLD z=6yUy^!nkthl@8yV|XR0BTqPsJZ;)8!)IGm5YZ8LfxEs?u#F4WL)lvFXW(nCU1g;jZE0cv$!Jp6i?78+SDiX=(cATqh?)K$&UsGxsxeMab$gt_V5}*~sNzv}ENcLm8vjp-BKcV&7YmjWI?nM0b>l z2@z$YkKy65q{e2l{7Z|49P(E7Mg`K6w8VeEr=;>>B(9UNjDTm$7%#*m!^R-P6e|z+ z!cr>{a*UOfjSgr6c3~V_Rw-a2Nr*Y?iM5x@dw8Jc5IhtZi8) zo>>zt-elG9wtBpnhYWqXaC!}e9ON4a@(l?T3lEiLBUUnj+#;=yzG9^xWRk!rj79vP zrc{PaAUMVlU@%q>tN+tZ4aNf^2blq=&p7BBo>5ryMEZF~DZ~Z=fr87#vTgDk>m+he zqKpy70HPU)OcRGtNJ%r`uyY|ls!;=PsYdmYr`fqtG>4?tp^0zhPU6vzz3 zlwbzp>XQINjLhIn|Ax=c&;&~aO6!e9Wymm&`bJnjBAEze_%uThD}mI9!sDPkBqNsC zv447_BndMACJu{1nepn4QK5X~Dt9`FVN9|EOeTR`$xDVX+$i;*FQv*wp=6$s!vYxh z0D>+AlZII6!T99z5>SYL;ezp2XAGdmp@m>j1{G-`z>1>~Ac2IjNFe28Vgnh&1vCHm G@&5r>oN71# literal 0 HcmV?d00001 diff --git a/public/assets/empty-img.png b/public/assets/empty-img.png deleted file mode 100644 index 9ceb2a90685559c1f2d0fb006b2ad2892ab737dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2846 zcmb_e2UHVz8V3Wyq71Uq#6i*Axge*MwM-y@(jvklpwd(nb0{ihLRLg-s8NwYS1Ctx zJ+M(l5SHrD9FEl>EuoVTnk<+Niqyys+{yCx-MhE9ck|x=`+oC(zpu{sy*JlwZ78xb zsxo3?VzQQp%>ozVOak1o76)`cHyOw4LkNJy__Z+#jnWBR7 zJ`it4vdbC?HIBKKsrfwV07u!w`QFurT2UV_CANH-W4w{vb+iBY!UAgtlU(64@yesG z_o5jO-3CID1SZVg0Dv{CahU0^_c(^7|HWCxQUGs>{~6;>R%0k~iH~zWJOB3>b7%g_ z``z|@U!IvHrDqs>6>mR?>19cy?x`Xmll87;_j@+=0cTIz* zax~>jOc~7Y-yWaLm3CIwY;y01$%x{Z8spm>D|+Y7p#HSmS2S36Vn5cl9Osu zcl)qADBerbo0wLE4#$q=5->~{>M%Pru0XLBXhjp4CzN|EePgKP(|PAMVcBfu^x=1f zGHm1} zx=1vY-*(Tb)rIfTIXM_Ad~qPy=(+Lbs0<;Tx!bYgZVs)e)rno2Zy&HmcO<#{CbE!v*GOI>ZC zT`Jcj*w)RSZlcTgsE{{U9PVe?$EqQ`NB$4@2983i_w0Yj>MBg*dIYLZPnTJpq6PK8 zlS4F)ZMl#%;Bgh5xc{*Pf>Z&DV{lpU4Wc)cj7T9^4Qxg>gnRBr6S+SsB2_<|4&4%> z1<+4O%<&Y*gW!4BEe^&Pe#zj91Q9Bic zyb#3x3KXxk>pRy3nWTeJ!Wl`*8(0DN+<;4JEI;*K@qAikr|7+3zARE$)+Y!Q85rfP z?A&knY&6#QCLy;fYNrU-*G63XgE8$&;GJk%b<(Abl#4XZ2ta+O4_aA-H_l=;nv!C z-r|ddGYn&TUEH5}3<6S{y}%iva2focrsH!EgA|Q@Y z{OK(qe9e9w6~`Xatkoc{^xvnNNn8f?I7taA9!WZmXo21IYc4@50K~=9sbuL^7m%+Dg3hNxg4F@YYzvcsY%^u05s>Gjj$48GN@vl#oHbq72uMsLjn$DSJP7?D z`rzV+tifU_1~<2Iv;z#+N@-b!^IH7?Xt*LJtda8w0CP;*w4W967}UpeZ>1YqZBY@5 z&&^6@BcW zNm5bOxfg*xxmUMKAiZfuqS>MMSI-~0=o%r(Tztj~0pVATyRz|~fo2yUDuSE;a!^n& zj^*^65mbv~8c&d5yo2B6$Vq`+zTe|4vL=Y(O2TfeTAV4;l?Vl(weiFK0HB9QUgNWMM;lPH2Cb<0;P~vLt$7mUQf*fX zxjk#zN!mNiAR30PEqK0Xh(XNc*ydUw9d`-9kbC_0SiBMKT33+ku}=EA+{Ym&53oX$ zNM{WI$iiLXdg)OdR9RlO`Wk>Tt2%BF5cR1v7aD43<>sHV9YhQ$pNhhXiy9o7OZDw5 zGNVDBl9W%e0CoXan&0z_!ZSWG$%S-7DR63i!UajDfOUITnFsffCh^|<)4Fz6K}T?; z=5{4Jw@M#?*u`K$G(M_D6Ay5u9-GZ$n2vpo4~zadIBCxkXBOor5s>OIVuCL!97Bcn z`0{9MQN%w=8C<6aKy?qE;4`akq)0<~nfI-=pt*5Sui6gPjd6qr>FWm^B8e%~DSi^S zVMwK37xE?TP6y=?Ye483P7IY#row}?Yd-P_h*bZL8ct+Vl}5M?Tz@6OcF+%LPosv{ zzM^edMTIEu@)lw%d&27x`OwNS=0wS?3<^TWy diff --git a/quasar.config.js b/quasar.config.js index 7af8b1f..5f185bc 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -119,7 +119,7 @@ module.exports = configure(function (/* ctx */) { // directives: [], // Quasar plugins - plugins: ["Meta", "Loading"], + plugins: ["Meta", "Loading", "Notify"], }, // animations: 'all', // --- includes all animations diff --git a/src/App.vue b/src/App.vue index 766718e..712cc57 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,11 +1,11 @@ + + - - diff --git a/src/boot/axios.js b/src/boot/axios.js index f10e1cd..ecd3624 100644 --- a/src/boot/axios.js +++ b/src/boot/axios.js @@ -7,7 +7,8 @@ import { boot } from "quasar/wrappers"; // good idea to move this instance creation inside of the // "export default () => {}" function below (which runs individually // for each client) -const api = axios.create({ baseURL: "http://localhost:5000/" }); +const api = axios.create({ baseURL: "http://localhost:3000/jsonServer/" }); +const apiBack = axios.create({ baseURL: "http://localhost:5000/api/" }); export default boot(({ app }) => { // for use inside Vue files (Options API) through this.$axios and this.$api @@ -17,8 +18,9 @@ export default boot(({ app }) => { // so you won't necessarily have to import axios in each vue file app.config.globalProperties.$api = api; + app.config.globalProperties.$apiBack = apiBack; // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) // so you can easily perform requests against your app's API }); -export { api }; +export { api, apiBack }; diff --git a/src/boot/i18n.js b/src/boot/i18n.js index e3ae0dc..4bb3e96 100644 --- a/src/boot/i18n.js +++ b/src/boot/i18n.js @@ -1,6 +1,6 @@ import { boot } from "quasar/wrappers"; -import { createI18n } from "vue-i18n"; import messages from "src/i18n"; +import { createI18n } from "vue-i18n"; export default boot(({ app }) => { const i18n = createI18n({ diff --git a/src/components/@inputs/Calendar.vue b/src/components/@inputs/Calendar.vue index 7f8125a..e88bbef 100644 --- a/src/components/@inputs/Calendar.vue +++ b/src/components/@inputs/Calendar.vue @@ -1,3 +1,66 @@ + + - - diff --git a/src/components/@inputs/PostalCode.vue b/src/components/@inputs/PostalCode.vue index 31fb34b..c39ecb7 100644 --- a/src/components/@inputs/PostalCode.vue +++ b/src/components/@inputs/PostalCode.vue @@ -1,38 +1,16 @@ -