From 5d58bd958183a6e8b7742cc9ef56e6b9119faf01 Mon Sep 17 00:00:00 2001 From: Jason Park <93040528+JasonNotJson@users.noreply.github.com> Date: Tue, 12 Sep 2023 02:48:54 +0900 Subject: [PATCH] feat: major merge into main from develop (#314) * chore(deps): update dependency eslint to v8.9.0 (#141) Co-authored-by: Renovate Bot * chore(deps): update amannn/action-semantic-pull-request action to v4.2.0 (#140) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.70 (#138) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.71 (#145) Co-authored-by: Renovate Bot * chore(deps): update pnpm/action-setup action to v2.2.0 (#142) Co-authored-by: Renovate Bot * feat: lambda for put-timetable (#144) * feat: lambda for put-timetable * deleted newline for put-timetable. * changed file name for consistency * chore(deps): update actions/setup-node action to v3 (#148) Co-authored-by: Renovate Bot * chore(deps): update pnpm/action-setup action to v2.2.1 (#147) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.72 (#146) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.12.1 (#143) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.14.0 (#133) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.74 (#150) Co-authored-by: Renovate Bot * chore(deps): update dependency eslint to v8.10.0 (#149) Co-authored-by: Renovate Bot * chore(deps): update dependency typescript to v4.6.2 (#153) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.15.0 (#154) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.75 (#152) Co-authored-by: Renovate Bot * chore(deps): update dependency ts-node to v10.6.0 (#155) Co-authored-by: Renovate Bot * chore(deps): update actions/checkout action to v3 (#156) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.13.0 (#151) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.76 (#157) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.77 (#158) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.79 (#159) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.14.0 (#162) Co-authored-by: Renovate Bot * chore(deps): update dependency ts-node to v10.7.0 (#161) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.81 (#160) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.82 (#163) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.83 (#164) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.16.0 (#168) Co-authored-by: Renovate Bot * chore(deps): update endbug/add-and-commit action to v9 (#167) Co-authored-by: Renovate Bot * chore(deps): update dependency @commitlint/cli to v16.2.3 (#170) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.15.0 (#169) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.90 (#165) Co-authored-by: Renovate Bot * chore(deps): update peter-evans/find-comment action to v2 (#175) Co-authored-by: Renovate Bot * chore(deps): update peter-evans/create-or-update-comment action to v2 (#174) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.17.0 (#171) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.92 (#172) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.16.0 (#173) Co-authored-by: Renovate Bot * chore(deps): update dependency eslint-import-resolver-typescript to v2.7.0 (#176) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.19.0 (#183) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.17.0 (#182) Co-authored-by: Renovate Bot * feat: api for put-timetable lambda. (#179) * feat: api for put-timetable lambda. * feat: fixed syntax errors * feat: fixed syntax error (2) * chore(deps): update dependencies * chore: add lint-staged * chore(deps): update codecov/codecov-action action to v3 (#186) Co-authored-by: Renovate Bot * chore(deps): update amannn/action-semantic-pull-request action to v4.3.0 (#189) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.22.0 * chore(deps): update github/codeql-action action to v2 (#192) Co-authored-by: Renovate Bot * chore(deps): update amannn/action-semantic-pull-request action to v4.4.0 (#190) Co-authored-by: Renovate Bot * chore(deps): update dependencies * chore(deps): update amannn/action-semantic-pull-request action to v4.5.0 * chore(deps): update dependency husky to v8 * chore(deps): update dependency @commitlint/cli to v16.3.0 * chore(deps): update dependency standard-version to v9.5.0 * chore(deps): update aws-cdk monorepo to v2.27.0 * chore(deps): update dependency ts-jest to v28.0.4 * chore(deps): update dependency eslint to v8.17.0 * chore(deps): update dependency ts-node to v10.8.1 * chore(deps): update typescript-eslint monorepo to v5.27.1 * chore(deps): update jest monorepo * chore(deps): update dependency constructs to v10.1.32 * chore(deps): update dependencies * chore(deps): update pnpm/action-setup action to v2.2.2 * chore(deps): update dependency typescript to v4.7.3 * chore(deps): update dependencies * f:added Put method into default Headers for new api function put-timetable (#216) * feat: updated pnpm-lock file to latest * feat: uploading updated package file * feat: updating package-lock file * fix: modified jest config file * fix: update jest config * fix: configured rest api settings (#221) * fix: config rest api * fix: update jest config * fix: jest types * fix: update pnpm lock * fix: deleted package-lock * feat: creating only database and not API (#225) * f:added Put method into default Headers for new api function put-timetable * feat: adding table and api * feat: for backup * feat: updated pnpm-lock * feat: initiating database creation * feat: redoing databases * feat: building database thread * fix: fix git branch merging error (#226) * fix: fix git branch merging error * fix: fixing minor issues * fix: hotfix * fix: fixing db * fix(deps): update dependency flatted to v3.2.7 (#215) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update jest monorepo (#210) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency husky to v8.0.2 (#227) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * feat: renamed forum database and fixed multiple api (#230) * feat: updated api get schema and renamed database * fix: fix lambda function * fix: fixed lambda get single thread and others * fix: changed already existing db role name (#231) * feat: updated api get schema and renamed database * fix: fix lambda function * fix: fixed lambda get single thread and others * fix: fix already existing db role * feat: editing forum restapi resources and added multiple CRUD lambda functions (#232) * feat: altered api resources Trying to resolve multiple trigger issue in one lambda function * feat: added lambdas delete patch and post fixed minor issues in other lambdas * fix: erased unused library * chore(deps): update dependency constructs to v10.1.205 (#206) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency ts-jest to v28.0.8 (#208) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency ts-node to v10.9.1 (#234) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency constructs to v10.1.206 (#235) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency esbuild to ^0.16.0 (#233) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency eslint-import-resolver-typescript to v3 (#214) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update commitlint monorepo to v17.3.0 (#213) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update jest monorepo to v29 (#239) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * feat: adding forum comment features (#240) * feat: initiating forum comments function * feat: added api gateway schemas for forum comment GET POST and PATCH * feat: added Forum Comment Api Service * feat: added GET POST PATCH DELETE lambda functions for forum comments * feat: finishing fourm comment lambda functions Now capable of conducting simple curd operations * fix: fix forum comment patch * fix: re-configuring options resource for forum threads * fix: renaming api resource * fix: issue with post forum thread fixing issue (#242) * fix: mistaken sortkey type * fix: trying to solve a problem * fix: changing db (#243) * fix: solving database issue * fix: still fixing issues * fix: reverting error (#244) * fix: fixing big time reverting whole thread feature * fix: trying my best to fix * fix: continuing fix * fix: continuing * fix: deleting lambda (#245) * feat: reverting * feat: idontknowwhatshappeningnow * feat: fixing mistakes * feat: retrieving db and api * chore(deps): update dependency constructs to v10.1.210 (#241) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: fixing cross stack referencing (#247) * fix: fixing cross stack referencing * fix: fixing export value * chore(deps): update dependency husky to v8.0.3 (#246) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: updating dependencies and syllabus structure (#249) * fix: configuring-rest-api (#219) * chore(deps): update dependency eslint to v8.9.0 (#141) Co-authored-by: Renovate Bot * chore(deps): update amannn/action-semantic-pull-request action to v4.2.0 (#140) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.70 (#138) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.71 (#145) Co-authored-by: Renovate Bot * chore(deps): update pnpm/action-setup action to v2.2.0 (#142) Co-authored-by: Renovate Bot * feat: lambda for put-timetable (#144) * feat: lambda for put-timetable * deleted newline for put-timetable. * changed file name for consistency * chore(deps): update actions/setup-node action to v3 (#148) Co-authored-by: Renovate Bot * chore(deps): update pnpm/action-setup action to v2.2.1 (#147) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.72 (#146) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.12.1 (#143) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.14.0 (#133) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.74 (#150) Co-authored-by: Renovate Bot * chore(deps): update dependency eslint to v8.10.0 (#149) Co-authored-by: Renovate Bot * chore(deps): update dependency typescript to v4.6.2 (#153) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.15.0 (#154) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.75 (#152) Co-authored-by: Renovate Bot * chore(deps): update dependency ts-node to v10.6.0 (#155) Co-authored-by: Renovate Bot * chore(deps): update actions/checkout action to v3 (#156) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.13.0 (#151) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.76 (#157) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.77 (#158) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.79 (#159) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.14.0 (#162) Co-authored-by: Renovate Bot * chore(deps): update dependency ts-node to v10.7.0 (#161) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.81 (#160) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.82 (#163) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.83 (#164) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.16.0 (#168) Co-authored-by: Renovate Bot * chore(deps): update endbug/add-and-commit action to v9 (#167) Co-authored-by: Renovate Bot * chore(deps): update dependency @commitlint/cli to v16.2.3 (#170) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.15.0 (#169) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.90 (#165) Co-authored-by: Renovate Bot * chore(deps): update peter-evans/find-comment action to v2 (#175) Co-authored-by: Renovate Bot * chore(deps): update peter-evans/create-or-update-comment action to v2 (#174) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.17.0 (#171) Co-authored-by: Renovate Bot * chore(deps): update dependency constructs to v10.0.92 (#172) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.16.0 (#173) Co-authored-by: Renovate Bot * chore(deps): update dependency eslint-import-resolver-typescript to v2.7.0 (#176) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.19.0 (#183) Co-authored-by: Renovate Bot * chore(deps): update typescript-eslint monorepo to v5.17.0 (#182) Co-authored-by: Renovate Bot * feat: api for put-timetable lambda. (#179) * feat: api for put-timetable lambda. * feat: fixed syntax errors * feat: fixed syntax error (2) * chore(deps): update dependencies * chore: add lint-staged * chore(deps): update codecov/codecov-action action to v3 (#186) Co-authored-by: Renovate Bot * chore(deps): update amannn/action-semantic-pull-request action to v4.3.0 (#189) Co-authored-by: Renovate Bot * chore(deps): update aws-cdk monorepo to v2.22.0 * chore(deps): update github/codeql-action action to v2 (#192) Co-authored-by: Renovate Bot * chore(deps): update amannn/action-semantic-pull-request action to v4.4.0 (#190) Co-authored-by: Renovate Bot * chore(deps): update dependencies * chore(deps): update amannn/action-semantic-pull-request action to v4.5.0 * chore(deps): update dependency husky to v8 * chore(deps): update dependency @commitlint/cli to v16.3.0 * chore(deps): update dependency standard-version to v9.5.0 * chore(deps): update aws-cdk monorepo to v2.27.0 * chore(deps): update dependency ts-jest to v28.0.4 * chore(deps): update dependency eslint to v8.17.0 * chore(deps): update dependency ts-node to v10.8.1 * chore(deps): update typescript-eslint monorepo to v5.27.1 * chore(deps): update jest monorepo * chore(deps): update dependency constructs to v10.1.32 * chore(deps): update dependencies * chore(deps): update pnpm/action-setup action to v2.2.2 * chore(deps): update dependency typescript to v4.7.3 * chore(deps): update dependencies * f:added Put method into default Headers for new api function put-timetable (#216) * feat: updated pnpm-lock file to latest * feat: uploading updated package file * feat: updating package-lock file * fix: modified jest config file * fix: update jest config * fix: config rest api * fix: update jest config * fix: jest types * fix: update pnpm lock * fix: deleted package-lock Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot Co-authored-by: AustinZhu * Revert "fix: configuring-rest-api (#219)" (#220) This reverts commit 665e25264cbd9245457022b5a6195fe70dc5629b. * fix: chaning syllabus constants * fix: fixing actions * fix: adding pnpm command * fix: reverting changes to original form --------- Co-authored-by: Jason Park <93040528+Autogod@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot Co-authored-by: AustinZhu * chore(deps): update dependency constructs to v10.1.279 (#250) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: establishing table (#252) * fix: minor changes (#253) * fix: renaming table (#254) * fix: renaming table * fix: might be an empty commit * fix: exporting table arn (#255) * fix: resolving already existing identifier (#256) * fix: rereferencing export (#258) * fix: removed conflicting service * fix: removing exporting value * fix: re connecting thread service * fix: adding lsi to table exporting arn with tablename (#259) * fix: deleting thread table (#260) * fix: recreating thread table with proper lsi (#261) * fix: recreating lambdas for forum threads (#262) * chore(deps): update typescript-eslint monorepo to v5.55.0 (#207) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency @types/node to v18 (#237) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update aws-cdk monorepo (#209) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: api service added (#266) * chore(deps): update dependency typescript to v4.9.5 (#211) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency eslint to v8.36.0 (#212) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update commitlint monorepo to v17.4.4 (#267) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: fixing error for get thread (#271) * feat: adding amplify micro app forum (#272) * feat: adding amplify app forums * fix: deleting added micro app * feat: readding amplify app forum * chore(deps): update dependency esbuild to ^0.17.0 (#269) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: updating outdated pnpm lock file (#274) * fix: reinstalling pnpm lock file to solve outdate issue * fix: reinstalling pnpm and then reinstalling pnpm lock file * chore(deps): update dependency constructs to v10.1.305 (#263) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency @commitlint/cli to v17.5.1 (#275) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency constructs to v10.1.309 (#276) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency aws-cdk-lib to v2.74.0 (#277) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency constructs to v10.1.311 (#278) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update commitlint monorepo to v17.6.1 (#279) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency eslint to v8.38.0 (#280) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update jest monorepo to v29.5.0 (#281) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency constructs to v10.1.312 (#282) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update dependency @types/node to v18.15.12 (#273) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: adding response handler (#285) * fix: fixing multiple lambda functions (#286) * fix: fixing redundant data requirements described in the schema (#287) * fix: fixing multiple lambda functions * fix: fixing api schema * fix: fixed schema and some lambdas (#288) * fix: scraper and period location (#289) * feat: adding new case for scrapper for instance multiple periods and multiple locations * feat: adding case of multiple locations and periods devided with a slash * feat: updated get single thread lambda role to all access to db (#290) * feat: enabling multi-line evaluation criteria scraping (#291) * feat: adding regex to scrape multiple eval criterias * feat: enabling multiple line of criteria * chore(deps): update dependency @types/jest to v29.5.1 (#284) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update typescript-eslint monorepo to v5.59.6 (#283) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: applying hotfix changes to branch develop * feat: adding case 3 for merging period and location for exceptions (#295) * chore(deps): update pnpm/action-setup action to v2.2.4 (#228) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chores: simple update * fix: refactoring forum table keys (#298) * fix: refactoring forum table keys * fix: first deleting the table * feat: exporting table arn * feat: destroying table forum (#299) * feat: destroying table forum * feat: exporting table name and arn to disconnect api service * feat: continue destorying the forum table (#300) * feat: continue destorying the forum table * feat: disconnecting endpoint and stop exporting table arn * feat: finishing refactoring forum functionaility (#301) * feat: changing parameters for uid (#302) * feat: changing parameters for uid * fix: fixing conditional statements * feat: adding default value * feat: github why are you doing this stop this please * fix: small changes * fix: fix get-course (#303) * feat: fixing cron * fix: fix get eval criteria (#306) * fix-get-eval-criteria * fix: fix get-eval-criteria * fix: fixing pnpm version to 6 (#309) * feat: adding oauth for flutter app (#310) * feat: adding oauth for flutter app * fix: fixing typo * fix: hotfix for conditional (#311) * fix: fixing the fucking delete and patch * feat: i might have solved the fucking issue * feat: add mod flag (#312) * feat: adding mod flag to get all threads lambda * feat: adding mod flag to board threads * fix: multiple lambdas related forums (#313) * fix: update node version * feat: fixing get functionality * fix: getting rid of default values * fix: final fix please * fix: taking out int * fix: lets make it work * feat: adding school filtering * fix: adding contigency * fix: fixing bool * fix: fixing bull for starting index * feat: adding some loggings * fix: fixing indexing * chore: adding logging for debug * feat: adding end index to message response * fix: fixing schema to array * feat: adding tags filtering to lambda * feat: adding filitering and pagination functionality to board thread api * fix: fixing small typos * feat: contacting two lambdas to one * feat: fixing * fix: adding default * feat: adding loggings for debugging * feat: fixing sorting logic * feat: refactoring sorting method * feat: adding builtin dynamo pagination * feat: reverting changes back to original built in pagination requires more examination * feat: returning the created thread item for smooth UX * feat: popping uid for secruity measures * feat: adding thread comment to retunred data without uid exposure * feat: adding mod flag * feat: adding backend functionality for like * feat: passing thread id back to client * fix: fixing like logic * fix: fixing logic for likes * fix: refixing the fucking likes feature * feat: major update into main from develop --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot Co-authored-by: Jason Park <93040528+Autogod@users.noreply.github.com> Co-authored-by: AustinZhu Co-authored-by: Y.H LIEN <85728908+LIEN-YUHSIANG@users.noreply.github.com> --- .github/actions/install-deps/action.yml | 4 +- .gitignore | 3 + lib/configs/api-gateway/schema.ts | 41 +- lib/configs/cognito/oauth.ts | 19 +- lib/configs/event/schedule.ts | 4 +- lib/constructs/business/authentication.ts | 53 +- lib/constructs/business/rest-api-service.ts | 6 - lib/constructs/common/lambda-functions.ts | 2 +- lib/constructs/persistence/database.ts | 2 +- lib/stacks/persistence.ts | 5 + lib/stacks/presentation.ts | 1 + package.json | 26 +- pnpm-lock.yaml | 1372 ++++++++++--------- src/lambda/delete-thread/index.py | 8 +- src/lambda/get-all-threads/index.py | 53 +- src/lambda/get-board-threads/index.py | 47 +- src/lambda/get-comments/index.py | 2 +- src/lambda/get-course/const.py | 11 +- src/lambda/get-course/utils.py | 11 +- src/lambda/get-single-thread/index.py | 27 +- src/lambda/patch-comment/index.py | 4 +- src/lambda/patch-thread/index.py | 88 +- src/lambda/post-comment/index.py | 9 +- src/lambda/post-comment/utils.py | 18 + src/lambda/post-thread/index.py | 9 +- src/lambda/post-thread/utils.py | 7 +- src/lambda/syllabus-scraper/const.py | 8 +- src/lambda/syllabus-scraper/crawler.py | 11 +- src/lambda/syllabus-scraper/utils.py | 37 +- 29 files changed, 1091 insertions(+), 797 deletions(-) diff --git a/.github/actions/install-deps/action.yml b/.github/actions/install-deps/action.yml index be65095c1..1df936073 100644 --- a/.github/actions/install-deps/action.yml +++ b/.github/actions/install-deps/action.yml @@ -3,13 +3,13 @@ description: "Workflow for installing dependencies" runs: using: "composite" steps: - - uses: pnpm/action-setup@v2.2.2 + - uses: pnpm/action-setup@v2.2.4 with: version: latest - name: Use Node.js uses: actions/setup-node@v3 with: - node-version: 16.x + node-version: 18.x cache: "pnpm" - name: Setup CDK shell: bash diff --git a/.gitignore b/.gitignore index ba43fe921..52fe5f381 100644 --- a/.gitignore +++ b/.gitignore @@ -97,3 +97,6 @@ node_modules # CDK asset staging directory .cdk.staging cdk.out + +#vscode settings +.vscode/ \ No newline at end of file diff --git a/lib/configs/api-gateway/schema.ts b/lib/configs/api-gateway/schema.ts index d5e39a3f8..051b861ca 100644 --- a/lib/configs/api-gateway/schema.ts +++ b/lib/configs/api-gateway/schema.ts @@ -402,7 +402,7 @@ export const forumThreadGetRespSchema: apigw.JsonSchema = { type: apigw.JsonSchemaType.STRING, }, tag_id: { - type: apigw.JsonSchemaType.STRING, + type: apigw.JsonSchemaType.ARRAY, }, group_id: { type: apigw.JsonSchemaType.STRING, @@ -422,6 +422,12 @@ export const forumThreadGetRespSchema: apigw.JsonSchema = { mod: { type: apigw.JsonSchemaType.BOOLEAN, }, + userLiked: { + type: apigw.JsonSchemaType.BOOLEAN, + }, + totalLikes: { + type: apigw.JsonSchemaType.INTEGER, + }, }, required: [ 'univ_id', @@ -435,6 +441,8 @@ export const forumThreadGetRespSchema: apigw.JsonSchema = { 'body', 'views', 'mod', + 'userLiked', + 'totalLikes', ], }, }, @@ -452,12 +460,6 @@ export const forumThreadPostReqSchema: apigw.JsonSchema = { data: { type: apigw.JsonSchemaType.OBJECT, properties: { - univ_id: { - type: apigw.JsonSchemaType.INTEGER, - }, - board_id: { - type: apigw.JsonSchemaType.STRING, - }, tag_id: { type: apigw.JsonSchemaType.STRING, }, @@ -471,7 +473,7 @@ export const forumThreadPostReqSchema: apigw.JsonSchema = { type: apigw.JsonSchemaType.STRING, }, }, - required: ['univ_id', 'board_id', 'tag_id', 'group_id', 'title', 'body'], + required: ['tag_id', 'group_id', 'title', 'body'], }, }, required: ['data'], @@ -484,13 +486,10 @@ export const forumThreadPatchReqSchema: apigw.JsonSchema = { data: { type: apigw.JsonSchemaType.OBJECT, properties: { - board_id: { - type: apigw.JsonSchemaType.STRING, - }, tag_id: { type: apigw.JsonSchemaType.STRING, }, - thread_id: { + group_id: { type: apigw.JsonSchemaType.STRING, }, title: { @@ -500,10 +499,14 @@ export const forumThreadPatchReqSchema: apigw.JsonSchema = { type: apigw.JsonSchemaType.STRING, }, }, - required: ['board_id', 'tag_id', 'thread_id', 'title', 'body'], + required: ['tag_id', 'group_id', 'title', 'body'], + }, + action: { + type: apigw.JsonSchemaType.STRING, + enum: ['update', 'like', 'dislike'], }, }, - required: ['data'], + required: ['data', 'action'], }; export const forumCommentGetRespSchema: apigw.JsonSchema = { @@ -545,14 +548,11 @@ export const forumCommentPostReqSchema: apigw.JsonSchema = { data: { type: apigw.JsonSchemaType.OBJECT, properties: { - thread_id: { - type: apigw.JsonSchemaType.STRING, - }, body: { type: apigw.JsonSchemaType.STRING, }, }, - required: ['thread_id', 'body'], + required: ['body'], }, }, required: ['data'], @@ -565,14 +565,11 @@ export const forumCommentPatchReqSchema: apigw.JsonSchema = { data: { type: apigw.JsonSchemaType.OBJECT, properties: { - thread_id: { - type: apigw.JsonSchemaType.STRING, - }, body: { type: apigw.JsonSchemaType.STRING, }, }, - required: ['thread_id', 'body'], + required: ['body'], }, }, required: ['data'], diff --git a/lib/configs/cognito/oauth.ts b/lib/configs/cognito/oauth.ts index 01aed4dd4..2ce831d84 100644 --- a/lib/configs/cognito/oauth.ts +++ b/lib/configs/cognito/oauth.ts @@ -1,7 +1,20 @@ export const GOOGLE_OAUTH_CLIENT_ID = process.env.GOOGLE_OAUTH_CLIENT_ID!; -export const GOOGLE_OAUTH_CLIENT_SECRET = process.env.GOOGLE_OAUTH_CLIENT_SECRET!; +export const GOOGLE_OAUTH_CLIENT_SECRET = + process.env.GOOGLE_OAUTH_CLIENT_SECRET!; -export const CALLBACK_URLS = ['https://wasedatime.com/verify', 'https://dev.wasedatime.com/verify', 'localhost:3000/verify']; +export const CALLBACK_URLS = [ + 'https://wasedatime.com/verify', + 'https://dev.wasedatime.com/verify', + 'localhost:3000/verify', +]; -export const LOGOUT_URLS = ['https://wasedatime.com/', 'https://dev.wasedatime.com/', 'localhost:3000/']; +export const LOGOUT_URLS = [ + 'https://wasedatime.com/', + 'https://dev.wasedatime.com/', + 'localhost:3000/', +]; + +export const FLUTTER_CALLBACK_URL = ['wasedatime://verify']; + +export const FLUTTER_LOGOUT_URL = ['wasedatime://']; diff --git a/lib/configs/event/schedule.ts b/lib/configs/event/schedule.ts index 58ac75882..0efbf2794 100644 --- a/lib/configs/event/schedule.ts +++ b/lib/configs/event/schedule.ts @@ -4,7 +4,7 @@ export const syllabusSchedule: { [name: string]: events.Schedule } = { 'regular': events.Schedule.cron({ minute: '0', hour: '16', - day: '1,2', + day: '1', month: '*', year: '*', }), @@ -18,7 +18,7 @@ export const syllabusSchedule: { [name: string]: events.Schedule } = { 'fall-reg1': events.Schedule.cron({ minute: '0', hour: '16', - day: '4,7,10,13,15,17', + day: '4,7,10,13,15,17,19', month: 'SEP', year: '*', }), diff --git a/lib/constructs/business/authentication.ts b/lib/constructs/business/authentication.ts index 5be67765e..2a8556632 100644 --- a/lib/constructs/business/authentication.ts +++ b/lib/constructs/business/authentication.ts @@ -5,9 +5,11 @@ import * as route53_targets from 'aws-cdk-lib/aws-route53-targets'; import { Construct } from 'constructs'; import { CALLBACK_URLS, + FLUTTER_CALLBACK_URL, GOOGLE_OAUTH_CLIENT_ID, GOOGLE_OAUTH_CLIENT_SECRET, LOGOUT_URLS, + FLUTTER_LOGOUT_URL, } from '../../configs/cognito/oauth'; import { AUTH_CERT_ARN } from '../../configs/common/arn'; import { AUTH_DOMAIN } from '../../configs/route53/domain'; @@ -70,21 +72,24 @@ export class WasedaTimeUserAuth extends AbstractAuthProvider { }, userPoolName: 'wasedatime-users', lambdaTriggers: { - preSignUp: new PreSignupWasedaMailValidator(this, 'presign-up-handle').baseFunction, + preSignUp: new PreSignupWasedaMailValidator(this, 'presign-up-handle') + .baseFunction, }, }); - this.pool.registerIdentityProvider(new cognito.UserPoolIdentityProviderGoogle(this, 'google-idp', { - clientId: GOOGLE_OAUTH_CLIENT_ID, - clientSecret: GOOGLE_OAUTH_CLIENT_SECRET, - userPool: this.pool, - attributeMapping: { - email: cognito.ProviderAttribute.GOOGLE_EMAIL, - preferredUsername: cognito.ProviderAttribute.GOOGLE_NAME, - profilePicture: cognito.ProviderAttribute.GOOGLE_PICTURE, - }, - scopes: ['email', 'openid', 'profile'], - })); + this.pool.registerIdentityProvider( + new cognito.UserPoolIdentityProviderGoogle(this, 'google-idp', { + clientId: GOOGLE_OAUTH_CLIENT_ID, + clientSecret: GOOGLE_OAUTH_CLIENT_SECRET, + userPool: this.pool, + attributeMapping: { + email: cognito.ProviderAttribute.GOOGLE_EMAIL, + preferredUsername: cognito.ProviderAttribute.GOOGLE_NAME, + profilePicture: cognito.ProviderAttribute.GOOGLE_PICTURE, + }, + scopes: ['email', 'openid', 'profile'], + }), + ); this.clients['web-app'] = this.pool.addClient('web-app-client', { userPoolClientName: 'web-app', @@ -100,6 +105,20 @@ export class WasedaTimeUserAuth extends AbstractAuthProvider { preventUserExistenceErrors: true, }); + this.clients['flutter-app'] = this.pool.addClient('flutter-app-client', { + userPoolClientName: 'flutter-app', + authFlows: { + custom: true, + userSrp: true, + }, + generateSecret: false, + oAuth: { + callbackUrls: FLUTTER_CALLBACK_URL, + logoutUrls: FLUTTER_LOGOUT_URL, + }, + preventUserExistenceErrors: true, + }); + // todo add custom ses in us-east-1 // fixme cross region resource @@ -110,12 +129,18 @@ export class WasedaTimeUserAuth extends AbstractAuthProvider { this.domain = this.pool.addDomain('auth-domain', { customDomain: { domainName: AUTH_DOMAIN, - certificate: acm.Certificate.fromCertificateArn(this, 'auth-domain-cert', AUTH_CERT_ARN), + certificate: acm.Certificate.fromCertificateArn( + this, + 'auth-domain-cert', + AUTH_CERT_ARN, + ), }, }); new route53.ARecord(this, 'alias-record', { zone: zone, - target: route53.RecordTarget.fromAlias(new route53_targets.UserPoolDomainTarget(this.domain)), + target: route53.RecordTarget.fromAlias( + new route53_targets.UserPoolDomainTarget(this.domain), + ), recordName: AUTH_DOMAIN, }); } diff --git a/lib/constructs/business/rest-api-service.ts b/lib/constructs/business/rest-api-service.ts index db4ba68d6..fe13adb58 100644 --- a/lib/constructs/business/rest-api-service.ts +++ b/lib/constructs/business/rest-api-service.ts @@ -878,9 +878,6 @@ export class ForumThreadsApiService extends RestApiService { patchIntegration, { operationName: 'UpdateThread', - requestParameters: { - 'method.request.querystring.ts': true, - }, requestModels: { ['application/json']: patchReqModel }, methodResponses: [ { @@ -897,9 +894,6 @@ export class ForumThreadsApiService extends RestApiService { deleteIntegration, { operationName: 'DeleteThread', - requestParameters: { - 'method.request.querystring.ts': true, - }, methodResponses: [ { statusCode: '200', diff --git a/lib/constructs/common/lambda-functions.ts b/lib/constructs/common/lambda-functions.ts index 6190515b6..403eebd93 100644 --- a/lib/constructs/common/lambda-functions.ts +++ b/lib/constructs/common/lambda-functions.ts @@ -584,7 +584,7 @@ export class ForumThreadFunctions extends Construct { functionName: 'get-single-thread', logRetention: logs.RetentionDays.ONE_MONTH, memorySize: 128, - role: dynamoDBReadRole, + role: dynamoDBPutRole, runtime: lambda.Runtime.PYTHON_3_9, timeout: Duration.seconds(3), environment: props.envVars, diff --git a/lib/constructs/persistence/database.ts b/lib/constructs/persistence/database.ts index b5a13cac3..b1b66c33c 100644 --- a/lib/constructs/persistence/database.ts +++ b/lib/constructs/persistence/database.ts @@ -93,7 +93,7 @@ export class DynamoDatabase extends Construct { billingMode: dynamodb.BillingMode.PROVISIONED, encryption: dynamodb.TableEncryption.DEFAULT, removalPolicy: RemovalPolicy.DESTROY, - sortKey: { name: 'created_at', type: dynamodb.AttributeType.STRING }, + sortKey: { name: 'thread_id', type: dynamodb.AttributeType.STRING }, tableName: 'forum-threads', readCapacity: 15, writeCapacity: 15, diff --git a/lib/stacks/persistence.ts b/lib/stacks/persistence.ts index f2018086e..16862ebbd 100644 --- a/lib/stacks/persistence.ts +++ b/lib/stacks/persistence.ts @@ -75,6 +75,11 @@ export class WasedaTimePersistenceLayer extends PersistenceLayer { // syllabusSyncPipeline.dataWarehouse.tableName, // ); + // Note: These are the magic words to disconnect cross stack referencing. + + // this.exportValue(dynamoDatabase.tables[Collection.THREAD].tableName); + // this.exportValue(dynamoDatabase.tables[Collection.THREAD].tableArn); + this.operationInterface.setEndpoint(OperationEndpoint.SYLLABUS, { [syllabusDataPipeline.processor.stateMachineArn]: 'scraper', }); diff --git a/lib/stacks/presentation.ts b/lib/stacks/presentation.ts index 5272dc47a..09d85e1c6 100644 --- a/lib/stacks/presentation.ts +++ b/lib/stacks/presentation.ts @@ -28,6 +28,7 @@ export class WasedaTimePresentationLayer extends PresentationLayer { monoApp.addMicroApp('syllabus'); monoApp.addMicroApp('campus'); monoApp.addMicroApp('feeds'); + monoApp.addMicroApp('forum'); monoApp.microApps.feeds.addEnvironment('DEPLOY_KEY', FEEDS_DEPLOY_KEY); diff --git a/package.json b/package.json index db090d8ff..374c21785 100644 --- a/package.json +++ b/package.json @@ -15,27 +15,27 @@ "lint": "eslint . --ext .ts" }, "peerDependencies": { - "aws-cdk-lib": "2.69.0", - "constructs": "10.1.279" + "aws-cdk-lib": "2.74.0", + "constructs": "10.1.312" }, "devDependencies": { "@aws-cdk/assert": "2.68.0", - "@commitlint/cli": "17.3.0", - "@commitlint/config-conventional": "17.3.0", - "@types/jest": "29.2.5", - "@types/node": "18.15.3", + "@commitlint/cli": "17.6.1", + "@commitlint/config-conventional": "17.6.1", + "@types/jest": "29.5.1", + "@types/node": "18.15.12", "@types/pluralize": "0.0.29", - "@typescript-eslint/eslint-plugin": "5.55.0", - "@typescript-eslint/parser": "5.55.0", - "aws-cdk-lib": "2.69.0", - "constructs": "10.1.279", - "esbuild": "^0.16.0", - "eslint": "8.17.0", + "@typescript-eslint/eslint-plugin": "5.59.6", + "@typescript-eslint/parser": "5.59.6", + "aws-cdk-lib": "2.74.0", + "constructs": "10.1.312", + "esbuild": "^0.17.0", + "eslint": "8.38.0", "eslint-import-resolver-node": "0.3.6", "eslint-import-resolver-typescript": "3.5.2", "eslint-plugin-import": "2.26.0", "husky": "8.0.3", - "jest": "29.3.1", + "jest": "29.5.0", "standard-version": "9.5.0", "ts-jest": "29.0.3", "ts-node": "10.9.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b3c9d6203..e8859f1c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,24 +1,28 @@ lockfileVersion: '6.0' +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + dependencies: '@aws-cdk/aws-amplify-alpha': specifier: 2.27.0-alpha.0 - version: 2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279) + version: 2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312) '@aws-cdk/aws-apigatewayv2-alpha': specifier: 2.27.0-alpha.0 - version: 2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279) + version: 2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312) '@aws-cdk/aws-apigatewayv2-authorizers-alpha': specifier: 2.27.0-alpha.0 - version: 2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.69.0)(constructs@10.1.279) + version: 2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.74.0)(constructs@10.1.312) '@aws-cdk/aws-apigatewayv2-integrations-alpha': specifier: 2.27.0-alpha.0 - version: 2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.69.0)(constructs@10.1.279) + version: 2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.74.0)(constructs@10.1.312) '@aws-cdk/aws-appsync-alpha': specifier: 2.27.0-alpha.0 - version: 2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279) + version: 2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312) '@aws-cdk/aws-lambda-python-alpha': specifier: 2.27.0-alpha.0 - version: 2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279) + version: 2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312) '@jest/types': specifier: ^29.3.1 version: 29.3.1 @@ -35,64 +39,64 @@ dependencies: devDependencies: '@aws-cdk/assert': specifier: 2.68.0 - version: 2.68.0(aws-cdk-lib@2.69.0)(constructs@10.1.279)(jest@29.3.1) + version: 2.68.0(aws-cdk-lib@2.74.0)(constructs@10.1.312)(jest@29.5.0) '@commitlint/cli': - specifier: 17.3.0 - version: 17.3.0 + specifier: 17.6.1 + version: 17.6.1 '@commitlint/config-conventional': - specifier: 17.3.0 - version: 17.3.0 + specifier: 17.6.1 + version: 17.6.1 '@types/jest': - specifier: 29.2.5 - version: 29.2.5 + specifier: 29.5.1 + version: 29.5.1 '@types/node': - specifier: 18.15.3 - version: 18.15.3 + specifier: 18.15.12 + version: 18.15.12 '@types/pluralize': specifier: 0.0.29 version: 0.0.29 '@typescript-eslint/eslint-plugin': - specifier: 5.55.0 - version: 5.55.0(@typescript-eslint/parser@5.55.0)(eslint@8.17.0)(typescript@4.9.5) + specifier: 5.59.6 + version: 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.38.0)(typescript@4.9.5) '@typescript-eslint/parser': - specifier: 5.55.0 - version: 5.55.0(eslint@8.17.0)(typescript@4.9.5) + specifier: 5.59.6 + version: 5.59.6(eslint@8.38.0)(typescript@4.9.5) aws-cdk-lib: - specifier: 2.69.0 - version: 2.69.0(constructs@10.1.279) + specifier: 2.74.0 + version: 2.74.0(constructs@10.1.312) constructs: - specifier: 10.1.279 - version: 10.1.279 + specifier: 10.1.312 + version: 10.1.312 esbuild: - specifier: ^0.16.0 - version: 0.16.12 + specifier: ^0.17.0 + version: 0.17.0 eslint: - specifier: 8.17.0 - version: 8.17.0 + specifier: 8.38.0 + version: 8.38.0 eslint-import-resolver-node: specifier: 0.3.6 version: 0.3.6 eslint-import-resolver-typescript: specifier: 3.5.2 - version: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.17.0) + version: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.38.0) eslint-plugin-import: specifier: 2.26.0 - version: 2.26.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.2)(eslint@8.17.0) + version: 2.26.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.38.0) husky: specifier: 8.0.3 version: 8.0.3 jest: - specifier: 29.3.1 - version: 29.3.1(@types/node@18.15.3)(ts-node@10.9.1) + specifier: 29.5.0 + version: 29.5.0(@types/node@18.15.12)(ts-node@10.9.1) standard-version: specifier: 9.5.0 version: 9.5.0 ts-jest: specifier: 29.0.3 - version: 29.0.3(@babel/core@7.17.9)(@jest/types@29.3.1)(esbuild@0.16.12)(jest@29.3.1)(typescript@4.9.5) + version: 29.0.3(@babel/core@7.17.9)(@jest/types@29.3.1)(esbuild@0.17.0)(jest@29.5.0)(typescript@4.9.5) ts-node: specifier: 10.9.1 - version: 10.9.1(@types/node@18.15.3)(typescript@4.9.5) + version: 10.9.1(@types/node@18.15.12)(typescript@4.9.5) typescript: specifier: 4.9.5 version: 4.9.5 @@ -106,7 +110,7 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true - /@aws-cdk/assert@2.68.0(aws-cdk-lib@2.69.0)(constructs@10.1.279)(jest@29.3.1): + /@aws-cdk/assert@2.68.0(aws-cdk-lib@2.74.0)(constructs@10.1.312)(jest@29.5.0): resolution: {integrity: sha512-bEztvoYdVp17I/ClYRGZa4wlEP/qNNq4Q+Z7EKwRL0cLDmvq4EI1m1N8LhUPAH7B6YXp5d1164gC6Nr0lV8bbA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -115,9 +119,9 @@ packages: jest: '>=26.6.3' dependencies: '@aws-cdk/cloudformation-diff': 2.68.0 - aws-cdk-lib: 2.69.0(constructs@10.1.279) - constructs: 10.1.279 - jest: 29.3.1(@types/node@18.15.3)(ts-node@10.9.1) + aws-cdk-lib: 2.74.0(constructs@10.1.312) + constructs: 10.1.312 + jest: 29.5.0(@types/node@18.15.12)(ts-node@10.9.1) dev: true /@aws-cdk/asset-awscli-v1@2.2.108: @@ -129,29 +133,29 @@ packages: /@aws-cdk/asset-node-proxy-agent-v5@2.0.87: resolution: {integrity: sha512-e924ANUrtvv4drdR1bfYn1YigDUgfnUpJO7ygm/6t0VGjmmhXY2g43XT+NIKOrCpC0z2Aqk4o5px8fuPCfmQTw==} - /@aws-cdk/aws-amplify-alpha@2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279): + /@aws-cdk/aws-amplify-alpha@2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312): resolution: {integrity: sha512-cuP5V7AoQHXsiPcn5YPHntPeD+22j6Oe0yb6hQPN2L8hZZGSysqsn12nVEVvg7Wtx8xDDSOzvNnU7VeY87fS4g==} engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.27.0 constructs: ^10.0.0 dependencies: - aws-cdk-lib: 2.69.0(constructs@10.1.279) - constructs: 10.1.279 + aws-cdk-lib: 2.74.0(constructs@10.1.312) + constructs: 10.1.312 dev: false - /@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279): + /@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312): resolution: {integrity: sha512-e0VsZANE8qNiAznRW5m7soHivcsyJoKhkHSVg9WRTTIwS0rZEty7qZH0UjDxq7M2lgIZICaLWAyJOWvGpHEqIA==} engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.27.0 constructs: ^10.0.0 dependencies: - aws-cdk-lib: 2.69.0(constructs@10.1.279) - constructs: 10.1.279 + aws-cdk-lib: 2.74.0(constructs@10.1.312) + constructs: 10.1.312 dev: false - /@aws-cdk/aws-apigatewayv2-authorizers-alpha@2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.69.0)(constructs@10.1.279): + /@aws-cdk/aws-apigatewayv2-authorizers-alpha@2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.74.0)(constructs@10.1.312): resolution: {integrity: sha512-RSMvF/l6v50eKDoEZj7rKDdxOv+DSfx+mkWsHPqSkYU70UeWZNJ4a7jRqJ/tzbajxX5GSoRMcEdR1GsrRXTfuw==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -159,12 +163,12 @@ packages: aws-cdk-lib: ^2.27.0 constructs: ^10.0.0 dependencies: - '@aws-cdk/aws-apigatewayv2-alpha': 2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279) - aws-cdk-lib: 2.69.0(constructs@10.1.279) - constructs: 10.1.279 + '@aws-cdk/aws-apigatewayv2-alpha': 2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312) + aws-cdk-lib: 2.74.0(constructs@10.1.312) + constructs: 10.1.312 dev: false - /@aws-cdk/aws-apigatewayv2-integrations-alpha@2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.69.0)(constructs@10.1.279): + /@aws-cdk/aws-apigatewayv2-integrations-alpha@2.27.0-alpha.0(@aws-cdk/aws-apigatewayv2-alpha@2.27.0-alpha.0)(aws-cdk-lib@2.74.0)(constructs@10.1.312): resolution: {integrity: sha512-AL3Ps0hPV8zRcI8k2wW4uTh+k9ZfvjgyUouDOZBaEW0U8PoQOgRj7b0FJbE+zmgbnw3YY2ycoCSpTfVbN3Akdg==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -172,31 +176,31 @@ packages: aws-cdk-lib: ^2.27.0 constructs: ^10.0.0 dependencies: - '@aws-cdk/aws-apigatewayv2-alpha': 2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279) - aws-cdk-lib: 2.69.0(constructs@10.1.279) - constructs: 10.1.279 + '@aws-cdk/aws-apigatewayv2-alpha': 2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312) + aws-cdk-lib: 2.74.0(constructs@10.1.312) + constructs: 10.1.312 dev: false - /@aws-cdk/aws-appsync-alpha@2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279): + /@aws-cdk/aws-appsync-alpha@2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312): resolution: {integrity: sha512-z7JNdK1BUGbe70KaDa2Hu69uIn3FG9GUJZ+mKyL0HW7r4PAtdmXSPKVumRa5niR/x6eaxtWvcAXaADNEYht4VQ==} engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.27.0 constructs: ^10.0.0 dependencies: - aws-cdk-lib: 2.69.0(constructs@10.1.279) - constructs: 10.1.279 + aws-cdk-lib: 2.74.0(constructs@10.1.312) + constructs: 10.1.312 dev: false - /@aws-cdk/aws-lambda-python-alpha@2.27.0-alpha.0(aws-cdk-lib@2.69.0)(constructs@10.1.279): + /@aws-cdk/aws-lambda-python-alpha@2.27.0-alpha.0(aws-cdk-lib@2.74.0)(constructs@10.1.312): resolution: {integrity: sha512-dgiwY4pjTMxAB1IlsyH+dmAgM/g+sfGfrdgsdr6rlHvR/ROE/MGbGBg70YBGZlhiW+qSjeWepp6jgDWxtkN50A==} engines: {node: '>= 14.15.0'} peerDependencies: aws-cdk-lib: ^2.27.0 constructs: ^10.0.0 dependencies: - aws-cdk-lib: 2.69.0(constructs@10.1.279) - constructs: 10.1.279 + aws-cdk-lib: 2.74.0(constructs@10.1.312) + constructs: 10.1.312 dev: false /@aws-cdk/cfnspec@2.68.0: @@ -320,11 +324,6 @@ packages: - supports-color dev: true - /@babel/helper-plugin-utils@7.16.7: - resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} - engines: {node: '>=6.9.0'} - dev: true - /@babel/helper-plugin-utils@7.20.2: resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} @@ -508,7 +507,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-plugin-utils': 7.20.2 dev: true /@babel/template@7.16.7: @@ -553,16 +552,16 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@commitlint/cli@17.3.0: - resolution: {integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==} + /@commitlint/cli@17.6.1: + resolution: {integrity: sha512-kCnDD9LE2ySiTnj/VPaxy4/oRayRcdv4aCuVxtoum8SxIU7OADHc0nJPQfheE8bHcs3zZdWzDMWltRosuT13bg==} engines: {node: '>=v14'} hasBin: true dependencies: - '@commitlint/format': 17.0.0 - '@commitlint/lint': 17.3.0 - '@commitlint/load': 17.3.0 - '@commitlint/read': 17.2.0 - '@commitlint/types': 17.0.0 + '@commitlint/format': 17.4.4 + '@commitlint/lint': 17.6.5 + '@commitlint/load': 17.5.0 + '@commitlint/read': 17.5.1 + '@commitlint/types': 17.4.4 execa: 5.1.1 lodash.isfunction: 3.0.9 resolve-from: 5.0.0 @@ -573,26 +572,26 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-conventional@17.3.0: - resolution: {integrity: sha512-hgI+fN5xF8nhS9uG/V06xyT0nlcyvHHMkq0kwRSr96vl5BFlRGaL2C0/YY4kQagfU087tmj01bJkG9Ek98Wllw==} + /@commitlint/config-conventional@17.6.1: + resolution: {integrity: sha512-ng/ybaSLuTCH9F+7uavSOnEQ9EFMl7lHEjfAEgRh1hwmEe8SpLKpQeMo2aT1IWvHaGMuTb+gjfbzoRf2IR23NQ==} engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 5.0.0 dev: true - /@commitlint/config-validator@17.1.0: - resolution: {integrity: sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg==} + /@commitlint/config-validator@17.4.4: + resolution: {integrity: sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 ajv: 8.11.0 dev: true - /@commitlint/ensure@17.3.0: - resolution: {integrity: sha512-kWbrQHDoW5veIUQx30gXoLOCjWvwC6OOEofhPCLl5ytRPBDAQObMbxTha1Bt2aSyNE/IrJ0s0xkdZ1Gi3wJwQg==} + /@commitlint/ensure@17.4.4: + resolution: {integrity: sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 @@ -600,122 +599,122 @@ packages: lodash.upperfirst: 4.3.1 dev: true - /@commitlint/execute-rule@17.0.0: - resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} + /@commitlint/execute-rule@17.4.0: + resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} engines: {node: '>=v14'} dev: true - /@commitlint/format@17.0.0: - resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} + /@commitlint/format@17.4.4: + resolution: {integrity: sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 chalk: 4.1.2 dev: true - /@commitlint/is-ignored@17.2.0: - resolution: {integrity: sha512-rgUPUQraHxoMLxiE8GK430HA7/R2vXyLcOT4fQooNrZq9ERutNrP6dw3gdKLkq22Nede3+gEHQYUzL4Wu75ndg==} + /@commitlint/is-ignored@17.6.5: + resolution: {integrity: sha512-CQvAPt9gX7cuUbMrIaIMKczfWJqqr6m8IlJs0F2zYwyyMTQ87QMHIj5jJ5HhOaOkaj6dvTMVGx8Dd1I4xgUuoQ==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 - semver: 7.3.7 + '@commitlint/types': 17.4.4 + semver: 7.5.0 dev: true - /@commitlint/lint@17.3.0: - resolution: {integrity: sha512-VilOTPg0i9A7CCWM49E9bl5jytfTvfTxf9iwbWAWNjxJ/A5mhPKbm3sHuAdwJ87tDk1k4j8vomYfH23iaY+1Rw==} + /@commitlint/lint@17.6.5: + resolution: {integrity: sha512-BSJMwkE4LWXrOsiP9KoHG+/heSDfvOL/Nd16+ojTS/DX8HZr8dNl8l3TfVr/d/9maWD8fSegRGtBtsyGuugFrw==} engines: {node: '>=v14'} dependencies: - '@commitlint/is-ignored': 17.2.0 - '@commitlint/parse': 17.2.0 - '@commitlint/rules': 17.3.0 - '@commitlint/types': 17.0.0 + '@commitlint/is-ignored': 17.6.5 + '@commitlint/parse': 17.6.5 + '@commitlint/rules': 17.6.5 + '@commitlint/types': 17.4.4 dev: true - /@commitlint/load@17.3.0: - resolution: {integrity: sha512-u/pV6rCAJrCUN+HylBHLzZ4qj1Ew3+eN9GBPhNi9otGxtOfA8b+8nJSxaNbcC23Ins/kcpjGf9zPSVW7628Umw==} + /@commitlint/load@17.5.0: + resolution: {integrity: sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==} engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 17.1.0 - '@commitlint/execute-rule': 17.0.0 - '@commitlint/resolve-extends': 17.3.0 - '@commitlint/types': 17.0.0 - '@types/node': 14.18.35 + '@commitlint/config-validator': 17.4.4 + '@commitlint/execute-rule': 17.4.0 + '@commitlint/resolve-extends': 17.4.4 + '@commitlint/types': 17.4.4 + '@types/node': 18.15.12 chalk: 4.1.2 - cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 4.3.0(@types/node@14.18.35)(cosmiconfig@7.0.1)(ts-node@10.9.1)(typescript@4.9.5) + cosmiconfig: 8.1.3 + cosmiconfig-typescript-loader: 4.3.0(@types/node@18.15.12)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@types/node@14.18.35)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.12)(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/message@17.2.0: - resolution: {integrity: sha512-/4l2KFKxBOuoEn1YAuuNNlAU05Zt7sNsC9H0mPdPm3chOrT4rcX0pOqrQcLtdMrMkJz0gC7b3SF80q2+LtdL9Q==} + /@commitlint/message@17.4.2: + resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==} engines: {node: '>=v14'} dev: true - /@commitlint/parse@17.2.0: - resolution: {integrity: sha512-vLzLznK9Y21zQ6F9hf8D6kcIJRb2haAK5T/Vt1uW2CbHYOIfNsR/hJs0XnF/J9ctM20Tfsqv4zBitbYvVw7F6Q==} + /@commitlint/parse@17.6.5: + resolution: {integrity: sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.0.0 + '@commitlint/types': 17.4.4 conventional-changelog-angular: 5.0.13 conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read@17.2.0: - resolution: {integrity: sha512-bbblBhrHkjxra3ptJNm0abxu7yeAaxumQ8ZtD6GIVqzURCETCP7Dm0tlVvGRDyXBuqX6lIJxh3W7oyKqllDsHQ==} + /@commitlint/read@17.5.1: + resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} engines: {node: '>=v14'} dependencies: - '@commitlint/top-level': 17.0.0 - '@commitlint/types': 17.0.0 - fs-extra: 10.1.0 + '@commitlint/top-level': 17.4.0 + '@commitlint/types': 17.4.4 + fs-extra: 11.1.1 git-raw-commits: 2.0.11 minimist: 1.2.6 dev: true - /@commitlint/resolve-extends@17.3.0: - resolution: {integrity: sha512-Lf3JufJlc5yVEtJWC8o4IAZaB8FQAUaVlhlAHRACd0TTFizV2Lk2VH70et23KgvbQNf7kQzHs/2B4QZalBv6Cg==} + /@commitlint/resolve-extends@17.4.4: + resolution: {integrity: sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==} engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 17.1.0 - '@commitlint/types': 17.0.0 + '@commitlint/config-validator': 17.4.4 + '@commitlint/types': 17.4.4 import-fresh: 3.3.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.3.0: - resolution: {integrity: sha512-s2UhDjC5yP2utx3WWqsnZRzjgzAX8BMwr1nltC0u0p8T/nzpkx4TojEfhlsOUj1t7efxzZRjUAV0NxNwdJyk+g==} + /@commitlint/rules@17.6.5: + resolution: {integrity: sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==} engines: {node: '>=v14'} dependencies: - '@commitlint/ensure': 17.3.0 - '@commitlint/message': 17.2.0 - '@commitlint/to-lines': 17.0.0 - '@commitlint/types': 17.0.0 + '@commitlint/ensure': 17.4.4 + '@commitlint/message': 17.4.2 + '@commitlint/to-lines': 17.4.0 + '@commitlint/types': 17.4.4 execa: 5.1.1 dev: true - /@commitlint/to-lines@17.0.0: - resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} + /@commitlint/to-lines@17.4.0: + resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==} engines: {node: '>=v14'} dev: true - /@commitlint/top-level@17.0.0: - resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} + /@commitlint/top-level@17.4.0: + resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==} engines: {node: '>=v14'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types@17.0.0: - resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} + /@commitlint/types@17.4.4: + resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} engines: {node: '>=v14'} dependencies: chalk: 4.1.2 @@ -728,8 +727,8 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@esbuild/android-arm64@0.16.12: - resolution: {integrity: sha512-0LacmiIW+X0/LOLMZqYtZ7d4uY9fxYABAYhSSOu+OGQVBqH4N5eIYgkT7bBFnR4Nm3qo6qS3RpHKVrDASqj/uQ==} + /@esbuild/android-arm64@0.17.0: + resolution: {integrity: sha512-77GVyD7ToESy/7+9eI8z62GGBdS/hsqsrpM+JA4kascky86wHbN29EEFpkVvxajPL7k6mbLJ5VBQABdj7n9FhQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -737,8 +736,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.16.12: - resolution: {integrity: sha512-CTWgMJtpCyCltrvipZrrcjjRu+rzm6pf9V8muCsJqtKujR3kPmU4ffbckvugNNaRmhxAF1ZI3J+0FUIFLFg8KA==} + /@esbuild/android-arm@0.17.0: + resolution: {integrity: sha512-hlbX5ym1V5kIKvnwFhm6rhar7MNqfJrZyYTNfk6+WS1uQfQmszFgXeyPH2beP3lSCumZyqX0zMBfOqftOpZ7GA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -746,8 +745,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.16.12: - resolution: {integrity: sha512-sS5CR3XBKQXYpSGMM28VuiUnbX83Z+aWPZzClW+OB2JquKqxoiwdqucJ5qvXS8pM6Up3RtJfDnRQZkz3en2z5g==} + /@esbuild/android-x64@0.17.0: + resolution: {integrity: sha512-TroxZdZhtAz0JyD0yahtjcbKuIXrBEAoAazaYSeR2e2tUtp9uXrcbpwFJF6oxxOiOOne6y7l4hx4YVnMW/tdFw==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -755,8 +754,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.16.12: - resolution: {integrity: sha512-Dpe5hOAQiQRH20YkFAg+wOpcd4PEuXud+aGgKBQa/VriPJA8zuVlgCOSTwna1CgYl05lf6o5els4dtuyk1qJxQ==} + /@esbuild/darwin-arm64@0.17.0: + resolution: {integrity: sha512-wP/v4cgdWt1m8TS/WmbaBc3NZON10eCbm6XepdVc3zJuqruHCzCKcC9dTSTEk50zX04REcRcbIbdhTMciQoFIg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -764,8 +763,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.16.12: - resolution: {integrity: sha512-ApGRA6X5txIcxV0095X4e4KKv87HAEXfuDRcGTniDWUUN+qPia8sl/BqG/0IomytQWajnUn4C7TOwHduk/FXBQ==} + /@esbuild/darwin-x64@0.17.0: + resolution: {integrity: sha512-R4WB6D6V9KGO/3LVTT8UlwRJO26IBFatOdo/bRXksfJR0vyOi2/lgmAAMBSpgcnnwvts9QsWiyM++mTTlwRseA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -773,8 +772,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.16.12: - resolution: {integrity: sha512-AMdK2gA9EU83ccXCWS1B/KcWYZCj4P3vDofZZkl/F/sBv/fphi2oUqUTox/g5GMcIxk8CF1CVYTC82+iBSyiUg==} + /@esbuild/freebsd-arm64@0.17.0: + resolution: {integrity: sha512-FO7+UEZv79gen2df8StFYFHZPI9ADozpFepLZCxY+O8sYLDa1rirvenmLwJiOHmeQRJ5orYedFeLk1PFlZ6t8Q==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -782,8 +781,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.16.12: - resolution: {integrity: sha512-KUKB9w8G/xaAbD39t6gnRBuhQ8vIYYlxGT2I+mT6UGRnCGRr1+ePFIGBQmf5V16nxylgUuuWVW1zU2ktKkf6WQ==} + /@esbuild/freebsd-x64@0.17.0: + resolution: {integrity: sha512-qCsNRsVTaC3ekwZcb2sa7l1gwCtJK3EqCWyDgpoQocYf3lRpbAzaCvqZSF2+NOO64cV+JbedXPsFiXU1aaVcIg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -791,8 +790,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.16.12: - resolution: {integrity: sha512-29HXMLpLklDfmw7T2buGqq3HImSUaZ1ArmrPOMaNiZZQptOSZs32SQtOHEl8xWX5vfdwZqrBfNf8Te4nArVzKQ==} + /@esbuild/linux-arm64@0.17.0: + resolution: {integrity: sha512-js4Vlch5XJQYISbDVJd2hsI/MsfVUz6d/FrclCE73WkQmniH37vFpuQI42ntWAeBghDIfaPZ6f9GilhwGzVFUg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -800,8 +799,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.16.12: - resolution: {integrity: sha512-vhDdIv6z4eL0FJyNVfdr3C/vdd/Wc6h1683GJsFoJzfKb92dU/v88FhWdigg0i6+3TsbSDeWbsPUXb4dif2abg==} + /@esbuild/linux-arm@0.17.0: + resolution: {integrity: sha512-Y2G2NU6155gcfNKvrakVmZV5xUAEhXjsN/uKtbKKRnvee0mHUuaT3OdQJDJKjHVGr6B0898pc3slRpI1PqspoQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -809,8 +808,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.16.12: - resolution: {integrity: sha512-JFDuNDTTfgD1LJg7wHA42o2uAO/9VzHYK0leAVnCQE/FdMB599YMH73ux+nS0xGr79pv/BK+hrmdRin3iLgQjg==} + /@esbuild/linux-ia32@0.17.0: + resolution: {integrity: sha512-7tl/jSPkF59R3zeFDB2/09zLGhcM7DM+tCoOqjJbQjuL6qbMWomGT2RglCqRFpCSdzBx0hukmPPgUAMlmdj0sQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -818,8 +817,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.16.12: - resolution: {integrity: sha512-xTGzVPqm6WKfCC0iuj1fryIWr1NWEM8DMhAIo+4rFgUtwy/lfHl+Obvus4oddzRDbBetLLmojfVZGmt/g/g+Rw==} + /@esbuild/linux-loong64@0.17.0: + resolution: {integrity: sha512-OG356F7dIVVF+EXJx5UfzFr1I5l6ES53GlMNSr3U1MhlaVyrP9um5PnrSJ+7TSDAzUC7YGjxb2GQWqHLd5XFoA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -827,8 +826,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.16.12: - resolution: {integrity: sha512-zI1cNgHa3Gol+vPYjIYHzKhU6qMyOQrvZ82REr5Fv7rlh5PG6SkkuCoH7IryPqR+BK2c/7oISGsvPJPGnO2bHQ==} + /@esbuild/linux-mips64el@0.17.0: + resolution: {integrity: sha512-LWQJgGpxrjh2x08UYf6G5R+Km7zhkpCvKXtFQ6SX0fimDvy1C8kslgFHGxLS0wjGV8C4BNnENW/HNy57+RB7iA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -836,8 +835,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.16.12: - resolution: {integrity: sha512-/C8OFXExoMmvTDIOAM54AhtmmuDHKoedUd0Otpfw3+AuuVGemA1nQK99oN909uZbLEU6Bi+7JheFMG3xGfZluQ==} + /@esbuild/linux-ppc64@0.17.0: + resolution: {integrity: sha512-f40N8fKiTQslUcUuhof2/syOQ+DC9Mqdnm9d063pew+Ptv9r6dBNLQCz4300MOfCLAbb0SdnrcMSzHbMehXWLw==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -845,8 +844,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.16.12: - resolution: {integrity: sha512-qeouyyc8kAGV6Ni6Isz8hUsKMr00EHgVwUKWNp1r4l88fHEoNTDB8mmestvykW6MrstoGI7g2EAsgr0nxmuGYg==} + /@esbuild/linux-riscv64@0.17.0: + resolution: {integrity: sha512-sc/pvLexRvxgEbmeq7LfLGnzUBFi/E2MGbnQj3CG8tnQ90tWPTi+9CbZEgIADhj6CAlCCmqxpUclIV1CRVUOTw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -854,8 +853,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.16.12: - resolution: {integrity: sha512-s9AyI/5vz1U4NNqnacEGFElqwnHusWa81pskAf8JNDM2eb6b2E6PpBmT8RzeZv6/TxE6/TADn2g9bb0jOUmXwQ==} + /@esbuild/linux-s390x@0.17.0: + resolution: {integrity: sha512-7xq9/kY0vunCL2vjHKdHGI+660pCdeEC6K6TWBVvbTGXvT8s/qacfxMgr8PCeQRbNUZLOA13G6/G1+c0lYXO1A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -863,8 +862,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.16.12: - resolution: {integrity: sha512-e8YA7GQGLWhvakBecLptUiKxOk4E/EPtSckS1i0MGYctW8ouvNUoh7xnU15PGO2jz7BYl8q1R6g0gE5HFtzpqQ==} + /@esbuild/linux-x64@0.17.0: + resolution: {integrity: sha512-o7FhBLONk1mLT2ytlj/j/WuJcPdhWcVpysSJn1s9+zRdLwLKveipbPi5SIasJIqMq0T4CkQW76pxJYMqz9HrQA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -872,8 +871,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.16.12: - resolution: {integrity: sha512-z2+kUxmOqBS+6SRVd57iOLIHE8oGOoEnGVAmwjm2aENSP35HPS+5cK+FL1l+rhrsJOFIPrNHqDUNechpuG96Sg==} + /@esbuild/netbsd-x64@0.17.0: + resolution: {integrity: sha512-V6xXsv71b8vwFCW/ky82Rs//SbyA+ORty6A7Mzkg33/4NbYZ/1Vcbk7qAN5oi0i/gS4Q0+7dYT7NqaiVZ7+Xjw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -881,8 +880,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.16.12: - resolution: {integrity: sha512-PAonw4LqIybwn2/vJujhbg1N9W2W8lw9RtXIvvZoyzoA/4rA4CpiuahVbASmQohiytRsixbNoIOUSjRygKXpyA==} + /@esbuild/openbsd-x64@0.17.0: + resolution: {integrity: sha512-StlQor6A0Y9SSDxraytr46Qbz25zsSDmsG3MCaNkBnABKHP3QsngOCfdBikqHVVrXeK0KOTmtX92/ncTGULYgQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -890,8 +889,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.16.12: - resolution: {integrity: sha512-+wr1tkt1RERi+Zi/iQtkzmMH4nS8+7UIRxjcyRz7lur84wCkAITT50Olq/HiT4JN2X2bjtlOV6vt7ptW5Gw60Q==} + /@esbuild/sunos-x64@0.17.0: + resolution: {integrity: sha512-K64Wqw57j8KrwjR3QjsuzN/qDGK6Cno6QYtIlWAmGab5iYPBZCWz7HFtF2a86/130LmUsdXqOID7J0SmjjRFIQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -899,8 +898,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.16.12: - resolution: {integrity: sha512-XEjeUSHmjsAOJk8+pXJu9pFY2O5KKQbHXZWQylJzQuIBeiGrpMeq9sTVrHefHxMOyxUgoKQTcaTS+VK/K5SviA==} + /@esbuild/win32-arm64@0.17.0: + resolution: {integrity: sha512-hly6iSWAf0hf3aHD18/qW7iFQbg9KAQ0RFGG9plcxkhL4uGw43O+lETGcSO/PylNleFowP/UztpF6U4oCYgpPw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -908,8 +907,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.16.12: - resolution: {integrity: sha512-eRKPM7e0IecUAUYr2alW7JGDejrFJXmpjt4MlfonmQ5Rz9HWpKFGCjuuIRgKO7W9C/CWVFXdJ2GjddsBXqQI4A==} + /@esbuild/win32-ia32@0.17.0: + resolution: {integrity: sha512-aL4EWPh0nyC5uYRfn+CHkTgawd4DjtmwquthNDmGf6Ht6+mUc+bQXyZNH1QIw8x20hSqFc4Tf36aLLWP/TPR3g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -917,8 +916,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.16.12: - resolution: {integrity: sha512-iPYKN78t3op2+erv2frW568j1q0RpqX6JOLZ7oPPaAV1VaF7dDstOrNw37PVOYoTWE11pV4A1XUitpdEFNIsPg==} + /@esbuild/win32-x64@0.17.0: + resolution: {integrity: sha512-W6IIQ9Rt43I/GqfXeBFLk0TvowKBoirs9sw2LPfhHax6ayMlW5PhFzSJ76I1ac9Pk/aRcSMrHWvVyZs8ZPK2wA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -926,14 +925,14 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.3.0(eslint@8.17.0): + /@eslint-community/eslint-utils@4.3.0(eslint@8.38.0): resolution: {integrity: sha512-v3oplH6FYCULtFuCeqyuTd9D2WKO937Dxdq+GmHOLL72TTRriLxz2VLlNfkZRsvj6PKnOPAtuT6dwrs/pA5DvA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.17.0 - eslint-visitor-keys: 3.3.0 + eslint: 8.38.0 + eslint-visitor-keys: 3.4.1 dev: true /@eslint-community/regexpp@4.4.0: @@ -941,14 +940,14 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@1.3.0: - resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} + /@eslint/eslintrc@2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.3.2 - globals: 13.15.0 + espree: 9.5.2 + globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -958,8 +957,13 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array@0.9.5: - resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} + /@eslint/js@8.38.0: + resolution: {integrity: sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -969,6 +973,11 @@ packages: - supports-color dev: true + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true @@ -994,20 +1003,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console@29.3.1: - resolution: {integrity: sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg==} + /@jest/console@29.5.0: + resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 - '@types/node': 18.15.3 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 chalk: 4.1.2 - jest-message-util: 29.3.1 - jest-util: 29.3.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 dev: true - /@jest/core@29.3.1(ts-node@10.9.1): - resolution: {integrity: sha512-0ohVjjRex985w5MmO5L3u5GR1O30DexhBSpuwx2P+9ftyqHdJXnk7IUWiP80oHMvt7ubHCJHxV0a0vlKVuZirw==} + /@jest/core@29.5.0(ts-node@10.9.1): + resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1015,32 +1024,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.3.1 - '@jest/reporters': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 + '@jest/console': 29.5.0 + '@jest/reporters': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.3.0 exit: 0.1.2 graceful-fs: 4.2.10 - jest-changed-files: 29.2.0 - jest-config: 29.3.1(@types/node@18.15.3)(ts-node@10.9.1) - jest-haste-map: 29.3.1 - jest-message-util: 29.3.1 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-resolve-dependencies: 29.3.1 - jest-runner: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 - jest-watcher: 29.3.1 + jest-changed-files: 29.5.0 + jest-config: 29.5.0(@types/node@18.15.12)(ts-node@10.9.1) + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-resolve-dependencies: 29.5.0 + jest-runner: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 + jest-watcher: 29.5.0 micromatch: 4.0.5 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -1048,14 +1057,14 @@ packages: - ts-node dev: true - /@jest/environment@29.3.1: - resolution: {integrity: sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==} + /@jest/environment@29.5.0: + resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 - jest-mock: 29.3.1 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 + jest-mock: 29.5.0 dev: true /@jest/expect-utils@29.3.1: @@ -1065,42 +1074,49 @@ packages: jest-get-type: 29.2.0 dev: true - /@jest/expect@29.3.1: - resolution: {integrity: sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg==} + /@jest/expect-utils@29.5.0: + resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.3.1 - jest-snapshot: 29.3.1 + jest-get-type: 29.4.3 + dev: true + + /@jest/expect@29.5.0: + resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.5.0 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers@29.3.1: - resolution: {integrity: sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==} + /@jest/fake-timers@29.5.0: + resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 - '@sinonjs/fake-timers': 9.1.2 - '@types/node': 18.15.3 - jest-message-util: 29.3.1 - jest-mock: 29.3.1 - jest-util: 29.3.1 + '@jest/types': 29.5.0 + '@sinonjs/fake-timers': 10.2.0 + '@types/node': 18.15.12 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true - /@jest/globals@29.3.1: - resolution: {integrity: sha512-cTicd134vOcwO59OPaB6AmdHQMCtWOe+/DitpTZVxWgMJ+YvXL1HNAmPyiGbSHmF/mXVBkvlm8YYtQhyHPnV6Q==} + /@jest/globals@29.5.0: + resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/expect': 29.3.1 - '@jest/types': 29.3.1 - jest-mock: 29.3.1 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/types': 29.5.0 + jest-mock: 29.5.0 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters@29.3.1: - resolution: {integrity: sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA==} + /@jest/reporters@29.5.0: + resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -1109,12 +1125,12 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 + '@jest/console': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.15.3 + '@types/node': 18.15.12 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -1125,9 +1141,9 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.4 - jest-message-util: 29.3.1 - jest-util: 29.3.1 - jest-worker: 29.3.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 + jest-worker: 29.5.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 @@ -1142,8 +1158,15 @@ packages: dependencies: '@sinclair/typebox': 0.24.51 - /@jest/source-map@29.2.0: - resolution: {integrity: sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==} + /@jest/schemas@29.4.3: + resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.25.24 + dev: true + + /@jest/source-map@29.4.3: + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jridgewell/trace-mapping': 0.3.17 @@ -1151,45 +1174,45 @@ packages: graceful-fs: 4.2.10 dev: true - /@jest/test-result@29.3.1: - resolution: {integrity: sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw==} + /@jest/test-result@29.5.0: + resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 - '@jest/types': 29.3.1 + '@jest/console': 29.5.0 + '@jest/types': 29.5.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer@29.3.1: - resolution: {integrity: sha512-IqYvLbieTv20ArgKoAMyhLHNrVHJfzO6ARZAbQRlY4UGWfdDnLlZEF0BvKOMd77uIiIjSZRwq3Jb3Fa3I8+2UA==} + /@jest/test-sequencer@29.5.0: + resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.3.1 + '@jest/test-result': 29.5.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 + jest-haste-map: 29.5.0 slash: 3.0.0 dev: true - /@jest/transform@29.3.1: - resolution: {integrity: sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug==} + /@jest/transform@29.5.0: + resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.17.9 - '@jest/types': 29.3.1 + '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 - jest-regex-util: 29.2.0 - jest-util: 29.3.1 + jest-haste-map: 29.5.0 + jest-regex-util: 29.4.3 + jest-util: 29.5.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - write-file-atomic: 4.0.1 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color dev: true @@ -1201,10 +1224,22 @@ packages: '@jest/schemas': 29.0.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.15.3 + '@types/node': 18.15.12 '@types/yargs': 17.0.10 chalk: 4.1.2 + /@jest/types@29.5.0: + resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.15.12 + '@types/yargs': 17.0.10 + chalk: 4.1.2 + dev: true + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} @@ -1264,16 +1299,20 @@ packages: /@sinclair/typebox@0.24.51: resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - /@sinonjs/commons@1.8.3: - resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} + /@sinclair/typebox@0.25.24: + resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + dev: true + + /@sinonjs/commons@3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@9.1.2: - resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} + /@sinonjs/fake-timers@10.2.0: + resolution: {integrity: sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==} dependencies: - '@sinonjs/commons': 1.8.3 + '@sinonjs/commons': 3.0.0 dev: true /@tsconfig/node10@1.0.8: @@ -1324,7 +1363,7 @@ packages: /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 18.15.3 + '@types/node': 18.15.12 dev: true /@types/istanbul-lib-coverage@2.0.4: @@ -1340,8 +1379,8 @@ packages: dependencies: '@types/istanbul-lib-report': 3.0.0 - /@types/jest@29.2.5: - resolution: {integrity: sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw==} + /@types/jest@29.5.1: + resolution: {integrity: sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==} dependencies: expect: 29.3.1 pretty-format: 29.3.1 @@ -1359,21 +1398,13 @@ packages: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true - /@types/node@14.18.35: - resolution: {integrity: sha512-2ATO8pfhG1kDvw4Lc4C0GXIMSQFFJBCo/R1fSgTwmUlq5oy95LXyjDQinsRVgQY6gp6ghh3H91wk9ES5/5C+Tw==} - dev: true - - /@types/node@18.15.3: - resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} + /@types/node@18.15.12: + resolution: {integrity: sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/parse-json@4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: true - /@types/pluralize@0.0.29: resolution: {integrity: sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA==} dev: true @@ -1398,8 +1429,8 @@ packages: dependencies: '@types/yargs-parser': 21.0.0 - /@typescript-eslint/eslint-plugin@5.55.0(@typescript-eslint/parser@5.55.0)(eslint@8.17.0)(typescript@4.9.5): - resolution: {integrity: sha512-IZGc50rtbjk+xp5YQoJvmMPmJEYoC53SiKPXyqWfv15XoD2Y5Kju6zN0DwlmaGJp1Iw33JsWJcQ7nw0lGCGjVg==} + /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1410,24 +1441,24 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.4.0 - '@typescript-eslint/parser': 5.55.0(eslint@8.17.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.55.0 - '@typescript-eslint/type-utils': 5.55.0(eslint@8.17.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.55.0(eslint@8.17.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.6(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.59.6 + '@typescript-eslint/type-utils': 5.59.6(eslint@8.38.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.6(eslint@8.38.0)(typescript@4.9.5) debug: 4.3.4 - eslint: 8.17.0 + eslint: 8.38.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.3.7 + semver: 7.3.8 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.55.0(eslint@8.17.0)(typescript@4.9.5): - resolution: {integrity: sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==} + /@typescript-eslint/parser@5.59.6(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1436,26 +1467,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.55.0 - '@typescript-eslint/types': 5.55.0 - '@typescript-eslint/typescript-estree': 5.55.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.59.6 + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/typescript-estree': 5.59.6(typescript@4.9.5) debug: 4.3.4 - eslint: 8.17.0 + eslint: 8.38.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.55.0: - resolution: {integrity: sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==} + /@typescript-eslint/scope-manager@5.59.6: + resolution: {integrity: sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.55.0 - '@typescript-eslint/visitor-keys': 5.55.0 + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/visitor-keys': 5.59.6 dev: true - /@typescript-eslint/type-utils@5.55.0(eslint@8.17.0)(typescript@4.9.5): - resolution: {integrity: sha512-ObqxBgHIXj8rBNm0yh8oORFrICcJuZPZTqtAFh0oZQyr5DnAHZWfyw54RwpEEH+fD8suZaI0YxvWu5tYE/WswA==} + /@typescript-eslint/type-utils@5.59.6(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1464,23 +1495,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.55.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.55.0(eslint@8.17.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.59.6(typescript@4.9.5) + '@typescript-eslint/utils': 5.59.6(eslint@8.38.0)(typescript@4.9.5) debug: 4.3.4 - eslint: 8.17.0 + eslint: 8.38.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.55.0: - resolution: {integrity: sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==} + /@typescript-eslint/types@5.59.6: + resolution: {integrity: sha512-tH5lBXZI7T2MOUgOWFdVNUILsI02shyQvfzG9EJkoONWugCG77NDDa1EeDGw7oJ5IvsTAAGVV8I3Tk2PNu9QfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree@5.55.0(typescript@4.9.5): - resolution: {integrity: sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==} + /@typescript-eslint/typescript-estree@5.59.6(typescript@4.9.5): + resolution: {integrity: sha512-vW6JP3lMAs/Tq4KjdI/RiHaaJSO7IUsbkz17it/Rl9Q+WkQ77EOuOnlbaU8kKfVIOJxMhnRiBG+olE7f3M16DA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1488,31 +1519,31 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.55.0 - '@typescript-eslint/visitor-keys': 5.55.0 + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/visitor-keys': 5.59.6 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.3.7 + semver: 7.3.8 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.55.0(eslint@8.17.0)(typescript@4.9.5): - resolution: {integrity: sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw==} + /@typescript-eslint/utils@5.59.6(eslint@8.38.0)(typescript@4.9.5): + resolution: {integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.3.0(eslint@8.17.0) + '@eslint-community/eslint-utils': 4.3.0(eslint@8.38.0) '@types/json-schema': 7.0.11 '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.55.0 - '@typescript-eslint/types': 5.55.0 - '@typescript-eslint/typescript-estree': 5.55.0(typescript@4.9.5) - eslint: 8.17.0 + '@typescript-eslint/scope-manager': 5.59.6 + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/typescript-estree': 5.59.6(typescript@4.9.5) + eslint: 8.38.0 eslint-scope: 5.1.1 semver: 7.3.8 transitivePeerDependencies: @@ -1520,12 +1551,12 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@5.55.0: - resolution: {integrity: sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==} + /@typescript-eslint/visitor-keys@5.59.6: + resolution: {integrity: sha512-zEfbFLzB9ETcEJ4HZEEsCR9HHeNku5/Qw1jSS5McYJv5BR+ftYXwFFAH5Al+xkGaZEqowMwl7uoJjQb1YSPF8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.55.0 - eslint-visitor-keys: 3.3.0 + '@typescript-eslint/types': 5.59.6 + eslint-visitor-keys: 3.4.1 dev: true /JSONStream@1.3.5: @@ -1536,12 +1567,12 @@ packages: through: 2.3.8 dev: true - /acorn-jsx@5.3.2(acorn@8.7.1): + /acorn-jsx@5.3.2(acorn@8.8.2): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.7.1 + acorn: 8.8.2 dev: true /acorn-walk@8.2.0: @@ -1555,6 +1586,12 @@ packages: hasBin: true dev: true + /acorn@8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /add-stream@1.0.0: resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==} dev: true @@ -1575,7 +1612,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} @@ -1587,7 +1623,6 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -1667,14 +1702,13 @@ packages: /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} - dev: true /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - /aws-cdk-lib@2.69.0(constructs@10.1.279): - resolution: {integrity: sha512-VIwgMMpc8iHCZTmt1PuMdj20f0lTY8SI6Pltx7jvhYxyzvg04Dd0YAryBUuutj/khE3typJwiFzLlL7yoNo5AA==} + /aws-cdk-lib@2.74.0(constructs@10.1.312): + resolution: {integrity: sha512-cPoYEVmJ06pi57q4uW2v/dwXvkr9JHDeSd4+ylBALccbYiRPlZw0OiNH+F2B+hrDVAiaYZWV3HE8hVDDON4+ZA==} engines: {node: '>= 14.15.0'} peerDependencies: constructs: ^10.0.0 @@ -1684,13 +1718,14 @@ packages: '@aws-cdk/asset-node-proxy-agent-v5': 2.0.87 '@balena/dockerignore': 1.0.2 case: 1.6.3 - constructs: 10.1.279 + constructs: 10.1.312 fs-extra: 9.1.0 ignore: 5.2.4 jsonschema: 1.4.1 minimatch: 3.1.2 punycode: 2.3.0 - semver: 7.3.8 + semver: 7.5.0 + table: 6.8.1 yaml: 1.10.2 bundledDependencies: - '@balena/dockerignore' @@ -1701,19 +1736,20 @@ packages: - minimatch - punycode - semver + - table - yaml - /babel-jest@29.3.1(@babel/core@7.17.9): - resolution: {integrity: sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==} + /babel-jest@29.5.0(@babel/core@7.17.9): + resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.17.9 - '@jest/transform': 29.3.1 + '@jest/transform': 29.5.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.2.0(@babel/core@7.17.9) + babel-preset-jest: 29.5.0(@babel/core@7.17.9) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -1725,7 +1761,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-plugin-utils': 7.20.2 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.1.0 @@ -1734,8 +1770,8 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist@29.2.0: - resolution: {integrity: sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==} + /babel-plugin-jest-hoist@29.5.0: + resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.16.7 @@ -1764,14 +1800,14 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.17.9) dev: true - /babel-preset-jest@29.2.0(@babel/core@7.17.9): - resolution: {integrity: sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==} + /babel-preset-jest@29.5.0(@babel/core@7.17.9): + resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.17.9 - babel-plugin-jest-hoist: 29.2.0 + babel-plugin-jest-hoist: 29.5.0 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.17.9) dev: true @@ -1947,8 +1983,8 @@ packages: typedarray: 0.0.6 dev: true - /constructs@10.1.279: - resolution: {integrity: sha512-h6Hv9tEOfvo3CTsZjNhSK8mXuC20rgXLXXn6vSd2wvwSvZzPLIkT68/A6MuPJFd7ASmRdCeVFf5lWULEV+wcVw==} + /constructs@10.1.312: + resolution: {integrity: sha512-eC6tBCDIz/arXAvJwqlv+fPZb6tly4Z58kcTFygSLDp+XuqOxuLTaEyBcLcJQy20+zeUopgWw7K2Go0EWmJ8NQ==} engines: {node: '>= 14.17.0'} /conventional-changelog-angular@5.0.13: @@ -2139,7 +2175,7 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cosmiconfig-typescript-loader@4.3.0(@types/node@14.18.35)(cosmiconfig@7.0.1)(ts-node@10.9.1)(typescript@4.9.5): + /cosmiconfig-typescript-loader@4.3.0(@types/node@18.15.12)(cosmiconfig@8.1.3)(ts-node@10.9.1)(typescript@4.9.5): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -2148,21 +2184,20 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 14.18.35 - cosmiconfig: 7.0.1 - ts-node: 10.9.1(@types/node@14.18.35)(typescript@4.9.5) + '@types/node': 18.15.12 + cosmiconfig: 8.1.3 + ts-node: 10.9.1(@types/node@18.15.12)(typescript@4.9.5) typescript: 4.9.5 dev: true - /cosmiconfig@7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} - engines: {node: '>=10'} + /cosmiconfig@8.1.3: + resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} + engines: {node: '>=14'} dependencies: - '@types/parse-json': 4.0.0 import-fresh: 3.3.0 + js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 dev: true /create-require@1.1.1: @@ -2279,6 +2314,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff-sequences@29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -2336,7 +2376,6 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /enhanced-resolve@5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} @@ -2393,34 +2432,34 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.16.12: - resolution: {integrity: sha512-eq5KcuXajf2OmivCl4e89AD3j8fbV+UTE9vczEzq5haA07U9oOTzBWlh3+6ZdjJR7Rz2QfWZ2uxZyhZxBgJ4+g==} + /esbuild@0.17.0: + resolution: {integrity: sha512-4yGk3rD95iS/wGzrx0Ji5czZcx1j2wvfF1iAJaX2FIYLB6sU6wYkDeplpZHzfwQw2yXGXsAoxmO6LnMQkl04Kg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.16.12 - '@esbuild/android-arm64': 0.16.12 - '@esbuild/android-x64': 0.16.12 - '@esbuild/darwin-arm64': 0.16.12 - '@esbuild/darwin-x64': 0.16.12 - '@esbuild/freebsd-arm64': 0.16.12 - '@esbuild/freebsd-x64': 0.16.12 - '@esbuild/linux-arm': 0.16.12 - '@esbuild/linux-arm64': 0.16.12 - '@esbuild/linux-ia32': 0.16.12 - '@esbuild/linux-loong64': 0.16.12 - '@esbuild/linux-mips64el': 0.16.12 - '@esbuild/linux-ppc64': 0.16.12 - '@esbuild/linux-riscv64': 0.16.12 - '@esbuild/linux-s390x': 0.16.12 - '@esbuild/linux-x64': 0.16.12 - '@esbuild/netbsd-x64': 0.16.12 - '@esbuild/openbsd-x64': 0.16.12 - '@esbuild/sunos-x64': 0.16.12 - '@esbuild/win32-arm64': 0.16.12 - '@esbuild/win32-ia32': 0.16.12 - '@esbuild/win32-x64': 0.16.12 + '@esbuild/android-arm': 0.17.0 + '@esbuild/android-arm64': 0.17.0 + '@esbuild/android-x64': 0.17.0 + '@esbuild/darwin-arm64': 0.17.0 + '@esbuild/darwin-x64': 0.17.0 + '@esbuild/freebsd-arm64': 0.17.0 + '@esbuild/freebsd-x64': 0.17.0 + '@esbuild/linux-arm': 0.17.0 + '@esbuild/linux-arm64': 0.17.0 + '@esbuild/linux-ia32': 0.17.0 + '@esbuild/linux-loong64': 0.17.0 + '@esbuild/linux-mips64el': 0.17.0 + '@esbuild/linux-ppc64': 0.17.0 + '@esbuild/linux-riscv64': 0.17.0 + '@esbuild/linux-s390x': 0.17.0 + '@esbuild/linux-x64': 0.17.0 + '@esbuild/netbsd-x64': 0.17.0 + '@esbuild/openbsd-x64': 0.17.0 + '@esbuild/sunos-x64': 0.17.0 + '@esbuild/win32-arm64': 0.17.0 + '@esbuild/win32-ia32': 0.17.0 + '@esbuild/win32-x64': 0.17.0 dev: true /escalade@3.1.1: @@ -2452,7 +2491,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.26.0)(eslint@8.17.0): + /eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.26.0)(eslint@8.38.0): resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2461,8 +2500,8 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.12.0 - eslint: 8.17.0 - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.2)(eslint@8.17.0) + eslint: 8.38.0 + eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.38.0) get-tsconfig: 4.2.0 globby: 13.1.3 is-core-module: 2.11.0 @@ -2472,7 +2511,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.3(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2): + /eslint-module-utils@2.7.3(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2): resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} engines: {node: '>=4'} peerDependencies: @@ -2490,16 +2529,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.55.0(eslint@8.17.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.6(eslint@8.38.0)(typescript@4.9.5) debug: 3.2.7 eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.17.0) + eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@8.38.0) find-up: 2.1.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-typescript@3.5.2)(eslint@8.17.0): + /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.2)(eslint@8.38.0): resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: @@ -2509,14 +2548,14 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.55.0(eslint@8.17.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.59.6(eslint@8.38.0)(typescript@4.9.5) array-includes: 3.1.4 array.prototype.flat: 1.3.0 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.17.0 + eslint: 8.38.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3(@typescript-eslint/parser@5.55.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2) + eslint-module-utils: 2.7.3(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@3.5.2) has: 1.0.3 is-core-module: 2.8.1 is-glob: 4.0.3 @@ -2546,33 +2585,23 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.17.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.17.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys@3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.17.0: - resolution: {integrity: sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==} + /eslint@8.38.0: + resolution: {integrity: sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.3.0 - '@humanwhocodes/config-array': 0.9.5 + '@eslint-community/eslint-utils': 4.3.0(eslint@8.38.0) + '@eslint-community/regexpp': 4.4.0 + '@eslint/eslintrc': 2.0.3 + '@eslint/js': 8.38.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -2580,20 +2609,22 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.17.0) - eslint-visitor-keys: 3.3.0 - espree: 9.3.2 - esquery: 1.4.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 + esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 + find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.15.0 - ignore: 5.2.0 + globals: 13.20.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.4.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -2601,22 +2632,20 @@ packages: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 - regexpp: 3.2.0 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 - v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color dev: true - /espree@9.3.2: - resolution: {integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==} + /espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.7.1 - acorn-jsx: 5.3.2(acorn@8.7.1) - eslint-visitor-keys: 3.3.0 + acorn: 8.8.2 + acorn-jsx: 5.3.2(acorn@8.8.2) + eslint-visitor-keys: 3.4.1 dev: true /esprima@4.0.1: @@ -2625,8 +2654,8 @@ packages: hasBin: true dev: true - /esquery@1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -2685,9 +2714,19 @@ packages: jest-util: 29.3.1 dev: true + /expect@29.5.0: + resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.5.0 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} @@ -2782,9 +2821,9 @@ packages: /flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.10 jsonfile: 6.1.0 @@ -2816,10 +2855,6 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true - /functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - dev: true - /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2943,8 +2978,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.15.0: - resolution: {integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==} + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -2961,7 +2996,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.11 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -3190,7 +3225,6 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} @@ -3226,6 +3260,11 @@ packages: engines: {node: '>=8'} dev: true + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -3338,43 +3377,44 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files@29.2.0: - resolution: {integrity: sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==} + /jest-changed-files@29.5.0: + resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 dev: true - /jest-circus@29.3.1: - resolution: {integrity: sha512-wpr26sEvwb3qQQbdlmei+gzp6yoSSoSL6GsLPxnuayZSMrSd5Ka7IjAvatpIernBvT2+Ic6RLTg+jSebScmasg==} + /jest-circus@29.5.0: + resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/expect': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 + '@jest/environment': 29.5.0 + '@jest/expect': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 + jest-each: 29.5.0 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 p-limit: 3.1.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 + pure-rand: 6.0.2 slash: 3.0.0 stack-utils: 2.0.5 transitivePeerDependencies: - supports-color dev: true - /jest-cli@29.3.1(@types/node@18.15.3)(ts-node@10.9.1): - resolution: {integrity: sha512-TO/ewvwyvPOiBBuWZ0gm04z3WWP8TIK8acgPzE4IxgsLKQgb377NYGrQLc3Wl/7ndWzIH2CDNNsUjGxwLL43VQ==} + /jest-cli@29.5.0(@types/node@18.15.12)(ts-node@10.9.1): + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -3383,16 +3423,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1(ts-node@10.9.1) - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.3.1(@types/node@18.15.3)(ts-node@10.9.1) - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-config: 29.5.0(@types/node@18.15.12)(ts-node@10.9.1) + jest-util: 29.5.0 + jest-validate: 29.5.0 prompts: 2.4.2 yargs: 17.4.1 transitivePeerDependencies: @@ -3401,8 +3441,8 @@ packages: - ts-node dev: true - /jest-config@29.3.1(@types/node@18.15.3)(ts-node@10.9.1): - resolution: {integrity: sha512-y0tFHdj2WnTEhxmGUK1T7fgLen7YK4RtfvpLFBXfQkh2eMJAQq24Vx9472lvn5wg0MAO6B+iPfJfzdR9hJYalg==} + /jest-config@29.5.0(@types/node@18.15.12)(ts-node@10.9.1): + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -3414,29 +3454,29 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@jest/test-sequencer': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 - babel-jest: 29.3.1(@babel/core@7.17.9) + '@jest/test-sequencer': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 + babel-jest: 29.5.0(@babel/core@7.17.9) chalk: 4.1.2 ci-info: 3.3.0 deepmerge: 4.2.2 glob: 7.2.0 graceful-fs: 4.2.10 - jest-circus: 29.3.1 - jest-environment-node: 29.3.1 - jest-get-type: 29.2.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-runner: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-circus: 29.5.0 + jest-environment-node: 29.5.0 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.15.3)(typescript@4.9.5) + ts-node: 10.9.1(@types/node@18.15.12)(typescript@4.9.5) transitivePeerDependencies: - supports-color dev: true @@ -3451,34 +3491,44 @@ packages: pretty-format: 29.3.1 dev: true - /jest-docblock@29.2.0: - resolution: {integrity: sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==} + /jest-diff@29.5.0: + resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 + dev: true + + /jest-docblock@29.4.3: + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each@29.3.1: - resolution: {integrity: sha512-qrZH7PmFB9rEzCSl00BWjZYuS1BSOH8lLuC0azQE9lQrAx3PWGKHTDudQiOSwIy5dGAJh7KA0ScYlCP7JxvFYA==} + /jest-each@29.5.0: + resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@jest/types': 29.5.0 chalk: 4.1.2 - jest-get-type: 29.2.0 - jest-util: 29.3.1 - pretty-format: 29.3.1 + jest-get-type: 29.4.3 + jest-util: 29.5.0 + pretty-format: 29.5.0 dev: true - /jest-environment-node@29.3.1: - resolution: {integrity: sha512-xm2THL18Xf5sIHoU7OThBPtuH6Lerd+Y1NLYiZJlkE3hbE+7N7r8uvHIl/FkZ5ymKXJe/11SQuf3fv4v6rUMag==} + /jest-environment-node@29.5.0: + resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 - jest-mock: 29.3.1 - jest-util: 29.3.1 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 + jest-mock: 29.5.0 + jest-util: 29.5.0 dev: true /jest-get-type@29.2.0: @@ -3486,31 +3536,36 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map@29.3.1: - resolution: {integrity: sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A==} + /jest-get-type@29.4.3: + resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map@29.5.0: + resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.5 - '@types/node': 18.15.3 + '@types/node': 18.15.12 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.10 - jest-regex-util: 29.2.0 - jest-util: 29.3.1 - jest-worker: 29.3.1 + jest-regex-util: 29.4.3 + jest-util: 29.5.0 + jest-worker: 29.5.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector@29.3.1: - resolution: {integrity: sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA==} + /jest-leak-detector@29.5.0: + resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 - pretty-format: 29.3.1 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-matcher-utils@29.3.1: @@ -3523,12 +3578,22 @@ packages: pretty-format: 29.3.1 dev: true + /jest-matcher-utils@29.5.0: + resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.5.0 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 + dev: true + /jest-message-util@29.3.1: resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.16.7 - '@jest/types': 29.3.1 + '@jest/types': 29.5.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 @@ -3538,16 +3603,31 @@ packages: stack-utils: 2.0.5 dev: true - /jest-mock@29.3.1: - resolution: {integrity: sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==} + /jest-message-util@29.5.0: + resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 - '@types/node': 18.15.3 - jest-util: 29.3.1 + '@babel/code-frame': 7.16.7 + '@jest/types': 29.5.0 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 29.5.0 + slash: 3.0.0 + stack-utils: 2.0.5 dev: true - /jest-pnp-resolver@1.2.2(jest-resolve@29.3.1): + /jest-mock@29.5.0: + resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.5.0 + '@types/node': 18.15.12 + jest-util: 29.5.0 + dev: true + + /jest-pnp-resolver@1.2.2(jest-resolve@29.5.0): resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: @@ -3556,100 +3636,100 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.3.1 + jest-resolve: 29.5.0 dev: true - /jest-regex-util@29.2.0: - resolution: {integrity: sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==} + /jest-regex-util@29.4.3: + resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@29.3.1: - resolution: {integrity: sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA==} + /jest-resolve-dependencies@29.5.0: + resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-regex-util: 29.2.0 - jest-snapshot: 29.3.1 + jest-regex-util: 29.4.3 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true - /jest-resolve@29.3.1: - resolution: {integrity: sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw==} + /jest-resolve@29.5.0: + resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 - jest-pnp-resolver: 1.2.2(jest-resolve@29.3.1) - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-haste-map: 29.5.0 + jest-pnp-resolver: 1.2.2(jest-resolve@29.5.0) + jest-util: 29.5.0 + jest-validate: 29.5.0 resolve: 1.22.0 - resolve.exports: 1.1.0 + resolve.exports: 2.0.2 slash: 3.0.0 dev: true - /jest-runner@29.3.1: - resolution: {integrity: sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA==} + /jest-runner@29.5.0: + resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 - '@jest/environment': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 + '@jest/console': 29.5.0 + '@jest/environment': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 - jest-docblock: 29.2.0 - jest-environment-node: 29.3.1 - jest-haste-map: 29.3.1 - jest-leak-detector: 29.3.1 - jest-message-util: 29.3.1 - jest-resolve: 29.3.1 - jest-runtime: 29.3.1 - jest-util: 29.3.1 - jest-watcher: 29.3.1 - jest-worker: 29.3.1 + jest-docblock: 29.4.3 + jest-environment-node: 29.5.0 + jest-haste-map: 29.5.0 + jest-leak-detector: 29.5.0 + jest-message-util: 29.5.0 + jest-resolve: 29.5.0 + jest-runtime: 29.5.0 + jest-util: 29.5.0 + jest-watcher: 29.5.0 + jest-worker: 29.5.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime@29.3.1: - resolution: {integrity: sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A==} + /jest-runtime@29.5.0: + resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.1 - '@jest/fake-timers': 29.3.1 - '@jest/globals': 29.3.1 - '@jest/source-map': 29.2.0 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 + '@jest/environment': 29.5.0 + '@jest/fake-timers': 29.5.0 + '@jest/globals': 29.5.0 + '@jest/source-map': 29.4.3 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 - jest-message-util: 29.3.1 - jest-mock: 29.3.1 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-snapshot: 29.3.1 - jest-util: 29.3.1 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 + jest-mock: 29.5.0 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot@29.3.1: - resolution: {integrity: sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA==} + /jest-snapshot@29.5.0: + resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.17.9 @@ -3658,23 +3738,22 @@ packages: '@babel/plugin-syntax-typescript': 7.16.7(@babel/core@7.17.9) '@babel/traverse': 7.17.9 '@babel/types': 7.17.0 - '@jest/expect-utils': 29.3.1 - '@jest/transform': 29.3.1 - '@jest/types': 29.3.1 + '@jest/expect-utils': 29.5.0 + '@jest/transform': 29.5.0 + '@jest/types': 29.5.0 '@types/babel__traverse': 7.17.0 '@types/prettier': 2.6.0 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.17.9) chalk: 4.1.2 - expect: 29.3.1 + expect: 29.5.0 graceful-fs: 4.2.10 - jest-diff: 29.3.1 - jest-get-type: 29.2.0 - jest-haste-map: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-util: 29.3.1 + jest-diff: 29.5.0 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.5.0 natural-compare: 1.4.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 semver: 7.3.8 transitivePeerDependencies: - supports-color @@ -3685,51 +3764,63 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.3.1 - '@types/node': 18.15.3 + '@types/node': 18.15.12 chalk: 4.1.2 ci-info: 3.3.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true - /jest-validate@29.3.1: - resolution: {integrity: sha512-N9Lr3oYR2Mpzuelp1F8negJR3YE+L1ebk1rYA5qYo9TTY3f9OWdptLoNSPP9itOCBIRBqjt/S5XHlzYglLN67g==} + /jest-util@29.5.0: + resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 + chalk: 4.1.2 + ci-info: 3.3.0 + graceful-fs: 4.2.10 + picomatch: 2.3.1 + dev: true + + /jest-validate@29.5.0: + resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.5.0 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 dev: true - /jest-watcher@29.3.1: - resolution: {integrity: sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg==} + /jest-watcher@29.5.0: + resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 18.15.3 + '@jest/test-result': 29.5.0 + '@jest/types': 29.5.0 + '@types/node': 18.15.12 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.3.1 + jest-util: 29.5.0 string-length: 4.0.2 dev: true - /jest-worker@29.3.1: - resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} + /jest-worker@29.5.0: + resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.15.3 - jest-util: 29.3.1 + '@types/node': 18.15.12 + jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.3.1(@types/node@18.15.3)(ts-node@10.9.1): - resolution: {integrity: sha512-6iWfL5DTT0Np6UYs/y5Niu7WIfNv/wRTtN5RSXt2DIEft3dx3zPuw/3WJQBCJfmEzvDiEKwoqMbGD9n49+qLSA==} + /jest@29.5.0(@types/node@18.15.12)(ts-node@10.9.1): + resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -3738,16 +3829,20 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1(ts-node@10.9.1) - '@jest/types': 29.3.1 + '@jest/core': 29.5.0(ts-node@10.9.1) + '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.3.1(@types/node@18.15.3)(ts-node@10.9.1) + jest-cli: 29.5.0(@types/node@18.15.12)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true + /js-sdsl@4.4.0: + resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -3787,7 +3882,6 @@ packages: /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -3934,7 +4028,6 @@ packages: /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - dev: true /lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -4351,6 +4444,15 @@ packages: react-is: 18.1.0 dev: true + /pretty-format@29.5.0: + resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.3 + ansi-styles: 5.2.0 + react-is: 18.1.0 + dev: true + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true @@ -4367,6 +4469,10 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} + /pure-rand@6.0.2: + resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} + dev: true + /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -4450,11 +4556,6 @@ packages: strip-indent: 3.0.0 dev: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4463,7 +4564,6 @@ packages: /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - dev: true /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} @@ -4489,8 +4589,8 @@ packages: global-dirs: 0.1.1 dev: true - /resolve.exports@1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true @@ -4553,6 +4653,14 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true + + /semver@7.5.0: + resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -4599,7 +4707,6 @@ packages: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true /source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -4705,7 +4812,6 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true /string.prototype.trimend@1.0.4: resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} @@ -4742,7 +4848,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -4813,7 +4918,6 @@ packages: slice-ansi: 4.0.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -4835,7 +4939,7 @@ packages: dev: true /text-table@0.2.0: - resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /through2@2.0.5: @@ -4883,7 +4987,7 @@ packages: engines: {node: '>=8'} dev: true - /ts-jest@29.0.3(@babel/core@7.17.9)(@jest/types@29.3.1)(esbuild@0.16.12)(jest@29.3.1)(typescript@4.9.5): + /ts-jest@29.0.3(@babel/core@7.17.9)(@jest/types@29.3.1)(esbuild@0.17.0)(jest@29.5.0)(typescript@4.9.5): resolution: {integrity: sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4907,9 +5011,9 @@ packages: '@babel/core': 7.17.9 '@jest/types': 29.3.1 bs-logger: 0.2.6 - esbuild: 0.16.12 + esbuild: 0.17.0 fast-json-stable-stringify: 2.1.0 - jest: 29.3.1(@types/node@18.15.3)(ts-node@10.9.1) + jest: 29.5.0(@types/node@18.15.12)(ts-node@10.9.1) jest-util: 29.3.1 json5: 2.2.1 lodash.memoize: 4.1.2 @@ -4919,38 +5023,7 @@ packages: yargs-parser: 21.0.1 dev: true - /ts-node@10.9.1(@types/node@14.18.35)(typescript@4.9.5): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.8 - '@tsconfig/node12': 1.0.9 - '@tsconfig/node14': 1.0.1 - '@tsconfig/node16': 1.0.2 - '@types/node': 14.18.35 - acorn: 8.7.1 - acorn-walk: 8.2.0 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.9.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - - /ts-node@10.9.1(@types/node@18.15.3)(typescript@4.9.5): + /ts-node@10.9.1(@types/node@18.15.12)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4969,7 +5042,7 @@ packages: '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 '@tsconfig/node16': 1.0.2 - '@types/node': 18.15.3 + '@types/node': 18.15.12 acorn: 8.7.1 acorn-walk: 8.2.0 arg: 4.1.3 @@ -5080,7 +5153,6 @@ packages: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 - dev: true /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -5090,10 +5162,6 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache@2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} - dev: true - /v8-to-istanbul@9.0.1: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} @@ -5156,9 +5224,9 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic@4.0.1: - resolution: {integrity: sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} + /write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 diff --git a/src/lambda/delete-thread/index.py b/src/lambda/delete-thread/index.py index a5a36dbf6..f232401ea 100644 --- a/src/lambda/delete-thread/index.py +++ b/src/lambda/delete-thread/index.py @@ -5,14 +5,15 @@ @resp_handler -def delete_thread(board_id, thread_id, ts, uid): +def delete_thread(board_id, thread_id, uid): + table.delete_item( Key={ "board_id": board_id, - "created_at": ts + "thread_id": thread_id, }, ConditionExpression=Attr('uid').eq( - uid) & Attr('thread_id').eq(thread_id) + uid) ) resp_body = JsonPayloadBuilder().add_status( @@ -24,7 +25,6 @@ def handler(event, context): params = { "board_id": event["pathParameters"]["board_id"], "thread_id": event["pathParameters"]["thread_id"], - "ts": event["queryStringParameters"]["ts"], "uid": event['requestContext']['authorizer']['claims']['sub'] } diff --git a/src/lambda/get-all-threads/index.py b/src/lambda/get-all-threads/index.py index 0d6f3f3dd..c1335ef23 100644 --- a/src/lambda/get-all-threads/index.py +++ b/src/lambda/get-all-threads/index.py @@ -5,16 +5,61 @@ @resp_handler -def get_all_threads(): +def get_all_threads(uid, index, num, school, tags, board_id): + index = int(index) + num = int(num) + + if board_id: + response = table.query(KeyConditionExpression=Key( + "board_id").eq(board_id), ScanIndexForward=False) + else: + response = table.scan() - response = table.scan(TableName=table) items = response['Items'] + if school: + items = [item for item in items if item.get("group_id") in school] + if tags: + items = [item for item in items if item.get("tag_id") in tags] + + if not board_id: + items = sorted(items, key=lambda x: x.get( + 'created_at', ''), reverse=True) + + start_index = index + end_index = min(len(items), start_index+num) + paginated_items = items[start_index:end_index] + + for item in paginated_items: + item['mod'] = False + if 'uid' in item and item['uid'] == uid: + item['mod'] = True + item['user_liked'] = uid in item.get('likes', []) + item['total_likes'] = len(item.get('likes', [])) + + item.pop('uid', None) + item.pop('likes', None) + body = JsonPayloadBuilder().add_status( - True).add_data(items).add_message('').compile() + True).add_data(paginated_items).add_message(end_index).compile() + return body def handler(event, context): - return get_all_threads() + if "queryStringParameters" in event: + params = event["queryStringParameters"] + board_id = params.get("board_id", "") + uid = params.get("uid", "") + index = params.get("index", 0) + num = params.get("num", 10) + school = params.get("school", "") + tags = params.get("tags", "") + + if school: + school = school.split(',') + if tags: + tags = tags.split(',') + + return get_all_threads(uid, index, num, school, tags, board_id) diff --git a/src/lambda/get-board-threads/index.py b/src/lambda/get-board-threads/index.py index 2371ccc49..a6eaddda6 100644 --- a/src/lambda/get-board-threads/index.py +++ b/src/lambda/get-board-threads/index.py @@ -5,22 +5,55 @@ @resp_handler -def get_board_threads(board_id): +def get_board_threads(uid, index, num, school, board_id, tags): + + index = int(index) + num = int(num) results = table.query(KeyConditionExpression=Key( "board_id").eq(board_id), ScanIndexForward=False)["Items"] if not results: raise LookupError + if school: + results = [item for item in results if item.get("group_id") in school] + if tags: + results = [item for item in results if item.get("tag_id") in tags] + + start_index = index + end_index = min(len(results), start_index + num) + paginated_results = results[start_index:end_index] + + for item in paginated_results: + item['mod'] = False + if 'uid' in item and item['uid'] == uid: + item['mod'] = True + body = JsonPayloadBuilder().add_status( - True).add_data(results).add_message('').compile() + True).add_data(paginated_results).add_message(end_index).compile() return body def handler(event, context): - params = { - "board_id": event["pathParameters"]["board_id"] - } - - return get_board_threads(**params) + uid = "" + index = "0" # default index + num = "10" # default num + school = "" # default school + board_id = event["pathParameters"]["board_id"] # from path parameters + tags = "" + + if "queryStringParameters" in event: + params = event["queryStringParameters"] + uid = params.get("uid", "") + index = params.get("index", "0") + num = params.get("num", "10") + school = params.get("school", "") + tags = params.get("tags", "") + + if school: + school = school.split(',') + if tags: + tags = tags.split(',') + + return get_board_threads(uid, index, num, school, board_id, tags) diff --git a/src/lambda/get-comments/index.py b/src/lambda/get-comments/index.py index 06fd5febb..2c696d719 100644 --- a/src/lambda/get-comments/index.py +++ b/src/lambda/get-comments/index.py @@ -21,7 +21,7 @@ def get_comments(thread_id, uid=""): def handler(event, context): params = { - "thread_id": event["pathParameters"]["thread_id"] + "thread_id": event["pathParameters"]["thread_id"], } if "uid" in event["queryStringParameters"]: params["uid"] = event["queryStringParameters"]["uid"] diff --git a/src/lambda/get-course/const.py b/src/lambda/get-course/const.py index a9e228501..fb585f9d2 100644 --- a/src/lambda/get-course/const.py +++ b/src/lambda/get-course/const.py @@ -119,5 +119,14 @@ "フルオンデマンド(既存)": 2, "オンデマンド(曜日時限あり)": 3, "オンデマンド": 3, - "リアルタイム配信": 4 + "リアルタイム配信": 4, + # New table for 2023 SS + "【対面】" : 0, + "【対面】ハイブリッド(対面回数半数以上)": 0, + "【オンライン】ハイブリッド(対面回数半数未満)":1, + "【非常時】ハイブリッド": 1, + "【オンライン】フルオンデマンド": 2, + "【非常時】フルオンデマンド" : 2, + "【オンライン】リアルタイム配信": 4, + "【非常時】リアルタイム配信" : 4, } diff --git a/src/lambda/get-course/utils.py b/src/lambda/get-course/utils.py index 612a4b1f0..f11d1fe88 100644 --- a/src/lambda/get-course/utils.py +++ b/src/lambda/get-course/utils.py @@ -149,7 +149,7 @@ def to_half_width(s): return "" return unicodedata.normalize('NFKC', s) - +# Fix the problem over here to get the correct evaluation criteria in the waseda time def get_eval_criteria(parsed): """ Get the evaluation criteria from course detail page @@ -171,13 +171,18 @@ def get_eval_criteria(parsed): # Case 2: 2 or more rows for r in rows[1:]: elem = r.getchildren() - kind = elem[0].text + # kind = elem[0].text + # New code to deal with the new line character + kind = elem[0].text.rstrip() percent = elem[1].text.strip()[:-1] or -1 try: percent = int(percent) except ValueError: logging.warning(f"Unable to parse percent: {percent}") - criteria = to_half_width(elem[2].text) + # criteria = to_half_width(elem[2].text) + # New code to deal with the breakline + criteria_elements = elem[2].xpath('.//text()') + criteria = to_half_width(''.join(criteria_elements)) evals.append({ "type": to_enum(eval_type_map)(kind), "percent": percent, diff --git a/src/lambda/get-single-thread/index.py b/src/lambda/get-single-thread/index.py index a6489c17e..5cba2b371 100644 --- a/src/lambda/get-single-thread/index.py +++ b/src/lambda/get-single-thread/index.py @@ -4,21 +4,25 @@ @resp_handler -def get_single_thread(board_id, ts, thread_id, uid): +def get_single_thread(board_id, thread_id, uid=""): + + results = table.query( + KeyConditionExpression=Key("board_id").eq( + board_id) & Key("thread_id").eq(thread_id) + )["Items"] - results = table.query(KeyConditionExpression=Key( - "board_id").eq(board_id), - ConditionExpression=Attr('thread_id').eq(thread_id))["Items"] if not results: raise LookupError table.update_item( Key={ "board_id": board_id, - "created_at": ts, + "thread_id": thread_id, + }, + UpdateExpression="SET #v = #v + :incr", + ExpressionAttributeNames={ + '#v': 'views' }, - ConditionExpression=Attr('thread_id').eq(thread_id), - UpdateExpression="SET views = views + :incr", ExpressionAttributeValues={ ":incr": 1 } @@ -29,7 +33,11 @@ def get_single_thread(board_id, ts, thread_id, uid): item["mod"] = False if item["uid"] == uid: item["mod"] = True - del item["uid"] + item['user_liked'] = uid in item.get('likes', []) + item['total_likes'] = len(item.get('likes', [])) + + item.pop('uid', None) + item.pop('likes', None) body = JsonPayloadBuilder().add_status( True).add_data(item).add_message('').compile() @@ -39,8 +47,7 @@ def get_single_thread(board_id, ts, thread_id, uid): def handler(event, context): params = { "board_id": event["pathParameters"]["board_id"], - "ts": event["queryStringParameters"]["ts"], - "thread_id": event["pathParameters"]["thread_id"] + "thread_id": event["pathParameters"]["thread_id"], } if "uid" in event["queryStringParameters"]: params["uid"] = event["queryStringParameters"]["uid"] diff --git a/src/lambda/patch-comment/index.py b/src/lambda/patch-comment/index.py index 076ba7380..b24cca296 100644 --- a/src/lambda/patch-comment/index.py +++ b/src/lambda/patch-comment/index.py @@ -15,9 +15,9 @@ def patch_comment(thread_id, ts, uid, comment): "created_at": ts, }, ConditionExpression=Attr('uid').eq(uid), - UpdateExpression='SET body = :cbody, update_at = :ts', + UpdateExpression='SET body = :cbody, updated_at = :ts', ExpressionAtrributeValues={ - ":tbody": [comment['body']], + ":cbody": [comment['body']], ":ts": dt_now } ) diff --git a/src/lambda/patch-thread/index.py b/src/lambda/patch-thread/index.py index 5e103f87b..d718c98e5 100644 --- a/src/lambda/patch-thread/index.py +++ b/src/lambda/patch-thread/index.py @@ -1,28 +1,75 @@ +from boto3.dynamodb.conditions import Attr import json from datetime import datetime -from boto3.dynamodb.conditions import Attr -from utils import JsonPayloadBuilder -from utils import resp_handler -from utils import table +from utils import JsonPayloadBuilder, resp_handler, table @resp_handler -def patch_thread(board_id, ts, thread_id, thread): - +def patch_thread(board_id, uid, thread_id, thread, action): dt_now = datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z' - table.update_item( - Key={ + + if action == 'update': + table.update_item( + Key={ + "board_id": board_id, + "thread_id": thread_id, + }, + ConditionExpression=Attr('uid').eq(uid), + UpdateExpression='SET body = :tbody, title = :ttitle, updated_at = :ts', + ExpressionAttributeValues={ + ":tbody": thread['body'], + ":ttitle": thread['title'], + ":ts": dt_now + }, + ) + elif action == 'like': + # Add uid to the 'likes' list if it's not already there + table.update_item( + Key={ + "board_id": board_id, + "thread_id": thread_id, + }, + UpdateExpression='ADD likes :uid', + ConditionExpression='attribute_not_exists(likes) OR NOT contains (likes, :uid)', + ExpressionAttributeValues={ + ':uid': {uid} + }, + ) + elif action == 'dislike': + # Remove uid from the 'likes' list if it's already there + + response = table.get_item(Key={ "board_id": board_id, - "created_at": ts, - }, - ConditionExpression=Attr('thread_id').eq(thread_id), - UpdateExpression='SET body = :tbody, title = :ttitle, update_at = :ts', - ExpressionAtrributeValues={ - ":tbody": [thread['body']], - ":ttitle": [thread['title']], - ":ts": dt_now - }, - ) + "thread_id": thread_id, + } + ) + + current_likes = response['Item'].get('likes', set()) + + # if only one like, remove the set entirely + if len(current_likes) == 1 and uid in current_likes: + table.update_item( + Key={ + "board_id": board_id, + "thread_id": thread_id, + }, + UpdateExpression='REMOVE likes', + ConditionExpression='attribute_exists(likes)', + ) + + # else, just delete the uid from set likes + else: + table.update_item( + Key={ + "board_id": board_id, + "thread_id": thread_id, + }, + UpdateExpression='DELETE likes :uid', + ConditionExpression='attribute_exists(likes) AND contains (likes, :uid)', + ExpressionAttributeValues={ + ':uid': {uid} + }, + ) body = JsonPayloadBuilder().add_status( True).add_data(None).add_message('').compile() @@ -30,14 +77,13 @@ def patch_thread(board_id, ts, thread_id, thread): def handler(event, context): - req = json.loads(event['body']) params = { "board_id": event["pathParameters"]["board_id"], "thread_id": event["pathParameters"]["thread_id"], - "ts": event["queryStringParameters"]["ts"], "uid": event['requestContext']['authorizer']['claims']['sub'], - "thread": req["data"] + "thread": req.get("data", {}), + "action": req.get("action", "update") } return patch_thread(**params) diff --git a/src/lambda/post-comment/index.py b/src/lambda/post-comment/index.py index 532a87a1c..2bf5c8d9c 100644 --- a/src/lambda/post-comment/index.py +++ b/src/lambda/post-comment/index.py @@ -5,7 +5,7 @@ @resp_handler -def post_review(thread_id, comment, uid): +def post_comment(thread_id, comment, uid=''): text = comment["body"] @@ -20,8 +20,11 @@ def post_review(thread_id, comment, uid): } table.put_item(Item=thread_comment) + thread_comment.pop('uid', None) + thread_comment["mod"] = True + body = JsonPayloadBuilder().add_status( - True).add_data(None).add_message('').compile() + True).add_data(thread_comment).add_message('').compile() return body @@ -33,4 +36,4 @@ def handler(event, context): "uid": event['requestContext']['authorizer']['claims']['sub'] } - return post_review(**params) + return post_comment(**params) diff --git a/src/lambda/post-comment/utils.py b/src/lambda/post-comment/utils.py index dbcd31dd6..47c061aee 100644 --- a/src/lambda/post-comment/utils.py +++ b/src/lambda/post-comment/utils.py @@ -48,3 +48,21 @@ def api_response(code, body): "multiValueHeaders": {"Access-Control-Allow-Methods": ["POST", "OPTIONS", "GET", "PATCH", "DELETE"]}, "body": body } + + +def resp_handler(func=None, headers=None): + def handle(*args, **kwargs): + try: + resp = func(*args, **kwargs) + return api_response(200, resp) + except LookupError: + resp = JsonPayloadBuilder().add_status(False).add_data(None) \ + .add_message("Not found").compile() + return api_response(404, resp) + except Exception as e: + logging.error(str(e)) + resp = JsonPayloadBuilder().add_status(False).add_data(None) \ + .add_message("Internal error, please contact bugs@wasedatime.com.").compile() + return api_response(500, resp) + + return handle diff --git a/src/lambda/post-thread/index.py b/src/lambda/post-thread/index.py index b975faa78..9057136e2 100644 --- a/src/lambda/post-thread/index.py +++ b/src/lambda/post-thread/index.py @@ -8,7 +8,7 @@ @resp_handler def post_thread(board_id, thread, uid): - thread_id = build_thread_id(uid) + thread_id = build_thread_id() text = thread["body"] @@ -25,13 +25,16 @@ def post_thread(board_id, thread, uid): "tag_id": thread["tag_id"], "group_id": thread["group_id"], "univ_id": thread["univ_id"], - "view": 0, + "views": 0, } table.put_item(Item=thread_item) + thread_item.pop('uid', None) + thread_item["mod"] = True + body = JsonPayloadBuilder().add_status( - True).add_data(None).add_message('').compile() + True).add_data(thread_item).add_message('').compile() return body diff --git a/src/lambda/post-thread/utils.py b/src/lambda/post-thread/utils.py index e9599b5d3..6c0ae57fc 100644 --- a/src/lambda/post-thread/utils.py +++ b/src/lambda/post-thread/utils.py @@ -70,15 +70,12 @@ def handle(*args, **kwargs): return handle -def build_thread_id(uid): +def build_thread_id(): unique_id = str(uuid.uuid4()) ts = datetime.now().strftime('%Y%m%d%H%M%S') - first_half = uid[:5] - second_half = unique_id[5:] - - thread_id = f"{ts}{first_half}{second_half}" + thread_id = f"{ts}_{unique_id}" return thread_id diff --git a/src/lambda/syllabus-scraper/const.py b/src/lambda/syllabus-scraper/const.py index 3afbdf6d6..6af3f7cbe 100644 --- a/src/lambda/syllabus-scraper/const.py +++ b/src/lambda/syllabus-scraper/const.py @@ -79,7 +79,9 @@ "14-809(院生指導室)": "14-809", "14-808(院生指導室)": "14-808", "Seminar room 2 50-303": "50-303", - "drafting room": "57-1F" + "drafting room": "57-1F", + "-": "undecided", + "Faculty Office": "Faculty Office" } user_agents = [ @@ -237,6 +239,6 @@ cron_schedule = ["01-01", "02-01", "02-14", "02-24", "03-01", "03-04", "03-07", "03-10", "03-16", "03-18", "03-21", "03-24", "03-27", "04-01", "04-03", "04-05", "04-08", "04-16", "04-20", "04-24", "04-26", "04-28", - "05-01", "05-09", "05-12", "05-14", "05-16", "06-01", "06-02", "07-01", "07-19", "07-21", "07-23", "08-01", - "08-19", "08-21", "08-23", "09-01", "09-04", "09-07", "09-10", "09-13", "09-15", "09-17", "09-20", + "05-01", "05-09", "05-12", "05-14", "05-16", "06-01", "07-01", "07-19", "07-21", "07-23", "08-01", + "08-19", "08-21", "08-23", "09-01", "09-04", "09-07", "09-10", "09-13", "09-15", "09-17", "09-19", "09-20", "09-23", "09-25", "09-28", "09-30", "10-01", "10-03", "10-05", "10-08", "11-01", "12-01"] diff --git a/src/lambda/syllabus-scraper/crawler.py b/src/lambda/syllabus-scraper/crawler.py index 30c3411f0..94f440467 100644 --- a/src/lambda/syllabus-scraper/crawler.py +++ b/src/lambda/syllabus-scraper/crawler.py @@ -28,7 +28,8 @@ def execute(self): :return: list of courses """ pages = self.get_max_page() - course_pages = run_concurrently(self.scrape_catalog, range(pages), self.worker) + course_pages = run_concurrently( + self.scrape_catalog, range(pages), self.worker) course_ids = (course_id for page in course_pages for course_id in page) results = run_concurrently(self.scrape_course, course_ids, self.worker) return results @@ -84,10 +85,14 @@ def scrape_course(self, course_id): "n": 'array', # eval "o": 'string', # code "p": 'string', # subtitle + "q": 'string', #category + "r": 'string', #modality } """ - req_en = requests.Request(url=build_url(lang='en', course_id=course_id), headers=header) - req_jp = requests.Request(url=build_url(lang='jp', course_id=course_id), headers=header) + req_en = requests.Request(url=build_url( + lang='en', course_id=course_id), headers=header) + req_jp = requests.Request(url=build_url( + lang='jp', course_id=course_id), headers=header) parsed_en = html.fromstring(requests.urlopen(req_en).read()) parsed_jp = html.fromstring(requests.urlopen(req_jp).read()) info_en = parsed_en.xpath(query["info_table"])[0] diff --git a/src/lambda/syllabus-scraper/utils.py b/src/lambda/syllabus-scraper/utils.py index 197352155..e58d3a6ac 100644 --- a/src/lambda/syllabus-scraper/utils.py +++ b/src/lambda/syllabus-scraper/utils.py @@ -149,12 +149,27 @@ def merge_period_location(periods, locations): for p in periods: p["l"] = locations[0] return periods - # TODO find other cases # Case 2: More no. of periods than no. of locations zipped = list(itertools.zip_longest(periods, locations)) for (p, loc) in zipped: - p["l"] = loc + if p is None: + logging.error(f"Unexpected None in periods. loc={loc}") + continue + + if loc is not None: + p["l"] = loc + else: + logging.warning( + f"Missing location for period {p}. Assigning default value.") + p["l"] = "undecided" + occurrences.append(p) + + # Case 3: Logging error for unusual scenarios + if not occurrences: + logging.error( + f"merge_period_location resulted in no occurrences for input periods={periods}, locations={locations}") + return occurrences @@ -197,15 +212,15 @@ def parse_location(loc): rooms = [] locations = loc.split('/') for l in locations: - match = re.search(r'0(\d):(.*)', l) - count, classroom = int(match.group(1)) - 1, match.group(2) - classroom = rename_location(classroom) - # Sub-case: two location records for same period - if count >= len(rooms): - rooms.append(classroom) - else: - rooms.__setitem__(count, rooms[count] + "/" + classroom) - return rooms + matches = re.findall(r'0(\d):(.*)', l) + for match in matches: + count, classroom = int(match[0]) - 1, match[1] + classroom = rename_location(classroom) + if count >= len(rooms): + rooms.append([classroom]) + else: + rooms[count].append(classroom) + return [room for sublist in rooms for room in sublist] def parse_lang(lang):