From d96db07c8686e3c56fdd68a4daa94a8df452d152 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 01:52:30 +0900 Subject: [PATCH 01/80] =?UTF-8?q?[CHORE]=20CORS=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 ++ src/config/index.ts | 5 +++++ src/index.ts | 9 +++++++++ yarn.lock | 20 +++++++++++++++++++- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 3116015..8eb64ec 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,10 @@ "typescript": "^4.7.4" }, "dependencies": { + "@types/cors": "^2.8.12", "@types/nanoid": "^3.0.0", "axios": "^0.27.2", + "cors": "^2.8.5", "dayjs": "^1.11.3", "dotenv": "^16.0.0", "express": "^4.17.3", diff --git a/src/config/index.ts b/src/config/index.ts index bf6c348..e212cb4 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -37,4 +37,9 @@ export default { * jwt Algorithm */ jwtAlgo: process.env.JWT_ALGO as string, + + /** + * baseUrl + */ + baseUrl: process.env.BASE_URL as string, }; diff --git a/src/index.ts b/src/index.ts index 7aaf2d8..85b99b5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,12 +2,21 @@ import express, { Request, Response, NextFunction } from 'express'; const app = express(); import connectDB from './loaders/db'; import routes from './routes'; +import cors from 'cors'; +import config from './config'; import dotenv from 'dotenv'; dotenv.config(); connectDB(); +app.use( + cors({ + credentials: true, + origin: ['http://localhost:8000', config.baseUrl], + }), +); + app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(routes); //라우터 diff --git a/yarn.lock b/yarn.lock index 14285d6..c58bea7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -111,6 +111,11 @@ dependencies: "@types/node" "*" +"@types/cors@^2.8.12": + version "2.8.12" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + "@types/express-serve-static-core@^4.17.18": version "4.17.28" resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz" @@ -586,6 +591,14 @@ cookie@0.4.2: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" @@ -1628,6 +1641,11 @@ normalize-url@^4.1.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" @@ -2188,7 +2206,7 @@ validator@^13.7.0: resolved "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz" integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== -vary@~1.1.2: +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= From becd5f670e61c497057662f8e338069fb5885f70 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 02:55:19 +0900 Subject: [PATCH 02/80] =?UTF-8?q?[FEAT]=20=ED=98=BC=EC=9E=90=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlonePackingListCategoryController.ts | 102 ++++++++++ src/interface/IAlonePackingList.ts | 21 ++ src/routes/AlonePackingListCategoryRouter.ts | 23 +++ src/routes/index.ts | 2 + .../AlonePackingListCategoryService.ts | 186 ++++++++++++++++++ 5 files changed, 334 insertions(+) create mode 100644 src/controllers/AlonePackingListCategoryController.ts create mode 100644 src/routes/AlonePackingListCategoryRouter.ts create mode 100644 src/services/AlonePackingListCategoryService.ts diff --git a/src/controllers/AlonePackingListCategoryController.ts b/src/controllers/AlonePackingListCategoryController.ts new file mode 100644 index 0000000..c307971 --- /dev/null +++ b/src/controllers/AlonePackingListCategoryController.ts @@ -0,0 +1,102 @@ +import express, { Request, Response, NextFunction } from 'express'; +import statusCode from '../modules/statusCode'; +import message from '../modules/responseMessage'; +import util from '../modules/util'; +import { validationResult } from 'express-validator'; +import { CategoryCreateDto } from '../interface/ICategory'; +import { CategoryUpdateDto } from '../interface/ICategory'; +import AlonePackingListCategoryService from '../services/AlonePackingListCategoryService'; + +const createCategory = async (req: Request, res: Response) => { + const error = validationResult(req); + if (!error.isEmpty()) { + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE)); + } + + const categoryCreateDto: CategoryCreateDto = req.body; + + try { + const data = await AlonePackingListCategoryService.createCategory(categoryCreateDto); + if (data === 400) { + res + .status(statusCode.BAD_REQUEST) + .send(util.success(statusCode.BAD_REQUEST, message.NO_DATA)); + } else { + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.CREATE_TOGETHER_CATEGORY_SUCCESS, data)); + } + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + +// const updateCategory = async (req: Request, res: Response) => { +// const error = validationResult(req); +// if (!error.isEmpty()) { +// return res +// .status(statusCode.BAD_REQUEST) +// .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE)); +// } + +// const categoryUpdateDto: CategoryUpdateDto = req.body; + +// try { +// const data = await TogetherPackingListCategoryService.updateCategory(categoryUpdateDto); + +// if ( +// data === 'no_list' || +// data === 'no_category' || +// data === 'no_list_category' || +// data === 'null' +// ) { +// res +// .status(statusCode.BAD_REQUEST) +// .send(util.fail(statusCode.BAD_REQUEST, message.NO_PACKINGLIST)); +// } else { +// res +// .status(statusCode.OK) +// .send(util.success(statusCode.OK, message.UPDATE_TOGETHER_CATEGORY_SUCCESS, data)); +// } +// } catch (error) { +// console.log(error); +// res +// .status(statusCode.INTERNAL_SERVER_ERROR) +// .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); +// } +// }; + +// const deleteCategory = async (req: Request, res: Response) => { +// const { listId, categoryId } = req.params; +// try { +// const data = await TogetherPackingListCategoryService.deleteCategory(listId, categoryId); +// if ( +// data === 'no_list' || +// data === 'no_category' || +// data === 'no_list_category' || +// data === 'null' +// ) { +// res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); +// } else { +// res +// .status(statusCode.OK) +// .send(util.success(statusCode.OK, message.DELETE_TOGETHER_CATEGORY_SUCCESS, data)); +// } +// } catch (error) { +// console.log(error); +// res +// .status(statusCode.INTERNAL_SERVER_ERROR) +// .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); +// } +// }; + +export default { + createCategory, +// updateCategory, +// deleteCategory, +}; diff --git a/src/interface/IAlonePackingList.ts b/src/interface/IAlonePackingList.ts index e49191d..67fbc6d 100644 --- a/src/interface/IAlonePackingList.ts +++ b/src/interface/IAlonePackingList.ts @@ -38,3 +38,24 @@ export interface AlonePackingListResponseDTO { ]; isSaved: boolean; } + +export interface AlonePackingListCategoryResponseDto { + _id: mongoose.Types.ObjectId; + category: [ + { + _id: mongoose.Types.ObjectId; + name: string; + pack: [ + { + _id: mongoose.Types.ObjectId; + name: string; + isChecked: boolean; + packer: { + _id: mongoose.Types.ObjectId; + name: string; + }; + }, + ]; + }, + ]; +} \ No newline at end of file diff --git a/src/routes/AlonePackingListCategoryRouter.ts b/src/routes/AlonePackingListCategoryRouter.ts new file mode 100644 index 0000000..26bc39a --- /dev/null +++ b/src/routes/AlonePackingListCategoryRouter.ts @@ -0,0 +1,23 @@ +import { Router } from 'express'; +import { body } from 'express-validator'; +import AlonePackingListCategoryController from '../controllers/AlonePackingListCategoryController'; +import auth from '../middleware/auth'; + +const router: Router = Router(); + +router.post( + '/', + [body('name').notEmpty(), body('listId').notEmpty()], + auth, + AlonePackingListCategoryController.createCategory, +); + +// router.patch( +// '/', +// [body('id').notEmpty(), body('name').notEmpty(), body('listId').notEmpty()], +// auth, +// TogetherPackingListCategoryController.updateCategory, +// ); + +// router.delete('/:listId/:categoryId', auth, TogetherPackingListCategoryController.deleteCategory); +export default router; diff --git a/src/routes/index.ts b/src/routes/index.ts index 8b6ff91..8443306 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -7,6 +7,7 @@ import TogetherPackingListCategoryRouter from './TogetherPackingListCategoryRout import TogetherPackingListPackRouter from './TogetherPackingListPackRouter'; import TogetherPackingListRouter from './TogetherPackingListRouter'; import AlonePackingListRouter from './AlonePackingListRouter'; +import AlonePackingListCategoryRouter from './AlonePackingListCategoryRouter'; import TemplateRouter from './TemplateRouter'; const router = Router(); @@ -17,6 +18,7 @@ router.use('/folder', FolderRouter); router.use('/packingList', PackingListRouter); router.use('/packingList/together', TogetherPackingListRouter); router.use('/packingList/alone', AlonePackingListRouter); +router.use('/packingList/alone/category', AlonePackingListCategoryRouter); router.use('/packingList/together/category', TogetherPackingListCategoryRouter); router.use('/packingList/together/pack', TogetherPackingListPackRouter); diff --git a/src/services/AlonePackingListCategoryService.ts b/src/services/AlonePackingListCategoryService.ts new file mode 100644 index 0000000..184d83f --- /dev/null +++ b/src/services/AlonePackingListCategoryService.ts @@ -0,0 +1,186 @@ +import { TogetherPackingListCategoryResponseDto } from '../interface/ITogetherPackingList'; +import { CategoryCreateDto } from '../interface/ICategory'; + +import TogetherPackingList from '../models/TogetherPackingList'; +import Category from '../models/Category'; +import Pack from '../models/Pack'; +import { CategoryUpdateDto } from '../interface/ICategory'; +import mongoose from 'mongoose'; +import { AlonePackingListCategoryResponseDto } from '../interface/IAlonePackingList'; +import AlonePackingList from '../models/AlonePackingList'; + +const createCategory = async ( + categoryCreateDto: CategoryCreateDto, +): Promise => { + try { + const listId = categoryCreateDto.listId; + const newCategory = new Category({ name: categoryCreateDto.name }); + await newCategory.save(); + + await AlonePackingList.findByIdAndUpdate(listId, { + $push: { category: newCategory.id }, + }); + + // Pack 생성되지 않는 오류로 추가 + const pack = Pack.find(); + + const data: AlonePackingListCategoryResponseDto | null = await AlonePackingList.findOne( + { _id: listId }, + { category: 1 }, + ).populate({ + path: 'category', + model: 'Category', + select: { _id: 1, name: 1, pack: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'pack', + model: 'Pack', + select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'packer', + model: 'User', + select: { + _id: 1, + name: 1, + }, + }, + }, + }); + + if (!data) return 400; + else return data; + } catch (error) { + console.log(error); + throw error; + } +}; + +// const updateCategory = async ( +// categoryUpdateDto: CategoryUpdateDto, +// ): Promise => { +// try { +// const categoryId = categoryUpdateDto.id; +// const categoryName = categoryUpdateDto.name; +// const listId = categoryUpdateDto.listId; + +// const cate = await Category.findById(categoryId); +// if (!cate) return 'no_category'; + +// const list = await TogetherPackingList.findById(listId); +// if (!list) return 'no_list'; + +// // list의 category 배열에 존재하지 않는 categoryId인 경우 +// if (!list.category.includes(categoryId)) return 'no_list_category'; + +// await Category.updateOne( +// { _id: categoryId }, +// { +// $set: { +// name: categoryName, +// }, +// }, +// ); + +// const data: TogetherPackingListCategoryResponseDto | null = await TogetherPackingList.findOne( +// { _id: listId }, +// { category: 1 }, +// ).populate({ +// path: 'category', +// model: 'Category', +// select: { _id: 1, name: 1, pack: 1 }, +// options: { sort: { createdAt: 1 } }, +// populate: { +// path: 'pack', +// model: 'Pack', +// select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, +// options: { sort: { createdAt: 1 } }, +// populate: { +// path: 'packer', +// model: 'User', +// select: { +// _id: 1, +// name: 1, +// }, +// }, +// }, +// }); + +// if (!data) return 'null'; +// return data; +// } catch (error) { +// console.log(error); +// throw error; +// } +// }; + +// const deleteCategory = async ( +// listId: string, +// categoryId: string, +// ): Promise => { +// try { +// const cate = await Category.findById(categoryId); +// if (!cate) return 'no_category'; + +// const list = await TogetherPackingList.findById(listId); +// if (!list) return 'no_list'; + +// const categories = list.category; +// const stringCate: string[] = []; +// const packs = cate.pack; + +// categories.map((cat) => { +// stringCate.push(cat.toString()); +// }); +// if (!stringCate.includes(categoryId)) return 'no_list_category'; + +// await Pack.deleteMany({ _id: { $in: packs } }); +// await Category.deleteOne({ _id: categoryId }); + +// categories.splice(stringCate.indexOf(categoryId), 1); + +// await TogetherPackingList.updateOne( +// { _id: listId }, +// { +// $set: { +// category: categories, +// }, +// }, +// ); + +// const data: TogetherPackingListCategoryResponseDto | null = await TogetherPackingList.findOne( +// { _id: listId }, +// { category: 1 }, +// ).populate({ +// path: 'category', +// model: 'Category', +// select: { _id: 1, name: 1, pack: 1 }, +// options: { sort: { createdAt: 1 } }, +// populate: { +// path: 'pack', +// model: 'Pack', +// select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, +// options: { sort: { createdAt: 1 } }, +// populate: { +// path: 'packer', +// model: 'User', +// select: { +// _id: 1, +// name: 1, +// }, +// }, +// }, +// }); + +// if (!data) return 'null'; +// return data; +// } catch (error) { +// console.log(error); +// throw error; +// } +// }; +export default { + createCategory, +// updateCategory, +// deleteCategory, +}; From 0eae9b86dcf3469964c36233a1396ccaff884867 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 03:19:37 +0900 Subject: [PATCH 03/80] =?UTF-8?q?[FIX]=20CORS=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 85b99b5..7e7478f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,7 +13,7 @@ connectDB(); app.use( cors({ credentials: true, - origin: ['http://localhost:8000', config.baseUrl], + origin: ['http://localhost:3000', config.baseUrl], }), ); From 302a4853707578a23b0d2881074299ed9b935094 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 04:18:24 +0900 Subject: [PATCH 04/80] =?UTF-8?q?[FEAT]/#64=20=ED=98=BC=EC=9E=90=20?= =?UTF-8?q?=ED=8C=A8=ED=82=B9=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20&=20id=20->=20=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlonePackingListCategoryController.ts | 66 +++++----- src/interface/ICategory.ts | 2 +- src/modules/responseMessage.ts | 8 ++ src/routes/AlonePackingListCategoryRouter.ts | 12 +- .../TogetherPackingListCategoryRouter.ts | 2 +- .../AlonePackingListCategoryService.ts | 115 +++++++++--------- .../TogetherPackingListCategoryService.ts | 2 +- 7 files changed, 106 insertions(+), 101 deletions(-) diff --git a/src/controllers/AlonePackingListCategoryController.ts b/src/controllers/AlonePackingListCategoryController.ts index c307971..43fc880 100644 --- a/src/controllers/AlonePackingListCategoryController.ts +++ b/src/controllers/AlonePackingListCategoryController.ts @@ -26,7 +26,7 @@ const createCategory = async (req: Request, res: Response) => { } else { res .status(statusCode.OK) - .send(util.success(statusCode.OK, message.CREATE_TOGETHER_CATEGORY_SUCCESS, data)); + .send(util.success(statusCode.OK, message.CREATE_ALONE_CATEGORY_SUCCESS, data)); } } catch (error) { console.log(error); @@ -36,40 +36,40 @@ const createCategory = async (req: Request, res: Response) => { } }; -// const updateCategory = async (req: Request, res: Response) => { -// const error = validationResult(req); -// if (!error.isEmpty()) { -// return res -// .status(statusCode.BAD_REQUEST) -// .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE)); -// } +const updateCategory = async (req: Request, res: Response) => { + const error = validationResult(req); + if (!error.isEmpty()) { + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE)); + } -// const categoryUpdateDto: CategoryUpdateDto = req.body; + const categoryUpdateDto: CategoryUpdateDto = req.body; -// try { -// const data = await TogetherPackingListCategoryService.updateCategory(categoryUpdateDto); + try { + const data = await AlonePackingListCategoryService.updateCategory(categoryUpdateDto); -// if ( -// data === 'no_list' || -// data === 'no_category' || -// data === 'no_list_category' || -// data === 'null' -// ) { -// res -// .status(statusCode.BAD_REQUEST) -// .send(util.fail(statusCode.BAD_REQUEST, message.NO_PACKINGLIST)); -// } else { -// res -// .status(statusCode.OK) -// .send(util.success(statusCode.OK, message.UPDATE_TOGETHER_CATEGORY_SUCCESS, data)); -// } -// } catch (error) { -// console.log(error); -// res -// .status(statusCode.INTERNAL_SERVER_ERROR) -// .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); -// } -// }; + if ( + data === 'no_list' || + data === 'no_category' || + data === 'no_list_category' || + data === 'null' + ) { + res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NO_PACKINGLIST)); + } else { + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.UPDATE_ALONE_CATEGORY_SUCCESS, data)); + } + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; // const deleteCategory = async (req: Request, res: Response) => { // const { listId, categoryId } = req.params; @@ -97,6 +97,6 @@ const createCategory = async (req: Request, res: Response) => { export default { createCategory, -// updateCategory, + updateCategory, // deleteCategory, }; diff --git a/src/interface/ICategory.ts b/src/interface/ICategory.ts index 3d1ebcd..37512e9 100644 --- a/src/interface/ICategory.ts +++ b/src/interface/ICategory.ts @@ -11,7 +11,7 @@ export interface CategoryCreateDto { } export interface CategoryUpdateDto { - id: mongoose.Types.ObjectId; + _id: mongoose.Types.ObjectId; name: string; listId: mongoose.Types.ObjectId; } diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 495cf6c..4dd939d 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -40,6 +40,14 @@ const message = { //혼자 패킹리스트 CREATE_ALONEPACKINGLIST_SUCCESS: '혼자 패킹리스트 생성 성공', + CREATE_ALONE_CATEGORY_SUCCESS: '혼자 패킹리스트 카테고리 생성 성공', + UPDATE_ALONE_CATEGORY_SUCCESS: '혼자 패킹리스트 카테고리 수정 성공', + DELETE_ALONE_CATEGORY_SUCCESS: '혼자 패킹리스트 카테고리 삭제 성공', + CREATE_ALONE_PACK_SUCCESS: '혼자 패킹리스트 짐 생성 성공', + UPDATE_ALONE_PACK_SUCCESS: '혼자 패킹리스트 짐 수정 성공', + DELETE_ALONE_PACK_SUCCESS: '혼자 패킹리스트 짐 삭제 성공', + READ_ALONEPACKINGLIST_SUCCESS: '혼자 패킹리스트 상세 조회 성공', + DELETE_ALONEPACKINGLIST_SUCCESS: '폴더 속 혼자 패킹리스트 삭제 성공', // 함께 패킹리스트 관련 CREATE_TOGETHER_CATEGORY_SUCCESS: '함께 패킹리스트 카테고리 생성 성공', diff --git a/src/routes/AlonePackingListCategoryRouter.ts b/src/routes/AlonePackingListCategoryRouter.ts index 26bc39a..4c9d23c 100644 --- a/src/routes/AlonePackingListCategoryRouter.ts +++ b/src/routes/AlonePackingListCategoryRouter.ts @@ -12,12 +12,12 @@ router.post( AlonePackingListCategoryController.createCategory, ); -// router.patch( -// '/', -// [body('id').notEmpty(), body('name').notEmpty(), body('listId').notEmpty()], -// auth, -// TogetherPackingListCategoryController.updateCategory, -// ); +router.patch( + '/', + [body('_id').notEmpty(), body('name').notEmpty(), body('listId').notEmpty()], + auth, + AlonePackingListCategoryController.updateCategory, +); // router.delete('/:listId/:categoryId', auth, TogetherPackingListCategoryController.deleteCategory); export default router; diff --git a/src/routes/TogetherPackingListCategoryRouter.ts b/src/routes/TogetherPackingListCategoryRouter.ts index b7f5693..2cf3685 100644 --- a/src/routes/TogetherPackingListCategoryRouter.ts +++ b/src/routes/TogetherPackingListCategoryRouter.ts @@ -14,7 +14,7 @@ router.post( router.patch( '/', - [body('id').notEmpty(), body('name').notEmpty(), body('listId').notEmpty()], + [body('_id').notEmpty(), body('name').notEmpty(), body('listId').notEmpty()], auth, TogetherPackingListCategoryController.updateCategory, ); diff --git a/src/services/AlonePackingListCategoryService.ts b/src/services/AlonePackingListCategoryService.ts index 184d83f..87ff519 100644 --- a/src/services/AlonePackingListCategoryService.ts +++ b/src/services/AlonePackingListCategoryService.ts @@ -1,7 +1,5 @@ -import { TogetherPackingListCategoryResponseDto } from '../interface/ITogetherPackingList'; import { CategoryCreateDto } from '../interface/ICategory'; -import TogetherPackingList from '../models/TogetherPackingList'; import Category from '../models/Category'; import Pack from '../models/Pack'; import { CategoryUpdateDto } from '../interface/ICategory'; @@ -56,63 +54,62 @@ const createCategory = async ( } }; -// const updateCategory = async ( -// categoryUpdateDto: CategoryUpdateDto, -// ): Promise => { -// try { -// const categoryId = categoryUpdateDto.id; -// const categoryName = categoryUpdateDto.name; -// const listId = categoryUpdateDto.listId; - -// const cate = await Category.findById(categoryId); -// if (!cate) return 'no_category'; - -// const list = await TogetherPackingList.findById(listId); -// if (!list) return 'no_list'; - -// // list의 category 배열에 존재하지 않는 categoryId인 경우 -// if (!list.category.includes(categoryId)) return 'no_list_category'; - -// await Category.updateOne( -// { _id: categoryId }, -// { -// $set: { -// name: categoryName, -// }, -// }, -// ); +const updateCategory = async ( + categoryUpdateDto: CategoryUpdateDto, +): Promise => { + try { + const categoryId = categoryUpdateDto._id; + const categoryName = categoryUpdateDto.name; + const listId = categoryUpdateDto.listId; + const cate = await Category.findById(categoryId); + if (!cate) return 'no_category'; + + const list = await AlonePackingList.findById(listId); + if (!list) return 'no_list'; + + // list의 category 배열에 존재하지 않는 categoryId인 경우 + if (!list.category.includes(categoryId)) return 'no_list_category'; + + await Category.updateOne( + { _id: categoryId }, + { + $set: { + name: categoryName, + }, + }, + ); -// const data: TogetherPackingListCategoryResponseDto | null = await TogetherPackingList.findOne( -// { _id: listId }, -// { category: 1 }, -// ).populate({ -// path: 'category', -// model: 'Category', -// select: { _id: 1, name: 1, pack: 1 }, -// options: { sort: { createdAt: 1 } }, -// populate: { -// path: 'pack', -// model: 'Pack', -// select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, -// options: { sort: { createdAt: 1 } }, -// populate: { -// path: 'packer', -// model: 'User', -// select: { -// _id: 1, -// name: 1, -// }, -// }, -// }, -// }); + const data: AlonePackingListCategoryResponseDto | null = await AlonePackingList.findOne( + { _id: listId }, + { category: 1 }, + ).populate({ + path: 'category', + model: 'Category', + select: { _id: 1, name: 1, pack: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'pack', + model: 'Pack', + select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'packer', + model: 'User', + select: { + _id: 1, + name: 1, + }, + }, + }, + }); -// if (!data) return 'null'; -// return data; -// } catch (error) { -// console.log(error); -// throw error; -// } -// }; + if (!data) return 'null'; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; // const deleteCategory = async ( // listId: string, @@ -181,6 +178,6 @@ const createCategory = async ( // }; export default { createCategory, -// updateCategory, -// deleteCategory, + updateCategory, + // deleteCategory, }; diff --git a/src/services/TogetherPackingListCategoryService.ts b/src/services/TogetherPackingListCategoryService.ts index f4cfdaf..db0c9a1 100644 --- a/src/services/TogetherPackingListCategoryService.ts +++ b/src/services/TogetherPackingListCategoryService.ts @@ -59,7 +59,7 @@ const updateCategory = async ( categoryUpdateDto: CategoryUpdateDto, ): Promise => { try { - const categoryId = categoryUpdateDto.id; + const categoryId = categoryUpdateDto._id; const categoryName = categoryUpdateDto.name; const listId = categoryUpdateDto.listId; From 7fb8725721ec45ccc5c6be404684e70cec7d1430 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 05:39:10 +0900 Subject: [PATCH 05/80] =?UTF-8?q?[FEAT]/#66=20=ED=98=BC=EC=9E=90=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AlonePackingListController.ts | 26 ++++++++ src/modules/aloneListResponse.ts | 27 ++++++++ src/modules/responseMessage.ts | 1 + ...istResponse.ts => togetherListResponse.ts} | 4 +- src/routes/AlonePackingListRouter.ts | 2 +- src/services/AlonePackingListService.ts | 63 ++++++++++--------- src/services/TogetherPackingListService.ts | 6 +- 7 files changed, 92 insertions(+), 37 deletions(-) create mode 100644 src/modules/aloneListResponse.ts rename src/modules/{listResponse.ts => togetherListResponse.ts} (94%) diff --git a/src/controllers/AlonePackingListController.ts b/src/controllers/AlonePackingListController.ts index f78ce3f..b90c1a7 100644 --- a/src/controllers/AlonePackingListController.ts +++ b/src/controllers/AlonePackingListController.ts @@ -52,6 +52,32 @@ const createAlonePackingList = async (req: Request, res: Response) => { } }; +/** + * @route GET /packinglist/alone/:listId + * @desc Read alone Packinglist + * @access Public + **/ + +const readAlonePackingList = async (req: Request, res: Response) => { + const { listId } = req.params; + try { + const data = await AlonePackingListService.readAlonePackingList(listId); + if (data == 'notfoundList') + res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NO_PACKINGLIST)); + else + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.READ_ALONEPACKINGLIST_SUCCESS, data)); + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; export default { createAlonePackingList, + readAlonePackingList, }; diff --git a/src/modules/aloneListResponse.ts b/src/modules/aloneListResponse.ts new file mode 100644 index 0000000..c6d62d7 --- /dev/null +++ b/src/modules/aloneListResponse.ts @@ -0,0 +1,27 @@ +import mongoose from 'mongoose'; +import { AlonePackingListResponseDTO } from '../interface/IAlonePackingList'; +import AlonePackingList from '../models/AlonePackingList'; + +async function aloneListResponse( + listId: mongoose.Types.ObjectId | string, +): Promise { + const data: AlonePackingListResponseDTO | null = await AlonePackingList.findOne( + { _id: listId }, + { title: 1, departureDate: 1, isSaved: 1, category: 1 }, + ).populate({ + path: 'category', + model: 'Category', + options: { sort: { createdAt: 1 } }, + select: { _id: 1, name: 1, pack: 1 }, + populate: { + path: 'pack', + model: 'Pack', + select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, + options: { sort: { createdAt: 1 } }, + }, + }); + + return data; +} + +export { aloneListResponse }; diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 495cf6c..a587158 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -40,6 +40,7 @@ const message = { //혼자 패킹리스트 CREATE_ALONEPACKINGLIST_SUCCESS: '혼자 패킹리스트 생성 성공', + READ_ALONEPACKINGLIST_SUCCESS: '혼자 패킹리스트 상세 조회 성공', // 함께 패킹리스트 관련 CREATE_TOGETHER_CATEGORY_SUCCESS: '함께 패킹리스트 카테고리 생성 성공', diff --git a/src/modules/listResponse.ts b/src/modules/togetherListResponse.ts similarity index 94% rename from src/modules/listResponse.ts rename to src/modules/togetherListResponse.ts index f8c3f0a..4cf9e0e 100644 --- a/src/modules/listResponse.ts +++ b/src/modules/togetherListResponse.ts @@ -36,7 +36,7 @@ async function togetherListResponse( return data; } -async function aloneListResponse( +async function togetherMyListResponse( listId: mongoose.Types.ObjectId, ): Promise { const data: TogetherMyPackingListResponseDTO | null = await AlonePackingList.findOne( @@ -58,4 +58,4 @@ async function aloneListResponse( return data; } -export { aloneListResponse, togetherListResponse }; +export { togetherMyListResponse, togetherListResponse }; diff --git a/src/routes/AlonePackingListRouter.ts b/src/routes/AlonePackingListRouter.ts index 814b61d..786a326 100644 --- a/src/routes/AlonePackingListRouter.ts +++ b/src/routes/AlonePackingListRouter.ts @@ -12,6 +12,6 @@ router.post( AlonePackingListController.createAlonePackingList, ); -router; +router.get('/:listId', auth, AlonePackingListController.readAlonePackingList); export default router; diff --git a/src/services/AlonePackingListService.ts b/src/services/AlonePackingListService.ts index cb54ab7..fe13ef9 100644 --- a/src/services/AlonePackingListService.ts +++ b/src/services/AlonePackingListService.ts @@ -6,6 +6,7 @@ import AlonePackingList from '../models/AlonePackingList'; import Category from '../models/Category'; import Folder from '../models/Folder'; import Template from '../models/Template'; +import { aloneListResponse } from '../modules/aloneListResponse'; const createAlonePackingList = async ( alonePackingListCreateDto: AlonePackingListCreateDTO, @@ -22,22 +23,6 @@ const createAlonePackingList = async ( departureDate: alonePackingListCreateDto.departureDate, }); - //null값으로 받을 경우 - // const innerTemplate = await Template.findById(alonePackingListCreateDto.templateId); - // if (!innerTemplate) { - // alonePackingList.category = []; - // } else { - // alonePackingList.category = innerTemplate.category; - // for await (const element of alonePackingList.category) { - // const myCategory = await Category.findById(element); - // if (!myCategory) return 'notfoundCategory'; - // alonePackingList.packTotalNum += myCategory.pack.length; - // alonePackingList.packRemainNum += myCategory.pack.length; - // } - // } - // await alonePackingList.save(); - - //빈 문자열로 받을 경우 if (!alonePackingListCreateDto.templateId) { alonePackingList.category = []; } else { @@ -58,22 +43,37 @@ const createAlonePackingList = async ( $push: { list: alonePackingList.id }, }); - const data: AlonePackingListResponseDTO | null = await AlonePackingList.findOne( - { _id: alonePackingList.id }, - { title: 1, departureDate: 1, isSaved: 1, category: 1 }, - ).populate({ - path: 'category', - model: 'Category', - options: { sort: { createdAt: 1 } }, - select: { _id: 1, name: 1, pack: 1 }, - populate: { - path: 'pack', - model: 'Pack', - select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, - options: { sort: { createdAt: 1 } }, - }, - }); + const data: AlonePackingListResponseDTO | null = await aloneListResponse(alonePackingList.id); + // const data: AlonePackingListResponseDTO | null = await AlonePackingList.findOne( + // { _id: alonePackingList.id }, + // { title: 1, departureDate: 1, isSaved: 1, category: 1 }, + // ).populate({ + // path: 'category', + // model: 'Category', + // options: { sort: { createdAt: 1 } }, + // select: { _id: 1, name: 1, pack: 1 }, + // populate: { + // path: 'pack', + // model: 'Pack', + // select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, + // options: { sort: { createdAt: 1 } }, + // }, + // }); + + if (!data) return 'notfoundList'; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + +const readAlonePackingList = async ( + listId: string, +): Promise => { + try { + const data: AlonePackingListResponseDTO | null = await aloneListResponse(listId); if (!data) return 'notfoundList'; return data; } catch (error) { @@ -84,4 +84,5 @@ const createAlonePackingList = async ( export default { createAlonePackingList, + readAlonePackingList, }; diff --git a/src/services/TogetherPackingListService.ts b/src/services/TogetherPackingListService.ts index 2b33b8f..963cdb5 100644 --- a/src/services/TogetherPackingListService.ts +++ b/src/services/TogetherPackingListService.ts @@ -16,7 +16,7 @@ import PackingListService from './PackingListService'; import { PackerUpdateDto } from '../interface/IPack'; import Pack from '../models/Pack'; import User from '../models/User'; -import { aloneListResponse, togetherListResponse } from '../modules/listResponse'; +import { togetherMyListResponse, togetherListResponse } from '../modules/togetherListResponse'; const createTogetherPackingList = async ( togetherPackingListCreateDto: TogetherPackingListCreateDTO, @@ -86,7 +86,7 @@ const createTogetherPackingList = async ( togetherPackingList.id, ); - const aloneData: TogetherMyPackingListResponseDTO | null = await aloneListResponse( + const aloneData: TogetherMyPackingListResponseDTO | null = await togetherMyListResponse( alonePackingList.id, ); @@ -143,7 +143,7 @@ const readTogetherPackingList = async ( const togetherRawData = await TogetherPackingList.findById(listId); if (!togetherRawData) return 'notfoundList'; - const aloneData: TogetherMyPackingListResponseDTO | null = await aloneListResponse( + const aloneData: TogetherMyPackingListResponseDTO | null = await togetherMyListResponse( togetherRawData.myPackingListId, ); From ea1bd00768c1ad139655e41fb46f3041e7084688 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 05:58:02 +0900 Subject: [PATCH 06/80] =?UTF-8?q?[CHORE]=20=ED=95=A8=EA=BB=98=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20id=EB=A5=BC=20=5Fid=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/ICategory.ts | 2 +- src/routes/TogetherPackingListCategoryRouter.ts | 2 +- src/services/TogetherPackingListCategoryService.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/interface/ICategory.ts b/src/interface/ICategory.ts index 3d1ebcd..37512e9 100644 --- a/src/interface/ICategory.ts +++ b/src/interface/ICategory.ts @@ -11,7 +11,7 @@ export interface CategoryCreateDto { } export interface CategoryUpdateDto { - id: mongoose.Types.ObjectId; + _id: mongoose.Types.ObjectId; name: string; listId: mongoose.Types.ObjectId; } diff --git a/src/routes/TogetherPackingListCategoryRouter.ts b/src/routes/TogetherPackingListCategoryRouter.ts index b7f5693..2cf3685 100644 --- a/src/routes/TogetherPackingListCategoryRouter.ts +++ b/src/routes/TogetherPackingListCategoryRouter.ts @@ -14,7 +14,7 @@ router.post( router.patch( '/', - [body('id').notEmpty(), body('name').notEmpty(), body('listId').notEmpty()], + [body('_id').notEmpty(), body('name').notEmpty(), body('listId').notEmpty()], auth, TogetherPackingListCategoryController.updateCategory, ); diff --git a/src/services/TogetherPackingListCategoryService.ts b/src/services/TogetherPackingListCategoryService.ts index f4cfdaf..db0c9a1 100644 --- a/src/services/TogetherPackingListCategoryService.ts +++ b/src/services/TogetherPackingListCategoryService.ts @@ -59,7 +59,7 @@ const updateCategory = async ( categoryUpdateDto: CategoryUpdateDto, ): Promise => { try { - const categoryId = categoryUpdateDto.id; + const categoryId = categoryUpdateDto._id; const categoryName = categoryUpdateDto.name; const listId = categoryUpdateDto.listId; From f938f1712b2561ddc1e98350ca7cbb801b55010b Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 05:58:26 +0900 Subject: [PATCH 07/80] =?UTF-8?q?[CHORE]=20console.log=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 8 ++------ src/services/TogetherPackingListPackService.ts | 4 ---- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index d8f1081..a552020 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -4,10 +4,7 @@ import { AuthResponseDto } from '../interface/IUser'; import User from '../models/User'; import getToken from '../modules/jwtHandler'; - -const getGoogleUser = async ( - googleToken: string, -): Promise => { +const getGoogleUser = async (googleToken: string): Promise => { try { const response = await axios({ method: 'get', @@ -29,7 +26,7 @@ const getGoogleUser = async ( }; return data; } else { - const accessToken = getToken(user._id); + const accessToken = getToken(user._id); const data = { isAlreadyUser: true, token: accessToken, @@ -66,7 +63,6 @@ const getGoogleInfo = async (code: string): Promise => { }); const access_token = data['access_token']; - console.log(access_token); if (!access_token) return null; else { const { data: userEmail } = await axios.get( diff --git a/src/services/TogetherPackingListPackService.ts b/src/services/TogetherPackingListPackService.ts index 7536648..641fe93 100644 --- a/src/services/TogetherPackingListPackService.ts +++ b/src/services/TogetherPackingListPackService.ts @@ -140,12 +140,10 @@ const deletePack = async ( const stringCate: string[] = []; const stringPack: string[] = []; - console.log(stringCate); list.category.map((cat) => { stringCate.push(cat.toString()); }); - console.log(stringCate); cate.pack.map((pk) => { stringPack.push(pk.toString()); }); @@ -156,9 +154,7 @@ const deletePack = async ( const packs = cate.pack; await Pack.deleteOne({ _id: packId }); - console.log(packs); packs.splice(stringPack.indexOf(packId), 1); - console.log(packs); await Category.updateOne( { _id: categoryId }, From 56d9bfb9c63046969a2d147f81b076a9e7ac9757 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 06:02:14 +0900 Subject: [PATCH 08/80] =?UTF-8?q?[CHORE]=20=ED=95=A8=EA=BB=98=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A7=90=20id=EB=A5=BC?= =?UTF-8?q?=20=5Fid=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/IPack.ts | 2 +- src/routes/TogetherPackingListPackRouter.ts | 2 +- src/services/TogetherPackingListPackService.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/interface/IPack.ts b/src/interface/IPack.ts index 3ddc820..faa033f 100644 --- a/src/interface/IPack.ts +++ b/src/interface/IPack.ts @@ -12,7 +12,7 @@ export interface PackCreateDto { listId: mongoose.Types.ObjectId; } export interface PackUpdateDto { - id: mongoose.Types.ObjectId; + _id: mongoose.Types.ObjectId; name: string; isChecked: boolean; listId: mongoose.Types.ObjectId; diff --git a/src/routes/TogetherPackingListPackRouter.ts b/src/routes/TogetherPackingListPackRouter.ts index d7c7f7b..641a392 100644 --- a/src/routes/TogetherPackingListPackRouter.ts +++ b/src/routes/TogetherPackingListPackRouter.ts @@ -15,7 +15,7 @@ router.post( router.patch( '/', [ - body('id').notEmpty(), + body('_id').notEmpty(), body('name').notEmpty(), body('isChecked').notEmpty(), body('listId').notEmpty(), diff --git a/src/services/TogetherPackingListPackService.ts b/src/services/TogetherPackingListPackService.ts index 641fe93..04ce970 100644 --- a/src/services/TogetherPackingListPackService.ts +++ b/src/services/TogetherPackingListPackService.ts @@ -64,7 +64,7 @@ const updatePack = async ( packUpdateDto: PackUpdateDto, ): Promise => { try { - const packId = packUpdateDto.id; + const packId = packUpdateDto._id; const packName = packUpdateDto.name; const isChecked = packUpdateDto.isChecked; const listId = packUpdateDto.listId; From a934b9c2541e89c5fcf8d8f792f38d0c705c4cca Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 07:34:59 +0900 Subject: [PATCH 09/80] =?UTF-8?q?[FEAT]/#61=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EC=95=88=20=ED=95=A8=EA=BB=98=20=ED=8C=A8=ED=82=B9=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 22 ++++++- src/interface/IFolder.ts | 6 +- src/interface/ITogetherPackingList.ts | 19 ++++++ src/modules/responseMessage.ts | 1 + src/routes/FolderRouter.ts | 3 +- src/services/FolderService.ts | 69 ++++++++++++++++++++++ src/services/TogetherPackingListService.ts | 5 ++ 7 files changed, 119 insertions(+), 6 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 812e32b..0e90b2b 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -40,7 +40,6 @@ const createFolder = async (req: Request, res: Response) => { * @access private **/ - const updateFolder = async (req: Request, res: Response) => { const error = validationResult(req); if (!error.isEmpty()) { @@ -155,6 +154,26 @@ const getTogetherFolders = async (req: Request, res: Response) => { } }; +const getTogetherListInFolder = async (req: Request, res: Response) => { + const userId = req.body.user.id; + const { folderId } = req.params; + try { + const data = await FolderService.getTogetherListInFolders(userId, folderId); + if (!data) + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.SUCCESS_GET_TOGETHER_PACKINGLIST_IN_FOLDER, data)); + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + export default { createFolder, updateFolder, @@ -162,4 +181,5 @@ export default { getFolders, getAloneFolders, getTogetherFolders, + getTogetherListInFolder, }; diff --git a/src/interface/IFolder.ts b/src/interface/IFolder.ts index 50aadd5..65d536a 100644 --- a/src/interface/IFolder.ts +++ b/src/interface/IFolder.ts @@ -30,6 +30,6 @@ export interface AllFolderResponseDto { } export interface FolderResponseDto { - _id: mongoose.Schema.Types.ObjectId; - title: string; -} \ No newline at end of file + _id: mongoose.Schema.Types.ObjectId; + title: string; +} diff --git a/src/interface/ITogetherPackingList.ts b/src/interface/ITogetherPackingList.ts index 8f734c1..24c4fd5 100644 --- a/src/interface/ITogetherPackingList.ts +++ b/src/interface/ITogetherPackingList.ts @@ -82,3 +82,22 @@ export interface TogetherMyPackingListResponseDTO { }, ]; } + +export interface TogetherListInFolderResponseDto { + currentFolder: { + _id: string; + title: string; + }; + folder: { + _id: mongoose.Types.ObjectId; + title: string; + }[]; + listNum: number; + togetherPackingList: { + _id: string; + title: string; + departureDate: string; + packTotalNum: number; + packRemainNum: number; + }[]; +} diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 495cf6c..7aa8314 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -27,6 +27,7 @@ const message = { SUCCESS_DELETE_FOLDER: '폴더 수정 성공', SUCCESS_GET_FOLDERS: '폴더 조회 성공', NO_FOLDER: '존재하지 않는 Folder입니다', + SUCCESS_GET_TOGETHER_PACKINGLIST_IN_FOLDER: '폴더 속 함께 패킹리스트 조회 성공', //패킹리스트 공통 NO_PACKINGLIST: '존재하지 않는 PackingList입니다', diff --git a/src/routes/FolderRouter.ts b/src/routes/FolderRouter.ts index 799d950..6e23f22 100644 --- a/src/routes/FolderRouter.ts +++ b/src/routes/FolderRouter.ts @@ -21,6 +21,5 @@ router.delete('/:folderId', auth, FolderController.deleteFolder); router.get('/', auth, FolderController.getFolders); router.get('/alone', auth, FolderController.getAloneFolders); router.get('/together', auth, FolderController.getTogetherFolders); - +router.get('/packingList/together/:folderId', auth, FolderController.getTogetherListInFolder); export default router; - diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index 0819576..ee8ce3a 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -8,6 +8,8 @@ import Folder from '../models/Folder'; import AlonePackingList from '../models/AlonePackingList'; import TogetherPackingList from '../models/TogetherPackingList'; import { folderResponse } from '../modules/folderResponse'; +import mongoose from 'mongoose'; +import { TogetherListInFolderResponseDto } from '../interface/ITogetherPackingList'; const createFolder = async ( userId: string, @@ -116,6 +118,72 @@ const getTogetherFolders = async (userId: string): Promise } }; +const getTogetherListInFolders = async ( + userId: string, + folderId: string, +): Promise => { + try { + const folders = await Folder.find({ userId: userId }, { isAloned: false }); + const currentFd = await Folder.findById(folderId); + if (!currentFd) return null; + const currentTitle = currentFd.title; + const currentFolder = { + _id: folderId, + title: currentTitle, + }; + + const folder: { + _id: mongoose.Types.ObjectId; + title: string; + }[] = []; + + folders.map((fd) => { + const tmp = { + _id: fd.id, + title: fd.title, + }; + folder.push(tmp); + }); + + const lists: { + _id: string; + title: string; + departureDate: string; + packTotalNum: number; + packRemainNum: number; + }[] = []; + + for await (const lt of currentFd.list) { + const list = await TogetherPackingList.findById(lt); + if (!list) return null; + if (!list.isDeleted) { + const data = { + _id: list._id, + title: list.title, + departureDate: list.departureDate, + packTotalNum: list.packTotalNum, + packRemainNum: list.packRemainNum, + }; + lists.push(data); + } + } + + const listNum = lists.length; + + const data: TogetherListInFolderResponseDto | null = { + currentFolder: currentFolder, + folder: folder, + listNum: listNum, + togetherPackingList: lists, + }; + if (!data) return null; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + export default { createFolder, updateFolder, @@ -123,4 +191,5 @@ export default { getFolders, getAloneFolders, getTogetherFolders, + getTogetherListInFolders, }; diff --git a/src/services/TogetherPackingListService.ts b/src/services/TogetherPackingListService.ts index 2b33b8f..e8883cd 100644 --- a/src/services/TogetherPackingListService.ts +++ b/src/services/TogetherPackingListService.ts @@ -278,9 +278,14 @@ const updatePacker = async ( } }; +const getTogetherListInFolder = async (userId: string, folderId: string) => { + console.log(userId, folderId); +}; + export default { createTogetherPackingList, readTogetherPackingList, deleteTogetherPackingList, updatePacker, + getTogetherListInFolder, }; From ff6c61dab3ca6763ebe7c8002e9299747af2fe63 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 07:39:54 +0900 Subject: [PATCH 10/80] =?UTF-8?q?[FEAT]/#70=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EC=86=8D=20=ED=98=BC=EC=9E=90=20=ED=8C=A8=ED=82=B9=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AlonePackingListController.ts | 26 ++++++++ src/modules/responseMessage.ts | 1 + src/routes/AlonePackingListRouter.ts | 1 + src/services/AlonePackingListService.ts | 61 ++++++++++++++----- 4 files changed, 73 insertions(+), 16 deletions(-) diff --git a/src/controllers/AlonePackingListController.ts b/src/controllers/AlonePackingListController.ts index b90c1a7..7713116 100644 --- a/src/controllers/AlonePackingListController.ts +++ b/src/controllers/AlonePackingListController.ts @@ -77,7 +77,33 @@ const readAlonePackingList = async (req: Request, res: Response) => { .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); } }; + +/** + * @route DELETE /packinglist/alone/:folderId/:listId + * @desc Delete Alone Packinglist + * @access Public + **/ + +const deleteAlonePackingList = async (req: Request, res: Response) => { + const { folderId, listId } = req.params; + try { + const data = await AlonePackingListService.deleteAlonePackingList(folderId, listId); + + if (data == 'notfoundFolder') + res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_FOLDER)); + else + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.DELETE_ALONEPACKINGLIST_SUCCESS, data)); + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; export default { createAlonePackingList, readAlonePackingList, + deleteAlonePackingList, }; diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index a587158..d32feba 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -41,6 +41,7 @@ const message = { //혼자 패킹리스트 CREATE_ALONEPACKINGLIST_SUCCESS: '혼자 패킹리스트 생성 성공', READ_ALONEPACKINGLIST_SUCCESS: '혼자 패킹리스트 상세 조회 성공', + DELETE_ALONEPACKINGLIST_SUCCESS: '폴더 속 혼자 패킹리스트 삭제 성공', // 함께 패킹리스트 관련 CREATE_TOGETHER_CATEGORY_SUCCESS: '함께 패킹리스트 카테고리 생성 성공', diff --git a/src/routes/AlonePackingListRouter.ts b/src/routes/AlonePackingListRouter.ts index 786a326..47f1a53 100644 --- a/src/routes/AlonePackingListRouter.ts +++ b/src/routes/AlonePackingListRouter.ts @@ -13,5 +13,6 @@ router.post( ); router.get('/:listId', auth, AlonePackingListController.readAlonePackingList); +router.delete('/:folderId/:listId', auth, AlonePackingListController.deleteAlonePackingList); export default router; diff --git a/src/services/AlonePackingListService.ts b/src/services/AlonePackingListService.ts index fe13ef9..f1eadc1 100644 --- a/src/services/AlonePackingListService.ts +++ b/src/services/AlonePackingListService.ts @@ -2,6 +2,7 @@ import { AlonePackingListCreateDTO, AlonePackingListResponseDTO, } from '../interface/IAlonePackingList'; +import { PackingListResponseDTO } from '../interface/IPackingList'; import AlonePackingList from '../models/AlonePackingList'; import Category from '../models/Category'; import Folder from '../models/Folder'; @@ -45,22 +46,6 @@ const createAlonePackingList = async ( const data: AlonePackingListResponseDTO | null = await aloneListResponse(alonePackingList.id); - // const data: AlonePackingListResponseDTO | null = await AlonePackingList.findOne( - // { _id: alonePackingList.id }, - // { title: 1, departureDate: 1, isSaved: 1, category: 1 }, - // ).populate({ - // path: 'category', - // model: 'Category', - // options: { sort: { createdAt: 1 } }, - // select: { _id: 1, name: 1, pack: 1 }, - // populate: { - // path: 'pack', - // model: 'Pack', - // select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, - // options: { sort: { createdAt: 1 } }, - // }, - // }); - if (!data) return 'notfoundList'; return data; } catch (error) { @@ -82,7 +67,51 @@ const readAlonePackingList = async ( } }; +const deleteAlonePackingList = async ( + folderId: string, + listId: string, +): Promise< + | { + alonePackingList: PackingListResponseDTO[]; + } + | string +> => { + try { + const deleteLists = listId.split(','); + await AlonePackingList.updateMany( + { + _id: { + $in: deleteLists, + }, + }, + { $set: { isDeleted: true } }, + ); + + const data = []; + const responseFolder = await Folder.findById(folderId); + if (!responseFolder) return 'notfoundFolder'; + for await (const element of responseFolder.list) { + const responseList = await AlonePackingList.findById(element); + if (responseList && responseList.isDeleted == false) { + const innerData: PackingListResponseDTO = { + _id: responseList.id, + departureDate: responseList.departureDate, + title: responseList.title, + packTotalNum: responseList.packTotalNum, + packRemainNum: responseList.packRemainNum, + }; + data.push(innerData); + } + } + + return { alonePackingList: data }; + } catch (error) { + console.log(error); + throw error; + } +}; export default { createAlonePackingList, readAlonePackingList, + deleteAlonePackingList, }; From 0172a11ee80eb19fcd3f033cd60441b3efeb3ab6 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 14:48:29 +0900 Subject: [PATCH 11/80] =?UTF-8?q?[FEAT]/#63=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EC=86=8D=20=ED=98=BC=EC=9E=90=20=ED=8C=A8=ED=82=B9=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 21 ++++++ src/interface/IAlonePackingList.ts | 19 +++++ src/modules/responseMessage.ts | 1 + src/routes/FolderRouter.ts | 1 + src/services/FolderService.ts | 83 +++++++++++++++++++--- src/services/TogetherPackingListService.ts | 5 -- 6 files changed, 115 insertions(+), 15 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 0e90b2b..f7fea16 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -174,6 +174,26 @@ const getTogetherListInFolder = async (req: Request, res: Response) => { } }; +const getAloneListInFolder = async (req: Request, res: Response) => { + const userId = req.body.user.id; + const { folderId } = req.params; + try { + const data = await FolderService.getAloneListInFolders(userId, folderId); + if (!data) + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.SUCCESS_GET_ALONE_PACKINGLIST_IN_FOLDER, data)); + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + export default { createFolder, updateFolder, @@ -182,4 +202,5 @@ export default { getAloneFolders, getTogetherFolders, getTogetherListInFolder, + getAloneListInFolder, }; diff --git a/src/interface/IAlonePackingList.ts b/src/interface/IAlonePackingList.ts index e49191d..d8d6364 100644 --- a/src/interface/IAlonePackingList.ts +++ b/src/interface/IAlonePackingList.ts @@ -38,3 +38,22 @@ export interface AlonePackingListResponseDTO { ]; isSaved: boolean; } + +export interface AloneListInFolderResponseDto { + currentFolder: { + _id: string; + title: string; + }; + folder: { + _id: mongoose.Types.ObjectId; + title: string; + }[]; + listNum: number; + alonePackingList: { + _id: string; + title: string; + departureDate: string; + packTotalNum: number; + packRemainNum: number; + }[]; +} diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index cb05686..9007641 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -28,6 +28,7 @@ const message = { SUCCESS_GET_FOLDERS: '폴더 조회 성공', NO_FOLDER: '존재하지 않는 Folder입니다', SUCCESS_GET_TOGETHER_PACKINGLIST_IN_FOLDER: '폴더 속 함께 패킹리스트 조회 성공', + SUCCESS_GET_ALONE_PACKINGLIST_IN_FOLDER: '폴더 속 혼자 패킹리스트 조회 성공', //패킹리스트 공통 NO_PACKINGLIST: '존재하지 않는 PackingList입니다', diff --git a/src/routes/FolderRouter.ts b/src/routes/FolderRouter.ts index 6e23f22..128f3c4 100644 --- a/src/routes/FolderRouter.ts +++ b/src/routes/FolderRouter.ts @@ -22,4 +22,5 @@ router.get('/', auth, FolderController.getFolders); router.get('/alone', auth, FolderController.getAloneFolders); router.get('/together', auth, FolderController.getTogetherFolders); router.get('/packingList/together/:folderId', auth, FolderController.getTogetherListInFolder); +router.get('/packingList/alone/:folderId', auth, FolderController.getAloneListInFolder); export default router; diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index ee8ce3a..9b82413 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -10,6 +10,7 @@ import TogetherPackingList from '../models/TogetherPackingList'; import { folderResponse } from '../modules/folderResponse'; import mongoose from 'mongoose'; import { TogetherListInFolderResponseDto } from '../interface/ITogetherPackingList'; +import { AloneListInFolderResponseDto } from '../interface/IAlonePackingList'; const createFolder = async ( userId: string, @@ -156,16 +157,14 @@ const getTogetherListInFolders = async ( for await (const lt of currentFd.list) { const list = await TogetherPackingList.findById(lt); if (!list) return null; - if (!list.isDeleted) { - const data = { - _id: list._id, - title: list.title, - departureDate: list.departureDate, - packTotalNum: list.packTotalNum, - packRemainNum: list.packRemainNum, - }; - lists.push(data); - } + const data = { + _id: list._id, + title: list.title, + departureDate: list.departureDate, + packTotalNum: list.packTotalNum, + packRemainNum: list.packRemainNum, + }; + lists.push(data); } const listNum = lists.length; @@ -184,6 +183,69 @@ const getTogetherListInFolders = async ( } }; +const getAloneListInFolders = async ( + userId: string, + folderId: string, +): Promise => { + try { + const folders = await Folder.find({ userId: userId }, { isAloned: true }); + const currentFd = await Folder.findById(folderId); + if (!currentFd) return null; + const currentFolder = { + _id: folderId, + title: currentFd.title, + }; + + const folder: { + _id: mongoose.Types.ObjectId; + title: string; + }[] = []; + + folders.map((fd) => { + const tmp = { + _id: fd.id, + title: fd.title, + }; + folder.push(tmp); + }); + + const lists: { + _id: string; + title: string; + departureDate: string; + packTotalNum: number; + packRemainNum: number; + }[] = []; + + for await (const lt of currentFd.list) { + const list = await AlonePackingList.findById(lt); + if (!list) return null; + const data = { + _id: list._id, + title: list.title, + departureDate: list.departureDate, + packTotalNum: list.packTotalNum, + packRemainNum: list.packRemainNum, + }; + lists.push(data); + } + + const listNum = lists.length; + + const data: AloneListInFolderResponseDto | null = { + currentFolder: currentFolder, + folder: folder, + listNum: listNum, + alonePackingList: lists, + }; + if (!data) return null; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + export default { createFolder, updateFolder, @@ -192,4 +254,5 @@ export default { getAloneFolders, getTogetherFolders, getTogetherListInFolders, + getAloneListInFolders, }; diff --git a/src/services/TogetherPackingListService.ts b/src/services/TogetherPackingListService.ts index 77dbedf..963cdb5 100644 --- a/src/services/TogetherPackingListService.ts +++ b/src/services/TogetherPackingListService.ts @@ -278,14 +278,9 @@ const updatePacker = async ( } }; -const getTogetherListInFolder = async (userId: string, folderId: string) => { - console.log(userId, folderId); -}; - export default { createTogetherPackingList, readTogetherPackingList, deleteTogetherPackingList, updatePacker, - getTogetherListInFolder, }; From 5b0a8668def98727fc47dc4ac90f9d4d8d313a94 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 15:19:38 +0900 Subject: [PATCH 12/80] =?UTF-8?q?[FEAT]/#68=20=EB=A9=A4=EB=B2=84=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/MemberController.ts | 23 +++++++++ .../TogetherPackingListController.ts | 1 + src/controllers/index.ts | 2 + src/interface/IGroup.ts | 6 +++ src/modules/responseMessage.ts | 3 ++ src/routes/MemberRouter.ts | 10 ++++ src/routes/index.ts | 3 +- src/services/MemberService.ts | 50 +++++++++++++++++++ src/services/index.ts | 2 + 9 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/controllers/MemberController.ts create mode 100644 src/routes/MemberRouter.ts create mode 100644 src/services/MemberService.ts diff --git a/src/controllers/MemberController.ts b/src/controllers/MemberController.ts new file mode 100644 index 0000000..153adfe --- /dev/null +++ b/src/controllers/MemberController.ts @@ -0,0 +1,23 @@ +import { Request, Response } from 'express'; +import statusCode from '../modules/statusCode'; +import message from '../modules/responseMessage'; +import util from '../modules/util'; +import { validationResult } from 'express-validator'; +import { MemberService } from '../services'; + +const getMembers = async(req: Request, res: Response) => { + const groupId = req.params.groupId; + const userId = req.body.user.id; + try { + const data = await MemberService.getMembers(userId, groupId); + if(!data) return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_MEMBERS , data)); + } catch(error) { + console.log(error); + res.status(statusCode.INTERNAL_SERVER_ERROR).send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +} + +export default { + getMembers, +} \ No newline at end of file diff --git a/src/controllers/TogetherPackingListController.ts b/src/controllers/TogetherPackingListController.ts index c923012..fc55e9a 100644 --- a/src/controllers/TogetherPackingListController.ts +++ b/src/controllers/TogetherPackingListController.ts @@ -146,6 +146,7 @@ const updatePacker = async (req: Request, res: Response) => { } }; + export default { createTogetherPackingList, readTogetherPackingList, diff --git a/src/controllers/index.ts b/src/controllers/index.ts index ec5aa2d..192219e 100644 --- a/src/controllers/index.ts +++ b/src/controllers/index.ts @@ -6,6 +6,7 @@ import TogetherPackingListPackController from './TogetherPackingListPackControll import TogetherPackingListController from './TogetherPackingListController'; import PackingListController from './PackingListController'; import FolderController from './FolderController'; +import MemberController from './MemberController'; export { AuthController, @@ -16,4 +17,5 @@ export { TogetherPackingListPackController, TogetherPackingListController, PackingListController, + MemberController, }; diff --git a/src/interface/IGroup.ts b/src/interface/IGroup.ts index 099b1c3..f67ef44 100644 --- a/src/interface/IGroup.ts +++ b/src/interface/IGroup.ts @@ -3,3 +3,9 @@ import mongoose from 'mongoose'; export interface IGroup { members: mongoose.Types.ObjectId[]; } + +export interface GroupResponseDto { + _id: mongoose.Types.ObjectId, + nickname: string, + profileImageId: string, +} \ No newline at end of file diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 495cf6c..20beb19 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -65,6 +65,9 @@ const message = { // 초대 코드 관련 SUCCESS_INVITE_TOGETHER_PACKING: '함께 패킹리스트 초대 성공', READ_DETAILEDTEMPLTATE_SUCCESS: '템플릿 상세조회 성공', + + // 멤버 + SUCCESS_GET_MEMBERS: '멤버 조회 성공', }; export default message; diff --git a/src/routes/MemberRouter.ts b/src/routes/MemberRouter.ts new file mode 100644 index 0000000..9316f03 --- /dev/null +++ b/src/routes/MemberRouter.ts @@ -0,0 +1,10 @@ +import { Router } from 'express'; +import { body } from 'express-validator/check'; +import auth from '../middleware/auth'; +import MemberController from '../controllers/MemberController' + +const router: Router = Router(); + +router.get('/member/:groupId', auth, MemberController.getMembers); + +export default router; diff --git a/src/routes/index.ts b/src/routes/index.ts index 8b6ff91..8f1a463 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -8,7 +8,7 @@ import TogetherPackingListPackRouter from './TogetherPackingListPackRouter'; import TogetherPackingListRouter from './TogetherPackingListRouter'; import AlonePackingListRouter from './AlonePackingListRouter'; import TemplateRouter from './TemplateRouter'; - +import MemberRouter from './MemberRouter'; const router = Router(); router.use('/auth', AuthRouter); @@ -20,5 +20,6 @@ router.use('/packingList/alone', AlonePackingListRouter); router.use('/packingList/together/category', TogetherPackingListCategoryRouter); router.use('/packingList/together/pack', TogetherPackingListPackRouter); +router.use('/together',MemberRouter); router.use('/template', TemplateRouter); export default router; diff --git a/src/services/MemberService.ts b/src/services/MemberService.ts new file mode 100644 index 0000000..bfbb33d --- /dev/null +++ b/src/services/MemberService.ts @@ -0,0 +1,50 @@ +import { GroupResponseDto } from '../interface/IGroup'; +import Group from '../models/Group'; +import mongoose from 'mongoose'; +import User from '../models/User'; + +const getMembers = async (userId: string, groupId: string): Promise => { + try { + const group = await Group.findById(groupId); + if (!group) return null; + const master = await User.findById(userId); + if (!master) return null; + let idx = 0; + let target; + console.log(master._id); + + const data = await Promise.all( + group.members.map(async (memberId) => { + const mem = await User.findById(memberId); + const memToString = mem?._id.toString(); + const masterToString = master?._id.toString(); + if (memToString === masterToString) { + target = idx; + } + idx += 1; + const data: GroupResponseDto = { + _id: mem?._id, + nickname: mem?.name as string, + profileImageId: mem?.profileImageId as string, + }; + return data; + }), + ); + if (!target) { + return null; // 유저가 멤버에 없을 때 + } + const swap = data[target]; + data[target] = data[0]; + data[0] = swap; + + console.log(data); + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + +export default { + getMembers, +}; diff --git a/src/services/index.ts b/src/services/index.ts index 4880656..b81e6e2 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -6,6 +6,7 @@ import TogetherPackingListPackService from './TogetherPackingListPackService'; import AlonePackingListService from './AlonePackingListService'; import TogetherPackingListService from './TogetherPackingListService'; import PackingListService from './PackingListService'; +import MemberService from './MemberService'; export { AuthService, @@ -16,4 +17,5 @@ export { TogetherPackingListService, FolderService, PackingListService, + MemberService, }; From 6914537e5eccb4217e1256da4161385e05b4a5b3 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 15:35:16 +0900 Subject: [PATCH 13/80] =?UTF-8?q?[ADD]=20map=20=EB=8C=80=EC=8B=A0=20for=20?= =?UTF-8?q?await=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/MemberService.ts | 46 +++++++++++++++++------------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/services/MemberService.ts b/src/services/MemberService.ts index bfbb33d..c31c3b2 100644 --- a/src/services/MemberService.ts +++ b/src/services/MemberService.ts @@ -11,34 +11,34 @@ const getMembers = async (userId: string, groupId: string): Promise { - const mem = await User.findById(memberId); - const memToString = mem?._id.toString(); - const masterToString = master?._id.toString(); - if (memToString === masterToString) { - target = idx; - } - idx += 1; - const data: GroupResponseDto = { - _id: mem?._id, - nickname: mem?.name as string, - profileImageId: mem?.profileImageId as string, - }; - return data; - }), - ); + if (!target) { return null; // 유저가 멤버에 없을 때 } - const swap = data[target]; - data[target] = data[0]; - data[0] = swap; + - console.log(data); - return data; + const swap = result[target]; + result[target] = result[0]; + result[0] = swap; + + return result; } catch (error) { console.log(error); throw error; From ee8428b5f1adaa8a47ea1d225ab3539b9202089e Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 16:13:36 +0900 Subject: [PATCH 14/80] =?UTF-8?q?[FEAT]/#75=20=ED=98=BC=EC=9E=90=20?= =?UTF-8?q?=ED=8C=A8=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=8B=9C=20=ED=8F=B4=EB=8D=94=20=EB=82=B4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AlonePackingListService.ts | 15 ++++++++++++++- .../TogetherPackingListCategoryService.ts | 5 +++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/services/AlonePackingListService.ts b/src/services/AlonePackingListService.ts index f1eadc1..46416b6 100644 --- a/src/services/AlonePackingListService.ts +++ b/src/services/AlonePackingListService.ts @@ -90,9 +90,22 @@ const deleteAlonePackingList = async ( const data = []; const responseFolder = await Folder.findById(folderId); if (!responseFolder) return 'notfoundFolder'; + + const strlists = []; + for await (const element of responseFolder.list) { + strlists.push(element.toString()); + } + for await (const element of deleteLists) { + responseFolder.list.splice(strlists.indexOf(element), 1); + } + + await Folder.findByIdAndUpdate(folderId, { + list: responseFolder.list, + }); + for await (const element of responseFolder.list) { const responseList = await AlonePackingList.findById(element); - if (responseList && responseList.isDeleted == false) { + if (responseList) { const innerData: PackingListResponseDTO = { _id: responseList.id, departureDate: responseList.departureDate, diff --git a/src/services/TogetherPackingListCategoryService.ts b/src/services/TogetherPackingListCategoryService.ts index db0c9a1..0862384 100644 --- a/src/services/TogetherPackingListCategoryService.ts +++ b/src/services/TogetherPackingListCategoryService.ts @@ -128,9 +128,10 @@ const deleteCategory = async ( const stringCate: string[] = []; const packs = cate.pack; - categories.map((cat) => { + for await (const cat of categories) { stringCate.push(cat.toString()); - }); + } + if (!stringCate.includes(categoryId)) return 'no_list_category'; await Pack.deleteMany({ _id: { $in: packs } }); From bc9f3cf0733a90ec791bb9a248a6444ea8ea4acd Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 16:44:21 +0900 Subject: [PATCH 15/80] =?UTF-8?q?[FEAT]=20=ED=95=A8=EA=BB=98=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EC=97=90=20group=20response=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/TogetherPackingListController.ts | 3 ++- src/services/MemberService.ts | 2 +- src/services/TogetherPackingListService.ts | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/controllers/TogetherPackingListController.ts b/src/controllers/TogetherPackingListController.ts index fc55e9a..65074b5 100644 --- a/src/controllers/TogetherPackingListController.ts +++ b/src/controllers/TogetherPackingListController.ts @@ -64,8 +64,9 @@ const createTogetherPackingList = async (req: Request, res: Response) => { const readTogetherPackingList = async (req: Request, res: Response) => { const { listId } = req.params; + const userId = req.body.user.id; try { - const data = await TogetherPackingListService.readTogetherPackingList(listId); + const data = await TogetherPackingListService.readTogetherPackingList(listId, userId); if (data == 'notfoundList') res diff --git a/src/services/MemberService.ts b/src/services/MemberService.ts index c31c3b2..7841c58 100644 --- a/src/services/MemberService.ts +++ b/src/services/MemberService.ts @@ -22,7 +22,7 @@ const getMembers = async (userId: string, groupId: string): Promise => { @@ -142,6 +150,7 @@ const readTogetherPackingList = async ( }); const togetherRawData = await TogetherPackingList.findById(listId); + if (!togetherRawData) return 'notfoundList'; const aloneData: TogetherMyPackingListResponseDTO | null = await togetherMyListResponse( togetherRawData.myPackingListId, @@ -154,6 +163,13 @@ const readTogetherPackingList = async ( departureDate: togetherRawData.departureDate, togetherPackingList: togetherData, myPackingList: aloneData, + group: { + _id: togetherData.groupId.toString(), + members: (await MemberService.getMembers( + userId, + togetherData.groupId, + )) as GroupResponseDto[], + }, }; return response; } catch (error) { From 137e322c3eb05481eb1ba0c23b1d09d84140c9e3 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 16:47:57 +0900 Subject: [PATCH 16/80] =?UTF-8?q?[FIX]=20nickname=20->=20name=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/IGroup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interface/IGroup.ts b/src/interface/IGroup.ts index f67ef44..c095526 100644 --- a/src/interface/IGroup.ts +++ b/src/interface/IGroup.ts @@ -6,6 +6,6 @@ export interface IGroup { export interface GroupResponseDto { _id: mongoose.Types.ObjectId, - nickname: string, + name: string, profileImageId: string, } \ No newline at end of file From 02849719ae7f842474450622152092de925e59c5 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 16:49:56 +0900 Subject: [PATCH 17/80] =?UTF-8?q?[FEAT]/#75=20=ED=95=A8=EA=BB=98=20?= =?UTF-8?q?=ED=8C=A8=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=EC=8B=9C=20=ED=8F=B4=EB=8D=94=20=EB=82=B4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/TogetherPackingListService.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/services/TogetherPackingListService.ts b/src/services/TogetherPackingListService.ts index 963cdb5..b7e98d4 100644 --- a/src/services/TogetherPackingListService.ts +++ b/src/services/TogetherPackingListService.ts @@ -173,6 +173,16 @@ const deleteTogetherPackingList = async ( > => { try { const deleteLists = listId.split(','); + const data = []; + const strlists = []; + + const responseFolder = await Folder.findById(folderId); + if (!responseFolder) return 'notfoundFolder'; + + for await (const element of responseFolder.list) { + strlists.push(element.toString()); + } + for await (const element of deleteLists) { const deleteList = await TogetherPackingList.findByIdAndUpdate(element, { isDeleted: true, @@ -181,14 +191,16 @@ const deleteTogetherPackingList = async ( await AlonePackingList.findByIdAndUpdate(deleteList.myPackingListId, { isDeleted: true, }); + responseFolder.list.splice(strlists.indexOf(element), 1); } - const data = []; - const responseFolder = await Folder.findById(folderId); - if (!responseFolder) return 'notfoundFolder'; + await Folder.findByIdAndUpdate(folderId, { + list: responseFolder.list, + }); + for await (const element of responseFolder.list) { const responseList = await TogetherPackingList.findById(element); - if (responseList && responseList.isDeleted == false) { + if (responseList) { const innerData: PackingListResponseDTO = { _id: responseList.id, departureDate: responseList.departureDate, From 6ebca2039f6932d566fc7a75f66eaaa8156507ff Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 17:47:12 +0900 Subject: [PATCH 18/80] =?UTF-8?q?[FEAT]/#63=20=ED=8F=B4=EB=8D=94=20?= =?UTF-8?q?=EC=86=8D=20=ED=98=BC=EC=9E=90=20=ED=8C=A8=ED=82=B9=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=93=A4=20=EC=A1=B0=ED=9A=8C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/FolderService.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index 9b82413..c209688 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -188,7 +188,7 @@ const getAloneListInFolders = async ( folderId: string, ): Promise => { try { - const folders = await Folder.find({ userId: userId }, { isAloned: true }); + const folders = await Folder.find({ userId: userId, isAloned: true }); const currentFd = await Folder.findById(folderId); if (!currentFd) return null; const currentFolder = { @@ -201,13 +201,13 @@ const getAloneListInFolders = async ( title: string; }[] = []; - folders.map((fd) => { + for await (const element of folders) { const tmp = { - _id: fd.id, - title: fd.title, + _id: element.id, + title: element.title, }; folder.push(tmp); - }); + } const lists: { _id: string; @@ -217,8 +217,8 @@ const getAloneListInFolders = async ( packRemainNum: number; }[] = []; - for await (const lt of currentFd.list) { - const list = await AlonePackingList.findById(lt); + for await (const listId of currentFd.list) { + const list = await AlonePackingList.findById(listId); if (!list) return null; const data = { _id: list._id, From 1a41da10a2f30c3b6d03cab192473c4dcdc8d76d Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 18:24:46 +0900 Subject: [PATCH 19/80] =?UTF-8?q?[FEAT]=20=ED=95=A8=EA=BB=98=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EA=B7=B8=EB=A3=B9=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=8B=9C=20=EB=B3=B8=EC=9D=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/TogetherPackingListController.ts | 3 ++- src/services/TogetherPackingListService.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/controllers/TogetherPackingListController.ts b/src/controllers/TogetherPackingListController.ts index 65074b5..3eecaf6 100644 --- a/src/controllers/TogetherPackingListController.ts +++ b/src/controllers/TogetherPackingListController.ts @@ -22,9 +22,11 @@ const createTogetherPackingList = async (req: Request, res: Response) => { } const togetherPackingListCreateDto: TogetherPackingListCreateDTO = req.body; + const userId = req.body.user.id; try { const data = await TogetherPackingListService.createTogetherPackingList( + userId, togetherPackingListCreateDto, ); @@ -147,7 +149,6 @@ const updatePacker = async (req: Request, res: Response) => { } }; - export default { createTogetherPackingList, readTogetherPackingList, diff --git a/src/services/TogetherPackingListService.ts b/src/services/TogetherPackingListService.ts index 0035e1b..1d6de23 100644 --- a/src/services/TogetherPackingListService.ts +++ b/src/services/TogetherPackingListService.ts @@ -22,6 +22,7 @@ import mongoose from 'mongoose'; import { GroupResponseDto } from '../interface/IGroup'; const createTogetherPackingList = async ( + userId: mongoose.Types.ObjectId, togetherPackingListCreateDto: TogetherPackingListCreateDTO, ): Promise< | { @@ -39,7 +40,7 @@ const createTogetherPackingList = async ( if (duplicatedData) return 'duplication'; const group = new Group({ - members: [], + members: [userId], }); await group.save(); From 949e5a873897fdd1bcfe5eda29c020d7cb348e26 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 18:24:49 +0900 Subject: [PATCH 20/80] =?UTF-8?q?[FIX]=20=EB=A9=A4=EB=B2=84=EC=97=90=20?= =?UTF-8?q?=EC=9C=A0=EC=A0=80=EA=B0=80=20=EC=97=86=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?null=20return=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/MemberService.ts | 10 ++-------- src/services/TogetherPackingListService.ts | 1 - 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/services/MemberService.ts b/src/services/MemberService.ts index 7841c58..6ec1c21 100644 --- a/src/services/MemberService.ts +++ b/src/services/MemberService.ts @@ -10,7 +10,7 @@ const getMembers = async (userId: string, groupId: string): Promise Date: Wed, 20 Jul 2022 18:39:15 +0900 Subject: [PATCH 21/80] =?UTF-8?q?[FEAT]/#80=20=ED=95=A8=EA=BB=98=20?= =?UTF-8?q?=ED=8C=A8=ED=82=B9=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlonePackingListCategoryController.ts | 48 +++---- src/routes/AlonePackingListCategoryRouter.ts | 2 +- .../AlonePackingListCategoryService.ts | 132 +++++++++--------- 3 files changed, 91 insertions(+), 91 deletions(-) diff --git a/src/controllers/AlonePackingListCategoryController.ts b/src/controllers/AlonePackingListCategoryController.ts index 43fc880..0275dfd 100644 --- a/src/controllers/AlonePackingListCategoryController.ts +++ b/src/controllers/AlonePackingListCategoryController.ts @@ -71,32 +71,32 @@ const updateCategory = async (req: Request, res: Response) => { } }; -// const deleteCategory = async (req: Request, res: Response) => { -// const { listId, categoryId } = req.params; -// try { -// const data = await TogetherPackingListCategoryService.deleteCategory(listId, categoryId); -// if ( -// data === 'no_list' || -// data === 'no_category' || -// data === 'no_list_category' || -// data === 'null' -// ) { -// res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); -// } else { -// res -// .status(statusCode.OK) -// .send(util.success(statusCode.OK, message.DELETE_TOGETHER_CATEGORY_SUCCESS, data)); -// } -// } catch (error) { -// console.log(error); -// res -// .status(statusCode.INTERNAL_SERVER_ERROR) -// .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); -// } -// }; +const deleteCategory = async (req: Request, res: Response) => { + const { listId, categoryId } = req.params; + try { + const data = await AlonePackingListCategoryService.deleteCategory(listId, categoryId); + if ( + data === 'no_list' || + data === 'no_category' || + data === 'no_list_category' || + data === 'null' + ) { + res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + } else { + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.DELETE_ALONE_CATEGORY_SUCCESS, data)); + } + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; export default { createCategory, updateCategory, -// deleteCategory, + deleteCategory, }; diff --git a/src/routes/AlonePackingListCategoryRouter.ts b/src/routes/AlonePackingListCategoryRouter.ts index 4c9d23c..2f6d255 100644 --- a/src/routes/AlonePackingListCategoryRouter.ts +++ b/src/routes/AlonePackingListCategoryRouter.ts @@ -19,5 +19,5 @@ router.patch( AlonePackingListCategoryController.updateCategory, ); -// router.delete('/:listId/:categoryId', auth, TogetherPackingListCategoryController.deleteCategory); +router.delete('/:listId/:categoryId', auth, AlonePackingListCategoryController.deleteCategory); export default router; diff --git a/src/services/AlonePackingListCategoryService.ts b/src/services/AlonePackingListCategoryService.ts index 87ff519..6c88e26 100644 --- a/src/services/AlonePackingListCategoryService.ts +++ b/src/services/AlonePackingListCategoryService.ts @@ -111,73 +111,73 @@ const updateCategory = async ( } }; -// const deleteCategory = async ( -// listId: string, -// categoryId: string, -// ): Promise => { -// try { -// const cate = await Category.findById(categoryId); -// if (!cate) return 'no_category'; - -// const list = await TogetherPackingList.findById(listId); -// if (!list) return 'no_list'; - -// const categories = list.category; -// const stringCate: string[] = []; -// const packs = cate.pack; - -// categories.map((cat) => { -// stringCate.push(cat.toString()); -// }); -// if (!stringCate.includes(categoryId)) return 'no_list_category'; - -// await Pack.deleteMany({ _id: { $in: packs } }); -// await Category.deleteOne({ _id: categoryId }); - -// categories.splice(stringCate.indexOf(categoryId), 1); - -// await TogetherPackingList.updateOne( -// { _id: listId }, -// { -// $set: { -// category: categories, -// }, -// }, -// ); - -// const data: TogetherPackingListCategoryResponseDto | null = await TogetherPackingList.findOne( -// { _id: listId }, -// { category: 1 }, -// ).populate({ -// path: 'category', -// model: 'Category', -// select: { _id: 1, name: 1, pack: 1 }, -// options: { sort: { createdAt: 1 } }, -// populate: { -// path: 'pack', -// model: 'Pack', -// select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, -// options: { sort: { createdAt: 1 } }, -// populate: { -// path: 'packer', -// model: 'User', -// select: { -// _id: 1, -// name: 1, -// }, -// }, -// }, -// }); - -// if (!data) return 'null'; -// return data; -// } catch (error) { -// console.log(error); -// throw error; -// } -// }; +const deleteCategory = async ( + listId: string, + categoryId: string, +): Promise => { + try { + const cate = await Category.findById(categoryId); + if (!cate) return 'no_category'; + + const list = await AlonePackingList.findById(listId); + if (!list) return 'no_list'; + + const categories = list.category; + const stringCate: string[] = []; + const packs = cate.pack; + + categories.map((cat) => { + stringCate.push(cat.toString()); + }); + if (!stringCate.includes(categoryId)) return 'no_list_category'; + + await Pack.deleteMany({ _id: { $in: packs } }); + await Category.deleteOne({ _id: categoryId }); + + categories.splice(stringCate.indexOf(categoryId), 1); + + await AlonePackingList.updateOne( + { _id: listId }, + { + $set: { + category: categories, + }, + }, + ); + + const data: AlonePackingListCategoryResponseDto | null = await AlonePackingList.findOne( + { _id: listId }, + { category: 1 }, + ).populate({ + path: 'category', + model: 'Category', + select: { _id: 1, name: 1, pack: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'pack', + model: 'Pack', + select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'packer', + model: 'User', + select: { + _id: 1, + name: 1, + }, + }, + }, + }); + + if (!data) return 'null'; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; export default { createCategory, updateCategory, - // deleteCategory, + deleteCategory, }; From cf28449a5214846bfad310123c3534c29b244765 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 19:23:42 +0900 Subject: [PATCH 22/80] =?UTF-8?q?[FEAT]/#83=20=ED=98=BC=EC=9E=90=20?= =?UTF-8?q?=ED=8C=A8=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A7=90=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlonePackingListPackController.ts | 42 +++++++++++ src/routes/AlonePackingListPackRouter.ts | 15 ++++ src/routes/index.ts | 4 +- src/services/AlonePackingListPackService.ts | 70 +++++++++++++++++++ 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/controllers/AlonePackingListPackController.ts create mode 100644 src/routes/AlonePackingListPackRouter.ts create mode 100644 src/services/AlonePackingListPackService.ts diff --git a/src/controllers/AlonePackingListPackController.ts b/src/controllers/AlonePackingListPackController.ts new file mode 100644 index 0000000..1a7d975 --- /dev/null +++ b/src/controllers/AlonePackingListPackController.ts @@ -0,0 +1,42 @@ +import express, { Request, Response } from 'express'; +import statusCode from '../modules/statusCode'; +import message from '../modules/responseMessage'; +import util from '../modules/util'; +import { validationResult } from 'express-validator'; +import { PackCreateDto } from '../interface/IPack'; +import AlonePackingListPackService from '../services/AlonePackingListPackService'; + +const createPack = async (req: Request, res: Response) => { + const error = validationResult(req); + if (!error.isEmpty()) { + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE)); + } + + const packCreateDto: PackCreateDto = req.body; + + try { + const data = await AlonePackingListPackService.createPack(packCreateDto); + + if ( + data === 'no_list' || + data === 'no_category' || + data === 'no_list_category' || + data === 'null' + ) { + res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + } else { + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.CREATE_ALONE_PACK_SUCCESS, data)); + } + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + +export default { createPack }; diff --git a/src/routes/AlonePackingListPackRouter.ts b/src/routes/AlonePackingListPackRouter.ts new file mode 100644 index 0000000..0b2faa9 --- /dev/null +++ b/src/routes/AlonePackingListPackRouter.ts @@ -0,0 +1,15 @@ +import { Router } from 'express'; +import { body } from 'express-validator'; +import AlonePackingListPackController from '../controllers/AlonePackingListPackController'; +import auth from '../middleware/auth'; + +const router: Router = Router(); + +router.post( + '/', + [body('name').notEmpty(), body('categoryId').notEmpty(), body('listId').notEmpty()], + auth, + AlonePackingListPackController.createPack, +); + +export default router; diff --git a/src/routes/index.ts b/src/routes/index.ts index cfbe17a..0d046fe 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -10,6 +10,7 @@ import AlonePackingListRouter from './AlonePackingListRouter'; import AlonePackingListCategoryRouter from './AlonePackingListCategoryRouter'; import TemplateRouter from './TemplateRouter'; import MemberRouter from './MemberRouter'; +import AlonePackingListPackRouter from './AlonePackingListPackRouter'; const router = Router(); router.use('/auth', AuthRouter); @@ -19,9 +20,10 @@ router.use('/packingList', PackingListRouter); router.use('/packingList/together', TogetherPackingListRouter); router.use('/packingList/alone', AlonePackingListRouter); router.use('/packingList/alone/category', AlonePackingListCategoryRouter); +router.use('/packingList/alone/pack', AlonePackingListPackRouter); router.use('/packingList/together/category', TogetherPackingListCategoryRouter); router.use('/packingList/together/pack', TogetherPackingListPackRouter); -router.use('/together',MemberRouter); +router.use('/together', MemberRouter); router.use('/template', TemplateRouter); export default router; diff --git a/src/services/AlonePackingListPackService.ts b/src/services/AlonePackingListPackService.ts new file mode 100644 index 0000000..90ba250 --- /dev/null +++ b/src/services/AlonePackingListPackService.ts @@ -0,0 +1,70 @@ +import { PackCreateDto } from '../interface/IPack'; +import Pack from '../models/Pack'; +import Category from '../models/Category'; + +import { AlonePackingListCategoryResponseDto } from '../interface/IAlonePackingList'; +import AlonePackingList from '../models/AlonePackingList'; + +const createPack = async ( + packCreateDto: PackCreateDto, +): Promise => { + try { + const listId = packCreateDto.listId; + const categoryId = packCreateDto.categoryId; + + const cate = await Category.findById(categoryId); + if (!cate) return 'no_category'; + + const list = await AlonePackingList.findById(listId); + if (!list) return 'no_list'; + + if (!list.category.includes(categoryId)) return 'no_list_category'; + + const newPack = new Pack({ name: packCreateDto.name }); + await newPack.save(); + + await Category.findByIdAndUpdate(categoryId, { + $push: { pack: newPack.id }, + }); + + const packTotal = list.packTotalNum + 1; + const packRemain = list.packRemainNum + 1; + await AlonePackingList.findByIdAndUpdate(listId, { + $set: { packTotalNum: packTotal, packRemainNum: packRemain }, + }); + + const data: AlonePackingListCategoryResponseDto | null = await AlonePackingList.findOne( + { _id: listId }, + { category: 1 }, + ).populate({ + path: 'category', + model: 'Category', + select: { _id: 1, name: 1, pack: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'pack', + model: 'Pack', + select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'packer', + model: 'User', + select: { + _id: 1, + name: 1, + }, + }, + }, + }); + + if (!data) return 'null'; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + +export default { + createPack, +}; From 3923bf42c7fa6ebb643a29c96a1836ad6ca42cce Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 20:21:39 +0900 Subject: [PATCH 23/80] =?UTF-8?q?[ADD]/#73=20dayjs=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8eb64ec..38f6396 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/nanoid": "^3.0.0", "axios": "^0.27.2", "cors": "^2.8.5", - "dayjs": "^1.11.3", + "dayjs": "^1.11.4", "dotenv": "^16.0.0", "express": "^4.17.3", "express-validator": "^6.14.0", diff --git a/yarn.lock b/yarn.lock index 430ec35..1f294fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -618,10 +618,10 @@ crypto-random-string@^2.0.0: resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -dayjs@^1.11.3: - version "1.11.3" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz" - integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== +dayjs@^1.11.4: + version "1.11.4" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" + integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== debug@2.6.9: version "2.6.9" From cc188d5e860f96308a1224d99e3bb4d9c2c217f8 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 20:22:13 +0900 Subject: [PATCH 24/80] =?UTF-8?q?[FEAT]/#73=20=EC=B5=9C=EA=B7=BC=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=9C=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 20 +++++ src/interface/IAlonePackingList.ts | 2 +- src/interface/IPackingList.ts | 11 +++ src/interface/ITogetherPackingList.ts | 1 + src/modules/responseMessage.ts | 1 + src/routes/FolderRouter.ts | 1 + src/services/FolderService.ts | 105 +++++++++++++++++++++++--- 7 files changed, 129 insertions(+), 12 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 0e90b2b..cd60c13 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -174,6 +174,25 @@ const getTogetherListInFolder = async (req: Request, res: Response) => { } }; +const getRecentCreatedList = async (req: Request, res: Response) => { + const userId = req.body.user.id; + try { + const data = await FolderService.getRecentCreatedList(userId); + if (!data) + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.SUCCESS_GET_RECENT_CREATED_LIST, data)); + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + export default { createFolder, updateFolder, @@ -182,4 +201,5 @@ export default { getAloneFolders, getTogetherFolders, getTogetherListInFolder, + getRecentCreatedList, }; diff --git a/src/interface/IAlonePackingList.ts b/src/interface/IAlonePackingList.ts index e49191d..4335634 100644 --- a/src/interface/IAlonePackingList.ts +++ b/src/interface/IAlonePackingList.ts @@ -8,6 +8,7 @@ export interface IAlonePackingList { category: mongoose.Types.ObjectId[]; isDeleted: boolean; isSaved: boolean; + createdAt: Date; } export interface AlonePackingListCreateDTO { @@ -17,7 +18,6 @@ export interface AlonePackingListCreateDTO { templateId: string; } -// export interface AlonePackingListResponseDTO { _id: mongoose.Types.ObjectId; title: string; diff --git a/src/interface/IPackingList.ts b/src/interface/IPackingList.ts index dc6ec7a..4cfa069 100644 --- a/src/interface/IPackingList.ts +++ b/src/interface/IPackingList.ts @@ -1,3 +1,5 @@ +import mongoose from 'mongoose'; + export interface PackingListTitleUpdateDTO { _id: string; title: string; @@ -23,3 +25,12 @@ export interface PackingListResponseDTO { packTotalNum: number; packRemainNum: number; } + +export interface RecentCreatedPackingListDto { + _id: mongoose.Types.ObjectId; + title: string; + remainDay: number; + packTotalNum: number; + packRemainNum: number; + url: string; +} diff --git a/src/interface/ITogetherPackingList.ts b/src/interface/ITogetherPackingList.ts index 24c4fd5..da4d7b5 100644 --- a/src/interface/ITogetherPackingList.ts +++ b/src/interface/ITogetherPackingList.ts @@ -11,6 +11,7 @@ export interface ITogetherPackingList { myPackingListId: mongoose.Types.ObjectId; isSaved: boolean; inviteCode: string; + createdAt: Date; } export interface TogetherPackingListCategoryResponseDto { diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 9a39714..beb2b59 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -28,6 +28,7 @@ const message = { SUCCESS_GET_FOLDERS: '폴더 조회 성공', NO_FOLDER: '존재하지 않는 Folder입니다', SUCCESS_GET_TOGETHER_PACKINGLIST_IN_FOLDER: '폴더 속 함께 패킹리스트 조회 성공', + SUCCESS_GET_RECENT_CREATED_LIST: '최근 생성된 리스트 조회 성공', //패킹리스트 공통 NO_PACKINGLIST: '존재하지 않는 PackingList입니다', diff --git a/src/routes/FolderRouter.ts b/src/routes/FolderRouter.ts index 6e23f22..727893c 100644 --- a/src/routes/FolderRouter.ts +++ b/src/routes/FolderRouter.ts @@ -22,4 +22,5 @@ router.get('/', auth, FolderController.getFolders); router.get('/alone', auth, FolderController.getAloneFolders); router.get('/together', auth, FolderController.getTogetherFolders); router.get('/packingList/together/:folderId', auth, FolderController.getTogetherListInFolder); +router.get('/recentCreatedList', auth, FolderController.getRecentCreatedList); export default router; diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index ee8ce3a..eed5dc9 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -10,6 +10,8 @@ import TogetherPackingList from '../models/TogetherPackingList'; import { folderResponse } from '../modules/folderResponse'; import mongoose from 'mongoose'; import { TogetherListInFolderResponseDto } from '../interface/ITogetherPackingList'; +import { RecentCreatedPackingListDto } from '../interface/IPackingList'; +import dayjs from 'dayjs'; const createFolder = async ( userId: string, @@ -156,18 +158,15 @@ const getTogetherListInFolders = async ( for await (const lt of currentFd.list) { const list = await TogetherPackingList.findById(lt); if (!list) return null; - if (!list.isDeleted) { - const data = { - _id: list._id, - title: list.title, - departureDate: list.departureDate, - packTotalNum: list.packTotalNum, - packRemainNum: list.packRemainNum, - }; - lists.push(data); - } + const data = { + _id: list._id, + title: list.title, + departureDate: list.departureDate, + packTotalNum: list.packTotalNum, + packRemainNum: list.packRemainNum, + }; + lists.push(data); } - const listNum = lists.length; const data: TogetherListInFolderResponseDto | null = { @@ -184,6 +183,89 @@ const getTogetherListInFolders = async ( } }; +const getRecentCreatedList = async ( + userId: string, +): Promise => { + try { + const folders = await Folder.find({ userId: userId }); + const list: { + id: mongoose.Types.ObjectId; + aloneFolder: boolean; + createdAt: Date; + }[] = []; + + for await (const fd of folders) { + for await (const fl of fd.list) { + // 혼자 패킹리스트 폴더 + if (fd.isAloned) { + const alone = await AlonePackingList.findById(fl); + if (!alone) return null; + const data = { + id: alone._id, + aloneFolder: true, + createdAt: alone.createdAt, + }; + list.push(data); + } else { + // 함께 패킹리스트 폴더 + const together = await TogetherPackingList.findById(fl); + if (!together) return null; + const data = { + id: together._id, + aloneFolder: false, + createdAt: together.createdAt, + }; + list.push(data); + } + } + } + list.sort(function (a, b) { + if (a.createdAt > b.createdAt) return -1; + else return 1; + }); + + const recentListId = list[0].id; + + let remainDay; + let recentList; + let url = '15.164.165.92:8000/packingList'; + // alone 폴더에서 추가된 list + if (list[0].aloneFolder) { + recentList = await AlonePackingList.findById(recentListId); + if (!recentList) return null; + remainDay = dayjs(recentList.departureDate).diff(dayjs(), 'day'); + url = `${url}/alone/${recentListId}`; + const data: RecentCreatedPackingListDto | null = { + _id: recentListId, + title: recentList.title, + remainDay: remainDay, + packTotalNum: recentList.packTotalNum, + packRemainNum: recentList.packRemainNum, + url: url, + }; + return data; + } else { + // together 폴더에서 추가된 list + recentList = await TogetherPackingList.findById(recentListId); + if (!recentList) return null; + remainDay = dayjs(recentList.departureDate).diff(dayjs(), 'day'); + url = `${url}/together/${recentListId}`; + const data: RecentCreatedPackingListDto | null = { + _id: recentListId, + title: recentList.title, + remainDay: remainDay, + packTotalNum: recentList.packTotalNum, + packRemainNum: recentList.packRemainNum, + url: url, + }; + return data; + } + } catch (error) { + console.log(error); + throw error; + } +}; + export default { createFolder, updateFolder, @@ -192,4 +274,5 @@ export default { getAloneFolders, getTogetherFolders, getTogetherListInFolders, + getRecentCreatedList, }; From cc00f73b7e1c4473932816adafb38694ad0afa5d Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 20:28:14 +0900 Subject: [PATCH 25/80] =?UTF-8?q?[FEAT]/#85=20=ED=98=BC=EC=9E=90=20?= =?UTF-8?q?=ED=8C=A8=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A7=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlonePackingListPackController.ts | 39 ++++++++++- .../TogetherPackingListPackController.ts | 2 +- src/routes/AlonePackingListPackRouter.ts | 12 ++++ src/services/AlonePackingListPackService.ts | 68 ++++++++++++++++++- 4 files changed, 117 insertions(+), 4 deletions(-) diff --git a/src/controllers/AlonePackingListPackController.ts b/src/controllers/AlonePackingListPackController.ts index 1a7d975..e9bdd36 100644 --- a/src/controllers/AlonePackingListPackController.ts +++ b/src/controllers/AlonePackingListPackController.ts @@ -3,7 +3,7 @@ import statusCode from '../modules/statusCode'; import message from '../modules/responseMessage'; import util from '../modules/util'; import { validationResult } from 'express-validator'; -import { PackCreateDto } from '../interface/IPack'; +import { PackCreateDto, PackUpdateDto } from '../interface/IPack'; import AlonePackingListPackService from '../services/AlonePackingListPackService'; const createPack = async (req: Request, res: Response) => { @@ -39,4 +39,39 @@ const createPack = async (req: Request, res: Response) => { } }; -export default { createPack }; +const updatePack = async (req: Request, res: Response) => { + const error = validationResult(req); + if (!error.isEmpty()) { + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE)); + } + + const packUpdateDto: PackUpdateDto = req.body; + + try { + const data = await AlonePackingListPackService.updatePack(packUpdateDto); + + if ( + data === 'no_pack' || + data === 'no_list' || + data === 'no_category' || + data === 'no_list_category' || + data === 'no_category_pack' || + data === 'null' + ) { + res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + } else { + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.UPDATE_ALONE_PACK_SUCCESS, data)); + } + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + +export default { createPack, updatePack }; diff --git a/src/controllers/TogetherPackingListPackController.ts b/src/controllers/TogetherPackingListPackController.ts index 62d6ea9..156f156 100644 --- a/src/controllers/TogetherPackingListPackController.ts +++ b/src/controllers/TogetherPackingListPackController.ts @@ -49,7 +49,7 @@ const updatePack = async (req: Request, res: Response) => { } const packUpdateDto: PackUpdateDto = req.body; - + console.log(packUpdateDto) try { const data = await TogetherPackingListPackService.updatePack(packUpdateDto); diff --git a/src/routes/AlonePackingListPackRouter.ts b/src/routes/AlonePackingListPackRouter.ts index 0b2faa9..54c87e8 100644 --- a/src/routes/AlonePackingListPackRouter.ts +++ b/src/routes/AlonePackingListPackRouter.ts @@ -11,5 +11,17 @@ router.post( auth, AlonePackingListPackController.createPack, ); +router.patch( + '/', + [ + body('_id').notEmpty(), + body('name').notEmpty(), + body('isChecked').notEmpty(), + body('listId').notEmpty(), + body('categoryId').notEmpty(), + ], + auth, + AlonePackingListPackController.updatePack, +); export default router; diff --git a/src/services/AlonePackingListPackService.ts b/src/services/AlonePackingListPackService.ts index 90ba250..b168f65 100644 --- a/src/services/AlonePackingListPackService.ts +++ b/src/services/AlonePackingListPackService.ts @@ -1,4 +1,4 @@ -import { PackCreateDto } from '../interface/IPack'; +import { PackCreateDto, PackUpdateDto } from '../interface/IPack'; import Pack from '../models/Pack'; import Category from '../models/Category'; @@ -65,6 +65,72 @@ const createPack = async ( } }; + +const updatePack = async ( + packUpdateDto: PackUpdateDto, +): Promise => { + try { + const packId = packUpdateDto._id; + const packName = packUpdateDto.name; + const isChecked = packUpdateDto.isChecked; + const listId = packUpdateDto.listId; + const categoryId = packUpdateDto.categoryId; + + const pack = await Pack.findById(packId); + if (!pack) return 'no_pack'; + + const cate = await Category.findById(categoryId); + if (!cate) return 'no_category'; + + const list = await AlonePackingList.findById(listId); + if (!list) return 'no_list'; + + if (!list.category.includes(categoryId)) return 'no_list_category'; + if (!cate.pack.includes(packId)) return 'no_category_pack'; + + await Pack.updateOne( + { _id: packId }, + { + $set: { + name: packName, + isChecked: isChecked, + }, + }, + ); + + const data: AlonePackingListCategoryResponseDto | null = await AlonePackingList.findOne( + { _id: listId }, + { category: 1 }, + ).populate({ + path: 'category', + model: 'Category', + select: { _id: 1, name: 1, pack: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'pack', + model: 'Pack', + select: { _id: 1, name: 1, isChecked: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'packer', + model: 'User', + select: { + _id: 1, + name: 1, + }, + }, + }, + }); + if (!data) return 'null'; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + + export default { createPack, + updatePack }; From 4065ec875af2a59e4caee47e34214749ad73910b Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 20:39:48 +0900 Subject: [PATCH 26/80] =?UTF-8?q?[FEAT]/#85=20packNum=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AlonePackingListPackService.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/services/AlonePackingListPackService.ts b/src/services/AlonePackingListPackService.ts index b168f65..e6b41dc 100644 --- a/src/services/AlonePackingListPackService.ts +++ b/src/services/AlonePackingListPackService.ts @@ -65,7 +65,6 @@ const createPack = async ( } }; - const updatePack = async ( packUpdateDto: PackUpdateDto, ): Promise => { @@ -88,6 +87,18 @@ const updatePack = async ( if (!list.category.includes(categoryId)) return 'no_list_category'; if (!cate.pack.includes(packId)) return 'no_category_pack'; + let packRemainNum = list.packRemainNum; + if (isChecked != pack.isChecked) { + if (isChecked) { + packRemainNum -= 1; + } else { + packRemainNum += 1; + } + } + await AlonePackingList.updateOne( + { _id: list._id }, + { $set: { packRemainNum: packRemainNum } }, + ); await Pack.updateOne( { _id: packId }, { @@ -129,8 +140,7 @@ const updatePack = async ( } }; - export default { createPack, - updatePack + updatePack, }; From 2e09b6f7876d99db7998c905027e75778c7b0339 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Wed, 20 Jul 2022 20:48:34 +0900 Subject: [PATCH 27/80] =?UTF-8?q?[FEAT]/#87=20=ED=98=BC=EC=9E=90=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A7=90=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlonePackingListPackController.ts | 29 ++++++- src/routes/AlonePackingListPackRouter.ts | 1 + src/services/AlonePackingListPackService.ts | 83 +++++++++++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) diff --git a/src/controllers/AlonePackingListPackController.ts b/src/controllers/AlonePackingListPackController.ts index 1a7d975..e1d5dc2 100644 --- a/src/controllers/AlonePackingListPackController.ts +++ b/src/controllers/AlonePackingListPackController.ts @@ -39,4 +39,31 @@ const createPack = async (req: Request, res: Response) => { } }; -export default { createPack }; +const deletePack = async (req: Request, res: Response) => { + const { listId, categoryId, packId } = req.params; + try { + const data = await AlonePackingListPackService.deletePack(listId, categoryId, packId); + + if ( + data === 'no_pack' || + data === 'no_list' || + data === 'no_category' || + data === 'no_list_category' || + data === 'no_category_pack' || + data === 'null' + ) { + res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + } else { + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.DELETE_TOGETHER_PACK_SUCCESS, data)); + } + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + +export default { createPack, deletePack }; diff --git a/src/routes/AlonePackingListPackRouter.ts b/src/routes/AlonePackingListPackRouter.ts index 0b2faa9..d696a52 100644 --- a/src/routes/AlonePackingListPackRouter.ts +++ b/src/routes/AlonePackingListPackRouter.ts @@ -12,4 +12,5 @@ router.post( AlonePackingListPackController.createPack, ); +router.delete('/:listId/:categoryId/:packId', auth, AlonePackingListPackController.deletePack); export default router; diff --git a/src/services/AlonePackingListPackService.ts b/src/services/AlonePackingListPackService.ts index 90ba250..bbd551d 100644 --- a/src/services/AlonePackingListPackService.ts +++ b/src/services/AlonePackingListPackService.ts @@ -65,6 +65,89 @@ const createPack = async ( } }; +const deletePack = async ( + listId: string, + categoryId: string, + packId: string, +): Promise => { + try { + const pack = await Pack.findById(packId); + if (!pack) return 'no_pack'; + + const cate = await Category.findById(categoryId); + if (!cate) return 'no_category'; + + const list = await AlonePackingList.findById(listId); + if (!list) return 'no_list'; + + const stringCate: string[] = []; + const stringPack: string[] = []; + + list.category.map((cat) => { + stringCate.push(cat.toString()); + }); + + cate.pack.map((pk) => { + stringPack.push(pk.toString()); + }); + + if (!stringCate.includes(categoryId)) return 'no_list_category'; + if (!stringPack.includes(packId)) return 'no_category_pack'; + + const packs = cate.pack; + + const packTotal = list.packTotalNum - 1; + let packRemain = list.packRemainNum; + if (!pack.isChecked) packRemain = list.packRemainNum - 1; + + await AlonePackingList.findByIdAndUpdate(listId, { + $set: { packTotalNum: packTotal, packRemainNum: packRemain }, + }); + + await Pack.deleteOne({ _id: packId }); + packs.splice(stringPack.indexOf(packId), 1); + + await Category.updateOne( + { _id: categoryId }, + { + $set: { + pack: packs, + }, + }, + ); + + const data: AlonePackingListCategoryResponseDto | null = await AlonePackingList.findOne( + { _id: listId }, + { category: 1 }, + ).populate({ + path: 'category', + model: 'Category', + select: { _id: 1, name: 1, pack: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'pack', + model: 'Pack', + select: { _id: 1, name: 1, isChecked: 1, packer: 1 }, + options: { sort: { createdAt: 1 } }, + populate: { + path: 'packer', + model: 'User', + select: { + _id: 1, + name: 1, + }, + }, + }, + }); + if (!data) return 'null'; + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + export default { createPack, + deletePack, }; From 718386aaabf793c79c8da8cfd2fde3133fb18935 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 20:24:13 +0900 Subject: [PATCH 28/80] Revert "Merge branch 'feature/#73' into develop" This reverts commit 540111ab52da41348948f1609eb90af3548e4560. --- package.json | 2 +- src/controllers/FolderController.ts | 20 ------ src/interface/IAlonePackingList.ts | 2 +- src/interface/IPackingList.ts | 11 ---- src/interface/ITogetherPackingList.ts | 1 - src/modules/responseMessage.ts | 1 - src/routes/FolderRouter.ts | 1 - src/services/FolderService.ts | 87 +-------------------------- yarn.lock | 8 +-- 9 files changed, 7 insertions(+), 126 deletions(-) diff --git a/package.json b/package.json index 38f6396..8eb64ec 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/nanoid": "^3.0.0", "axios": "^0.27.2", "cors": "^2.8.5", - "dayjs": "^1.11.4", + "dayjs": "^1.11.3", "dotenv": "^16.0.0", "express": "^4.17.3", "express-validator": "^6.14.0", diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 77520b0..f7fea16 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -194,25 +194,6 @@ const getAloneListInFolder = async (req: Request, res: Response) => { } }; -const getRecentCreatedList = async (req: Request, res: Response) => { - const userId = req.body.user.id; - try { - const data = await FolderService.getRecentCreatedList(userId); - if (!data) - return res - .status(statusCode.BAD_REQUEST) - .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); - res - .status(statusCode.OK) - .send(util.success(statusCode.OK, message.SUCCESS_GET_RECENT_CREATED_LIST, data)); - } catch (error) { - console.log(error); - res - .status(statusCode.INTERNAL_SERVER_ERROR) - .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); - } -}; - export default { createFolder, updateFolder, @@ -222,5 +203,4 @@ export default { getTogetherFolders, getTogetherListInFolder, getAloneListInFolder, - getRecentCreatedList, }; diff --git a/src/interface/IAlonePackingList.ts b/src/interface/IAlonePackingList.ts index c211f99..5f44710 100644 --- a/src/interface/IAlonePackingList.ts +++ b/src/interface/IAlonePackingList.ts @@ -8,7 +8,6 @@ export interface IAlonePackingList { category: mongoose.Types.ObjectId[]; isDeleted: boolean; isSaved: boolean; - createdAt: Date; } export interface AlonePackingListCreateDTO { @@ -18,6 +17,7 @@ export interface AlonePackingListCreateDTO { templateId: string; } +// export interface AlonePackingListResponseDTO { _id: mongoose.Types.ObjectId; title: string; diff --git a/src/interface/IPackingList.ts b/src/interface/IPackingList.ts index 4cfa069..dc6ec7a 100644 --- a/src/interface/IPackingList.ts +++ b/src/interface/IPackingList.ts @@ -1,5 +1,3 @@ -import mongoose from 'mongoose'; - export interface PackingListTitleUpdateDTO { _id: string; title: string; @@ -25,12 +23,3 @@ export interface PackingListResponseDTO { packTotalNum: number; packRemainNum: number; } - -export interface RecentCreatedPackingListDto { - _id: mongoose.Types.ObjectId; - title: string; - remainDay: number; - packTotalNum: number; - packRemainNum: number; - url: string; -} diff --git a/src/interface/ITogetherPackingList.ts b/src/interface/ITogetherPackingList.ts index da4d7b5..24c4fd5 100644 --- a/src/interface/ITogetherPackingList.ts +++ b/src/interface/ITogetherPackingList.ts @@ -11,7 +11,6 @@ export interface ITogetherPackingList { myPackingListId: mongoose.Types.ObjectId; isSaved: boolean; inviteCode: string; - createdAt: Date; } export interface TogetherPackingListCategoryResponseDto { diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 20a422c..129c160 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -29,7 +29,6 @@ const message = { NO_FOLDER: '존재하지 않는 Folder입니다', SUCCESS_GET_TOGETHER_PACKINGLIST_IN_FOLDER: '폴더 속 함께 패킹리스트 조회 성공', SUCCESS_GET_ALONE_PACKINGLIST_IN_FOLDER: '폴더 속 혼자 패킹리스트 조회 성공', - SUCCESS_GET_RECENT_CREATED_LIST: '최근 생성된 리스트 조회 성공', //패킹리스트 공통 NO_PACKINGLIST: '존재하지 않는 PackingList입니다', diff --git a/src/routes/FolderRouter.ts b/src/routes/FolderRouter.ts index 78018d9..128f3c4 100644 --- a/src/routes/FolderRouter.ts +++ b/src/routes/FolderRouter.ts @@ -23,5 +23,4 @@ router.get('/alone', auth, FolderController.getAloneFolders); router.get('/together', auth, FolderController.getTogetherFolders); router.get('/packingList/together/:folderId', auth, FolderController.getTogetherListInFolder); router.get('/packingList/alone/:folderId', auth, FolderController.getAloneListInFolder); -router.get('/recentCreatedList', auth, FolderController.getRecentCreatedList); export default router; diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index 5122478..c209688 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -11,8 +11,6 @@ import { folderResponse } from '../modules/folderResponse'; import mongoose from 'mongoose'; import { TogetherListInFolderResponseDto } from '../interface/ITogetherPackingList'; import { AloneListInFolderResponseDto } from '../interface/IAlonePackingList'; -import { RecentCreatedPackingListDto } from '../interface/IPackingList'; -import dayjs from 'dayjs'; const createFolder = async ( userId: string, @@ -168,6 +166,7 @@ const getTogetherListInFolders = async ( }; lists.push(data); } + const listNum = lists.length; const data: TogetherListInFolderResponseDto | null = { @@ -247,89 +246,6 @@ const getAloneListInFolders = async ( } }; -const getRecentCreatedList = async ( - userId: string, -): Promise => { - try { - const folders = await Folder.find({ userId: userId }); - const list: { - id: mongoose.Types.ObjectId; - aloneFolder: boolean; - createdAt: Date; - }[] = []; - - for await (const fd of folders) { - for await (const fl of fd.list) { - // 혼자 패킹리스트 폴더 - if (fd.isAloned) { - const alone = await AlonePackingList.findById(fl); - if (!alone) return null; - const data = { - id: alone._id, - aloneFolder: true, - createdAt: alone.createdAt, - }; - list.push(data); - } else { - // 함께 패킹리스트 폴더 - const together = await TogetherPackingList.findById(fl); - if (!together) return null; - const data = { - id: together._id, - aloneFolder: false, - createdAt: together.createdAt, - }; - list.push(data); - } - } - } - list.sort(function (a, b) { - if (a.createdAt > b.createdAt) return -1; - else return 1; - }); - - const recentListId = list[0].id; - - let remainDay; - let recentList; - let url = '15.164.165.92:8000/packingList'; - // alone 폴더에서 추가된 list - if (list[0].aloneFolder) { - recentList = await AlonePackingList.findById(recentListId); - if (!recentList) return null; - remainDay = dayjs(recentList.departureDate).diff(dayjs(), 'day'); - url = `${url}/alone/${recentListId}`; - const data: RecentCreatedPackingListDto | null = { - _id: recentListId, - title: recentList.title, - remainDay: remainDay, - packTotalNum: recentList.packTotalNum, - packRemainNum: recentList.packRemainNum, - url: url, - }; - return data; - } else { - // together 폴더에서 추가된 list - recentList = await TogetherPackingList.findById(recentListId); - if (!recentList) return null; - remainDay = dayjs(recentList.departureDate).diff(dayjs(), 'day'); - url = `${url}/together/${recentListId}`; - const data: RecentCreatedPackingListDto | null = { - _id: recentListId, - title: recentList.title, - remainDay: remainDay, - packTotalNum: recentList.packTotalNum, - packRemainNum: recentList.packRemainNum, - url: url, - }; - return data; - } - } catch (error) { - console.log(error); - throw error; - } -}; - export default { createFolder, updateFolder, @@ -339,5 +255,4 @@ export default { getTogetherFolders, getTogetherListInFolders, getAloneListInFolders, - getRecentCreatedList, }; diff --git a/yarn.lock b/yarn.lock index 1f294fa..430ec35 100644 --- a/yarn.lock +++ b/yarn.lock @@ -618,10 +618,10 @@ crypto-random-string@^2.0.0: resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -dayjs@^1.11.4: - version "1.11.4" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" - integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== +dayjs@^1.11.3: + version "1.11.3" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz" + integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== debug@2.6.9: version "2.6.9" From 0c9a0f285e329fd28320256941ed4600119215ad Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 21:22:05 +0900 Subject: [PATCH 29/80] =?UTF-8?q?[DEL]=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AuthController.ts | 30 --------------- src/routes/AuthRouter.ts | 1 - src/services/AuthService.ts | 62 ------------------------------- 3 files changed, 93 deletions(-) diff --git a/src/controllers/AuthController.ts b/src/controllers/AuthController.ts index 84ff603..0d5bee4 100644 --- a/src/controllers/AuthController.ts +++ b/src/controllers/AuthController.ts @@ -39,37 +39,7 @@ const getGoogleUser = async (req: Request, res: Response) => { }; -// 토큰 발급을 위한 코드 -const getGoogleToken = async (req: Request, res: Response) => { - return res.redirect( - `${GOOGLE_AUTH_URL}?client_id=${config.googleClientID}&redirect_uri=${GOOGLE_AUTH_REDIRECT_URL}&response_type=code&include_granted_scopes=true&scope=https://www.googleapis.com/auth/userinfo.email`, - ); -}; - -const googleLogin = async (req: Request, res: Response) => { - const { code } = req.query; - try { - const userEmail = await AuthService.getGoogleInfo(code as string); - if (!userEmail) - return res - .status(statusCode.BAD_REQUEST) - .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE_TOKEN)); - - const data = await AuthService.googleLogin(userEmail); - res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_TOKEN, data)); - - // res.status(statusCode.OK).send() - } catch (error) { - console.log(error); - res - .status(statusCode.INTERNAL_SERVER_ERROR) - .send(util.success(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); - } - // return res.redirect('http://localhost:8000'); -}; export default { - googleLogin, - getGoogleToken, getGoogleUser, }; diff --git a/src/routes/AuthRouter.ts b/src/routes/AuthRouter.ts index ee33754..8017cd9 100644 --- a/src/routes/AuthRouter.ts +++ b/src/routes/AuthRouter.ts @@ -5,6 +5,5 @@ const router: Router = Router(); router.get('/google', AuthController.getGoogleUser); -router.get("/google/callback", AuthController.googleLogin); export default router; diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index a552020..435278c 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -42,69 +42,7 @@ const getGoogleUser = async (googleToken: string): Promise => { - try { - const { data } = await axios({ - method: 'POST', - url: `${GOOGLE_AUTH_TOKEN_URL}`, - headers: { - 'content-type': 'application/x-www-form-urlencoded;charset=utf-8', - }, - params: { - grant_type: 'authorization_code', - client_id: config.googleClientID, - client_secret: config.googleClientSECRET, - redirectUri: GOOGLE_AUTH_REDIRECT_URL, - code: code, - }, - }); - - const access_token = data['access_token']; - if (!access_token) return null; - else { - const { data: userEmail } = await axios.get( - `https://www.googleapis.com/oauth2/v3/userinfo?access_token=${access_token}`, - ); - const { email } = userEmail; - return email; - } - } catch (error) { - console.log(error); - throw error; - } -}; - -const googleLogin = async (userEmail: string): Promise => { - try { - const user = await User.findOne({ email: userEmail }); - - if (!user) { - const data = { - isAlreadyUser: false, - email: userEmail, - }; - return data; - } else { - const data = { - isAlreadyUser: true, - _id: user._id, - email: userEmail, - name: user.name, - profileImageId: user.profileImageId, - }; - return data; - } - } catch (error) { - console.log(error); - throw error; - } -}; export default { - getGoogleInfo, - googleLogin, getGoogleUser, }; From b8c51a49ba98110c73fb190ec47ac19e8688b20a Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 21:27:54 +0900 Subject: [PATCH 30/80] =?UTF-8?q?[FEAT]/#73=20=EC=B5=9C=EA=B7=BC=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EB=90=9C=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 20 +++++ src/interface/IAlonePackingList.ts | 2 +- src/interface/IPackingList.ts | 11 +++ src/interface/ITogetherPackingList.ts | 1 + src/modules/responseMessage.ts | 1 + src/routes/FolderRouter.ts | 1 + src/services/FolderService.ts | 105 +++++++++++++++++++++++--- 7 files changed, 129 insertions(+), 12 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 0e90b2b..cd60c13 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -174,6 +174,25 @@ const getTogetherListInFolder = async (req: Request, res: Response) => { } }; +const getRecentCreatedList = async (req: Request, res: Response) => { + const userId = req.body.user.id; + try { + const data = await FolderService.getRecentCreatedList(userId); + if (!data) + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + res + .status(statusCode.OK) + .send(util.success(statusCode.OK, message.SUCCESS_GET_RECENT_CREATED_LIST, data)); + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + export default { createFolder, updateFolder, @@ -182,4 +201,5 @@ export default { getAloneFolders, getTogetherFolders, getTogetherListInFolder, + getRecentCreatedList, }; diff --git a/src/interface/IAlonePackingList.ts b/src/interface/IAlonePackingList.ts index e49191d..4335634 100644 --- a/src/interface/IAlonePackingList.ts +++ b/src/interface/IAlonePackingList.ts @@ -8,6 +8,7 @@ export interface IAlonePackingList { category: mongoose.Types.ObjectId[]; isDeleted: boolean; isSaved: boolean; + createdAt: Date; } export interface AlonePackingListCreateDTO { @@ -17,7 +18,6 @@ export interface AlonePackingListCreateDTO { templateId: string; } -// export interface AlonePackingListResponseDTO { _id: mongoose.Types.ObjectId; title: string; diff --git a/src/interface/IPackingList.ts b/src/interface/IPackingList.ts index dc6ec7a..4cfa069 100644 --- a/src/interface/IPackingList.ts +++ b/src/interface/IPackingList.ts @@ -1,3 +1,5 @@ +import mongoose from 'mongoose'; + export interface PackingListTitleUpdateDTO { _id: string; title: string; @@ -23,3 +25,12 @@ export interface PackingListResponseDTO { packTotalNum: number; packRemainNum: number; } + +export interface RecentCreatedPackingListDto { + _id: mongoose.Types.ObjectId; + title: string; + remainDay: number; + packTotalNum: number; + packRemainNum: number; + url: string; +} diff --git a/src/interface/ITogetherPackingList.ts b/src/interface/ITogetherPackingList.ts index 24c4fd5..da4d7b5 100644 --- a/src/interface/ITogetherPackingList.ts +++ b/src/interface/ITogetherPackingList.ts @@ -11,6 +11,7 @@ export interface ITogetherPackingList { myPackingListId: mongoose.Types.ObjectId; isSaved: boolean; inviteCode: string; + createdAt: Date; } export interface TogetherPackingListCategoryResponseDto { diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 9a39714..beb2b59 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -28,6 +28,7 @@ const message = { SUCCESS_GET_FOLDERS: '폴더 조회 성공', NO_FOLDER: '존재하지 않는 Folder입니다', SUCCESS_GET_TOGETHER_PACKINGLIST_IN_FOLDER: '폴더 속 함께 패킹리스트 조회 성공', + SUCCESS_GET_RECENT_CREATED_LIST: '최근 생성된 리스트 조회 성공', //패킹리스트 공통 NO_PACKINGLIST: '존재하지 않는 PackingList입니다', diff --git a/src/routes/FolderRouter.ts b/src/routes/FolderRouter.ts index 6e23f22..727893c 100644 --- a/src/routes/FolderRouter.ts +++ b/src/routes/FolderRouter.ts @@ -22,4 +22,5 @@ router.get('/', auth, FolderController.getFolders); router.get('/alone', auth, FolderController.getAloneFolders); router.get('/together', auth, FolderController.getTogetherFolders); router.get('/packingList/together/:folderId', auth, FolderController.getTogetherListInFolder); +router.get('/recentCreatedList', auth, FolderController.getRecentCreatedList); export default router; diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index ee8ce3a..eed5dc9 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -10,6 +10,8 @@ import TogetherPackingList from '../models/TogetherPackingList'; import { folderResponse } from '../modules/folderResponse'; import mongoose from 'mongoose'; import { TogetherListInFolderResponseDto } from '../interface/ITogetherPackingList'; +import { RecentCreatedPackingListDto } from '../interface/IPackingList'; +import dayjs from 'dayjs'; const createFolder = async ( userId: string, @@ -156,18 +158,15 @@ const getTogetherListInFolders = async ( for await (const lt of currentFd.list) { const list = await TogetherPackingList.findById(lt); if (!list) return null; - if (!list.isDeleted) { - const data = { - _id: list._id, - title: list.title, - departureDate: list.departureDate, - packTotalNum: list.packTotalNum, - packRemainNum: list.packRemainNum, - }; - lists.push(data); - } + const data = { + _id: list._id, + title: list.title, + departureDate: list.departureDate, + packTotalNum: list.packTotalNum, + packRemainNum: list.packRemainNum, + }; + lists.push(data); } - const listNum = lists.length; const data: TogetherListInFolderResponseDto | null = { @@ -184,6 +183,89 @@ const getTogetherListInFolders = async ( } }; +const getRecentCreatedList = async ( + userId: string, +): Promise => { + try { + const folders = await Folder.find({ userId: userId }); + const list: { + id: mongoose.Types.ObjectId; + aloneFolder: boolean; + createdAt: Date; + }[] = []; + + for await (const fd of folders) { + for await (const fl of fd.list) { + // 혼자 패킹리스트 폴더 + if (fd.isAloned) { + const alone = await AlonePackingList.findById(fl); + if (!alone) return null; + const data = { + id: alone._id, + aloneFolder: true, + createdAt: alone.createdAt, + }; + list.push(data); + } else { + // 함께 패킹리스트 폴더 + const together = await TogetherPackingList.findById(fl); + if (!together) return null; + const data = { + id: together._id, + aloneFolder: false, + createdAt: together.createdAt, + }; + list.push(data); + } + } + } + list.sort(function (a, b) { + if (a.createdAt > b.createdAt) return -1; + else return 1; + }); + + const recentListId = list[0].id; + + let remainDay; + let recentList; + let url = '15.164.165.92:8000/packingList'; + // alone 폴더에서 추가된 list + if (list[0].aloneFolder) { + recentList = await AlonePackingList.findById(recentListId); + if (!recentList) return null; + remainDay = dayjs(recentList.departureDate).diff(dayjs(), 'day'); + url = `${url}/alone/${recentListId}`; + const data: RecentCreatedPackingListDto | null = { + _id: recentListId, + title: recentList.title, + remainDay: remainDay, + packTotalNum: recentList.packTotalNum, + packRemainNum: recentList.packRemainNum, + url: url, + }; + return data; + } else { + // together 폴더에서 추가된 list + recentList = await TogetherPackingList.findById(recentListId); + if (!recentList) return null; + remainDay = dayjs(recentList.departureDate).diff(dayjs(), 'day'); + url = `${url}/together/${recentListId}`; + const data: RecentCreatedPackingListDto | null = { + _id: recentListId, + title: recentList.title, + remainDay: remainDay, + packTotalNum: recentList.packTotalNum, + packRemainNum: recentList.packRemainNum, + url: url, + }; + return data; + } + } catch (error) { + console.log(error); + throw error; + } +}; + export default { createFolder, updateFolder, @@ -192,4 +274,5 @@ export default { getAloneFolders, getTogetherFolders, getTogetherListInFolders, + getRecentCreatedList, }; From ac2dec199aeeae1fc4a801a601f4cedec30cdda9 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 21:53:41 +0900 Subject: [PATCH 31/80] =?UTF-8?q?[CHORE]=20dayjs=20=EB=B2=84=EC=A0=84=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8eb64ec..38f6396 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@types/nanoid": "^3.0.0", "axios": "^0.27.2", "cors": "^2.8.5", - "dayjs": "^1.11.3", + "dayjs": "^1.11.4", "dotenv": "^16.0.0", "express": "^4.17.3", "express-validator": "^6.14.0", diff --git a/yarn.lock b/yarn.lock index 430ec35..1f294fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -618,10 +618,10 @@ crypto-random-string@^2.0.0: resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -dayjs@^1.11.3: - version "1.11.3" - resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz" - integrity sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A== +dayjs@^1.11.4: + version "1.11.4" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" + integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== debug@2.6.9: version "2.6.9" From 82abccdade38a7e24a2e98811d6858e9d84caee4 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Wed, 20 Jul 2022 22:40:25 +0900 Subject: [PATCH 32/80] =?UTF-8?q?[ADD]/#91=20user=20=EA=B5=AC=EA=B8=80=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C=20isDeleted=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index 435278c..ad94e80 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -19,7 +19,10 @@ const getGoogleUser = async (googleToken: string): Promise Date: Wed, 20 Jul 2022 23:07:58 +0900 Subject: [PATCH 33/80] =?UTF-8?q?[FIX]=20response=20type=20=EC=86=8C?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index db4a018..b205569 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -124,7 +124,7 @@ const getAloneFolders = async (req: Request, res: Response) => { const data = await FolderService.getAloneFolders(userId); res .status(statusCode.OK) - .send(util.success(statusCode.OK, message.SUCCESS_GET_FOLDERS, { AloneFolders: data })); + .send(util.success(statusCode.OK, message.SUCCESS_GET_FOLDERS, { aloneFolders: data })); } catch (error) { console.log(error); res @@ -145,7 +145,7 @@ const getTogetherFolders = async (req: Request, res: Response) => { const data = await FolderService.getTogetherFolders(userId); res .status(statusCode.OK) - .send(util.success(statusCode.OK, message.SUCCESS_GET_FOLDERS, { TogetherFolders: data })); + .send(util.success(statusCode.OK, message.SUCCESS_GET_FOLDERS, { togetherFolders: data })); } catch (error) { console.log(error); res From 220e0645a0191a09e57475497d12c468bc2ef9cd Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 20 Jul 2022 23:23:08 +0900 Subject: [PATCH 34/80] =?UTF-8?q?[CHORE]=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EC=83=9D=EC=84=B1,=20=EC=88=98=EC=A0=95,=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20totalNum,=20reamainNum=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TogetherPackingListPackService.ts | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/services/TogetherPackingListPackService.ts b/src/services/TogetherPackingListPackService.ts index 04ce970..f1173ea 100644 --- a/src/services/TogetherPackingListPackService.ts +++ b/src/services/TogetherPackingListPackService.ts @@ -3,7 +3,6 @@ import { PackCreateDto } from '../interface/IPack'; import Pack from '../models/Pack'; import Category from '../models/Category'; import { PackUpdateDto } from '../interface/IPack'; -import mongoose from 'mongoose'; import { TogetherPackingListCategoryResponseDto } from '../interface/ITogetherPackingList'; const createPack = async ( @@ -28,6 +27,13 @@ const createPack = async ( $push: { pack: newPack.id }, }); + const packTotal = list.packTotalNum + 1; + const packRemain = list.packRemainNum + 1; + + await TogetherPackingList.findByIdAndUpdate(listId, { + $set: { packTotalNum: packTotal, packRemainNum: packRemain }, + }); + const data: TogetherPackingListCategoryResponseDto | null = await TogetherPackingList.findOne( { _id: listId }, { category: 1 }, @@ -82,6 +88,19 @@ const updatePack = async ( if (!list.category.includes(categoryId)) return 'no_list_category'; if (!cate.pack.includes(packId)) return 'no_category_pack'; + let packRemainNum = list.packRemainNum; + if (isChecked != pack.isChecked) { + if (isChecked) { + packRemainNum -= 1; + } else { + packRemainNum += 1; + } + } + await TogetherPackingList.updateOne( + { _id: listId }, + { $set: { packRemainNum: packRemainNum } }, + ); + await Pack.updateOne( { _id: packId }, { @@ -153,6 +172,14 @@ const deletePack = async ( const packs = cate.pack; + const packTotal = list.packTotalNum - 1; + let packRemain = list.packRemainNum; + if (!pack.isChecked) packRemain = list.packRemainNum - 1; + + await TogetherPackingList.findByIdAndUpdate(listId, { + $set: { packTotalNum: packTotal, packRemainNum: packRemain }, + }); + await Pack.deleteOne({ _id: packId }); packs.splice(stringPack.indexOf(packId), 1); From 29bde11fce4d4e8ac9843ba3eaa446539a59257d Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Thu, 21 Jul 2022 04:46:13 +0900 Subject: [PATCH 35/80] [FIX] get -> post --- src/routes/AuthRouter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/AuthRouter.ts b/src/routes/AuthRouter.ts index 8017cd9..b449d68 100644 --- a/src/routes/AuthRouter.ts +++ b/src/routes/AuthRouter.ts @@ -3,7 +3,7 @@ import { AuthController } from '../controllers'; const router: Router = Router(); -router.get('/google', AuthController.getGoogleUser); +router.post('/google', AuthController.getGoogleUser); export default router; From 76ced0c9d7d463b0d15d2db75d78a1dfc742bd04 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Thu, 21 Jul 2022 05:17:43 +0900 Subject: [PATCH 36/80] =?UTF-8?q?[FEAT]/#93=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/AuthController.ts | 33 ++++++++++++++++++++---- src/routes/AuthRouter.ts | 4 +-- src/services/AuthService.ts | 42 ++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/src/controllers/AuthController.ts b/src/controllers/AuthController.ts index 0d5bee4..f306c68 100644 --- a/src/controllers/AuthController.ts +++ b/src/controllers/AuthController.ts @@ -3,11 +3,6 @@ import statusCode from '../modules/statusCode'; import message from '../modules/responseMessage'; import util from '../modules/util'; import { AuthService } from '../services'; -import config from '../config'; - -const GOOGLE_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth'; -const GOOGLE_AUTH_REDIRECT_URL = 'http://localhost:8000/auth/google/callback'; - /** * @route GET /auth/google @@ -38,8 +33,36 @@ const getGoogleUser = async (req: Request, res: Response) => { } }; +/** + * @route GET /auth/kakao + * @desc get kakao user + * @access public + **/ + +const getKakaoUser = async (req: Request, res: Response) => { + const token = req.body.accessToken; + if (!token) { + res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.NULL_VALUE_TOKEN)); + } + try { + const data = await AuthService.getKakaoUser(token); + if (!data) + return res + .status(statusCode.BAD_REQUEST) + .send(util.fail(statusCode.BAD_REQUEST, message.INVALID_TOKEN)); + res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_TOKEN, data)); + } catch (error) { + console.log(error); + res + .status(statusCode.INTERNAL_SERVER_ERROR) + .send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; export default { getGoogleUser, + getKakaoUser, }; diff --git a/src/routes/AuthRouter.ts b/src/routes/AuthRouter.ts index 8017cd9..32fb718 100644 --- a/src/routes/AuthRouter.ts +++ b/src/routes/AuthRouter.ts @@ -3,7 +3,7 @@ import { AuthController } from '../controllers'; const router: Router = Router(); -router.get('/google', AuthController.getGoogleUser); - +router.post('/google', AuthController.getGoogleUser); +router.post('/kakao', AuthController.getKakaoUser); export default router; diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index ad94e80..9c24ada 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -1,5 +1,4 @@ import axios from 'axios'; -import config from '../config'; import { AuthResponseDto } from '../interface/IUser'; import User from '../models/User'; import getToken from '../modules/jwtHandler'; @@ -45,6 +44,47 @@ const getGoogleUser = async (googleToken: string): Promise => { + try { + const response = await axios({ + method: 'post', + url: 'https://kapi.kakao.com/v2/user/me', + headers: { + Authorization: `Bearer ${kakaoToken}`, + }, + }); + + if (!response) return null; + + // 존재하는 유저인지 판별 + const userEmail = response.data.kakao_account.email; + const user = await User.findOne({ email: userEmail }); + if (!user || user.isDeleted) { + if (user?.isDeleted) { + await User.findByIdAndDelete(user._id); + } + const data = { + isAlreadyUser: false, + email: userEmail, + }; + return data; + } else { + const accessToken = getToken(user._id); + const data = { + isAlreadyUser: true, + token: accessToken, + _id: user._id, + email: userEmail, + name: user.name, + profileImageId: user.profileImageId, + }; + return data; + } + } catch (error) { + console.log(error); + } +}; export default { getGoogleUser, + getKakaoUser, }; From c264e8a8b6077b00655d85ee4d7f9bd4d01cc51e Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Thu, 21 Jul 2022 05:35:39 +0900 Subject: [PATCH 37/80] =?UTF-8?q?[FEAT]/#93=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B2=BD=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index 9c24ada..c0162c0 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -54,10 +54,11 @@ const getKakaoUser = async (kakaoToken: string): Promise Date: Thu, 21 Jul 2022 06:19:40 +0900 Subject: [PATCH 38/80] =?UTF-8?q?[FIX]/#93=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B2=BD=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index c0162c0..8e4188c 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -47,18 +47,17 @@ const getGoogleUser = async (googleToken: string): Promise => { try { const response = await axios({ - method: 'post', + method: 'get', url: 'https://kapi.kakao.com/v2/user/me', headers: { Authorization: `Bearer ${kakaoToken}`, }, }); - console.log(response); if (!response) return null; // 존재하는 유저인지 판별 - const userEmail = response.data.email; + const userEmail = response.data.kakao_account.email; const user = await User.findOne({ email: userEmail }); if (!user || user.isDeleted) { if (user?.isDeleted) { From 8358071573276fe73e78cda7500c367c5e8604a1 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Thu, 21 Jul 2022 06:52:13 +0900 Subject: [PATCH 39/80] =?UTF-8?q?[FIX]/#93=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B4=80=EB=A0=A8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index 8e4188c..1b1f8a0 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -54,6 +54,7 @@ const getKakaoUser = async (kakaoToken: string): Promise Date: Thu, 21 Jul 2022 06:52:49 +0900 Subject: [PATCH 40/80] =?UTF-8?q?[FIX]/#93=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B4=80=EB=A0=A8=20=EC=88=98?= =?UTF-8?q?=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index 1b1f8a0..8e4188c 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -54,7 +54,6 @@ const getKakaoUser = async (kakaoToken: string): Promise Date: Thu, 21 Jul 2022 23:16:25 +0900 Subject: [PATCH 41/80] =?UTF-8?q?[FIX]=20=ED=98=BC=EC=9E=90=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=EC=8B=9C=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AlonePackingListService.ts | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/services/AlonePackingListService.ts b/src/services/AlonePackingListService.ts index 46416b6..ad86073 100644 --- a/src/services/AlonePackingListService.ts +++ b/src/services/AlonePackingListService.ts @@ -88,21 +88,20 @@ const deleteAlonePackingList = async ( ); const data = []; - const responseFolder = await Folder.findById(folderId); - if (!responseFolder) return 'notfoundFolder'; + const originalFolder = await Folder.findById(folderId); + if (!originalFolder) return 'notfoundFolder'; - const strlists = []; - for await (const element of responseFolder.list) { - strlists.push(element.toString()); - } - for await (const element of deleteLists) { - responseFolder.list.splice(strlists.indexOf(element), 1); - } + const revisedLists = originalFolder.list.filter((element) => { + return !deleteLists.includes(element.toString()); + }); await Folder.findByIdAndUpdate(folderId, { - list: responseFolder.list, + list: revisedLists, }); + const responseFolder = await Folder.findById(folderId); + if (!responseFolder) return 'notfoundFolder'; + for await (const element of responseFolder.list) { const responseList = await AlonePackingList.findById(element); if (responseList) { From f411eb002492d9864079c6f6c9cac7a8df1e54a7 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Fri, 22 Jul 2022 03:05:20 +0900 Subject: [PATCH 42/80] =?UTF-8?q?[FIX]=20find=20=EC=A1=B0=EA=B1=B4=20or?= =?UTF-8?q?=EC=9D=84=20and=EB=A1=9C=20=EA=B3=A0=EC=B9=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/FolderService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index 5122478..cf6a87b 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -126,7 +126,7 @@ const getTogetherListInFolders = async ( folderId: string, ): Promise => { try { - const folders = await Folder.find({ userId: userId }, { isAloned: false }); + const folders = await Folder.find({ userId: userId, isAloned: false }); const currentFd = await Folder.findById(folderId); if (!currentFd) return null; const currentTitle = currentFd.title; From dfcc4e2b753d3df19cdc77ae82f516f276509529 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 22 Jul 2022 03:09:13 +0900 Subject: [PATCH 43/80] =?UTF-8?q?[FIX]=20createdAt=20=EC=88=9C=EC=84=9C?= =?UTF-8?q?=EB=8C=80=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/folderResponse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/folderResponse.ts b/src/modules/folderResponse.ts index f0b82de..dbb41f6 100644 --- a/src/modules/folderResponse.ts +++ b/src/modules/folderResponse.ts @@ -1,7 +1,7 @@ import Folder from '../models/Folder'; async function folderResponse(userId: string) { - const folders = await Folder.find({ userId: userId }); + const folders = await Folder.find({userId: userId}) .sort({createdAt: -1}) const aloneFolders: any[] = []; const togetherFolders: any[] = []; await folders.map((folder) => { From d16989c77ce5c31542b2969d604b8a5578c47a2c Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Fri, 22 Jul 2022 03:32:33 +0900 Subject: [PATCH 44/80] =?UTF-8?q?[ADD]=20mocha=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 +- yarn.lock | 467 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 461 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 38f6396..17659c9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "dev": "nodemon", "build": "tsc && node dist", - "lint": "eslint ." + "lint": "eslint .", + "test": "mocha ./test" }, "author": "", "license": "ISC", @@ -28,14 +29,17 @@ "@types/cors": "^2.8.12", "@types/nanoid": "^3.0.0", "axios": "^0.27.2", + "chai": "^4.3.6", "cors": "^2.8.5", "dayjs": "^1.11.4", "dotenv": "^16.0.0", "express": "^4.17.3", "express-validator": "^6.14.0", "jsonwebtoken": "^8.5.1", + "mocha": "^10.0.0", "mongoose": "^6.3.1", "nanoid": "3.3.4", + "supertest": "^6.2.4", "upgrade": "^1.1.0" } } diff --git a/yarn.lock b/yarn.lock index 1f294fa..bfb0fee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -282,6 +282,11 @@ "@typescript-eslint/types" "5.30.5" eslint-visitor-keys "^3.3.0" +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" @@ -332,6 +337,11 @@ ansi-align@^3.0.0: dependencies: string-width "^4.1.0" +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -372,6 +382,16 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -438,6 +458,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" @@ -445,6 +472,11 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + bson@^4.6.2: version "4.6.3" resolved "https://registry.npmjs.org/bson/-/bson-4.6.3.tgz" @@ -483,16 +515,37 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^6.2.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +chai@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" @@ -501,7 +554,12 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^3.5.2: +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@3.5.3, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -526,6 +584,15 @@ cli-boxes@^2.2.1: resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" @@ -552,6 +619,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +component-emitter@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -591,6 +663,11 @@ cookie@0.4.2: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookiejar@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + cors@^2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -630,7 +707,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4.x, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4.3.4, debug@4.x, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -644,6 +721,11 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" @@ -651,6 +733,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" @@ -686,6 +775,19 @@ destroy@~1.0.4: resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +dezalgo@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + diff@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" @@ -751,6 +853,11 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" @@ -761,7 +868,7 @@ escape-html@~1.0.3: resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -958,6 +1065,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" @@ -992,6 +1104,14 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" @@ -1000,6 +1120,11 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.1.0: version "3.2.6" resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz" @@ -1019,6 +1144,16 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +formidable@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" + integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== + dependencies: + dezalgo "1.0.3" + hexoid "1.0.0" + once "1.4.0" + qs "6.9.3" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" @@ -1039,11 +1174,35 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-intrinsic@^1.0.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" @@ -1072,6 +1231,18 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.1.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" @@ -1142,11 +1313,33 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hexoid@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" @@ -1211,7 +1404,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1295,11 +1488,21 @@ is-path-inside@^3.0.2: resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-yarn-global@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" @@ -1310,7 +1513,7 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -js-yaml@^4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -1392,6 +1595,13 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" @@ -1437,6 +1647,21 @@ lodash@^4.17.21: resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" @@ -1486,7 +1711,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@~1.1.2: +methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= @@ -1516,11 +1741,23 @@ mime@1.6.0: resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -1533,6 +1770,34 @@ minimist@^1.2.0: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +mocha@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" + integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + mongodb-connection-string-url@^2.5.2: version "2.5.2" resolved "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz" @@ -1598,6 +1863,11 @@ nanoid@*, nanoid@3.3.4: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -1646,6 +1916,11 @@ object-assign@^4: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" @@ -1653,7 +1928,7 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -1677,6 +1952,20 @@ p-cancelable@^1.0.0: resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + package-json@^6.3.0: version "6.5.0" resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" @@ -1699,6 +1988,11 @@ parseurl@~1.3.3: resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" @@ -1719,6 +2013,11 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" @@ -1772,16 +2071,35 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" +qs@6.9.3: + version "6.9.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" + integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== + qs@6.9.7: version "6.9.7" resolved "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz" integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== +qs@^6.10.3: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" @@ -1807,6 +2125,15 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -1833,6 +2160,11 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -1864,7 +2196,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.2.1, safe-buffer@^5.0.1: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -1924,6 +2256,13 @@ send@0.17.2: range-parser "~1.2.1" statuses "~1.5.0" +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + serve-static@1.14.2: version "1.14.2" resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz" @@ -1951,6 +2290,15 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + sift@16.0.0: version "16.0.0" resolved "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz" @@ -1991,7 +2339,7 @@ sparse-bitfield@^3.0.3: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2000,6 +2348,13 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -2007,7 +2362,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -2017,6 +2372,38 @@ strip-json-comments@~2.0.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +superagent@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.0.0.tgz#2ea4587df4b81ef023ec01ebc6e1bcb9e2344cb6" + integrity sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.3" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.0.1" + methods "^1.1.2" + mime "2.6.0" + qs "^6.10.3" + readable-stream "^3.6.0" + semver "^7.3.7" + +supertest@^6.2.4: + version "6.2.4" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.2.4.tgz#3dcebe42f7fd6f28dd7ac74c6cba881f7101b2f0" + integrity sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA== + dependencies: + methods "^1.1.2" + superagent "^8.0.0" + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -2105,6 +2492,11 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" @@ -2186,6 +2578,11 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" @@ -2243,6 +2640,11 @@ word-wrap@^1.2.3: resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -2272,12 +2674,55 @@ xdg-basedir@^4.0.0: resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yn@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From e29464b3eefe31a690d1b3fe237d499b26640a71 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Fri, 22 Jul 2022 03:33:20 +0900 Subject: [PATCH 45/80] =?UTF-8?q?[ADD]=20mocha=20test=ED=8F=B4=EB=8D=94,?= =?UTF-8?q?=20=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/alonePackingList.spec.ts | 0 test/folder.spec.js | 0 test/member.spec.js | 0 test/packingList.spec.js | 0 test/template.spec.js | 0 test/togetherPackingList.spec.js | 0 test/user.spec.js | 0 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/alonePackingList.spec.ts create mode 100644 test/folder.spec.js create mode 100644 test/member.spec.js create mode 100644 test/packingList.spec.js create mode 100644 test/template.spec.js create mode 100644 test/togetherPackingList.spec.js create mode 100644 test/user.spec.js diff --git a/test/alonePackingList.spec.ts b/test/alonePackingList.spec.ts new file mode 100644 index 0000000..e69de29 diff --git a/test/folder.spec.js b/test/folder.spec.js new file mode 100644 index 0000000..e69de29 diff --git a/test/member.spec.js b/test/member.spec.js new file mode 100644 index 0000000..e69de29 diff --git a/test/packingList.spec.js b/test/packingList.spec.js new file mode 100644 index 0000000..e69de29 diff --git a/test/template.spec.js b/test/template.spec.js new file mode 100644 index 0000000..e69de29 diff --git a/test/togetherPackingList.spec.js b/test/togetherPackingList.spec.js new file mode 100644 index 0000000..e69de29 diff --git a/test/user.spec.js b/test/user.spec.js new file mode 100644 index 0000000..e69de29 From 06934c505764d95c5b32e7bb9e0bea1720df9128 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Fri, 22 Jul 2022 09:51:46 +0900 Subject: [PATCH 46/80] =?UTF-8?q?[CHORE]=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8/=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20responseBody=20=ED=98=95=EC=8B=9D=20=ED=86=B5?= =?UTF-8?q?=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/interface/IUser.ts | 2 +- src/services/AuthService.ts | 6 +++++- src/services/UserService.ts | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/interface/IUser.ts b/src/interface/IUser.ts index d6da2c0..482f0af 100644 --- a/src/interface/IUser.ts +++ b/src/interface/IUser.ts @@ -30,9 +30,9 @@ export interface SocialUserInfo { } export interface AuthResponseDto { + _id?: string; isAlreadyUser: boolean; token?: string; - _id?: mongoose.Schema.Types.ObjectId; email: string; name?: string; profileImageId?: string; diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index 8e4188c..682aad3 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -65,15 +65,19 @@ const getKakaoUser = async (kakaoToken: string): Promise Date: Fri, 22 Jul 2022 12:07:23 +0900 Subject: [PATCH 47/80] =?UTF-8?q?[FEAT]=20Slack=20Webhook=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/index.ts | 10 +++ .../AlonePackingListCategoryController.ts | 15 ++++ src/middleware/slackWebHook.ts | 75 +++++++++++++++++++ yarn.lock | 2 +- 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/middleware/slackWebHook.ts diff --git a/src/config/index.ts b/src/config/index.ts index e212cb4..f4ec3b7 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -11,6 +11,11 @@ if (envFound.error) { } export default { + /** + * environment + */ + env: process.env.NODE_ENV as string, + /** * Your favorite port */ @@ -42,4 +47,9 @@ export default { * baseUrl */ baseUrl: process.env.BASE_URL as string, + + /** + * slack webhook + */ + slackWebHook: process.env.SLACK_WEB_HOOK_URL as string, }; diff --git a/src/controllers/AlonePackingListCategoryController.ts b/src/controllers/AlonePackingListCategoryController.ts index 0275dfd..8c62d9d 100644 --- a/src/controllers/AlonePackingListCategoryController.ts +++ b/src/controllers/AlonePackingListCategoryController.ts @@ -6,6 +6,8 @@ import { validationResult } from 'express-validator'; import { CategoryCreateDto } from '../interface/ICategory'; import { CategoryUpdateDto } from '../interface/ICategory'; import AlonePackingListCategoryService from '../services/AlonePackingListCategoryService'; +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; const createCategory = async (req: Request, res: Response) => { const error = validationResult(req); @@ -29,6 +31,19 @@ const createCategory = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.CREATE_ALONE_CATEGORY_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/middleware/slackWebHook.ts b/src/middleware/slackWebHook.ts new file mode 100644 index 0000000..ea66ee2 --- /dev/null +++ b/src/middleware/slackWebHook.ts @@ -0,0 +1,75 @@ +import axios from 'axios'; +import config from '../config'; + +const API_TOKEN = config.slackWebHook; //env에 달았던 웹 훅 url + +// 슬랙 메세지 왼쪽 띠 색상 +const colors = { + primary: '#007bff', + info: '#17a2b8', + success: '#28a745', + warning: '#ffc107', + danger: '#dc3545', +}; + +// 슬랙 에러 스택 보여주고 싶을 경우, 마크다운 안에 넣어 이쁘게 보여주려고 사용 +export interface SlackMrkdwnFormat { + title: string; + value: string; +} + +// 슬랙 메세지 담을 형태 +export interface SlackMessageFormat { + color: string; // 띠 컬러 + title: string; // Packman 서버 에러 + fields?: SlackMrkdwnFormat[]; + footer?: string; // From API Server [production] +} + +// mrkdown +export interface SlackMessage { + mrkdwn: boolean; + text: string; + attachments: SlackMessageFormat[]; +} + +const getChannels = () => { + return { + production: API_TOKEN, + }; +}; + +// 슬랙 알림 메세지 전송하는 함수 +const sendMessage = async (message: SlackMessageFormat) => { + if (!message) { + console.log('메시지 포멧이 없습니다.'); + return; + } + + // 보내줄 메세지 형태 작성 + const data: SlackMessage = { + mrkdwn: true, + text: '', + attachments: [], + }; + + if (!message.title) { + console.log('메시지 내용이 없습니다.'); + return; + } + + message.footer = `From API Server [${config.env}]`; + data.attachments.push(message); + + // 슬랙에 전송 + axios({ + url: getChannels().production, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data, + }); +}; + +export default { sendMessage, colors }; diff --git a/yarn.lock b/yarn.lock index bfb0fee..37cc330 100644 --- a/yarn.lock +++ b/yarn.lock @@ -399,7 +399,7 @@ asynckit@^0.4.0: axios@^0.27.2: version "0.27.2" - resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: follow-redirects "^1.14.9" From 383a07dfd301ff78cb199f8bef76ebff5470a30e Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 22 Jul 2022 12:09:22 +0900 Subject: [PATCH 48/80] =?UTF-8?q?[FEAT]=20TEST=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/folder.spec.js | 158 +++++++++++++++++++++++++++++++++++++++ test/packingList.spec.js | 153 +++++++++++++++++++++++++++++++++++++ test/template.spec.js | 62 +++++++++++++++ test/user.spec.js | 118 +++++++++++++++++++++++++++++ 4 files changed, 491 insertions(+) diff --git a/test/folder.spec.js b/test/folder.spec.js index e69de29..480cca7 100644 --- a/test/folder.spec.js +++ b/test/folder.spec.js @@ -0,0 +1,158 @@ +import request from 'supertest'; +import { expect } from 'chai'; +import dotenv from 'dotenv'; +import app from '../src/index'; +dotenv.config(); + +describe('POST /folder', () => { + it('폴더 생성 성공', done => { + request(app) + .post('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + "title": '폴더1', + "isAloned": true, + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('필요한 값이 없습니다', (done) => { + request(app) + .post('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + "title": '폴더1', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + +describe('GET /folder', () => { + it('폴더 조회 성공', (done) => { + request(app) + .get('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + describe('GET /folder/alone', () => { + it('폴더 조회 성공', (done) => { + request(app) + .get('/folder/alone') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + +describe('GET /folder/together', () => { + it('폴더 조회 성공', (done) => { + request(app) + .get('/folder/together') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + +describe('PATCH /folder', () => { + it('폴더 수정 성공', (done) => { + request(app) + .patch('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + "_id": "62d9842924ff58dcf71797cf", + "title": "폴더" + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + request(app) + .patch('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + 'title': '폴더1', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + +describe('DELETE /folder/:folderId', () => { + it('폴더 삭제 성공', (done) => { + request(app) + .patch('/folder/:folderId') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); diff --git a/test/packingList.spec.js b/test/packingList.spec.js index e69de29..52bf130 100644 --- a/test/packingList.spec.js +++ b/test/packingList.spec.js @@ -0,0 +1,153 @@ +import request from 'supertest'; +import { expect } from 'chai'; +import dotenv from 'dotenv'; +import app from '../src/index'; +dotenv.config(); + +describe('POST /packingList/title', () => { + it('패킹리스트 제목 수정 성공', (done) => { + request(app) + .patch('/packingList/title') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + '_id': '62d984fb07a7c2aa188b198a', + 'title': '제목', + 'isAloned': true, + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + request(app) + .post('/packingList/title') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + '_id': '62d984fb07a7c2aa188b198a', + 'title': '제목', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + describe('PATCH /packingList/departureDate', () => { + it('패킹리스트 출발날짜 수정 성공', (done) => { + request(app) + .patch('/packingList/departureDate') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + '_id': '62d984fb07a7c2aa188b198a', + 'departureDate': '2022.07.15', + 'isAlone': true + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + request(app) + .patch('/packingList/title') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + '_id': '62d984fb07a7c2aa188b198a', + 'isAlone': true + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + + describe('PATCH /packingList/myTemplate', () => { + it('패킹리스트 나만의 템플릿 여부 수정 성공', (done) => { + request(app) + .patch('/packingList/myTemplate') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + '_id': '62d984fb07a7c2aa188b198a', + "isSaved": true, + 'isAlone': true + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + request(app) + .patch('/packingList/myTemplate') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + 'title': '폴더1', + 'isAlone': true + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + + +describe('GET /packingList/invite/:inviteCode', () => { + it('함께 패킹리스트 초대 성공', (done) => { + request(app) + .patch('/packingList/invite/:inviteCode') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + "_id": "62d9842924ff58dcf71797cf", + "title": "폴더" + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); diff --git a/test/template.spec.js b/test/template.spec.js index e69de29..8784658 100644 --- a/test/template.spec.js +++ b/test/template.spec.js @@ -0,0 +1,62 @@ +import request from 'supertest'; +import { expect } from 'chai'; +import dotenv from 'dotenv'; +import app from '../src/index'; +dotenv.config(); + +describe('GET /template/alone', () => { + it('혼자 패킹 템플릿 리스트 조회 성공', (done) => { + request(app) + .patch('/template/alone') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + describe('GET /template/together', () => { + it('함께 패킹 템플릿 리스트 조회 성공', (done) => { + request(app) + .patch('/template/together') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + +describe('GET /template/:templateId/:type', () => { + it('템플릿 상세조회 성공', (done) => { + request(app) + .patch('/template/:templateId/:type') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + }); + + \ No newline at end of file diff --git a/test/user.spec.js b/test/user.spec.js index e69de29..995acfb 100644 --- a/test/user.spec.js +++ b/test/user.spec.js @@ -0,0 +1,118 @@ +import request from 'supertest'; +import { expect } from 'chai'; +import dotenv from 'dotenv'; +import app from '../src/index'; +dotenv.config(); + +describe('POST /user/prfile', () => { + it('유저 생성 성공', (done) => { + request(app) + .post('/user/profile') + .set('Content-Type', 'application/json') + .send({ + 'email': 'kkkl@gmail.com', + 'name': '박현지', + 'profileImageId': '1', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + request(app) + .post('/user/profile') + .set('Content-Type', 'application/json') + .send({ + 'email': 'kkkl@gmail.com', + 'profileImageId': '1', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /user/prfile', () => { + it('유저 수정 성공', (done) => { + request(app) + .patch('/user/profile') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + '_id': '62d6acbdc10dc1e16b2a636a', + 'email': 'kkkl@gmail.com', + 'name': '박현지', + 'profileImageId': '1', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + request(app) + .patch('/user/profile') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + 'email': 'kkkl@gmail.com', + 'profileImageId': '1', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /user', () => { + it('유저 조회 성공', (done) => { + request(app) + .get('/user') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('토큰이 유효하지 않습니다', (done) => { + request(app) + .get('/user') + .set('Content-Type', 'application/json') + .set('Authorization', '') + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); From fcfcc732c10565bfbccfb1d08fa16a5037d7eb84 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 22 Jul 2022 12:17:12 +0900 Subject: [PATCH 49/80] =?UTF-8?q?[FEAT]=20slack=20webhook=20controller?= =?UTF-8?q?=EC=97=90=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlonePackingListCategoryController.ts | 26 ++++ src/controllers/AlonePackingListController.ts | 42 +++++- .../AlonePackingListPackController.ts | 42 +++++- src/controllers/AuthController.ts | 29 ++++- src/controllers/FolderController.ts | 120 +++++++++++++++++- src/controllers/MemberController.ts | 15 +++ src/controllers/PackingListController.ts | 54 ++++++++ src/controllers/TemplateController.ts | 42 +++++- .../TogetherPackingListCategoryController.ts | 42 +++++- .../TogetherPackingListController.ts | 54 ++++++++ .../TogetherPackingListPackController.ts | 41 ++++++ src/controllers/UserController.ts | 41 ++++++ 12 files changed, 542 insertions(+), 6 deletions(-) diff --git a/src/controllers/AlonePackingListCategoryController.ts b/src/controllers/AlonePackingListCategoryController.ts index 8c62d9d..cbaf45d 100644 --- a/src/controllers/AlonePackingListCategoryController.ts +++ b/src/controllers/AlonePackingListCategoryController.ts @@ -79,6 +79,19 @@ const updateCategory = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.UPDATE_ALONE_CATEGORY_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -103,6 +116,19 @@ const deleteCategory = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.DELETE_ALONE_CATEGORY_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/AlonePackingListController.ts b/src/controllers/AlonePackingListController.ts index 7713116..592c295 100644 --- a/src/controllers/AlonePackingListController.ts +++ b/src/controllers/AlonePackingListController.ts @@ -5,7 +5,8 @@ import util from '../modules/util'; import { validationResult } from 'express-validator'; import { AlonePackingListCreateDTO } from '../interface/IAlonePackingList'; import AlonePackingListService from '../services/AlonePackingListService'; - +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; /** * @route POST /packinglist/alone * @desc Create Alone Packinglist @@ -45,6 +46,19 @@ const createAlonePackingList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.CREATE_ALONEPACKINGLIST_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -71,6 +85,19 @@ const readAlonePackingList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.READ_ALONEPACKINGLIST_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -96,6 +123,19 @@ const deleteAlonePackingList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.DELETE_ALONEPACKINGLIST_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/AlonePackingListPackController.ts b/src/controllers/AlonePackingListPackController.ts index 9ef4d87..0cccb36 100644 --- a/src/controllers/AlonePackingListPackController.ts +++ b/src/controllers/AlonePackingListPackController.ts @@ -5,7 +5,8 @@ import util from '../modules/util'; import { validationResult } from 'express-validator'; import { PackCreateDto, PackUpdateDto } from '../interface/IPack'; import AlonePackingListPackService from '../services/AlonePackingListPackService'; - +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; const createPack = async (req: Request, res: Response) => { const error = validationResult(req); if (!error.isEmpty()) { @@ -32,6 +33,19 @@ const createPack = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.CREATE_ALONE_PACK_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -67,6 +81,19 @@ const updatePack = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.UPDATE_ALONE_PACK_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -94,6 +121,19 @@ const deletePack = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.DELETE_ALONE_PACK_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/AuthController.ts b/src/controllers/AuthController.ts index f306c68..53e95c3 100644 --- a/src/controllers/AuthController.ts +++ b/src/controllers/AuthController.ts @@ -3,7 +3,8 @@ import statusCode from '../modules/statusCode'; import message from '../modules/responseMessage'; import util from '../modules/util'; import { AuthService } from '../services'; - +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; /** * @route GET /auth/google * @desc get google user @@ -26,6 +27,19 @@ const getGoogleUser = async (req: Request, res: Response) => { .send(util.fail(statusCode.BAD_REQUEST, message.INVALID_TOKEN)); res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_TOKEN, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -55,6 +69,19 @@ const getKakaoUser = async (req: Request, res: Response) => { .send(util.fail(statusCode.BAD_REQUEST, message.INVALID_TOKEN)); res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_TOKEN, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index b205569..6911e2a 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -4,7 +4,8 @@ import message from '../modules/responseMessage'; import util from '../modules/util'; import { validationResult } from 'express-validator'; import { FolderService } from '../services'; - +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; /** * @route GET /folder * @desc create folder @@ -27,6 +28,19 @@ const createFolder = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_CREATE_FOLDER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -59,6 +73,19 @@ const updateFolder = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_UPDATE_FOLDER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -86,6 +113,19 @@ const deleteFolder = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_DELETE_FOLDER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -105,6 +145,19 @@ const getFolders = async (req: Request, res: Response) => { const data = await FolderService.getFolders(userId); res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_FOLDERS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -126,6 +179,19 @@ const getAloneFolders = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_GET_FOLDERS, { aloneFolders: data })); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -147,6 +213,19 @@ const getTogetherFolders = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_GET_FOLDERS, { togetherFolders: data })); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -167,6 +246,19 @@ const getTogetherListInFolder = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_GET_TOGETHER_PACKINGLIST_IN_FOLDER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -188,6 +280,19 @@ const getAloneListInFolder = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_GET_ALONE_PACKINGLIST_IN_FOLDER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -207,6 +312,19 @@ const getRecentCreatedList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_GET_RECENT_CREATED_LIST, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/MemberController.ts b/src/controllers/MemberController.ts index 153adfe..0bd7806 100644 --- a/src/controllers/MemberController.ts +++ b/src/controllers/MemberController.ts @@ -4,6 +4,8 @@ import message from '../modules/responseMessage'; import util from '../modules/util'; import { validationResult } from 'express-validator'; import { MemberService } from '../services'; +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; const getMembers = async(req: Request, res: Response) => { const groupId = req.params.groupId; @@ -13,6 +15,19 @@ const getMembers = async(req: Request, res: Response) => { if(!data) return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_MEMBERS , data)); } catch(error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res.status(statusCode.INTERNAL_SERVER_ERROR).send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); } diff --git a/src/controllers/PackingListController.ts b/src/controllers/PackingListController.ts index 7a78675..3c99749 100644 --- a/src/controllers/PackingListController.ts +++ b/src/controllers/PackingListController.ts @@ -10,6 +10,8 @@ import { } from '../interface/IPackingList'; import PackingListService from '../services/PackingListService'; import { nanoid } from 'nanoid'; +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; /** * @route PATCH /packingList/title * @desc Update Packinglist Title @@ -46,6 +48,19 @@ const updatePackingListTitle = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.UPDATE_PACKINGLIST_TITLE_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -81,6 +96,19 @@ const updatePackingListDate = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.UPDATE_PACKINGLIST_TITLE_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -118,6 +146,19 @@ const updatePackingListMyTemplate = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.UPDATE_PACKINGLIST_MYTEMPLATE_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -146,6 +187,19 @@ const invitePackingList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_INVITE_TOGETHER_PACKING, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/TemplateController.ts b/src/controllers/TemplateController.ts index 50496a2..881b40f 100644 --- a/src/controllers/TemplateController.ts +++ b/src/controllers/TemplateController.ts @@ -3,7 +3,8 @@ import statusCode from '../modules/statusCode'; import message from '../modules/responseMessage'; import util from '../modules/util'; import TemplateService from '../services/TemplateService'; - +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; /** * @route GET /template/alone * @desc Get alone Template @@ -23,6 +24,19 @@ const getAloneTemplate = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.GET_ALONETEMPLATE_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -49,6 +63,19 @@ const getTogetherTemplate = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.GET_TOGETHERTEMPLATE_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -76,6 +103,19 @@ const readTemplate = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.READ_DETAILEDTEMPLTATE_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/TogetherPackingListCategoryController.ts b/src/controllers/TogetherPackingListCategoryController.ts index 78470e7..5eb4a76 100644 --- a/src/controllers/TogetherPackingListCategoryController.ts +++ b/src/controllers/TogetherPackingListCategoryController.ts @@ -6,7 +6,8 @@ import { validationResult } from 'express-validator'; import { CategoryCreateDto } from '../interface/ICategory'; import { TogetherPackingListCategoryService } from '../services'; import { CategoryUpdateDto } from '../interface/ICategory'; - +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; const createCategory = async (req: Request, res: Response) => { const error = validationResult(req); if (!error.isEmpty()) { @@ -30,6 +31,19 @@ const createCategory = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.CREATE_TOGETHER_CATEGORY_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -65,6 +79,19 @@ const updateCategory = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.UPDATE_TOGETHER_CATEGORY_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -89,6 +116,19 @@ const deleteCategory = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.DELETE_TOGETHER_CATEGORY_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/TogetherPackingListController.ts b/src/controllers/TogetherPackingListController.ts index 3eecaf6..2c5f4c3 100644 --- a/src/controllers/TogetherPackingListController.ts +++ b/src/controllers/TogetherPackingListController.ts @@ -6,6 +6,8 @@ import { validationResult } from 'express-validator'; import { TogetherPackingListCreateDTO } from '../interface/ITogetherPackingList'; import { TogetherPackingListService } from '../services'; import { PackerUpdateDto } from '../interface/IPack'; +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; /** * @route POST /packinglist/together @@ -51,6 +53,19 @@ const createTogetherPackingList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.CREATE_TOGETHERPACKINGLIST_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -79,6 +94,19 @@ const readTogetherPackingList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.READ_TOGETHERPACKINGLIST_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -108,6 +136,19 @@ const deleteTogetherPackingList = async (req: Request, res: Response) => { .status(statusCode.OK) .send(util.success(statusCode.OK, message.DELETE_TOGETHERPACKINGLIST_SUCCESS, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -142,6 +183,19 @@ const updatePacker = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.UPDATE_PACKER_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/TogetherPackingListPackController.ts b/src/controllers/TogetherPackingListPackController.ts index 156f156..c89be04 100644 --- a/src/controllers/TogetherPackingListPackController.ts +++ b/src/controllers/TogetherPackingListPackController.ts @@ -6,6 +6,8 @@ import { validationResult } from 'express-validator'; import { PackCreateDto } from '../interface/IPack'; import { TogetherPackingListPackService } from '../services'; import { PackUpdateDto } from '../interface/IPack'; +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; const createPack = async (req: Request, res: Response) => { const error = validationResult(req); @@ -33,6 +35,19 @@ const createPack = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.CREATE_TOGETHER_PACK_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -68,6 +83,19 @@ const updatePack = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.UPDATE_TOGETHER_PACK_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -95,6 +123,19 @@ const deletePack = async (req: Request, res: Response) => { .send(util.success(statusCode.OK, message.DELETE_TOGETHER_PACK_SUCCESS, data)); } } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index e613bbf..e97ca74 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -6,6 +6,8 @@ import { UserCreateDto } from '../interface/IUser'; import { UserService } from '../services'; import { validationResult } from 'express-validator'; import getToken from '../modules/jwtHandler'; +import slackWebHook, { SlackMessageFormat } from '../middleware/slackWebHook'; +import config from '../config'; /** * @route POST /user/profile @@ -33,6 +35,19 @@ const createUser = async (req: Request, res: Response) => { data.accessToken = accessToken; res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_CREATE_USER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -56,6 +71,19 @@ const getUserInfo = async (req: Request, res: Response) => { .send(util.fail(statusCode.BAD_REQUEST, message.NO_USER)); res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_GET_USER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) @@ -86,6 +114,19 @@ const updateUser = async (req: Request, res: Response) => { .send(util.fail(statusCode.BAD_REQUEST, message.NO_USER)); res.status(statusCode.OK).send(util.success(statusCode.OK, message.SUCCESS_UPDATE_USER, data)); } catch (error) { + if (config.env === 'production') { + const message: SlackMessageFormat = { + color: slackWebHook.colors.danger, + title: 'Packman 서버 에러', + fields: [ + { + title: 'Error:', + value: `\`\`\`${error}\`\`\``, + }, + ], + }; + slackWebHook.sendMessage(message); + } console.log(error); res .status(statusCode.INTERNAL_SERVER_ERROR) From 791ce5f6e14fee58bc0f4d567bc26eb6ec174396 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Fri, 22 Jul 2022 15:27:47 +0900 Subject: [PATCH 50/80] =?UTF-8?q?[FIX]=20=ED=8F=B4=EB=8D=94=EA=B0=80=20?= =?UTF-8?q?=EC=A1=B4=EC=9E=AC=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9D=84=20?= =?UTF-8?q?=EB=95=8C,=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EA=B0=80=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/FolderService.ts | 51 +++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index cf6a87b..549f58e 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -252,43 +252,48 @@ const getRecentCreatedList = async ( ): Promise => { try { const folders = await Folder.find({ userId: userId }); + if (folders.length === 0) return null; + const list: { - id: mongoose.Types.ObjectId; + _id: mongoose.Types.ObjectId; aloneFolder: boolean; createdAt: Date; }[] = []; for await (const fd of folders) { - for await (const fl of fd.list) { - // 혼자 패킹리스트 폴더 - if (fd.isAloned) { - const alone = await AlonePackingList.findById(fl); - if (!alone) return null; - const data = { - id: alone._id, - aloneFolder: true, - createdAt: alone.createdAt, - }; - list.push(data); - } else { - // 함께 패킹리스트 폴더 - const together = await TogetherPackingList.findById(fl); - if (!together) return null; - const data = { - id: together._id, - aloneFolder: false, - createdAt: together.createdAt, - }; - list.push(data); + if (fd.list.length !== 0) { + for await (const fl of fd.list) { + // 혼자 패킹리스트 폴더 + if (fd.isAloned) { + const alone = await AlonePackingList.findById(fl); + if (!alone) return null; + const data = { + _id: alone._id, + aloneFolder: true, + createdAt: alone.createdAt, + }; + list.push(data); + } else { + // 함께 패킹리스트 폴더 + const together = await TogetherPackingList.findById(fl); + if (!together) return null; + const data = { + _id: together._id, + aloneFolder: false, + createdAt: together.createdAt, + }; + list.push(data); + } } } } + if (list.length === 0) return null; list.sort(function (a, b) { if (a.createdAt > b.createdAt) return -1; else return 1; }); - const recentListId = list[0].id; + const recentListId = list[0]._id; let remainDay; let recentList; From f4646f3f12c114ea26e27aaf48dbba1fc1475c64 Mon Sep 17 00:00:00 2001 From: laalaa31 Date: Fri, 22 Jul 2022 15:50:50 +0900 Subject: [PATCH 51/80] =?UTF-8?q?[FIX]=20=ED=95=A8=EA=BB=98=20=ED=8C=A8?= =?UTF-8?q?=ED=82=B9=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/TogetherPackingListService.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/services/TogetherPackingListService.ts b/src/services/TogetherPackingListService.ts index 8d99f60..262fecb 100644 --- a/src/services/TogetherPackingListService.ts +++ b/src/services/TogetherPackingListService.ts @@ -190,14 +190,9 @@ const deleteTogetherPackingList = async ( try { const deleteLists = listId.split(','); const data = []; - const strlists = []; - const responseFolder = await Folder.findById(folderId); - if (!responseFolder) return 'notfoundFolder'; - - for await (const element of responseFolder.list) { - strlists.push(element.toString()); - } + const originalFolder = await Folder.findById(folderId); + if (!originalFolder) return 'notfoundFolder'; for await (const element of deleteLists) { const deleteList = await TogetherPackingList.findByIdAndUpdate(element, { @@ -207,13 +202,19 @@ const deleteTogetherPackingList = async ( await AlonePackingList.findByIdAndUpdate(deleteList.myPackingListId, { isDeleted: true, }); - responseFolder.list.splice(strlists.indexOf(element), 1); } + const revisedLists = originalFolder.list.filter((element) => { + return !deleteLists.includes(element.toString()); + }); + await Folder.findByIdAndUpdate(folderId, { - list: responseFolder.list, + list: revisedLists, }); + const responseFolder = await Folder.findById(folderId); + if (!responseFolder) return 'notfoundFolder'; + for await (const element of responseFolder.list) { const responseList = await TogetherPackingList.findById(element); if (responseList) { From 30d1160327f09ff1b92840ff3f554ed014fd998c Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Fri, 22 Jul 2022 16:01:19 +0900 Subject: [PATCH 52/80] =?UTF-8?q?[ADD]=20husky=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .husky/.gitignore | 1 + .husky/pre-commit | 4 + package.json | 11 +- yarn.lock | 333 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 344 insertions(+), 5 deletions(-) create mode 100644 .husky/.gitignore create mode 100644 .husky/pre-commit diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 0000000..31354ec --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..36af219 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx lint-staged diff --git a/package.json b/package.json index 17659c9..7b3f42a 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "nodemon", "build": "tsc && node dist", "lint": "eslint .", - "test": "mocha ./test" + "test": "mocha ./test", + "prepare": "husky install" }, "author": "", "license": "ISC", @@ -20,6 +21,8 @@ "@typescript-eslint/parser": "^5.30.5", "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", + "husky": "^8.0.1", + "lint-staged": "^13.0.3", "nodemon": "^2.0.15", "prettier": "^2.7.1", "ts-node": "^10.7.0", @@ -41,5 +44,11 @@ "nanoid": "3.3.4", "supertest": "^6.2.4", "upgrade": "^1.1.0" + }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx}": [ + "eslint --cache --fix", + "prettier --write" + ] } } diff --git a/yarn.lock b/yarn.lock index 37cc330..824af0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -320,6 +320,14 @@ acorn@^8.7.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -342,11 +350,23 @@ ansi-colors@4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" @@ -354,6 +374,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + anymatch@~3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" @@ -392,6 +417,11 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -579,11 +609,39 @@ ci-info@^2.0.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -612,6 +670,11 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^2.0.16, colorette@^2.0.17: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -619,6 +682,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@^9.3.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== + component-emitter@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -681,7 +749,7 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -824,6 +892,11 @@ duplexer3@^0.1.4: resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" @@ -841,6 +914,11 @@ emoji-regex@^8.0.0: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" @@ -995,6 +1073,21 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + express-validator@^6.14.0: version "6.14.0" resolved "https://registry.npmjs.org/express-validator/-/express-validator-6.14.0.tgz" @@ -1217,6 +1310,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -1356,6 +1454,16 @@ http-errors@1.8.1: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + +husky@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" + integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -1396,6 +1504,11 @@ imurmurhash@^0.1.4: resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -1453,6 +1566,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -1493,6 +1611,11 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" @@ -1595,6 +1718,44 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lilconfig@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + +lint-staged@^13.0.3: + version "13.0.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.3.tgz#d7cdf03a3830b327a2b63c6aec953d71d9dc48c6" + integrity sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.17" + commander "^9.3.0" + debug "^4.3.4" + execa "^6.1.0" + lilconfig "2.0.5" + listr2 "^4.0.5" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.2" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.1.1" + +listr2@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.5" + through "^2.3.8" + wrap-ansi "^7.0.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -1655,6 +1816,16 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + loupe@^2.3.1: version "2.3.4" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" @@ -1706,6 +1877,11 @@ merge-descriptors@1.0.1: resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" @@ -1716,7 +1892,7 @@ methods@^1.1.2, methods@~1.1.2: resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^4.0.4: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -1746,6 +1922,16 @@ mime@2.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" @@ -1911,12 +2097,19 @@ normalize-url@^4.1.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: +object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== @@ -1935,6 +2128,20 @@ once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" @@ -1966,6 +2173,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + package-json@^6.3.0: version "6.5.0" resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" @@ -2003,6 +2217,11 @@ path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" @@ -2023,6 +2242,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -2177,11 +2401,24 @@ responselike@^1.0.2: dependencies: lowercase-keys "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -2196,6 +2433,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.5.5: + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" @@ -2304,7 +2548,7 @@ sift@16.0.0: resolved "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz" integrity sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ== -signal-exit@^3.0.2: +signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -2314,6 +2558,32 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" @@ -2339,6 +2609,11 @@ sparse-bitfield@^3.0.3: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -2348,6 +2623,15 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -2362,6 +2646,18 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" @@ -2423,6 +2719,11 @@ text-table@^0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" @@ -2478,6 +2779,11 @@ tslib@^1.8.1: resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -2502,6 +2808,11 @@ type-fest@^0.20.2: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" @@ -2645,6 +2956,15 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -2684,6 +3004,11 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" From c5363fae0035eb8200b8a9c2d8d0344eb57b3fc1 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 22 Jul 2022 16:33:58 +0900 Subject: [PATCH 53/80] =?UTF-8?q?[FIX]=20=ED=8F=B4=EB=8D=94=20=EB=9D=BC?= =?UTF-8?q?=EC=9A=B0=ED=84=B0=20=5Fid=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/FolderRouter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/FolderRouter.ts b/src/routes/FolderRouter.ts index 78018d9..4ae871e 100644 --- a/src/routes/FolderRouter.ts +++ b/src/routes/FolderRouter.ts @@ -13,7 +13,7 @@ router.post( ); router.patch( '/', - [body('id').notEmpty(), body('title').notEmpty()], + [body('_id').notEmpty(), body('title').notEmpty()], auth, FolderController.updateFolder, ); From 17972cf290f63b35030e21c65b15189347ced670 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Fri, 22 Jul 2022 21:40:35 +0900 Subject: [PATCH 54/80] =?UTF-8?q?[ADD]=20jest=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2513 ++++++++++++++++- package.json | 5 +- src/index.ts | 2 + src/test/alonePackingList.spec.js | 316 +++ src/test/folder.spec.js | 157 + .../test/member.spec.ts | 0 src/test/packingList.spec.js | 151 + src/test/template.spec.js | 60 + src/test/togetherPackingList.spec.js | 316 +++ {test => src/test}/user.spec.js | 44 +- test/folder.spec.js | 158 -- test/member.spec.js | 0 test/packingList.spec.js | 153 - test/template.spec.js | 62 - test/togetherPackingList.spec.js | 0 yarn.lock | 1974 ++++++++++++- 16 files changed, 5245 insertions(+), 666 deletions(-) create mode 100644 src/test/alonePackingList.spec.js create mode 100644 src/test/folder.spec.js rename test/alonePackingList.spec.ts => src/test/member.spec.ts (100%) create mode 100644 src/test/packingList.spec.js create mode 100644 src/test/template.spec.js create mode 100644 src/test/togetherPackingList.spec.js rename {test => src/test}/user.spec.js (79%) delete mode 100644 test/folder.spec.js delete mode 100644 test/member.spec.js delete mode 100644 test/packingList.spec.js delete mode 100644 test/template.spec.js delete mode 100644 test/togetherPackingList.spec.js diff --git a/package-lock.json b/package-lock.json index d17b2ec..74ab598 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,26 +9,36 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "@types/cors": "^2.8.12", "@types/nanoid": "^3.0.0", "axios": "^0.27.2", - "dayjs": "^1.11.3", + "chai": "^4.3.6", + "cors": "^2.8.5", + "dayjs": "^1.11.4", "dotenv": "^16.0.0", "express": "^4.17.3", "express-validator": "^6.14.0", "jsonwebtoken": "^8.5.1", + "mocha": "^10.0.0", "mongoose": "^6.3.1", "nanoid": "3.3.4", + "supertest": "^6.2.4", "upgrade": "^1.1.0" }, "devDependencies": { + "@types/chai": "^4.3.1", "@types/express": "^4.17.13", "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^9.1.1", "@types/mongoose": "^5.11.97", "@types/node": "^17.0.25", + "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", + "husky": "^8.0.1", + "lint-staged": "^13.0.3", "nodemon": "^2.0.15", "prettier": "^2.7.1", "ts-node": "^10.7.0", @@ -201,6 +211,12 @@ "@types/node": "*" } }, + "node_modules/@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -211,6 +227,17 @@ "@types/node": "*" } }, + "node_modules/@types/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, "node_modules/@types/express": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", @@ -259,6 +286,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true + }, "node_modules/@types/mongoose": { "version": "5.11.97", "resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.11.97.tgz", @@ -309,6 +342,25 @@ "@types/node": "*" } }, + "node_modules/@types/superagent": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", + "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "dev": true, + "dependencies": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "node_modules/@types/supertest": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", + "dev": true, + "dependencies": { + "@types/superagent": "*" + } + }, "node_modules/@types/webidl-conversions": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", @@ -573,6 +625,11 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -626,6 +683,19 @@ "node": ">=0.4.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -653,11 +723,45 @@ "string-width": "^4.1.0" } }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -667,7 +771,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -683,7 +786,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -704,7 +806,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/array-flatten": { @@ -723,6 +824,28 @@ "node": ">=8" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -743,7 +866,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/base64-js": { @@ -770,7 +892,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -839,7 +960,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -850,7 +970,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.0.1" @@ -859,6 +978,11 @@ "node": ">=8" } }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, "node_modules/bson": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.3.tgz", @@ -954,6 +1078,18 @@ "node": ">=8" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -968,7 +1104,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -977,11 +1112,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -998,7 +1149,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1008,7 +1158,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -1017,11 +1166,18 @@ "node": ">=8" } }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -1052,6 +1208,15 @@ "dev": true, "license": "MIT" }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -1065,6 +1230,94 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -1079,7 +1332,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -1092,9 +1344,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1107,11 +1364,24 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, "license": "MIT" }, "node_modules/configstore": { @@ -1168,6 +1438,23 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "license": "MIT" }, + "node_modules/cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "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", @@ -1201,9 +1488,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", - "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz", + "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==" }, "node_modules/debug": { "version": "4.3.4", @@ -1228,6 +1515,17 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -1241,6 +1539,17 @@ "node": ">=4" } }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -1298,6 +1607,15 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "license": "MIT" }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -1363,6 +1681,12 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -1381,7 +1705,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/encodeurl": { @@ -1403,6 +1726,14 @@ "once": "^1.4.0" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", @@ -1423,7 +1754,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -1634,6 +1964,41 @@ "node": ">= 0.6" } }, + "node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/express": { "version": "4.17.3", "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", @@ -1741,6 +2106,11 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -1768,7 +2138,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -1810,6 +2179,29 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "license": "MIT" }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1865,6 +2257,31 @@ "node": ">= 6" } }, + "node_modules/formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dependencies": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/formidable/node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1887,9 +2304,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, "license": "ISC" }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -1897,10 +2318,39 @@ "dev": true, "license": "MIT" }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "license": "MIT", "dependencies": { @@ -1935,7 +2385,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -2027,6 +2476,17 @@ "dev": true, "license": "ISC" }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2037,6 +2497,17 @@ "node": ">=4" } }, + "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/has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -2047,6 +2518,22 @@ "node": ">=8" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "engines": { + "node": ">=8" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -2070,6 +2557,30 @@ "node": ">= 0.6" } }, + "node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -2156,11 +2667,19 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -2202,7 +2721,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -2228,7 +2746,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2238,7 +2755,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2248,7 +2764,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -2291,7 +2806,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -2317,6 +2831,26 @@ "node": ">=8" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -2324,6 +2858,17 @@ "dev": true, "license": "MIT" }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -2342,7 +2887,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -2463,6 +3007,116 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -2511,6 +3165,78 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -2525,7 +3251,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -2579,6 +3304,12 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "license": "MIT" }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2645,6 +3376,18 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -2668,13 +3411,143 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true, - "license": "MIT" - }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/mongodb": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.5.0.tgz", @@ -2846,7 +3719,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2862,6 +3734,49 @@ "node": ">=8" } }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2878,12 +3793,26 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -2912,6 +3841,49 @@ "node": ">=6" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -2950,11 +3922,18 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2986,11 +3965,18 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -2999,6 +3985,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3121,6 +4119,14 @@ ], "license": "MIT" }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -3178,11 +4184,23 @@ "node": ">=0.10.0" } }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -3230,6 +4248,14 @@ "node": ">=8" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -3250,6 +4276,43 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -3261,6 +4324,12 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3301,6 +4370,21 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -3402,6 +4486,14 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "license": "MIT" }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", @@ -3446,6 +4538,19 @@ "node": ">=8" } }, + "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/sift": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", @@ -3469,6 +4574,46 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -3512,11 +4657,27 @@ "node": ">= 0.6" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -3531,26 +4692,108 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=8" + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", + "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/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/superagent/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/supertest": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", + "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.4.0" } }, "node_modules/supports-color": { @@ -3573,6 +4816,12 @@ "dev": true, "license": "MIT" }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -3587,7 +4836,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -3723,6 +4971,14 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3875,6 +5131,11 @@ "node": ">=4" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3977,11 +5238,15 @@ "node": ">=0.10.0" } }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -3999,7 +5264,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -4025,13 +5289,68 @@ "node": ">=8" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -4041,6 +5360,17 @@ "engines": { "node": ">=6" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -4168,6 +5498,12 @@ "@types/node": "*" } }, + "@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true + }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -4177,6 +5513,17 @@ "@types/node": "*" } }, + "@types/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, "@types/express": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", @@ -4221,6 +5568,12 @@ "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true + }, "@types/mongoose": { "version": "5.11.97", "resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.11.97.tgz", @@ -4265,6 +5618,25 @@ "@types/node": "*" } }, + "@types/superagent": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", + "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "dev": true, + "requires": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "@types/supertest": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", + "dev": true, + "requires": { + "@types/superagent": "*" + } + }, "@types/webidl-conversions": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", @@ -4414,6 +5786,11 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -4448,6 +5825,16 @@ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -4469,17 +5856,37 @@ "string-width": "^4.1.0" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -4488,7 +5895,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4503,8 +5909,7 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { "version": "1.1.1", @@ -4517,6 +5922,22 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4534,8 +5955,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -4545,8 +5965,7 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "body-parser": { "version": "1.19.2", @@ -4600,7 +6019,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4610,11 +6028,15 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, "bson": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.3.tgz", @@ -4674,6 +6096,15 @@ } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -4683,14 +6114,26 @@ "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4699,25 +6142,27 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4735,12 +6180,81 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -4754,7 +6268,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -4762,7 +6275,12 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, "combined-stream": { @@ -4773,11 +6291,21 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", + "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { "version": "5.0.1", @@ -4816,6 +6344,20 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -4840,9 +6382,9 @@ "dev": true }, "dayjs": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", - "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==" + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz", + "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==" }, "debug": { "version": "4.3.4", @@ -4859,6 +6401,11 @@ } } }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -4868,6 +6415,14 @@ "mimic-response": "^1.0.0" } }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -4906,6 +6461,15 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -4950,6 +6514,12 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -4966,8 +6536,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -4983,6 +6552,11 @@ "once": "^1.4.0" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", @@ -4997,8 +6571,7 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { "version": "8.19.0", @@ -5140,6 +6713,31 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + } + } + }, "express": { "version": "4.17.3", "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", @@ -5232,6 +6830,11 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -5254,7 +6857,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -5288,6 +6890,20 @@ } } }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -5319,6 +6935,24 @@ "mime-types": "^2.1.12" } }, + "formidable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + } + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -5332,8 +6966,12 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -5341,6 +6979,26 @@ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5368,7 +7026,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -5430,18 +7087,41 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -5460,6 +7140,18 @@ "toidentifier": "1.0.1" } }, + "human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true + }, + "husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5507,11 +7199,16 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5542,7 +7239,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -5558,21 +7254,18 @@ }, "is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -5596,8 +7289,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-obj": { "version": "2.0.0", @@ -5611,12 +7303,28 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -5633,7 +7341,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -5732,6 +7439,80 @@ "type-check": "~0.4.0" } }, + "lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true + }, + "lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "requires": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + } + }, + "listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -5778,6 +7559,59 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "requires": { + "get-func-name": "^2.0.0" + } + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -5788,7 +7622,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -5824,6 +7657,12 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -5863,6 +7702,12 @@ "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -5884,6 +7729,101 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "requires": { + "brace-expansion": "^2.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + } + } + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "mongodb": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.5.0.tgz", @@ -6000,8 +7940,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "4.5.1", @@ -6009,6 +7948,33 @@ "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "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==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -6021,11 +7987,19 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -6046,6 +8020,31 @@ "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", @@ -6072,11 +8071,15 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -6095,10 +8098,20 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true }, "prelude-ls": { @@ -6169,6 +8182,14 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -6211,11 +8232,20 @@ } } }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -6244,6 +8274,11 @@ "rc": "^1.2.8" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -6259,12 +8294,45 @@ "lowercase-keys": "^1.0.0" } }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -6283,6 +8351,23 @@ "queue-microtask": "^1.2.2" } }, + "rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6354,6 +8439,14 @@ } } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, "serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", @@ -6385,6 +8478,16 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "sift": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz", @@ -6402,6 +8505,30 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true + } + } + }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -6430,11 +8557,24 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6445,16 +8585,70 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "superagent": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz", + "integrity": "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==", + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "supertest": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz", + "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==", + "requires": { + "methods": "^1.1.2", + "superagent": "^8.0.0" + } }, "supports-color": { "version": "5.5.0", @@ -6471,6 +8665,12 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", @@ -6481,7 +8681,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -6561,6 +8760,11 @@ "prelude-ls": "^1.2.1" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -6667,6 +8871,11 @@ "prepend-http": "^2.0.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -6732,11 +8941,15 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6746,8 +8959,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", @@ -6767,17 +8979,62 @@ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", "dev": true }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/package.json b/package.json index 7b3f42a..d669d8d 100644 --- a/package.json +++ b/package.json @@ -7,16 +7,19 @@ "dev": "nodemon", "build": "tsc && node dist", "lint": "eslint .", - "test": "mocha ./test", + "test": "mocha -r ts-node/register src/test", "prepare": "husky install" }, "author": "", "license": "ISC", "devDependencies": { + "@types/chai": "^4.3.1", "@types/express": "^4.17.13", "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^9.1.1", "@types/mongoose": "^5.11.97", "@types/node": "^17.0.25", + "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "eslint": "^8.19.0", diff --git a/src/index.ts b/src/index.ts index 7e7478f..21bc387 100644 --- a/src/index.ts +++ b/src/index.ts @@ -48,3 +48,5 @@ app console.error(err); process.exit(1); }); + +export default app; diff --git a/src/test/alonePackingList.spec.js b/src/test/alonePackingList.spec.js new file mode 100644 index 0000000..e875eae --- /dev/null +++ b/src/test/alonePackingList.spec.js @@ -0,0 +1,316 @@ +/* eslint-disable */ +import req from 'supertest'; +const dotenv = require('dotenv'); + +import app from '../index'; +dotenv.config(); + +describe('POST /packingList/alone', () => { + it('혼자 패킹리스트 생성 성공', (done) => { + req(app) + .post('/packingList/alone') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + departureDate: '2022.07.11', + folderId: '5e4d276f95e376b7976b2003', + title: '홍콩 한달 살이', + templatedId: '5e4d276f95e376b7976b2003', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('혼자 패킹리스트 생성 - 필요한 값 없음', (done) => { + req(app) + .post('/packingList/alone') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + departureDate: '', + folderId: '', + title: '', + templatedId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('POST /packingList/alone/category', () => { + it('혼자 패킹리스트 카테고리 생성 성공', (done) => { + req(app) + .post('/packingList/alone/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '필수', + listId: '62d9854c24ff58dcf71797e2', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('혼자 패킹리스트 카테고리 생성 - 필요한 값 없음', (done) => { + req(app) + .post('/packingList/alone/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '', + listId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /packingList/alone/category', () => { + it('혼자 패킹리스트 카테고리 수정 성공', (done) => { + req(app) + .patch('/packingList/alone/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d987a207a7c2aa188b19e8', + name: '필수', + listId: '62d9854c24ff58dcf71797e2', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('혼자 패킹리스트 카테고리 수정 - 필요한 값 없음', (done) => { + req(app) + .patch('/packingList/alone/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '', + name: '', + listId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('DELETE /packingList/alone/category/:listId/:categoryId', () => { + it('혼자 패킹 리스트 카테고리 삭제', (done) => { + req(app) + .delete('packingList/alone/category/62d9854c24ff58dcf71797e2/62d987a207a7c2aa188b19e8') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('POST /packingList/alone/pack ', () => { + it('혼자 패킹리스트 짐 생성 성공', (done) => { + req(app) + .post('/packingList/alone/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '필수', + categoryId: '62d987a207a7c2aa188b19e8', + listId: '62d9854c24ff58dcf71797e2', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('혼자 패킹리스트 짐 생성 - 필요한 값 없음', (done) => { + req(app) + .post('/packingList/alone/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '', + categoryId: '', + listId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /packingList/alone/pack', () => { + it('혼자 패킹리스트 짐 수정 성공', (done) => { + req(app) + .patch('/packingList/alone/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62bbb80d9d5dc1aa4c3d2839', + name: '보조배터리', + isChecked: true, + listId: '62bbb80d9d5dc1aa4c3d2839', + categoryId: '62bbb80d9d5dc1aa4c3d2839', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('혼자 패킹리스트 짐 수정 - 필요한 값 없음', (done) => { + req(app) + .patch('/packingList/alone/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '', + name: '', + listId: '', + categoryId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('DELETE /packingList/alone/pack/:listId/:categoryId/:packId', () => { + it('혼자 패킹 리스트 짐 삭제', (done) => { + req(app) + .delete( + '/packingList/alone/pack/62d9854c24ff58dcf71797e2/62d987a207a7c2aa188b19e8/62d997fd5bbce90a6e069590', + ) + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /folder/packingList/alone/62d9842924ff58dcf71797cf', () => { + it('폴더 안 혼자 패킹 리스트들 조회', (done) => { + req(app) + .get('/folder/packingList/alone/') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /packingList/alone/:listId', () => { + it('혼자 패킹리스트 상세조회 성공', (done) => { + req(app) + .get('/packingList/alone/62d9854c24ff58dcf71797e2') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('DELETE /packingList/alone/:folderId/:listId', () => { + it('혼자 패킹리스트 삭제', (done) => { + req(app) + .delete('/packingList/alone/62d987a207a7c2aa188b19e8/62d9854c24ff58dcf71797e2') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); diff --git a/src/test/folder.spec.js b/src/test/folder.spec.js new file mode 100644 index 0000000..d4feaff --- /dev/null +++ b/src/test/folder.spec.js @@ -0,0 +1,157 @@ +/* eslint-disable */ +import req from 'supertest'; +const dotenv = require('dotenv'); + +import app from '../index'; +dotenv.config(); + +describe('POST /folder', () => { + it('폴더 생성 성공', (done) => { + req(app) + .post('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + title: '폴더1', + isAloned: true, + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('필요한 값이 없습니다', (done) => { + req(app) + .post('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + title: '폴더1', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /folder', () => { + it('폴더 조회 성공', (done) => { + req(app) + .get('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /folder/alone', () => { + it('폴더 조회 성공', (done) => { + req(app) + .get('/folder/alone') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /folder/together', () => { + it('폴더 조회 성공', (done) => { + req(app) + .get('/folder/together') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /folder', () => { + it('폴더 수정 성공', (done) => { + req(app) + .patch('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d9842924ff58dcf71797cf', + title: '폴더', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + req(app) + .patch('/folder') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + title: '폴더1', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('DELETE /folder/:folderId', () => { + it('폴더 삭제 성공', (done) => { + req(app) + .patch('/folder/:folderId') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); diff --git a/test/alonePackingList.spec.ts b/src/test/member.spec.ts similarity index 100% rename from test/alonePackingList.spec.ts rename to src/test/member.spec.ts diff --git a/src/test/packingList.spec.js b/src/test/packingList.spec.js new file mode 100644 index 0000000..f0e7c5c --- /dev/null +++ b/src/test/packingList.spec.js @@ -0,0 +1,151 @@ +/* eslint-disable */ +import req from 'supertest'; +const dotenv = require('dotenv'); + +import app from '../index'; +dotenv.config(); + +describe('POST /packingList/title', () => { + it('패킹리스트 제목 수정 성공', (done) => { + req(app) + .patch('/packingList/title') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d984fb07a7c2aa188b198a', + title: '제목', + isAloned: true, + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + req(app) + .post('/packingList/title') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d984fb07a7c2aa188b198a', + title: '제목', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /packingList/departureDate', () => { + it('패킹리스트 출발날짜 수정 성공', (done) => { + req(app) + .patch('/packingList/departureDate') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d984fb07a7c2aa188b198a', + departureDate: '2022.07.15', + isAlone: true, + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + req(app) + .patch('/packingList/title') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d984fb07a7c2aa188b198a', + isAlone: true, + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /packingList/myTemplate', () => { + it('패킹리스트 나만의 템플릿 여부 수정 성공', (done) => { + req(app) + .patch('/packingList/myTemplate') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d984fb07a7c2aa188b198a', + isSaved: true, + isAlone: true, + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + it('필요한 값이 없습니다', (done) => { + req(app) + .patch('/packingList/myTemplate') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + title: '폴더1', + isAlone: true, + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /packingList/invite/:inviteCode', () => { + it('함께 패킹리스트 초대 성공', (done) => { + req(app) + .patch('/packingList/invite/:inviteCode') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d9842924ff58dcf71797cf', + title: '폴더', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); diff --git a/src/test/template.spec.js b/src/test/template.spec.js new file mode 100644 index 0000000..40d7556 --- /dev/null +++ b/src/test/template.spec.js @@ -0,0 +1,60 @@ +/* eslint-disable */ +import req from 'supertest'; +const dotenv = require('dotenv'); + +import app from '../index'; +dotenv.config(); + +describe('GET /template/alone', () => { + it('혼자 패킹 템플릿 리스트 조회 성공', (done) => { + req(app) + .patch('/template/alone') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /template/together', () => { + it('함께 패킹 템플릿 리스트 조회 성공', (done) => { + req(app) + .patch('/template/together') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /template/:templateId/:type', () => { + it('템플릿 상세조회 성공', (done) => { + req(app) + .patch('/template/:templateId/:type') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); diff --git a/src/test/togetherPackingList.spec.js b/src/test/togetherPackingList.spec.js new file mode 100644 index 0000000..29bc6ea --- /dev/null +++ b/src/test/togetherPackingList.spec.js @@ -0,0 +1,316 @@ +/* eslint-disable */ +import req from 'supertest'; +const dotenv = require('dotenv'); + +import app from '../index'; +dotenv.config(); + +describe('POST /packingList/together', () => { + it('함께 패킹리스트 생성 성공', (done) => { + req(app) + .post('/packingList/together') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + departureDate: '2022-07-11', + folderId: '62d9844f07a7c2aa188b1982', + title: '홍콩 한달 살이', + templatedId: '5e4d276f95e376b7976b2003', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('함께 패킹리스트 생성 - 필요한 값 없음', (done) => { + req(app) + .post('/packingList/together') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + departureDate: '', + folderId: '', + title: '', + templatedId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('POST /packingList/together/category', () => { + it('함께 패킹리스트 카테고리 생성 성공', (done) => { + req(app) + .post('/packingList/together/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '필수', + listId: '62d984fb07a7c2aa188b1989', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('함께 패킹리스트 카테고리 생성 - 필요한 값 없음', (done) => { + req(app) + .post('/packingList/together/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '', + listId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /packingList/together/category', () => { + it('함께 패킹리스트 카테고리 수정 성공', (done) => { + req(app) + .patch('/packingList/together/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d9878424ff58dcf7179888', + name: '필수', + listId: '62d984fb07a7c2aa188b1989', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('함께 패킹리스트 카테고리 수정 - 필요한 값 없음', (done) => { + req(app) + .patch('/packingList/together/category') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '', + name: '', + listId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('DELETE /packingList/together/category/:listId/:categoryId', () => { + it('함께 패킹 리스트 카테고리 삭제', (done) => { + req(app) + .delete('packingList/together/category/62d9854c24ff58dcf71797e2/62d987a207a7c2aa188b19e8') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('POST /packingList/together/pack ', () => { + it('함께 패킹리스트 짐 생성 성공', (done) => { + req(app) + .post('/packingList/together/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '필수', + categoryId: '62d9878424ff58dcf7179888', + listId: '62d984fb07a7c2aa188b1989', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('함께 패킹리스트 짐 생성 - 필요한 값 없음', (done) => { + req(app) + .post('/packingList/together/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + name: '', + categoryId: '', + listId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('PATCH /packingList/together/pack', () => { + it('함께 패킹리스트 짐 수정 성공', (done) => { + req(app) + .patch('/packingList/together/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '62d9878424ff58dcf7179888', + name: '보조배터리', + isChecked: true, + listId: '62d984fb07a7c2aa188b1989', + categoryId: '62d9878424ff58dcf7179888', + }) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); + + it('함께 패킹리스트 짐 수정 - 필요한 값 없음', (done) => { + req(app) + .patch('/packingList/together/pack') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .send({ + _id: '', + name: '', + listId: '', + categoryId: '', + }) + .expect(400) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('DELETE /packingList/together/pack/:listId/:categoryId/:packId', () => { + it('함께 패킹 리스트 짐 삭제', (done) => { + req(app) + .delete( + '/packingList/together/pack/62d9854c24ff58dcf71797e2/62d987a207a7c2aa188b19e8/62d997fd5bbce90a6e069590', + ) + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /folder/packingList/together/62d9842924ff58dcf71797cf', () => { + it('폴더 안 함께 패킹 리스트들 조회', (done) => { + req(app) + .get('/folder/packingList/together/') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('GET /packingList/together/:listId', () => { + it('함께 패킹리스트 상세조회 성공', (done) => { + req(app) + .get('/packingList/together/62d984fb07a7c2aa188b1989') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); + +describe('DELETE /packingList/together/:folderId/:listId', () => { + it('함께 패킹리스트 삭제', (done) => { + req(app) + .DELETE('/packingList/together/62d9844f07a7c2aa188b1982/62d99a53698e83fb0b94a197') + .set('Content-Type', 'application/json') + .set('Authorization', process.env.USER_TOKEN) + .expect(200) + .expect('Content-Type', /json/) + .then((res) => { + done(); + }) + .catch((err) => { + console.error('######Error >>', err); + done(err); + }); + }); +}); diff --git a/test/user.spec.js b/src/test/user.spec.js similarity index 79% rename from test/user.spec.js rename to src/test/user.spec.js index 995acfb..fb96655 100644 --- a/test/user.spec.js +++ b/src/test/user.spec.js @@ -1,18 +1,18 @@ -import request from 'supertest'; -import { expect } from 'chai'; -import dotenv from 'dotenv'; -import app from '../src/index'; -dotenv.config(); +/* eslint-disable */ +import req from 'supertest'; +const dotenv = require('dotenv'); +import app from '../index'; +dotenv.config(); describe('POST /user/prfile', () => { it('유저 생성 성공', (done) => { - request(app) + req(app) .post('/user/profile') .set('Content-Type', 'application/json') .send({ - 'email': 'kkkl@gmail.com', - 'name': '박현지', - 'profileImageId': '1', + email: 'kkkl@gmail.com', + name: '박현지', + profileImageId: '1', }) .expect(200) .expect('Content-Type', /json/) @@ -25,12 +25,12 @@ describe('POST /user/prfile', () => { }); }); it('필요한 값이 없습니다', (done) => { - request(app) + req(app) .post('/user/profile') .set('Content-Type', 'application/json') .send({ - 'email': 'kkkl@gmail.com', - 'profileImageId': '1', + email: 'kkkl@gmail.com', + profileImageId: '1', }) .expect(400) .then((res) => { @@ -45,15 +45,15 @@ describe('POST /user/prfile', () => { describe('PATCH /user/prfile', () => { it('유저 수정 성공', (done) => { - request(app) + req(app) .patch('/user/profile') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - '_id': '62d6acbdc10dc1e16b2a636a', - 'email': 'kkkl@gmail.com', - 'name': '박현지', - 'profileImageId': '1', + _id: '62d6acbdc10dc1e16b2a636a', + email: 'kkkl@gmail.com', + name: '박현지', + profileImageId: '1', }) .expect(200) .expect('Content-Type', /json/) @@ -66,13 +66,13 @@ describe('PATCH /user/prfile', () => { }); }); it('필요한 값이 없습니다', (done) => { - request(app) + req(app) .patch('/user/profile') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - 'email': 'kkkl@gmail.com', - 'profileImageId': '1', + email: 'kkkl@gmail.com', + profileImageId: '1', }) .expect(400) .then((res) => { @@ -87,7 +87,7 @@ describe('PATCH /user/prfile', () => { describe('GET /user', () => { it('유저 조회 성공', (done) => { - request(app) + req(app) .get('/user') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) @@ -102,7 +102,7 @@ describe('GET /user', () => { }); }); it('토큰이 유효하지 않습니다', (done) => { - request(app) + req(app) .get('/user') .set('Content-Type', 'application/json') .set('Authorization', '') diff --git a/test/folder.spec.js b/test/folder.spec.js deleted file mode 100644 index 480cca7..0000000 --- a/test/folder.spec.js +++ /dev/null @@ -1,158 +0,0 @@ -import request from 'supertest'; -import { expect } from 'chai'; -import dotenv from 'dotenv'; -import app from '../src/index'; -dotenv.config(); - -describe('POST /folder', () => { - it('폴더 생성 성공', done => { - request(app) - .post('/folder') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - "title": '폴더1', - "isAloned": true, - }) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - - it('필요한 값이 없습니다', (done) => { - request(app) - .post('/folder') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - "title": '폴더1', - }) - .expect(400) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - -describe('GET /folder', () => { - it('폴더 조회 성공', (done) => { - request(app) - .get('/folder') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - describe('GET /folder/alone', () => { - it('폴더 조회 성공', (done) => { - request(app) - .get('/folder/alone') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - -describe('GET /folder/together', () => { - it('폴더 조회 성공', (done) => { - request(app) - .get('/folder/together') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - -describe('PATCH /folder', () => { - it('폴더 수정 성공', (done) => { - request(app) - .patch('/folder') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - "_id": "62d9842924ff58dcf71797cf", - "title": "폴더" - }) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - it('필요한 값이 없습니다', (done) => { - request(app) - .patch('/folder') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - 'title': '폴더1', - }) - .expect(400) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - -describe('DELETE /folder/:folderId', () => { - it('폴더 삭제 성공', (done) => { - request(app) - .patch('/folder/:folderId') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); diff --git a/test/member.spec.js b/test/member.spec.js deleted file mode 100644 index e69de29..0000000 diff --git a/test/packingList.spec.js b/test/packingList.spec.js deleted file mode 100644 index 52bf130..0000000 --- a/test/packingList.spec.js +++ /dev/null @@ -1,153 +0,0 @@ -import request from 'supertest'; -import { expect } from 'chai'; -import dotenv from 'dotenv'; -import app from '../src/index'; -dotenv.config(); - -describe('POST /packingList/title', () => { - it('패킹리스트 제목 수정 성공', (done) => { - request(app) - .patch('/packingList/title') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - '_id': '62d984fb07a7c2aa188b198a', - 'title': '제목', - 'isAloned': true, - }) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - it('필요한 값이 없습니다', (done) => { - request(app) - .post('/packingList/title') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - '_id': '62d984fb07a7c2aa188b198a', - 'title': '제목', - }) - .expect(400) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - describe('PATCH /packingList/departureDate', () => { - it('패킹리스트 출발날짜 수정 성공', (done) => { - request(app) - .patch('/packingList/departureDate') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - '_id': '62d984fb07a7c2aa188b198a', - 'departureDate': '2022.07.15', - 'isAlone': true - }) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - it('필요한 값이 없습니다', (done) => { - request(app) - .patch('/packingList/title') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - '_id': '62d984fb07a7c2aa188b198a', - 'isAlone': true - }) - .expect(400) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - - describe('PATCH /packingList/myTemplate', () => { - it('패킹리스트 나만의 템플릿 여부 수정 성공', (done) => { - request(app) - .patch('/packingList/myTemplate') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - '_id': '62d984fb07a7c2aa188b198a', - "isSaved": true, - 'isAlone': true - }) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - it('필요한 값이 없습니다', (done) => { - request(app) - .patch('/packingList/myTemplate') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - 'title': '폴더1', - 'isAlone': true - }) - .expect(400) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - - -describe('GET /packingList/invite/:inviteCode', () => { - it('함께 패킹리스트 초대 성공', (done) => { - request(app) - .patch('/packingList/invite/:inviteCode') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .send({ - "_id": "62d9842924ff58dcf71797cf", - "title": "폴더" - }) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); diff --git a/test/template.spec.js b/test/template.spec.js deleted file mode 100644 index 8784658..0000000 --- a/test/template.spec.js +++ /dev/null @@ -1,62 +0,0 @@ -import request from 'supertest'; -import { expect } from 'chai'; -import dotenv from 'dotenv'; -import app from '../src/index'; -dotenv.config(); - -describe('GET /template/alone', () => { - it('혼자 패킹 템플릿 리스트 조회 성공', (done) => { - request(app) - .patch('/template/alone') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - describe('GET /template/together', () => { - it('함께 패킹 템플릿 리스트 조회 성공', (done) => { - request(app) - .patch('/template/together') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - -describe('GET /template/:templateId/:type', () => { - it('템플릿 상세조회 성공', (done) => { - request(app) - .patch('/template/:templateId/:type') - .set('Content-Type', 'application/json') - .set('Authorization', process.env.USER_TOKEN) - .expect(200) - .expect('Content-Type', /json/) - .then((res) => { - done(); - }) - .catch((err) => { - console.error('######Error >>', err); - done(err); - }); - }); - }); - - \ No newline at end of file diff --git a/test/togetherPackingList.spec.js b/test/togetherPackingList.spec.js deleted file mode 100644 index e69de29..0000000 diff --git a/yarn.lock b/yarn.lock index 824af0a..8db6fb6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,288 @@ # yarn lockfile v1 +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@cspotcode/source-map-consumer@0.8.0": version "0.8.0" resolved "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz" @@ -43,6 +325,255 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -64,11 +595,30 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@sinclair/typebox@^0.24.1": + version "0.24.20" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.20.tgz#11a657875de6008622d53f56e063a6347c51a6dd" + integrity sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" @@ -96,6 +646,39 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.17.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.17.1.tgz#1a0e73e8c28c7e832656db372b779bfd2ef37314" + integrity sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA== + dependencies: + "@babel/types" "^7.3.0" + "@types/body-parser@*": version "1.19.2" resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" @@ -104,6 +687,11 @@ "@types/connect" "*" "@types/node" "*" +"@types/chai@^4.3.1": + version "4.3.1" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz" + integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== + "@types/connect@*": version "3.4.35" resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" @@ -111,9 +699,14 @@ dependencies: "@types/node" "*" +"@types/cookiejar@*": + version "2.1.2" + resolved "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz" + integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== + "@types/cors@^2.8.12": version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz" integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== "@types/express-serve-static-core@^4.17.18": @@ -135,6 +728,32 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" @@ -142,7 +761,7 @@ "@types/jsonwebtoken@^8.5.8": version "8.5.8" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz#01b39711eb844777b7af1d1f2b4cf22fda1c0c44" + resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz" integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== dependencies: "@types/node" "*" @@ -152,6 +771,11 @@ resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/mocha@^9.1.1": + version "9.1.1" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + "@types/mongoose@^5.11.97": version "5.11.97" resolved "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.11.97.tgz" @@ -171,6 +795,11 @@ resolved "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz" integrity sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w== +"@types/prettier@^2.1.5": + version "2.6.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a" + integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== + "@types/qs@*": version "6.9.7" resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" @@ -189,6 +818,26 @@ "@types/mime" "^1" "@types/node" "*" +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/superagent@*": + version "4.1.15" + resolved "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz" + integrity sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ== + dependencies: + "@types/cookiejar" "*" + "@types/node" "*" + +"@types/supertest@^2.0.12": + version "2.0.12" + resolved "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz" + integrity sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ== + dependencies: + "@types/superagent" "*" + "@types/webidl-conversions@*": version "6.1.1" resolved "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz" @@ -202,6 +851,18 @@ "@types/node" "*" "@types/webidl-conversions" "*" +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.10" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" + integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^5.30.5": version "5.30.5" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz" @@ -284,7 +945,7 @@ "@ungap/promise-all-settled@1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== abbrev@1: @@ -322,7 +983,7 @@ acorn@^8.7.1: aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -347,12 +1008,12 @@ ansi-align@^3.0.0: ansi-colors@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.3.0: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" @@ -364,9 +1025,16 @@ ansi-regex@^5.0.1: ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" @@ -374,12 +1042,17 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + ansi-styles@^6.0.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz" integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== -anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -392,6 +1065,13 @@ arg@^4.1.0: resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -409,17 +1089,17 @@ array-union@^2.1.0: asap@^2.0.0: version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== assertion-error@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== asynckit@^0.4.0: @@ -429,12 +1109,72 @@ asynckit@^0.4.0: axios@^0.27.2: version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== dependencies: follow-redirects "^1.14.9" form-data "^4.0.0" +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" @@ -490,7 +1230,7 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" @@ -504,9 +1244,26 @@ braces@^3.0.2, braces@~3.0.2: browser-stdout@1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== +browserslist@^4.20.2: + version "4.21.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" + integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== + dependencies: + caniuse-lite "^1.0.30001366" + electron-to-chromium "^1.4.188" + node-releases "^2.0.6" + update-browserslist-db "^1.0.4" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + bson@^4.6.2: version "4.6.3" resolved "https://registry.npmjs.org/bson/-/bson-4.6.3.tgz" @@ -519,6 +1276,11 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + buffer@^5.6.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" @@ -547,7 +1309,7 @@ cacheable-request@^6.0.0: call-bind@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -558,14 +1320,24 @@ callsites@^3.0.0: resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +caniuse-lite@^1.0.30001366: + version "1.0.30001368" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001368.tgz#c5c06381c6051cd863c45021475434e81936f713" + integrity sha512-wgfRYa9DenEomLG/SdWgQxpIyvdtH3NW8Vq+tB6AwR9e56iOIcu1im5F/wNdDf04XlKHXqIx4N8Jo0PemeBenQ== + chai@^4.3.6: version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== dependencies: assertion-error "^1.1.0" @@ -576,6 +1348,15 @@ chai@^4.3.6: pathval "^1.1.1" type-detect "^4.0.5" +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" @@ -584,9 +1365,14 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + check-error@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== chokidar@3.5.3, chokidar@^3.5.2: @@ -609,9 +1395,19 @@ ci-info@^2.0.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +ci-info@^3.2.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-boxes@^2.2.1: @@ -621,14 +1417,14 @@ cli-boxes@^2.2.1: cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" @@ -636,7 +1432,7 @@ cli-truncate@^2.1.0: cli-truncate@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== dependencies: slice-ansi "^5.0.0" @@ -644,7 +1440,7 @@ cli-truncate@^3.1.0: cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -658,6 +1454,23 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" @@ -665,6 +1478,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" @@ -672,7 +1490,7 @@ color-name@~1.1.4: colorette@^2.0.16, colorette@^2.0.17: version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== combined-stream@^1.0.8: @@ -684,12 +1502,12 @@ combined-stream@^1.0.8: commander@^9.3.0: version "9.4.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.0.tgz#bc4a40918fefe52e22450c111ecd6b7acce6f11c" + resolved "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz" integrity sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw== component-emitter@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: @@ -721,6 +1539,13 @@ content-type@~1.0.4: resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" @@ -733,12 +1558,12 @@ cookie@0.4.2: cookiejar@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== cors@^2.8.5: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -765,7 +1590,7 @@ crypto-random-string@^2.0.0: dayjs@^1.11.4: version "1.11.4" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.4.tgz#3b3c10ca378140d8917e06ebc13a4922af4f433e" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz" integrity sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g== debug@2.6.9: @@ -775,7 +1600,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4.3.4, debug@4.x, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@4.3.4, debug@4.x, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -791,7 +1616,7 @@ debug@^3.2.7: decamelize@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decompress-response@^3.3.0: @@ -801,9 +1626,14 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + deep-eql@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== dependencies: type-detect "^4.0.0" @@ -818,6 +1648,11 @@ deep-is@^0.1.3: resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" @@ -843,17 +1678,27 @@ destroy@~1.0.4: resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + dezalgo@1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== dependencies: asap "^2.0.0" wrappy "1" +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + diff@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== diff@^4.0.1: @@ -894,7 +1739,7 @@ duplexer3@^0.1.4: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ecdsa-sig-formatter@1.0.11: @@ -909,6 +1754,16 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-to-chromium@^1.4.188: + version "1.4.198" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.198.tgz#36a8e7871046f7f94c01dc0133912fd5cf226c6a" + integrity sha512-jwqQPdKGeAslcq8L+1SZZgL6uDiIDmTe9Gq4brsdWAH27y7MJ2g9Ue6MyST3ogmSM49EAQP7bype1V5hsuNrmQ== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -916,7 +1771,7 @@ emoji-regex@^8.0.0: emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encodeurl@~1.0.2: @@ -931,9 +1786,16 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-goat@^2.0.0: @@ -951,6 +1813,16 @@ escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + eslint-config-prettier@^8.5.0: version "8.5.0" resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz" @@ -1039,6 +1911,11 @@ espree@^9.3.2: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" @@ -1073,9 +1950,24 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + execa@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" + resolved "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz" integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== dependencies: cross-spawn "^7.0.3" @@ -1088,6 +1980,22 @@ execa@^6.1.0: signal-exit "^3.0.7" strip-final-newline "^3.0.0" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + express-validator@^6.14.0: version "6.14.0" resolved "https://registry.npmjs.org/express-validator/-/express-validator-6.14.0.tgz" @@ -1160,7 +2068,7 @@ fast-levenshtein@^2.0.6: fast-safe-stringify@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fastq@^1.6.0: @@ -1170,6 +2078,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -1199,12 +2114,20 @@ finalhandler@~1.1.2: find-up@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" @@ -1215,7 +2138,7 @@ flat-cache@^3.0.4: flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.1.0: @@ -1239,7 +2162,7 @@ form-data@^4.0.0: formidable@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.0.1.tgz#4310bc7965d185536f9565184dee74fbb75557ff" + resolved "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz" integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== dependencies: dezalgo "1.0.3" @@ -1262,14 +2185,14 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: @@ -1277,25 +2200,35 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== get-intrinsic@^1.0.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.3" +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" @@ -1310,9 +2243,9 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -get-stream@^6.0.1: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob-parent@^5.1.2, glob-parent@~5.1.2: @@ -1331,7 +2264,7 @@ glob-parent@^6.0.1: glob@7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -1341,7 +2274,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1360,6 +2293,11 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^13.15.0: version "13.16.0" resolved "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz" @@ -1396,7 +2334,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.2: +graceful-fs@^4.1.2, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1413,7 +2351,7 @@ has-flag@^4.0.0: has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-yarn@^2.1.0: @@ -1423,21 +2361,26 @@ has-yarn@^2.1.0: has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" he@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== hexoid@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" @@ -1454,14 +2397,19 @@ http-errors@1.8.1: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + human-signals@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz" integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== husky@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" + resolved "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz" integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== iconv-lite@0.4.24: @@ -1499,6 +2447,14 @@ import-lazy@^2.1.0: resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" @@ -1506,7 +2462,7 @@ imurmurhash@^0.1.4: indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: @@ -1542,6 +2498,11 @@ ipaddr.js@1.9.1: resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" @@ -1556,6 +2517,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -1568,9 +2536,14 @@ is-fullwidth-code-point@^3.0.0: is-fullwidth-code-point@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" @@ -1608,12 +2581,17 @@ is-path-inside@^3.0.2: is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-typedarray@^1.0.0: @@ -1623,7 +2601,7 @@ is-typedarray@^1.0.0: is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-yarn-global@^0.3.0: @@ -1636,6 +2614,411 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== + dependencies: + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" + import-local "^3.0.2" + jest-cli "^28.1.3" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -1643,11 +3026,29 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" @@ -1658,9 +3059,14 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + jsonwebtoken@^8.5.1: version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== dependencies: jws "^3.2.2" @@ -1703,6 +3109,11 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + latest-version@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" @@ -1710,6 +3121,11 @@ latest-version@^5.1.0: dependencies: package-json "^6.3.0" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -1720,12 +3136,17 @@ levn@^0.4.1: lilconfig@2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz" integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + lint-staged@^13.0.3: version "13.0.3" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.0.3.tgz#d7cdf03a3830b327a2b63c6aec953d71d9dc48c6" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz" integrity sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug== dependencies: cli-truncate "^3.1.0" @@ -1744,7 +3165,7 @@ lint-staged@^13.0.3: listr2@^4.0.5: version "4.0.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-4.0.5.tgz#9dcc50221583e8b4c71c43f9c7dfd0ef546b75d5" + resolved "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz" integrity sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA== dependencies: cli-truncate "^2.1.0" @@ -1756,9 +3177,16 @@ listr2@^4.0.5: through "^2.3.8" wrap-ansi "^7.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" @@ -1810,7 +3238,7 @@ lodash@^4.17.21: log-symbols@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -1818,7 +3246,7 @@ log-symbols@4.1.0: log-update@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: ansi-escapes "^4.3.0" @@ -1828,7 +3256,7 @@ log-update@^4.0.0: loupe@^2.3.1: version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== dependencies: get-func-name "^2.0.0" @@ -1862,6 +3290,13 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" @@ -1879,7 +3314,7 @@ merge-descriptors@1.0.1: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: @@ -1919,17 +3354,17 @@ mime@1.6.0: mime@2.6.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== mimic-response@^1.0.0, mimic-response@^1.0.1: @@ -1939,7 +3374,7 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: minimatch@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: brace-expansion "^2.0.1" @@ -1958,7 +3393,7 @@ minimist@^1.2.0: mocha@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.0.0.tgz#205447d8993ec755335c4b13deba3d3a13c4def9" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz" integrity sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA== dependencies: "@ungap/promise-all-settled" "1.1.2" @@ -2051,7 +3486,7 @@ nanoid@*, nanoid@3.3.4: nanoid@3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== natural-compare@^1.4.0: @@ -2064,6 +3499,16 @@ negotiator@0.6.3: resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + nodemon@^2.0.15: version "2.0.15" resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz" @@ -2097,21 +3542,28 @@ normalize-url@^4.1.0: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + npm-run-path@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== dependencies: path-key "^4.0.0" object-assign@^4: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.12.2, object-inspect@^1.9.0: version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== on-finished@~2.3.0: @@ -2128,16 +3580,16 @@ once@1.4.0, once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" onetime@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" @@ -2159,27 +3611,46 @@ p-cancelable@^1.0.0: resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-limit@^3.0.2: +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + package-json@^6.3.0: version "6.5.0" resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" @@ -2197,6 +3668,16 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" @@ -2204,7 +3685,7 @@ parseurl@~1.3.3: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: @@ -2212,16 +3693,21 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" @@ -2234,19 +3720,36 @@ path-type@^4.0.0: pathval@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pidtree@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -2262,6 +3765,24 @@ prettier@^2.7.1: resolved "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" @@ -2297,7 +3818,7 @@ pupa@^2.1.1: qs@6.9.3: version "6.9.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" + resolved "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz" integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== qs@6.9.7: @@ -2307,7 +3828,7 @@ qs@6.9.7: qs@^6.10.3: version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" @@ -2319,7 +3840,7 @@ queue-microtask@^1.2.2: randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" @@ -2349,9 +3870,14 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + readable-stream@^3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" @@ -2386,14 +3912,40 @@ registry-url@^5.0.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.20.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" @@ -2403,7 +3955,7 @@ responselike@^1.0.2: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -2416,10 +3968,10 @@ reusify@^1.0.4: rfdc@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -2435,7 +3987,7 @@ run-parallel@^1.1.9: rxjs@^7.5.5: version "7.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz" integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== dependencies: tslib "^2.1.0" @@ -2445,6 +3997,11 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" @@ -2474,7 +4031,7 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.7: +semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -2502,7 +4059,7 @@ send@0.17.2: serialize-javascript@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" @@ -2536,7 +4093,7 @@ shebang-regex@^3.0.0: side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -2548,11 +4105,16 @@ sift@16.0.0: resolved "https://registry.npmjs.org/sift/-/sift-16.0.0.tgz" integrity sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ== -signal-exit@^3.0.2, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" @@ -2560,7 +4122,7 @@ slash@^3.0.0: slice-ansi@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" @@ -2569,7 +4131,7 @@ slice-ansi@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -2578,7 +4140,7 @@ slice-ansi@^4.0.0: slice-ansi@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: ansi-styles "^6.0.0" @@ -2597,6 +4159,19 @@ socks@^2.6.2: ip "^1.1.5" smart-buffer "^4.2.0" +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + sparse-bitfield@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" @@ -2604,6 +4179,18 @@ sparse-bitfield@^3.0.3: dependencies: memory-pager "^1.0.2" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" @@ -2611,10 +4198,18 @@ sparse-bitfield@^3.0.3: string-argv@^0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2625,7 +4220,7 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 string-width@^5.0.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -2634,7 +4229,7 @@ string-width@^5.0.0: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" @@ -2648,14 +4243,24 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-ansi@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: ansi-regex "^6.0.1" +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: @@ -2670,7 +4275,7 @@ strip-json-comments@~2.0.1: superagent@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.0.0.tgz#2ea4587df4b81ef023ec01ebc6e1bcb9e2344cb6" + resolved "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz" integrity sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg== dependencies: component-emitter "^1.3.0" @@ -2687,33 +4292,63 @@ superagent@^8.0.0: supertest@^6.2.4: version "6.2.4" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.2.4.tgz#3dcebe42f7fd6f28dd7ac74c6cba881f7101b2f0" + resolved "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz" integrity sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA== dependencies: methods "^1.1.2" superagent "^8.0.0" -supports-color@8.1.1: +supports-color@8.1.1, supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" -supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" @@ -2721,9 +4356,19 @@ text-table@^0.2.0: through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" @@ -2781,7 +4426,7 @@ tslib@^1.8.1: tslib@^2.1.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tsutils@^3.21.0: @@ -2798,9 +4443,9 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.20.2: @@ -2810,7 +4455,7 @@ type-fest@^0.20.2: type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-is@~1.6.18: @@ -2850,6 +4495,14 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +update-browserslist-db@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-notifier@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz" @@ -2891,7 +4544,7 @@ url-parse-lax@^3.0.0: util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: @@ -2909,6 +4562,15 @@ v8-compile-cache@^2.0.3: resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + validator@^13.7.0: version "13.7.0" resolved "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz" @@ -2919,6 +4581,13 @@ vary@^1, vary@~1.1.2: resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" @@ -2953,12 +4622,12 @@ word-wrap@^1.2.3: workerpool@6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -2989,6 +4658,14 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" @@ -2996,7 +4673,7 @@ xdg-basedir@^4.0.0: y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^4.0.0: @@ -3006,22 +4683,22 @@ yallist@^4.0.0: yaml@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz" integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== -yargs-parser@20.2.4: +yargs-parser@20.2.4, yargs-parser@^20.2.2: version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== yargs-unparser@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -3031,7 +4708,7 @@ yargs-unparser@2.0.0: yargs@16.2.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -3042,6 +4719,19 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.3.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" @@ -3049,5 +4739,5 @@ yn@3.1.1: yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 0f375941ec5d5d39555aa20a67602ec655dcd964 Mon Sep 17 00:00:00 2001 From: laalaa31 <102424704+laalaa31@users.noreply.github.com> Date: Fri, 22 Jul 2022 23:31:46 +0900 Subject: [PATCH 55/80] =?UTF-8?q?[UPDATE]=20readme=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d524f2b..d0c015d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ ## 🧳 Packman > 내 손안의 짐 챙김 도우미, 팩맨 2022.07.02 ~ + ## 🧳 Server Architecture
@@ -14,6 +15,24 @@

+## 🧳 Service Core Function +![20](https://user-images.githubusercontent.com/102424704/180459110-ed7660bc-c55e-4e6b-be12-d837b7d05d3d.jpg) +![21](https://user-images.githubusercontent.com/102424704/180459121-5c7b7223-c22a-4df4-ad21-42fa89f5e68a.jpg) +![22](https://user-images.githubusercontent.com/102424704/180459130-eebb33f5-6d3e-412f-9a0b-644ca9aab29d.jpg) +![23](https://user-images.githubusercontent.com/102424704/180459142-0c62cffd-7966-403c-a46b-5d2ad1895f36.jpg) +![24](https://user-images.githubusercontent.com/102424704/180459150-e00212ac-376f-43db-ae79-12af5efce613.jpg) +![25](https://user-images.githubusercontent.com/102424704/180459156-c7f313c8-ba31-46f0-bd1f-949dc5fe692a.jpg) +![26](https://user-images.githubusercontent.com/102424704/180459169-491dfd5b-70eb-49e3-8fa1-3cdacd109166.jpg) +![27](https://user-images.githubusercontent.com/102424704/180459176-6724af15-9388-4fea-be1e-65153ab058c5.jpg) +![28](https://user-images.githubusercontent.com/102424704/180459183-1b736428-02c6-47e9-9e89-81bc78a08d60.jpg) +
+
+ +## 🧳 Service Architecture +![45 (2)](https://user-images.githubusercontent.com/102424704/180460416-55a5514a-35bb-475f-976c-6a538aa64be8.jpg) +
+
+ ## 🧳 API Docs ### 🔗 [API Docs](https://freezing-innovation-7f5.notion.site/API-0914779ec2404484acc8f63a36e272dd) @@ -672,9 +691,8 @@ ex) `postUserInformation( )`
-## 🧳 Dependencies Module - -```json +## 🧳 Dependencies Module ( package.json ) +``` { "name": "node-typescript-init", "version": "1.0.0", @@ -683,28 +701,56 @@ ex) `postUserInformation( )` "scripts": { "dev": "nodemon", "build": "tsc && node dist", - "lint": "eslint ." + "lint": "eslint .", + "test": "mocha -r ts-node/register src/test", + "prepare": "husky install" }, "author": "", "license": "ISC", "devDependencies": { + "@types/chai": "^4.3.1", "@types/express": "^4.17.13", + "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^9.1.1", "@types/mongoose": "^5.11.97", "@types/node": "^17.0.25", + "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.5", "eslint": "^8.19.0", "eslint-config-prettier": "^8.5.0", + "husky": "^8.0.1", + "lint-staged": "^13.0.3", "nodemon": "^2.0.15", "prettier": "^2.7.1", "ts-node": "^10.7.0", "typescript": "^4.7.4" }, "dependencies": { + "@types/cors": "^2.8.12", + "@types/nanoid": "^3.0.0", + "axios": "^0.27.2", + "chai": "^4.3.6", + "cors": "^2.8.5", + "dayjs": "^1.11.4", "dotenv": "^16.0.0", "express": "^4.17.3", "express-validator": "^6.14.0", - "mongoose": "^6.3.1" + "jsonwebtoken": "^8.5.1", + "mocha": "^10.0.0", + "mongoose": "^6.3.1", + "nanoid": "3.3.4", + "supertest": "^6.2.4", + "upgrade": "^1.1.0" + }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx}": [ + "eslint --cache --fix", + "prettier --write" + ] } } + ``` +
+
From c8736ac06352283c80ec1194da72b4b29f5407dd Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 22 Jul 2022 23:31:56 +0900 Subject: [PATCH 56/80] =?UTF-8?q?[FIX]=20=EC=B4=88=EB=8C=80=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=9D=BC=EC=9A=B0=ED=84=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/PackingListRouter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/PackingListRouter.ts b/src/routes/PackingListRouter.ts index 8eb2158..98ef044 100644 --- a/src/routes/PackingListRouter.ts +++ b/src/routes/PackingListRouter.ts @@ -23,6 +23,6 @@ router.patch( auth, PackingListController.updatePackingListMyTemplate, ); -router.get('/invite/:inviteId', PackingListController.invitePackingList); +router.get('/invite/:inviteCode', PackingListController.invitePackingList); export default router; From e01f7723ca8d14aab6fd07fc2c23f6510dd7c86f Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 22 Jul 2022 23:35:25 +0900 Subject: [PATCH 57/80] =?UTF-8?q?[ADD]=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=E3=85=8D=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 3 ++- src/controllers/PackingListController.ts | 1 + src/services/PackingListService.ts | 1 + src/test/alonePackingList.spec.js | 24 ++++++++++++------------ src/test/folder.spec.js | 4 ++-- src/test/packingList.spec.js | 12 ++++++------ 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index d669d8d..98b36af 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "dev": "nodemon", "build": "tsc && node dist", "lint": "eslint .", - "test": "mocha -r ts-node/register src/test", + "test": "mocha -r ts-node/register src/test/packingList.spec.js", "prepare": "husky install" }, "author": "", @@ -41,6 +41,7 @@ "dotenv": "^16.0.0", "express": "^4.17.3", "express-validator": "^6.14.0", + "jest": "^28.1.3", "jsonwebtoken": "^8.5.1", "mocha": "^10.0.0", "mongoose": "^6.3.1", diff --git a/src/controllers/PackingListController.ts b/src/controllers/PackingListController.ts index 3c99749..3669dfb 100644 --- a/src/controllers/PackingListController.ts +++ b/src/controllers/PackingListController.ts @@ -177,6 +177,7 @@ const generateInviteCode = () => { }; const invitePackingList = async (req: Request, res: Response) => { const inviteCode = req.params.inviteCode; + console.log(inviteCode); try { const data = await PackingListService.getPackingByInviteCode(inviteCode); if (!data) diff --git a/src/services/PackingListService.ts b/src/services/PackingListService.ts index aa6fdea..190d2af 100644 --- a/src/services/PackingListService.ts +++ b/src/services/PackingListService.ts @@ -153,6 +153,7 @@ const getPackingByInviteCode = async ( } | null> => { try { const packingList = await TogetherPackingList.findOne({ inviteCode: inviteCode }); + console.log(inviteCode); if (!packingList) return null; const data = { _id: packingList.id, diff --git a/src/test/alonePackingList.spec.js b/src/test/alonePackingList.spec.js index e875eae..8d59fa9 100644 --- a/src/test/alonePackingList.spec.js +++ b/src/test/alonePackingList.spec.js @@ -100,7 +100,7 @@ describe('PATCH /packingList/alone/category', () => { .send({ _id: '62d987a207a7c2aa188b19e8', name: '필수', - listId: '62d9854c24ff58dcf71797e2', + listId: '62d9850207a7c2aa188b1995', }) .expect(200) .expect('Content-Type', /json/) @@ -137,7 +137,7 @@ describe('PATCH /packingList/alone/category', () => { describe('DELETE /packingList/alone/category/:listId/:categoryId', () => { it('혼자 패킹 리스트 카테고리 삭제', (done) => { req(app) - .delete('packingList/alone/category/62d9854c24ff58dcf71797e2/62d987a207a7c2aa188b19e8') + .delete('/packingList/alone/category/62d9850207a7c2aa188b1995/62d987a207a7c2aa188b19e8') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .expect(200) @@ -160,8 +160,8 @@ describe('POST /packingList/alone/pack ', () => { .set('Authorization', process.env.USER_TOKEN) .send({ name: '필수', - categoryId: '62d987a207a7c2aa188b19e8', - listId: '62d9854c24ff58dcf71797e2', + categoryId: '62d9878424ff58dcf7179888', + listId: '62d984fb07a7c2aa188b198a', }) .expect(200) .expect('Content-Type', /json/) @@ -202,11 +202,11 @@ describe('PATCH /packingList/alone/pack', () => { .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - _id: '62bbb80d9d5dc1aa4c3d2839', + _id: '62da8176dd55589bf276316a', name: '보조배터리', isChecked: true, - listId: '62bbb80d9d5dc1aa4c3d2839', - categoryId: '62bbb80d9d5dc1aa4c3d2839', + listId: '62d984fb07a7c2aa188b198a', + categoryId: '62d9878424ff58dcf7179888', }) .expect(200) .expect('Content-Type', /json/) @@ -245,7 +245,7 @@ describe('DELETE /packingList/alone/pack/:listId/:categoryId/:packId', () => { it('혼자 패킹 리스트 짐 삭제', (done) => { req(app) .delete( - '/packingList/alone/pack/62d9854c24ff58dcf71797e2/62d987a207a7c2aa188b19e8/62d997fd5bbce90a6e069590', + '/packingList/alone/pack/62d984fb07a7c2aa188b198a/62d9878424ff58dcf7179888/62da8176dd55589bf276316a', ) .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) @@ -261,10 +261,10 @@ describe('DELETE /packingList/alone/pack/:listId/:categoryId/:packId', () => { }); }); -describe('GET /folder/packingList/alone/62d9842924ff58dcf71797cf', () => { +describe('GET /folder/packingList/alone/:folderId', () => { it('폴더 안 혼자 패킹 리스트들 조회', (done) => { req(app) - .get('/folder/packingList/alone/') + .get('/folder/packingList/alone/62da81b89c720c0c4802fdda') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .expect(200) @@ -282,7 +282,7 @@ describe('GET /folder/packingList/alone/62d9842924ff58dcf71797cf', () => { describe('GET /packingList/alone/:listId', () => { it('혼자 패킹리스트 상세조회 성공', (done) => { req(app) - .get('/packingList/alone/62d9854c24ff58dcf71797e2') + .get('/packingList/alone/62d984fb07a7c2aa188b198a') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .expect(200) @@ -300,7 +300,7 @@ describe('GET /packingList/alone/:listId', () => { describe('DELETE /packingList/alone/:folderId/:listId', () => { it('혼자 패킹리스트 삭제', (done) => { req(app) - .delete('/packingList/alone/62d987a207a7c2aa188b19e8/62d9854c24ff58dcf71797e2') + .delete('/packingList/alone/62da81b89c720c0c4802fdda/62d984fb07a7c2aa188b198a') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .expect(200) diff --git a/src/test/folder.spec.js b/src/test/folder.spec.js index d4feaff..bd277f1 100644 --- a/src/test/folder.spec.js +++ b/src/test/folder.spec.js @@ -106,7 +106,7 @@ describe('PATCH /folder', () => { .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - _id: '62d9842924ff58dcf71797cf', + _id: '62da9957dee24d78fb238e3c', title: '폴더', }) .expect(200) @@ -141,7 +141,7 @@ describe('PATCH /folder', () => { describe('DELETE /folder/:folderId', () => { it('폴더 삭제 성공', (done) => { req(app) - .patch('/folder/:folderId') + .delete('/folder/62da9957dee24d78fb238e3c') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .expect(200) diff --git a/src/test/packingList.spec.js b/src/test/packingList.spec.js index f0e7c5c..b620fee 100644 --- a/src/test/packingList.spec.js +++ b/src/test/packingList.spec.js @@ -12,7 +12,7 @@ describe('POST /packingList/title', () => { .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - _id: '62d984fb07a7c2aa188b198a', + _id: '62d9850207a7c2aa188b1994', title: '제목', isAloned: true, }) @@ -32,7 +32,7 @@ describe('POST /packingList/title', () => { .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - _id: '62d984fb07a7c2aa188b198a', + _id: '62d9850207a7c2aa188b1994', title: '제목', }) .expect(400) @@ -53,7 +53,7 @@ describe('PATCH /packingList/departureDate', () => { .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - _id: '62d984fb07a7c2aa188b198a', + _id: '62d9850207a7c2aa188b1994', departureDate: '2022.07.15', isAlone: true, }) @@ -73,7 +73,7 @@ describe('PATCH /packingList/departureDate', () => { .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - _id: '62d984fb07a7c2aa188b198a', + _id: '62d9850207a7c2aa188b1994', isAlone: true, }) .expect(400) @@ -131,11 +131,11 @@ describe('PATCH /packingList/myTemplate', () => { describe('GET /packingList/invite/:inviteCode', () => { it('함께 패킹리스트 초대 성공', (done) => { req(app) - .patch('/packingList/invite/:inviteCode') + .patch('/packingList/invite/83e2Xd') .set('Content-Type', 'application/json') .set('Authorization', process.env.USER_TOKEN) .send({ - _id: '62d9842924ff58dcf71797cf', + _id: '62d984fb07a7c2aa188b1989', title: '폴더', }) .expect(200) From 201ca868087b509cb13b144a5036892af88edc11 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 00:31:27 +0900 Subject: [PATCH 58/80] =?UTF-8?q?[CHORE]=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=97=86=EC=9D=84=20=EB=95=8C=20204=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 5 +++++ src/modules/responseMessage.ts | 2 +- src/services/FolderService.ts | 8 ++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 6911e2a..97d9b4a 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -308,6 +308,11 @@ const getRecentCreatedList = async (req: Request, res: Response) => { return res .status(statusCode.BAD_REQUEST) .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); + else if (data === '204') { + res + .status(statusCode.NOT_FOUND) + .send(util.success(statusCode.NOT_FOUND, message.NOT_FOUND, data)); + } res .status(statusCode.OK) .send(util.success(statusCode.OK, message.SUCCESS_GET_RECENT_CREATED_LIST, data)); diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 20a422c..d8e9964 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -1,6 +1,6 @@ const message = { NULL_VALUE: '필요한 값이 없습니다.', - NOT_FOUND: '존재하지 않는 자원', + NOT_FOUND: '리스트가 존재하지 않습니다', BAD_REQUEST: '잘못된 요청', INTERNAL_SERVER_ERROR: '서버 내부 오류', INVALID_PARAMS: '유효하지 않은 파라미터 입니다', diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index 549f58e..fbbf8d7 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -249,10 +249,10 @@ const getAloneListInFolders = async ( const getRecentCreatedList = async ( userId: string, -): Promise => { +): Promise => { try { const folders = await Folder.find({ userId: userId }); - if (folders.length === 0) return null; + if (folders.length === 0) return '204'; const list: { _id: mongoose.Types.ObjectId; @@ -287,7 +287,7 @@ const getRecentCreatedList = async ( } } } - if (list.length === 0) return null; + if (list.length === 0) return '204'; list.sort(function (a, b) { if (a.createdAt > b.createdAt) return -1; else return 1; @@ -297,7 +297,7 @@ const getRecentCreatedList = async ( let remainDay; let recentList; - let url = '15.164.165.92:8000/packingList'; + let url = '/packingList'; // alone 폴더에서 추가된 list if (list[0].aloneFolder) { recentList = await AlonePackingList.findById(recentListId); From 201cefed4fa5ff9eae7c057723d0c6a4a3d6a7c9 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 00:35:56 +0900 Subject: [PATCH 59/80] =?UTF-8?q?[CHORE]=20statusCode=20404=EB=A5=BC=20204?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 97d9b4a..32018e2 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -310,8 +310,8 @@ const getRecentCreatedList = async (req: Request, res: Response) => { .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); else if (data === '204') { res - .status(statusCode.NOT_FOUND) - .send(util.success(statusCode.NOT_FOUND, message.NOT_FOUND, data)); + .status(statusCode.NO_CONTENT) + .send(util.success(statusCode.NO_CONTENT, message.NOT_FOUND, data)); } res .status(statusCode.OK) From fa8cf9912b273db37b4f73332d9fdff235033ebd Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 01:58:10 +0900 Subject: [PATCH 60/80] =?UTF-8?q?[FIX]=20=EC=9E=98=EB=AA=BB=EB=90=9C=20rep?= =?UTF-8?q?onseBody=EC=9D=98=20url=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/FolderService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index fbbf8d7..0a8332a 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -297,7 +297,7 @@ const getRecentCreatedList = async ( let remainDay; let recentList; - let url = '/packingList'; + let url = '/packing-list'; // alone 폴더에서 추가된 list if (list[0].aloneFolder) { recentList = await AlonePackingList.findById(recentListId); From 5746fc9c3f17f97e869c5fd9d450fabb68dc31c6 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 02:03:39 +0900 Subject: [PATCH 61/80] =?UTF-8?q?[FIX]=20reponseBody=20url=20=EC=9E=AC?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/FolderService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index 0a8332a..fbbf8d7 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -297,7 +297,7 @@ const getRecentCreatedList = async ( let remainDay; let recentList; - let url = '/packing-list'; + let url = '/packingList'; // alone 폴더에서 추가된 list if (list[0].aloneFolder) { recentList = await AlonePackingList.findById(recentListId); From c173a042dae52610269f26196f1ce48e78e12f84 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 02:07:51 +0900 Subject: [PATCH 62/80] =?UTF-8?q?[FIX]=20responseBody=20url=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/FolderService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index fbbf8d7..da2b198 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -297,7 +297,7 @@ const getRecentCreatedList = async ( let remainDay; let recentList; - let url = '/packingList'; + let url = ''; // alone 폴더에서 추가된 list if (list[0].aloneFolder) { recentList = await AlonePackingList.findById(recentListId); From 93ef55986ac31c1f537c54f5a4225bb845d36622 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Sat, 23 Jul 2022 02:20:50 +0900 Subject: [PATCH 63/80] =?UTF-8?q?[FIX]=20listNum=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/folderResponse.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/folderResponse.ts b/src/modules/folderResponse.ts index dbb41f6..dc4d141 100644 --- a/src/modules/folderResponse.ts +++ b/src/modules/folderResponse.ts @@ -1,14 +1,14 @@ import Folder from '../models/Folder'; async function folderResponse(userId: string) { - const folders = await Folder.find({userId: userId}) .sort({createdAt: -1}) + const folders = await Folder.find({ userId: userId }).sort({ createdAt: -1 }); const aloneFolders: any[] = []; const togetherFolders: any[] = []; await folders.map((folder) => { const data = { _id: folder.id, title: folder.title, - listNum: folder.listNum, + listNum: folder.list.length, }; if (folder.isAloned === true) { aloneFolders.push(data); From 4de52fffbf8d21cc55c666515fbffdabe6c5983c Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 02:34:54 +0900 Subject: [PATCH 64/80] =?UTF-8?q?[FIX]=20Date.now()=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/AlonePackingList.ts | 8 ++++++-- src/models/Category.ts | 4 +++- src/models/Folder.ts | 4 +++- src/models/Pack.ts | 4 +++- src/models/Template.ts | 4 +++- src/models/TogetherPackingList.ts | 4 +++- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/models/AlonePackingList.ts b/src/models/AlonePackingList.ts index 0770346..5966ada 100644 --- a/src/models/AlonePackingList.ts +++ b/src/models/AlonePackingList.ts @@ -39,11 +39,15 @@ const AlonePackingListSchema = new mongoose.Schema( }, createdAt: { type: Date, - default: Date.now(), + default: () => { + return new Date(); + }, }, updatedAt: { type: Date, - default: Date.now(), + default: () => { + return new Date(); + }, }, }, { versionKey: false }, diff --git a/src/models/Category.ts b/src/models/Category.ts index 4e6a8bb..5a83a27 100644 --- a/src/models/Category.ts +++ b/src/models/Category.ts @@ -15,7 +15,9 @@ const CategorySchema = new mongoose.Schema( ], createdAt: { type: Date, - default: Date.now(), + default: () => { + return new Date(); + }, }, }, { versionKey: false }, diff --git a/src/models/Folder.ts b/src/models/Folder.ts index bdcaf60..ecef21d 100644 --- a/src/models/Folder.ts +++ b/src/models/Folder.ts @@ -33,7 +33,9 @@ const FolderSchema = new mongoose.Schema( }, createdAt: { type: Date, - default: Date.now(), + default: () => { + return new Date(); + }, }, }, { versionKey: false }, diff --git a/src/models/Pack.ts b/src/models/Pack.ts index ad0151e..f243d56 100644 --- a/src/models/Pack.ts +++ b/src/models/Pack.ts @@ -18,7 +18,9 @@ const PackSchema = new mongoose.Schema( }, createdAt: { type: Date, - default: Date.now(), + default: () => { + return new Date(); + }, }, }, { versionKey: false }, diff --git a/src/models/Template.ts b/src/models/Template.ts index e034990..5731be4 100644 --- a/src/models/Template.ts +++ b/src/models/Template.ts @@ -23,7 +23,9 @@ const TemplateSchema = new mongoose.Schema( }, createdAt: { type: Date, - default: Date.now(), + default: () => { + return new Date(); + }, }, }, { versionKey: false }, diff --git a/src/models/TogetherPackingList.ts b/src/models/TogetherPackingList.ts index 41fc91d..378b813 100644 --- a/src/models/TogetherPackingList.ts +++ b/src/models/TogetherPackingList.ts @@ -48,7 +48,9 @@ const TogetherPackingListSchema = new mongoose.Schema( }, createdAt: { type: Date, - default: Date.now(), + default: () => { + return new Date(); + }, }, updatedAt: { type: Date, From 8ecaa68e7d756a398b94714e1df5e5b9266ec75a Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 04:51:35 +0900 Subject: [PATCH 65/80] =?UTF-8?q?[FIX]=20=ED=8F=B4=EB=8D=94=20=EC=95=88=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=97=86=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?=EC=97=90=EB=9F=AC=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 6 +++--- src/modules/responseMessage.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 32018e2..0eca537 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -309,9 +309,9 @@ const getRecentCreatedList = async (req: Request, res: Response) => { .status(statusCode.BAD_REQUEST) .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); else if (data === '204') { - res - .status(statusCode.NO_CONTENT) - .send(util.success(statusCode.NO_CONTENT, message.NOT_FOUND, data)); + return res + .status(statusCode.BAD_REQUEST) + .send(util.success(statusCode.NO_CONTENT, message.NO_PACKINGLIST, {})); } res .status(statusCode.OK) diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index d8e9964..20a422c 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -1,6 +1,6 @@ const message = { NULL_VALUE: '필요한 값이 없습니다.', - NOT_FOUND: '리스트가 존재하지 않습니다', + NOT_FOUND: '존재하지 않는 자원', BAD_REQUEST: '잘못된 요청', INTERNAL_SERVER_ERROR: '서버 내부 오류', INVALID_PARAMS: '유효하지 않은 파라미터 입니다', From 6cbea2e2b5337b29c0d92322eab905c4f763d2ff Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 07:11:55 +0900 Subject: [PATCH 66/80] =?UTF-8?q?[FIX]=20cors=EC=97=90=EB=9F=AC=20url=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 21bc387..8f425b7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,7 +13,7 @@ connectDB(); app.use( cors({ credentials: true, - origin: ['http://localhost:3000', config.baseUrl], + origin: ['https://packman.kr', config.baseUrl], }), ); From ddc74b006428d5ed49727c2268710fc0cb094f2e Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 07:35:15 +0900 Subject: [PATCH 67/80] =?UTF-8?q?[FIX]=20cors=20url=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 8f425b7..21bc387 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,7 +13,7 @@ connectDB(); app.use( cors({ credentials: true, - origin: ['https://packman.kr', config.baseUrl], + origin: ['http://localhost:3000', config.baseUrl], }), ); From 29593310ab80a50a9f8de496bf8d6c1085fdb2a4 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 08:02:57 +0900 Subject: [PATCH 68/80] =?UTF-8?q?[CHORE]=20=20statucCode=20204=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/FolderController.ts | 2 +- src/services/FolderService.ts | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/controllers/FolderController.ts b/src/controllers/FolderController.ts index 0eca537..7dea0f7 100644 --- a/src/controllers/FolderController.ts +++ b/src/controllers/FolderController.ts @@ -310,7 +310,7 @@ const getRecentCreatedList = async (req: Request, res: Response) => { .send(util.fail(statusCode.BAD_REQUEST, message.NO_DATA)); else if (data === '204') { return res - .status(statusCode.BAD_REQUEST) + .status(statusCode.NO_CONTENT) .send(util.success(statusCode.NO_CONTENT, message.NO_PACKINGLIST, {})); } res diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index da2b198..36f836e 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -12,7 +12,6 @@ import mongoose from 'mongoose'; import { TogetherListInFolderResponseDto } from '../interface/ITogetherPackingList'; import { AloneListInFolderResponseDto } from '../interface/IAlonePackingList'; import { RecentCreatedPackingListDto } from '../interface/IPackingList'; -import dayjs from 'dayjs'; const createFolder = async ( userId: string, @@ -292,9 +291,7 @@ const getRecentCreatedList = async ( if (a.createdAt > b.createdAt) return -1; else return 1; }); - const recentListId = list[0]._id; - let remainDay; let recentList; let url = ''; From fa58c349cc7d3984b0065f45e16f2f410b599f4b Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Sat, 23 Jul 2022 08:05:10 +0900 Subject: [PATCH 69/80] =?UTF-8?q?[CHORE]=20=EC=82=AD=EC=A0=9C=ED=95=9C=20d?= =?UTF-8?q?ayjs=20=EB=B3=B5=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/FolderService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/FolderService.ts b/src/services/FolderService.ts index 36f836e..1643ae4 100644 --- a/src/services/FolderService.ts +++ b/src/services/FolderService.ts @@ -12,6 +12,7 @@ import mongoose from 'mongoose'; import { TogetherListInFolderResponseDto } from '../interface/ITogetherPackingList'; import { AloneListInFolderResponseDto } from '../interface/IAlonePackingList'; import { RecentCreatedPackingListDto } from '../interface/IPackingList'; +import dayjs from 'dayjs'; const createFolder = async ( userId: string, From 40c43e61b0bffab33778d3e49a8917bb970a5141 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 29 Jul 2022 14:44:58 +0900 Subject: [PATCH 70/80] =?UTF-8?q?[FIX]=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20cors=20=EC=97=90=EB=9F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index 682aad3..d8ec09a 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -9,6 +9,7 @@ const getGoogleUser = async (googleToken: string): Promise Date: Fri, 29 Jul 2022 14:57:32 +0900 Subject: [PATCH 71/80] =?UTF-8?q?[FIX]=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20CORS=20=EC=97=90=EB=9F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index d8ec09a..d3d3603 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -51,6 +51,7 @@ const getKakaoUser = async (kakaoToken: string): Promise Date: Fri, 29 Jul 2022 15:24:56 +0900 Subject: [PATCH 72/80] =?UTF-8?q?[DELETE]=20=EB=B3=B4=EC=95=88=20=EC=83=81?= =?UTF-8?q?=EC=9D=98=20=EC=9D=B4=EC=9C=A0=EB=A1=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/AuthService.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/services/AuthService.ts b/src/services/AuthService.ts index d3d3603..682aad3 100644 --- a/src/services/AuthService.ts +++ b/src/services/AuthService.ts @@ -9,7 +9,6 @@ const getGoogleUser = async (googleToken: string): Promise Date: Fri, 29 Jul 2022 16:20:38 +0900 Subject: [PATCH 73/80] =?UTF-8?q?[FIX]=20CORS=20origin=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 21bc387..ba66290 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,7 +13,7 @@ connectDB(); app.use( cors({ credentials: true, - origin: ['http://localhost:3000', config.baseUrl], + origin: ['http://localhost:3000', 'https://api.packman.kr', config.baseUrl], }), ); From 891dfc83f9998bf8a9fe17e68e78c430b076adf1 Mon Sep 17 00:00:00 2001 From: kkl4846 Date: Fri, 29 Jul 2022 16:40:11 +0900 Subject: [PATCH 74/80] =?UTF-8?q?[FIX]=20cors=EC=97=90=20packman.kr=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index ba66290..9ab62c6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,7 +13,12 @@ connectDB(); app.use( cors({ credentials: true, - origin: ['http://localhost:3000', 'https://api.packman.kr', config.baseUrl], + origin: [ + 'http://localhost:3000', + 'https://api.packman.kr', + 'https://packman.kr', + config.baseUrl, + ], }), ); From 77e7e99e2146c51a4493c96d0927c4e00b948992 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 3 Aug 2022 00:54:58 +0900 Subject: [PATCH 75/80] =?UTF-8?q?[FIX]=20cors=20url=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9ab62c6..632cfbf 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,12 +13,7 @@ connectDB(); app.use( cors({ credentials: true, - origin: [ - 'http://localhost:3000', - 'https://api.packman.kr', - 'https://packman.kr', - config.baseUrl, - ], + origin: ['http://localhost:3000', 'https://www.packman.kr', config.baseUrl], }), ); From a75fea79c831a094574184160d06348ed0db4242 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Mon, 8 Aug 2022 18:40:38 +0900 Subject: [PATCH 76/80] =?UTF-8?q?[CHORE]=20cors=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 632cfbf..654a1be 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,10 +10,15 @@ dotenv.config(); connectDB(); +// app.use( +// cors({ +// credentials: true, +// origin: ['http://localhost:3000', 'https://www.packman.kr', config.baseUrl], +// }), +// ); app.use( cors({ - credentials: true, - origin: ['http://localhost:3000', 'https://www.packman.kr', config.baseUrl], + origin: '*', }), ); From 13ae5b920e3e28055bfd8de8114a4002635a130f Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Mon, 8 Aug 2022 19:16:15 +0900 Subject: [PATCH 77/80] =?UTF-8?q?[FIX]=20cors=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/index.ts b/src/index.ts index 654a1be..68697ac 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,11 +16,7 @@ connectDB(); // origin: ['http://localhost:3000', 'https://www.packman.kr', config.baseUrl], // }), // ); -app.use( - cors({ - origin: '*', - }), -); +app.use(cors()); app.use(express.urlencoded({ extended: true })); app.use(express.json()); From adf2919e26ef119a8ef529ac29af28d0e67ddfd4 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Mon, 8 Aug 2022 19:41:08 +0900 Subject: [PATCH 78/80] =?UTF-8?q?[FIX]=20cors=20=EB=AA=A8=EB=93=A0=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 68697ac..f4b814d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,7 +16,12 @@ connectDB(); // origin: ['http://localhost:3000', 'https://www.packman.kr', config.baseUrl], // }), // ); -app.use(cors()); +app.use( + cors({ + credentials: true, + origin: true, + }), +); app.use(express.urlencoded({ extended: true })); app.use(express.json()); From 0ee392719c4f99af6b0fd74bd3913f4f67148399 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 10 Aug 2022 13:14:48 +0900 Subject: [PATCH 79/80] =?UTF-8?q?[CHORE]=20=ED=86=A0=ED=81=B0=20=EB=A7=8C?= =?UTF-8?q?=EB=A3=8C=20=EC=8B=9C=EA=B0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/jwtHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/jwtHandler.ts b/src/modules/jwtHandler.ts index f72dc1b..2d234be 100644 --- a/src/modules/jwtHandler.ts +++ b/src/modules/jwtHandler.ts @@ -10,7 +10,7 @@ const getToken = (userId: mongoose.Schema.Types.ObjectId): string => { }, }; - const accessToken: string = jwt.sign(payload, '' + config.jwtSecret, { expiresIn: '10d' }); + const accessToken: string = jwt.sign(payload, '' + config.jwtSecret, { expiresIn: '10000' }); return accessToken; }; From b3fa5d2a2a41a532c631ec864a4c4718faeb1c24 Mon Sep 17 00:00:00 2001 From: dingding-21 Date: Wed, 10 Aug 2022 13:45:30 +0900 Subject: [PATCH 80/80] =?UTF-8?q?[CHORE]=20=ED=86=A0=ED=81=B0=20=EB=A7=8C?= =?UTF-8?q?=EB=A3=8C=20=EC=8B=9C=EA=B0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/jwtHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/jwtHandler.ts b/src/modules/jwtHandler.ts index 2d234be..467a5bc 100644 --- a/src/modules/jwtHandler.ts +++ b/src/modules/jwtHandler.ts @@ -10,7 +10,7 @@ const getToken = (userId: mongoose.Schema.Types.ObjectId): string => { }, }; - const accessToken: string = jwt.sign(payload, '' + config.jwtSecret, { expiresIn: '10000' }); + const accessToken: string = jwt.sign(payload, '' + config.jwtSecret, { expiresIn: '20d' }); return accessToken; };