From adf8283ae09234eef0f6c57fae410b10522f2790 Mon Sep 17 00:00:00 2001 From: Cyril Rouillon Date: Thu, 16 May 2024 16:05:41 +0200 Subject: [PATCH] first commit --- .gitignore | 10 + backend/README.md | 42 + backend/controllers/favorite.js | 27 + backend/controllers/lot.js | 167 + backend/controllers/sale.js | 282 + backend/index.js | 27 + backend/launch.json | 10 + backend/package-lock.json | 5416 ++++++ backend/package.json | 27 + backend/routes/favorite.js | 7 + backend/routes/lot.js | 12 + backend/routes/sale.js | 21 + backend/server.js | 5 + backend/services/agenda.js | 23 + backend/services/agent.js | 89 + backend/services/db.js | 18 + backend/services/favorites.js | 27 + backend/services/lotDb.js | 75 + backend/services/saleDb.js | 67 + client/.DS_Store | Bin 0 -> 6148 bytes client/.eslintrc.json | 50 + client/LICENSE | 21 + client/README copy.md | 18 + client/README.md | 67 + client/angular.json | 122 + client/karma.conf.js | 44 + client/package-lock.json | 15330 ++++++++++++++++ client/package.json | 57 + client/src/.DS_Store | Bin 0 -> 6148 bytes client/src/app/.DS_Store | Bin 0 -> 8196 bytes client/src/app/app-routing.module.ts | 75 + client/src/app/app.component.ts | 7 + client/src/app/app.module.ts | 32 + client/src/app/core/core.module.ts | 49 + .../src/app/core/guards/admin.guard.spec.ts | 66 + client/src/app/core/guards/admin.guard.ts | 22 + client/src/app/core/guards/auth.guard.spec.ts | 79 + client/src/app/core/guards/auth.guard.ts | 32 + .../app/core/guards/module-import.guard.ts | 5 + .../app/core/interceptors/auth.interceptor.ts | 44 + .../core/interceptors/spinner.interceptor.ts | 33 + client/src/app/core/services/api.service.ts | 88 + client/src/app/core/services/auth.service.ts | 71 + .../app/core/services/globar-error.handler.ts | 27 + .../app/core/services/model/lot.interface.ts | 29 + .../core/services/model/lotInfo.interface.ts | 15 + .../app/core/services/model/sale.interface.ts | 24 + .../core/services/model/saleInfo.interface.ts | 11 + .../app/core/services/notification.service.ts | 15 + .../app/core/services/spinner.service.spec.ts | 36 + .../src/app/core/services/spinner.service.ts | 21 + .../custom-material/custom-material.module.ts | 98 + .../select-check-all.component.css | 4 + .../select-check-all.component.html | 4 + .../select-check-all.component.ts | 35 + .../about/about-page/about-page.component.css | 3 + .../about-page/about-page.component.html | 32 + .../about-page/about-page.component.spec.ts | 25 + .../about/about-page/about-page.component.ts | 12 + .../features/about/about-routing.module.ts | 21 + client/src/app/features/about/about.module.ts | 16 + .../account-page/account-page.component.css | 0 .../account-page/account-page.component.html | 35 + .../account-page/account-page.component.ts | 17 + .../account/account-routing.module.ts | 21 + .../app/features/account/account.module.ts | 19 + .../change-password.component.css | 6 + .../change-password.component.html | 70 + .../change-password.component.ts | 75 + .../profile-details.component.css | 3 + .../profile-details.component.html | 15 + .../profile-details.component.ts | 22 + .../app/features/auth/auth-routing.module.ts | 18 + client/src/app/features/auth/auth.module.ts | 18 + .../features/auth/login/login.component.css | 0 .../features/auth/login/login.component.html | 47 + .../features/auth/login/login.component.ts | 67 + .../password-reset-request.component.css | 0 .../password-reset-request.component.html | 32 + .../password-reset-request.component.ts | 54 + .../password-reset.component.css | 0 .../password-reset.component.html | 45 + .../password-reset.component.ts | 77 + .../customer-list/customer-list.component.css | 7 + .../customer-list.component.html | 42 + .../customer-list/customer-list.component.ts | 53 + .../customers/customers-routing.module.ts | 21 + .../features/customers/customers.module.ts | 17 + .../dashboard-home.component.css | 17 + .../dashboard-home.component.html | 18 + .../dashboard-home.component.ts | 30 + .../dashboard/dashboard-routing.module.ts | 21 + .../features/dashboard/dashboard.module.ts | 16 + .../favorites-page.component.css | 3 + .../favorites-page.component.html | 64 + .../favorites-page.component.ts | 34 + .../change-image-dialog.component.css | 4 + .../change-image-dialog.component.html | 16 + .../change-image-dialog.component.ts | 33 + .../new-favorite-page.component.css | 3 + .../new-favorite-page.component.html | 121 + .../new-favorite-page.component.ts | 138 + .../favorites/favorites-routing.module.ts | 23 + .../features/favorites/favorites.module.ts | 22 + .../features/icons/icons-routing.module.ts | 20 + client/src/app/features/icons/icons.module.ts | 17 + .../features/icons/icons/icons.component.css | 4 + .../features/icons/icons/icons.component.html | 16 + .../icons/icons/icons.component.spec.ts | 25 + .../features/icons/icons/icons.component.ts | 11 + .../pictures-page/pictures-page.component.css | 3 + .../pictures-page.component.html | 33 + .../pictures-page.component.spec.ts | 25 + .../pictures-page/pictures-page.component.ts | 81 + .../pictures/pictures-routing.module.ts | 21 + .../app/features/pictures/pictures.module.ts | 17 + .../loading-sale-dialog.component.css | 4 + .../loading-sale-dialog.component.html | 31 + .../loading-sale-dialog.component.ts | 68 + .../sale-detail-page.component.css | 0 .../sale-detail-page.component.html | 119 + .../sale-detail-page.component.ts | 129 + .../sales/sales-page/sales-page.component.css | 3 + .../sales-page/sales-page.component.html | 162 + .../sales/sales-page/sales-page.component.ts | 118 + .../features/sales/sales-routing.module.ts | 23 + client/src/app/features/sales/sales.module.ts | 22 + .../typography/typography-routing.module.ts | 19 + .../features/typography/typography.module.ts | 17 + .../typography/typography.component.css | 0 .../typography/typography.component.html | 63 + .../typography/typography.component.spec.ts | 25 + .../typography/typography.component.ts | 11 + .../users/user-list/user-list.component.css | 0 .../users/user-list/user-list.component.html | 21 + .../users/user-list/user-list.component.ts | 24 + .../features/users/users-routing.module.ts | 21 + client/src/app/features/users/users.module.ts | 16 + .../confirm-dialog.component.css | 0 .../confirm-dialog.component.html | 12 + .../confirm-dialog.component.ts | 37 + ...ontent-placeholder-animation.component.css | 76 + ...ntent-placeholder-animation.component.html | 11 + ...content-placeholder-animation.component.ts | 12 + .../app/shared/layout/layout.component.css | 64 + .../app/shared/layout/layout.component.html | 140 + .../src/app/shared/layout/layout.component.ts | 59 + .../src/app/shared/mocks/spinner-consumer.ts | 11 + .../app/shared/pipes/limit-to.pipe.spec.ts | 44 + client/src/app/shared/pipes/limit-to.pipe.ts | 20 + .../app/shared/pipes/local-date.pipe.spec.ts | 33 + .../src/app/shared/pipes/local-date.pipe.ts | 16 + .../src/app/shared/pipes/yes-no.pipe.spec.ts | 24 + client/src/app/shared/pipes/yes-no.pipe.ts | 12 + client/src/app/shared/shared.module.ts | 42 + .../autocompleteSelectionValidator.ts | 11 + client/src/assets/.gitkeep | 0 .../assets/favicon/android-icon-144x144.png | Bin 0 -> 17055 bytes .../assets/favicon/android-icon-192x192.png | Bin 0 -> 23334 bytes .../src/assets/favicon/android-icon-36x36.png | Bin 0 -> 3256 bytes .../src/assets/favicon/android-icon-48x48.png | Bin 0 -> 4494 bytes .../src/assets/favicon/android-icon-72x72.png | Bin 0 -> 7088 bytes .../src/assets/favicon/android-icon-96x96.png | Bin 0 -> 10071 bytes .../src/assets/favicon/apple-icon-114x114.png | Bin 0 -> 12536 bytes .../src/assets/favicon/apple-icon-120x120.png | Bin 0 -> 13392 bytes .../src/assets/favicon/apple-icon-144x144.png | Bin 0 -> 17055 bytes .../src/assets/favicon/apple-icon-152x152.png | Bin 0 -> 18212 bytes .../src/assets/favicon/apple-icon-180x180.png | Bin 0 -> 23127 bytes .../src/assets/favicon/apple-icon-57x57.png | Bin 0 -> 5351 bytes .../src/assets/favicon/apple-icon-60x60.png | Bin 0 -> 5722 bytes .../src/assets/favicon/apple-icon-72x72.png | Bin 0 -> 7088 bytes .../src/assets/favicon/apple-icon-76x76.png | Bin 0 -> 7538 bytes .../assets/favicon/apple-icon-precomposed.png | Bin 0 -> 23908 bytes client/src/assets/favicon/apple-icon.png | Bin 0 -> 23908 bytes client/src/assets/favicon/browserconfig.xml | 2 + client/src/assets/favicon/favicon-16x16.png | Bin 0 -> 1641 bytes client/src/assets/favicon/favicon-32x32.png | Bin 0 -> 2831 bytes client/src/assets/favicon/favicon-96x96.png | Bin 0 -> 10071 bytes client/src/assets/favicon/favicon.ico | Bin 0 -> 1150 bytes client/src/assets/favicon/manifest.json | 41 + client/src/assets/favicon/ms-icon-144x144.png | Bin 0 -> 17055 bytes client/src/assets/favicon/ms-icon-150x150.png | Bin 0 -> 18042 bytes client/src/assets/favicon/ms-icon-310x310.png | Bin 0 -> 50250 bytes client/src/assets/favicon/ms-icon-70x70.png | Bin 0 -> 6823 bytes client/src/assets/images/user.png | Bin 0 -> 2933 bytes client/src/environments/environment.prod.ts | 7 + client/src/environments/environment.ts | 12 + client/src/index.html | 37 + client/src/main.ts | 12 + client/src/polyfills.ts | 53 + client/src/styles.css | 148 + client/src/test.ts | 14 + client/tsconfig.app.json | 15 + client/tsconfig.json | 33 + client/tsconfig.spec.json | 18 + docker-compose-dev.yml | 21 + docker-compose.yml | 24 + 197 files changed, 26666 insertions(+) create mode 100644 .gitignore create mode 100644 backend/README.md create mode 100644 backend/controllers/favorite.js create mode 100644 backend/controllers/lot.js create mode 100644 backend/controllers/sale.js create mode 100644 backend/index.js create mode 100644 backend/launch.json create mode 100644 backend/package-lock.json create mode 100644 backend/package.json create mode 100644 backend/routes/favorite.js create mode 100644 backend/routes/lot.js create mode 100644 backend/routes/sale.js create mode 100644 backend/server.js create mode 100644 backend/services/agenda.js create mode 100644 backend/services/agent.js create mode 100644 backend/services/db.js create mode 100644 backend/services/favorites.js create mode 100644 backend/services/lotDb.js create mode 100644 backend/services/saleDb.js create mode 100644 client/.DS_Store create mode 100644 client/.eslintrc.json create mode 100644 client/LICENSE create mode 100644 client/README copy.md create mode 100644 client/README.md create mode 100644 client/angular.json create mode 100644 client/karma.conf.js create mode 100644 client/package-lock.json create mode 100644 client/package.json create mode 100644 client/src/.DS_Store create mode 100644 client/src/app/.DS_Store create mode 100644 client/src/app/app-routing.module.ts create mode 100644 client/src/app/app.component.ts create mode 100644 client/src/app/app.module.ts create mode 100644 client/src/app/core/core.module.ts create mode 100644 client/src/app/core/guards/admin.guard.spec.ts create mode 100644 client/src/app/core/guards/admin.guard.ts create mode 100644 client/src/app/core/guards/auth.guard.spec.ts create mode 100644 client/src/app/core/guards/auth.guard.ts create mode 100644 client/src/app/core/guards/module-import.guard.ts create mode 100644 client/src/app/core/interceptors/auth.interceptor.ts create mode 100644 client/src/app/core/interceptors/spinner.interceptor.ts create mode 100644 client/src/app/core/services/api.service.ts create mode 100644 client/src/app/core/services/auth.service.ts create mode 100644 client/src/app/core/services/globar-error.handler.ts create mode 100644 client/src/app/core/services/model/lot.interface.ts create mode 100644 client/src/app/core/services/model/lotInfo.interface.ts create mode 100644 client/src/app/core/services/model/sale.interface.ts create mode 100644 client/src/app/core/services/model/saleInfo.interface.ts create mode 100644 client/src/app/core/services/notification.service.ts create mode 100644 client/src/app/core/services/spinner.service.spec.ts create mode 100644 client/src/app/core/services/spinner.service.ts create mode 100644 client/src/app/custom-material/custom-material.module.ts create mode 100644 client/src/app/custom-material/select-check-all/select-check-all.component.css create mode 100644 client/src/app/custom-material/select-check-all/select-check-all.component.html create mode 100644 client/src/app/custom-material/select-check-all/select-check-all.component.ts create mode 100644 client/src/app/features/about/about-page/about-page.component.css create mode 100644 client/src/app/features/about/about-page/about-page.component.html create mode 100644 client/src/app/features/about/about-page/about-page.component.spec.ts create mode 100644 client/src/app/features/about/about-page/about-page.component.ts create mode 100644 client/src/app/features/about/about-routing.module.ts create mode 100644 client/src/app/features/about/about.module.ts create mode 100644 client/src/app/features/account/account-page/account-page.component.css create mode 100644 client/src/app/features/account/account-page/account-page.component.html create mode 100644 client/src/app/features/account/account-page/account-page.component.ts create mode 100644 client/src/app/features/account/account-routing.module.ts create mode 100644 client/src/app/features/account/account.module.ts create mode 100644 client/src/app/features/account/change-password/change-password.component.css create mode 100644 client/src/app/features/account/change-password/change-password.component.html create mode 100644 client/src/app/features/account/change-password/change-password.component.ts create mode 100644 client/src/app/features/account/profile-details/profile-details.component.css create mode 100644 client/src/app/features/account/profile-details/profile-details.component.html create mode 100644 client/src/app/features/account/profile-details/profile-details.component.ts create mode 100644 client/src/app/features/auth/auth-routing.module.ts create mode 100644 client/src/app/features/auth/auth.module.ts create mode 100644 client/src/app/features/auth/login/login.component.css create mode 100644 client/src/app/features/auth/login/login.component.html create mode 100644 client/src/app/features/auth/login/login.component.ts create mode 100644 client/src/app/features/auth/password-reset-request/password-reset-request.component.css create mode 100644 client/src/app/features/auth/password-reset-request/password-reset-request.component.html create mode 100644 client/src/app/features/auth/password-reset-request/password-reset-request.component.ts create mode 100644 client/src/app/features/auth/password-reset/password-reset.component.css create mode 100644 client/src/app/features/auth/password-reset/password-reset.component.html create mode 100644 client/src/app/features/auth/password-reset/password-reset.component.ts create mode 100644 client/src/app/features/customers/customer-list/customer-list.component.css create mode 100644 client/src/app/features/customers/customer-list/customer-list.component.html create mode 100644 client/src/app/features/customers/customer-list/customer-list.component.ts create mode 100644 client/src/app/features/customers/customers-routing.module.ts create mode 100644 client/src/app/features/customers/customers.module.ts create mode 100644 client/src/app/features/dashboard/dashboard-home/dashboard-home.component.css create mode 100644 client/src/app/features/dashboard/dashboard-home/dashboard-home.component.html create mode 100644 client/src/app/features/dashboard/dashboard-home/dashboard-home.component.ts create mode 100644 client/src/app/features/dashboard/dashboard-routing.module.ts create mode 100644 client/src/app/features/dashboard/dashboard.module.ts create mode 100644 client/src/app/features/favorites/favorites-page/favorites-page.component.css create mode 100644 client/src/app/features/favorites/favorites-page/favorites-page.component.html create mode 100644 client/src/app/features/favorites/favorites-page/favorites-page.component.ts create mode 100644 client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.css create mode 100644 client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.html create mode 100644 client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.ts create mode 100644 client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.css create mode 100644 client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.html create mode 100644 client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.ts create mode 100644 client/src/app/features/favorites/favorites-routing.module.ts create mode 100644 client/src/app/features/favorites/favorites.module.ts create mode 100644 client/src/app/features/icons/icons-routing.module.ts create mode 100644 client/src/app/features/icons/icons.module.ts create mode 100644 client/src/app/features/icons/icons/icons.component.css create mode 100644 client/src/app/features/icons/icons/icons.component.html create mode 100644 client/src/app/features/icons/icons/icons.component.spec.ts create mode 100644 client/src/app/features/icons/icons/icons.component.ts create mode 100644 client/src/app/features/pictures/pictures-page/pictures-page.component.css create mode 100644 client/src/app/features/pictures/pictures-page/pictures-page.component.html create mode 100644 client/src/app/features/pictures/pictures-page/pictures-page.component.spec.ts create mode 100644 client/src/app/features/pictures/pictures-page/pictures-page.component.ts create mode 100644 client/src/app/features/pictures/pictures-routing.module.ts create mode 100644 client/src/app/features/pictures/pictures.module.ts create mode 100644 client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.css create mode 100644 client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.html create mode 100644 client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.ts create mode 100644 client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.css create mode 100644 client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.html create mode 100644 client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.ts create mode 100644 client/src/app/features/sales/sales-page/sales-page.component.css create mode 100644 client/src/app/features/sales/sales-page/sales-page.component.html create mode 100644 client/src/app/features/sales/sales-page/sales-page.component.ts create mode 100644 client/src/app/features/sales/sales-routing.module.ts create mode 100644 client/src/app/features/sales/sales.module.ts create mode 100644 client/src/app/features/typography/typography-routing.module.ts create mode 100644 client/src/app/features/typography/typography.module.ts create mode 100644 client/src/app/features/typography/typography/typography.component.css create mode 100644 client/src/app/features/typography/typography/typography.component.html create mode 100644 client/src/app/features/typography/typography/typography.component.spec.ts create mode 100644 client/src/app/features/typography/typography/typography.component.ts create mode 100644 client/src/app/features/users/user-list/user-list.component.css create mode 100644 client/src/app/features/users/user-list/user-list.component.html create mode 100644 client/src/app/features/users/user-list/user-list.component.ts create mode 100644 client/src/app/features/users/users-routing.module.ts create mode 100644 client/src/app/features/users/users.module.ts create mode 100644 client/src/app/shared/confirm-dialog/confirm-dialog.component.css create mode 100644 client/src/app/shared/confirm-dialog/confirm-dialog.component.html create mode 100644 client/src/app/shared/confirm-dialog/confirm-dialog.component.ts create mode 100644 client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.css create mode 100644 client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.html create mode 100644 client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.ts create mode 100644 client/src/app/shared/layout/layout.component.css create mode 100644 client/src/app/shared/layout/layout.component.html create mode 100644 client/src/app/shared/layout/layout.component.ts create mode 100644 client/src/app/shared/mocks/spinner-consumer.ts create mode 100644 client/src/app/shared/pipes/limit-to.pipe.spec.ts create mode 100644 client/src/app/shared/pipes/limit-to.pipe.ts create mode 100644 client/src/app/shared/pipes/local-date.pipe.spec.ts create mode 100644 client/src/app/shared/pipes/local-date.pipe.ts create mode 100644 client/src/app/shared/pipes/yes-no.pipe.spec.ts create mode 100644 client/src/app/shared/pipes/yes-no.pipe.ts create mode 100644 client/src/app/shared/shared.module.ts create mode 100644 client/src/app/shared/validators/autocompleteSelectionValidator.ts create mode 100644 client/src/assets/.gitkeep create mode 100644 client/src/assets/favicon/android-icon-144x144.png create mode 100644 client/src/assets/favicon/android-icon-192x192.png create mode 100644 client/src/assets/favicon/android-icon-36x36.png create mode 100644 client/src/assets/favicon/android-icon-48x48.png create mode 100644 client/src/assets/favicon/android-icon-72x72.png create mode 100644 client/src/assets/favicon/android-icon-96x96.png create mode 100644 client/src/assets/favicon/apple-icon-114x114.png create mode 100644 client/src/assets/favicon/apple-icon-120x120.png create mode 100644 client/src/assets/favicon/apple-icon-144x144.png create mode 100644 client/src/assets/favicon/apple-icon-152x152.png create mode 100644 client/src/assets/favicon/apple-icon-180x180.png create mode 100644 client/src/assets/favicon/apple-icon-57x57.png create mode 100644 client/src/assets/favicon/apple-icon-60x60.png create mode 100644 client/src/assets/favicon/apple-icon-72x72.png create mode 100644 client/src/assets/favicon/apple-icon-76x76.png create mode 100644 client/src/assets/favicon/apple-icon-precomposed.png create mode 100644 client/src/assets/favicon/apple-icon.png create mode 100644 client/src/assets/favicon/browserconfig.xml create mode 100644 client/src/assets/favicon/favicon-16x16.png create mode 100644 client/src/assets/favicon/favicon-32x32.png create mode 100644 client/src/assets/favicon/favicon-96x96.png create mode 100644 client/src/assets/favicon/favicon.ico create mode 100644 client/src/assets/favicon/manifest.json create mode 100644 client/src/assets/favicon/ms-icon-144x144.png create mode 100644 client/src/assets/favicon/ms-icon-150x150.png create mode 100644 client/src/assets/favicon/ms-icon-310x310.png create mode 100644 client/src/assets/favicon/ms-icon-70x70.png create mode 100644 client/src/assets/images/user.png create mode 100644 client/src/environments/environment.prod.ts create mode 100644 client/src/environments/environment.ts create mode 100644 client/src/index.html create mode 100644 client/src/main.ts create mode 100644 client/src/polyfills.ts create mode 100644 client/src/styles.css create mode 100644 client/src/test.ts create mode 100644 client/tsconfig.app.json create mode 100644 client/tsconfig.json create mode 100644 client/tsconfig.spec.json create mode 100644 docker-compose-dev.yml create mode 100644 docker-compose.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5e8edc8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +backend/node_modules + +client/.angular +client/node_modules +client/.vscode + +.vscode +data/ +vendore/ + diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..b468397 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,42 @@ +## Backend +# Dev +npm run dev +http://localhost:3000 + +## Docker Database Dev +```bash +docker-compose -f docker-compose-dev.yml build +docker-compose -f docker-compose-dev.yml up +``` + +## Agenda +http://localhost:3000/dash/ + +## API + +# Lot +GET http://localhost:3000/api/lot/getInfos/https%3A%2F%2Fwww.interencheres.com%2Fvehicules%2Fvehicules-624955%2Flot-75622389.html +GET http://localhost:3000/api/lot/getPictures/https%3A%2F%2Fwww.interencheres.com%2Fvehicules%2Fvehicules-624955%2Flot-75622389.html + +POST http://localhost:3000/api/lot/NextItem +POST http://localhost:3000/api/lot/AuctionedItem +POST http://localhost:3000/api/lot/Bid + +# Sale +GET http://localhost:3000/api/sale/getSaleInfos/https%3A%2F%2Fwww.interencheres.com%2Fvehicules%2Fvehicules-624955 +GET http://localhost:3000/api/sale/followSale/624955 + +GET http://localhost:3000/api/sale/sale/624955 +POST http://localhost:3000/api/sale/sale +PUT http://localhost:3000/api/sale/sale/624955 +DELETE http://localhost:3000/api/sale/sale/624955 + +GET http://localhost:3000/api/sale/getAll +GET http://localhost:3000/api/sale/getByUrl/https%3A%2F%2Fwww.interencheres.com%2Fvehicules%2Fvehicules-624955 + +# Favorite +POST http://localhost:3000/api/favorite/save +GET http://localhost:3000/api/favorite/getAll + +# Prod +npm run start \ No newline at end of file diff --git a/backend/controllers/favorite.js b/backend/controllers/favorite.js new file mode 100644 index 0000000..4337e24 --- /dev/null +++ b/backend/controllers/favorite.js @@ -0,0 +1,27 @@ +const asyncHandler = require("express-async-handler"); +const { save, getAll } = require("../services/favorites"); + +exports.save = asyncHandler(async (req, res, next) => { + + try{ + let result = await save(req.body); + console.log(result); + res.status(204).send(); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } + +}); + +exports.getAll = asyncHandler(async (req, res, next) => { + console.log("controller getAll"); + try{ + let result = await getAll(); + console.log(result); + res.status(200).send(result); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } +}); \ No newline at end of file diff --git a/backend/controllers/lot.js b/backend/controllers/lot.js new file mode 100644 index 0000000..4193991 --- /dev/null +++ b/backend/controllers/lot.js @@ -0,0 +1,167 @@ +const asyncHandler = require("express-async-handler"); +const fetch = require('node-fetch'); +const { LotDb } = require("../services/lotDb"); +const lotDb = new LotDb(); +const { SaleDb } = require("../services/saleDb"); +const saleDb = new SaleDb(); + +const ApiURL = "http://host.docker.internal:3020/api"; + +// scrapping +exports.getInfos = asyncHandler(async (req, res, next) => { + let url = req.params.url + + url = encodeURIComponent(url); + + fetch(ApiURL+'/lot/getInfos/'+url) + .then(response => response.json()) + .then(data => { + res.json(data); + }) + .catch(error => { + console.error(error); + }); +}); + +exports.getPictures = asyncHandler(async (req, res, next) => { + let url = req.params.url + + url = encodeURIComponent(url); + + fetch(ApiURL+'/lot/getPictures/'+url) + .then(response => response.json()) + .then(data => { + res.json(data); + }) + .catch(error => { + console.error(error); + }); +}); + + +exports.getLotsBySale = asyncHandler(async (req, res, next) => { + let id = req.params.id + + const Sale = await saleDb.get(id); + if(!Sale){ + console.error("Sale not found"); + return res.status(404).send("Sale not found"); + } + + Lots = await lotDb.getBySaleId(Sale._id.toString(),Sale.platform); + res.json(Lots); + +}); + +// Follow Sale +exports.NextItem = asyncHandler(async (req, res, next) => { + try{ + + + Sale = await saleDb.getByIDPlatform(req.body.idSalePlatform, req.body.platform); + if(!Sale){ + console.error("Sale not found"); + return res.status(404).send("Sale not found"); + } + + let Lot = await lotDb.getByIDPlatform(req.body.idPlatform, req.body.platform); + if(Lot == null){ + console.log("Creating new Lot"); + + Lot = { + idPlatform: String(req.body.idPlatform), + platform: req.body.platform, + timestamp: req.body.timestamp, + lotNumber: String(req.body.lotNumber), + title: req.body.title, + description: req.body.description, + EstimateLow: req.body.EstimateLow, + EstimateHigh: req.body.EstimateHigh, + RawData: req.body.RawData, + sale_id: Sale._id, + } + + await lotDb.post(Lot); + + }else{ + console.log("Updating Lot"); + + Lot.timestamp = req.body.timestamp; + Lot.lotNumber = String(req.body.lotNumber); + Lot.title = req.body.title; + Lot.description = req.body.description; + Lot.EstimateLow = req.body.EstimateLow; + Lot.EstimateHigh = req.body.EstimateHigh; + Lot.RawData = req.body.RawData; + + await lotDb.put(Lot._id, Lot); + } + + res.status(204).send(); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } +}); + +exports.Bid = asyncHandler(async (req, res, next) => { + try{ + let Lot = await lotDb.getByIDPlatform(req.body.idPlatform, req.body.platform); + + if(Lot){ + console.log("Update Lot Bid"); + + BidInfo = { + timestamp: req.body.timestamp, + amount: req.body.amount, + auctioned_type: req.body.auctioned_type, + } + // If Lot.BidInfo doesn't exist, initialize it as an empty array + if (!Lot.Bids) { + Lot.Bids = []; + } + + // Add BidInfo to the array + Lot.Bids.push(BidInfo); + + await lotDb.put(Lot._id, Lot); + }else{ + console.error("Lot not found"); + return res.status(404).send("Lot not found"); + } + + res.status(204).send(); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } +}); + +exports.AuctionedItem = asyncHandler(async (req, res, next) => { + try{ + + let Lot = await lotDb.getByIDPlatform(req.body.idPlatform, req.body.platform); + + if(Lot){ + console.log("Update Lot AuctionedItem"); + + Lot.auctioned = { + timestamp: req.body.timestamp, + amount: req.body.amount, + auctioned_type: req.body.auctioned_type, + sold: req.body.sold, + } + + await lotDb.put(Lot._id, Lot); + }else{ + console.error("Lot not found"); + return res.status(404).send("Lot not found"); + } + + res.status(204).send(); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } +}); + diff --git a/backend/controllers/sale.js b/backend/controllers/sale.js new file mode 100644 index 0000000..4e3a135 --- /dev/null +++ b/backend/controllers/sale.js @@ -0,0 +1,282 @@ +const asyncHandler = require("express-async-handler"); +const moment = require('moment-timezone'); +const { ObjectId } = require('mongodb'); +const { SaleDb } = require("../services/saleDb"); +const saleDb = new SaleDb(); +const { LotDb } = require("../services/lotDb"); +const lotDb = new LotDb(); +const agenda = require('../services/agenda'); +const {Agent} = require('../services/agent'); +const agent = new Agent(); + + +exports.getSaleInfos = asyncHandler(async (req, res, next) => { + let url = req.params.url + agent.getSaleInfos(url) + .then(data => { + return res.status(200).json(data); + }) + .catch(error => { + console.error(error); + return res.status(500).send(error); + }); + // url = encodeURIComponent(url); + + // fetch(ApiAgentURL+'/sale/getSaleInfos/'+url) + // .then(response => response.json()) + // .then(data => { + // res.json(data); + // }) + // .catch(error => { + // console.error(error); + // }); +}); + +exports.prepareSale = asyncHandler(async (req, res, next) => { + + try{ + const id = req.params.id; + + agent.prepareSale(id) + .then(data => { + return res.status(200).json({"message": "Lots created"}); + }) + .catch(error => { + console.error(error); + return res.status(500).send(error); + }); + // url = encodeURIComponent(url); + // fetch(ApiAgentURL+'/sale/getLotList/'+url) + // .then(response => response.json()) + // .then(async data => { + // console.log(data); + // for (let lot of data) { + // lot.sale_id = Sale._id + + // await lotDb.post(lot); + // } + // res.status(200).send({"message": "Lots created"}) + // }) + // .catch(error => { + // console.error(error); + // return res.status(500).send(error); + // }); + }catch(err){ + console.error(err); + return res.status(500).send(err); + } +}); + +exports.followSale = asyncHandler(async (req, res, next) => { + + try{ + const id = req.params.id; + + agent.followSale(id) + .then(data => { + res.status(200).send(data); + }) + .catch(error => { + console.error(error); + return res.status(500).send(error); + }); + }catch(err){ + console.error(err); + return res.status(500).send(err); + } +}); + + +// DB +exports.get = asyncHandler(async (req, res, next) => { + + try{ + const id = req.params.id; + let result = await saleDb.get(id); + res.status(200).send(result); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } + +}); + +exports.post = asyncHandler(async (req, res, next) => { + + try{ + // check if double + let Sale = await saleDb.getByIDPlatform(req.body.idPlatform, req.body.platform); + if(Sale){ + return res.status(500).send("Sale already exists"); + } + + let createData = await saleDb.post(req.body); + console.log(createData.insertedId); + + const NowParis = moment.tz(new Date(),"Europe/Paris") + + // Scheduling the Prepare job + const dateSaleMinus24Hours = moment.tz(req.body.date, "Europe/Paris").subtract(24, 'hours'); + if(dateSaleMinus24Hours.isAfter(NowParis)){ + const jobPrepare = agenda.create('prepareSale', { saleId: createData.insertedId }); + jobPrepare.schedule(dateSaleMinus24Hours.toDate()); + await jobPrepare.save(); + }else{ console.log("Sale is less than 24 hours away, no Prepare Job");} + + // Scheduling the Follow job + const dateSale = moment.tz(req.body.date, "Europe/Paris"); + if(dateSale.isAfter(NowParis)){ + const jobFollow = agenda.create('followSale', { saleId: createData.insertedId }); + jobFollow.schedule(dateSale.toDate()); + await jobFollow.save(); + }else{ console.log("Sale is in the past, no Follow Job");} + + res.status(204).send(); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } + +}); + +exports.put = asyncHandler(async (req, res, next) => { + + try{ + const id = req.params.id; + let updatedDocument = { ...req.body }; + delete updatedDocument._id; + console.log(updatedDocument); + let result = await saleDb.put(id, updatedDocument); + console.log(result); + res.status(200).send(result); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } + +}); + +exports.delete = asyncHandler(async (req, res, next) => { + try{ + const id = req.params.id; + + // Remove all lots linked to the sale + console.log("Deleting lots sale_id: "+id); + await lotDb.deleteAllLotBySaleId(id); + + // Remove the sale + await saleDb.remove(id); + + //remove the Jobs + const JobSale = await agenda.jobs({ 'data.saleId': new ObjectId(id) }); + for (const job of JobSale) { + await job.remove(); + } + + res.status(200).send({"message": "Sale and Lots deleted"}); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } + +}); + +// Fucntions + +exports.getAll = asyncHandler(async (req, res, next) => { + try{ + let result = await saleDb.getAll(); + res.status(200).send(result); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } +}); + +exports.getByUrl = asyncHandler(async (req, res, next) => { + try{ + let url = req.params.url + url = decodeURIComponent(url); + + let result = await saleDb.getByUrl(url); + //console.log(result); + res.status(200).send(result); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } +}); + +exports.postProcessing = asyncHandler(async (req, res, next) => { + try{ + const id = req.params.id; + + Sale = await saleDb.get(id); + if(!Sale){ + console.error("Sale not found"); + return res.status(404).send("Sale not found"); + } + + Lots = await lotDb.getBySaleId(Sale._id.toString(),Sale.platform); + + let startTime = 0; + if (Array.isArray(Lots[0].Bids)) { + startTime = Lots[0].Bids[0].timestamp; + }else{ + startTime = Lots[0].timestamp; + } + + let LastBid = [...Lots].reverse().find(lot => lot.auctioned !== undefined); + + let endTime = 0; + if (Array.isArray(LastBid.Bids)) { + endTime = LastBid.Bids[LastBid.Bids.length-1].timestamp; + }else{ + endTime = LastBid.timestamp; + } + console.log("Start Time: "+startTime); + console.log("End Time: "+endTime); + + let duration = endTime-startTime; + + let totalAmount = 0; + for (let lot of Lots) { + if (lot.auctioned) { + totalAmount += lot.auctioned.amount; + } + } + + function calculateMedian(array) { + array.sort((a, b) => a - b); + let middleIndex = Math.floor(array.length / 2); + + if (array.length % 2 === 0) { // array has an even length + return (array[middleIndex - 1] + array[middleIndex]) / 2; + } else { // array has an odd length + return array[middleIndex]; + } + } + const amounts = Lots.map(lot => lot.auctioned?.amount).filter(Boolean); + + //console.error(Lots); + let postProcessing = { + nbrLots: Lots.length, + duration: duration, + durationPerLots: (duration/Lots.length).toFixed(0), + totalAmount: totalAmount, + averageAmount: (totalAmount/Lots.length).toFixed(2), + medianAmount: calculateMedian(amounts).toFixed(2), + } + + console.log(postProcessing); + + Sale.postProcessing = postProcessing; + await saleDb.put(Sale._id, Sale); + + res.status(200).send({"message": "Post Processing done"}); + }catch(err){ + console.log(err); + return res.status(500).send(err); + } + +}); \ No newline at end of file diff --git a/backend/index.js b/backend/index.js new file mode 100644 index 0000000..eb82e7e --- /dev/null +++ b/backend/index.js @@ -0,0 +1,27 @@ +const express = require('express') +const app = express() + +var bodyParser = require('body-parser'); +app.use(bodyParser.json()) + +const cors = require('cors'); +app.use(cors()); +// Enable preflight requests for all routes +app.options('*', cors()); + +// Agenda Scheduller +const agenda = require('./services/agenda'); +(async function() { + await agenda.start(); + })(); + +// Agenda UI +var Agendash = require("agendash"); +app.use("/dash", Agendash(agenda)); + +// routes +app.use('/api/lot', require('./routes/lot')); +app.use('/api/sale', require('./routes/sale')); +app.use('/api/favorite', require('./routes/favorite')); + +module.exports = app \ No newline at end of file diff --git a/backend/launch.json b/backend/launch.json new file mode 100644 index 0000000..0864e34 --- /dev/null +++ b/backend/launch.json @@ -0,0 +1,10 @@ +{ + "type": "node", + "request": "attach", + "name": "Attach to Process", + "restart": true, + "address": "127.0.0.1", + "port": 53481, + "localRoot": "${workspaceFolder}", + "remoteRoot": "${workspaceFolder}" + } \ No newline at end of file diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 0000000..6efd84d --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,5416 @@ +{ + "name": "jucundus", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "jucundus", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@angular/cli": "^17.1.3", + "@hokify/agenda": "^6.3.0", + "agendash": "^4.0.0", + "cors": "^2.8.5", + "express": "^4.18.2", + "express-async-handler": "^1.2.0", + "mongodb": "^6.5.0", + "node-fetch": "^2.7.0" + }, + "devDependencies": { + "nodemon": "^3.0.3" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1701.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1701.3.tgz", + "integrity": "sha512-K5rvhslbXNwx04cCLviEJCA27MwoJRMMzALFXySi9BqjZnZUOtZnOBuuCdrTPaRmFaYqGO4Im5GNzpbb/NB8zg==", + "dependencies": { + "@angular-devkit/core": "17.1.3", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.1.3.tgz", + "integrity": "sha512-iuVK4hyW3YhusxIi8zGBvvVA9pWtDT3H6LQbWdVk9D3jXCZBIrEMklvAiJErqficKnUurf6gtFOeA8Fop6GotA==", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "picomatch": "3.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.1.3.tgz", + "integrity": "sha512-zKoWG1hDfvi1vR9Hqoca9hWo9vDg8evmQvGcBW5jXR5ndZi5Oit/uDcGdA8WUKvBd1EG7WMqp0FgcDR9EA9WCw==", + "dependencies": { + "@angular-devkit/core": "17.1.3", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.5", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.1.3.tgz", + "integrity": "sha512-ysPWDdqo2cwfeskKVAg8p4C8xuezWcIWyW/ACSjWw6yp4OZvyVd6cGZrc0POVZzAPtTOYJSgWOpF/DCHQFluSg==", + "dependencies": { + "@angular-devkit/architect": "0.1701.3", + "@angular-devkit/core": "17.1.3", + "@angular-devkit/schematics": "17.1.3", + "@schematics/angular": "17.1.3", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "9.2.12", + "jsonc-parser": "3.2.0", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "17.0.5", + "resolve": "1.22.8", + "semver": "7.5.4", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "optional": true, + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "optional": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.556.0.tgz", + "integrity": "sha512-HWd7PyXCuY1Z9KBaufbzpIvS2QeUAak5wfYwylW2DrEvt6A4tjWCBSbbSXNoawqCv/HitA39v953N/1PojJVVQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/credential-provider-node": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz", + "integrity": "sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.556.0.tgz", + "integrity": "sha512-AXKd2TB6nNrksu+OfmHl8uI07PdgzOo4o8AxoRO8SHlwoMAGvcT9optDGVSYoVfgOKTymCoE7h8/UoUfPc11wQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": "^3.556.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.556.0.tgz", + "integrity": "sha512-TsK3js7Suh9xEmC886aY+bv0KdLLYtzrcmVt6sJ/W6EnDXYQhBuKYFhp03NrN2+vSvMGpqJwR62DyfKe1G0QzQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": "^3.556.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.556.0.tgz", + "integrity": "sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA==", + "optional": true, + "dependencies": { + "@smithy/core": "^1.4.2", + "@smithy/protocol-http": "^3.3.0", + "@smithy/signature-v4": "^2.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.556.0.tgz", + "integrity": "sha512-PKYBjfpLHJZhrIv0M9eJ47yeDaV8NUMVe4vsiHG5tvlvwWGP84k9GJlr51U/s84OzIyXzVpiqP8PU5yKovUFIg==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz", + "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.552.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz", + "integrity": "sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.556.0.tgz", + "integrity": "sha512-0Nz4ErOlXhe3muxWYMbPwRMgfKmVbBp36BAE2uv/z5wTbfdBkcgUwaflEvlKCLUTdHzuZsQk+BFS/gVyaUeOuA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/credential-provider-env": "3.535.0", + "@aws-sdk/credential-provider-process": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.556.0", + "@aws-sdk/credential-provider-web-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.556.0.tgz", + "integrity": "sha512-s1xVtKjyGc60O8qcNIzS1X3H+pWEwEfZ7TgNznVDNyuXvLrlNWiAcigPWGl2aAkc8tGcsSG0Qpyw2KYC939LFg==", + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.535.0", + "@aws-sdk/credential-provider-http": "3.552.0", + "@aws-sdk/credential-provider-ini": "3.556.0", + "@aws-sdk/credential-provider-process": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.556.0", + "@aws-sdk/credential-provider-web-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz", + "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.556.0.tgz", + "integrity": "sha512-ETuBgcnpfxqadEAqhQFWpKoV1C/NAgvs5CbBc5EJbelJ8f4prTdErIHjrRtVT8c02MXj92QwczsiNYd5IoOqyw==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sso": "3.556.0", + "@aws-sdk/token-providers": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.556.0.tgz", + "integrity": "sha512-R/YAL8Uh8i+dzVjzMnbcWLIGeeRi2mioHVGnVF+minmaIkCiQMZg2HPrdlKm49El+RljT28Nl5YHRuiqzEIwMA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.556.0.tgz", + "integrity": "sha512-CnWP/AEF+sPeO8fabrHy4Oeo52xDFuDQMpjKcI7oJzGF6Ne2ZPTq6wTJQPLeXeg4OzLcK0tT3G4z/27MLdsLsw==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.556.0", + "@aws-sdk/client-sso": "3.556.0", + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/credential-provider-cognito-identity": "3.556.0", + "@aws-sdk/credential-provider-env": "3.535.0", + "@aws-sdk/credential-provider-http": "3.552.0", + "@aws-sdk/credential-provider-ini": "3.556.0", + "@aws-sdk/credential-provider-node": "3.556.0", + "@aws-sdk/credential-provider-process": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.556.0", + "@aws-sdk/credential-provider-web-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz", + "integrity": "sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz", + "integrity": "sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz", + "integrity": "sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.540.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz", + "integrity": "sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz", + "integrity": "sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.556.0.tgz", + "integrity": "sha512-tvIiugNF0/+2wfuImMrpKjXMx4nCnFWQjQvouObny+wrif/PGqqQYrybwxPJDvzbd965bu1I+QuSv85/ug7xsg==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.535.0.tgz", + "integrity": "sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.540.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz", + "integrity": "sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/types": "^2.12.0", + "@smithy/util-endpoints": "^1.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz", + "integrity": "sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz", + "integrity": "sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz", + "integrity": "sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@hokify/agenda": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@hokify/agenda/-/agenda-6.3.0.tgz", + "integrity": "sha512-fWrKMDe/8QHJXLOdEsMogb6cb213Z82iNsnU7nFrSIMFifEXSkXNTyCZ99FV3KLf+Du1gS/M9/8uTC6FHyWRZQ==", + "dependencies": { + "cron-parser": "^4", + "date.js": "~0.3.3", + "debug": "~4", + "human-interval": "~2", + "luxon": "^3", + "mongodb": "^4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hokify/agenda/node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/@hokify/agenda/node_modules/bson": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@hokify/agenda/node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "dependencies": { + "luxon": "^3.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@hokify/agenda/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@hokify/agenda/node_modules/luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@hokify/agenda/node_modules/mongodb": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.2.tgz", + "integrity": "sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==", + "dependencies": { + "bson": "^4.7.2", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "@aws-sdk/credential-providers": "^3.186.0", + "@mongodb-js/saslprep": "^1.1.0" + } + }, + "node_modules/@hokify/agenda/node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/@hokify/agenda/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@hokify/agenda/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@hokify/agenda/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@hokify/agenda/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@ljharb/through": { + "version": "2.3.12", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz", + "integrity": "sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==", + "dependencies": { + "call-bind": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", + "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", + "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", + "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@schematics/angular": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.1.3.tgz", + "integrity": "sha512-hmeasOvzmniy6urtzUKhEqGO67iPuLX/dVtkF4nWp2NTtcEKlvcJobNDMc+CTlX4+ZMPVOvmhDMQqrlfekZ+NQ==", + "dependencies": { + "@angular-devkit/core": "17.1.3", + "@angular-devkit/schematics": "17.1.3", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.1.tgz", + "integrity": "sha512-v3/iS+1nufZdKQ5iAlQKcCsoh0jffQyABvYIxKsZQFWc4ubuGjwZklFHpDgV6O6T7vvV78SW5NHI91HFKEcxKg==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", + "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.2.tgz", + "integrity": "sha512-mAifqvvGOCkb5BJ5d/SRrVP5+kKCGxtcHuti6lgqZalIfNxikxlJMMptOqFp9+xV5LAnJMSaMWtzvcgNZ3PlPA==", + "dependencies": { + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.2.1", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.0.tgz", + "integrity": "sha512-S98jo9cpJwO1mtQ+2zY7bOdcYyfVYCUaofCG6wWRzk3pxKHVAkSfshkfecto2+LKsx7Ovtqbgb2LS8zTRhxJ9Q==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.1", + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.0.0.tgz", + "integrity": "sha512-sRU6nblDBQ4pVTWni019Kij+XQj4RP75WXN5z3qHk81dt/L8A7r3v8RgRInTup4/Jf90WNods9CcbnWj7zJ26w==", + "dependencies": { + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", + "optional": true, + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "optional": true, + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "optional": true, + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "optional": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "optional": true, + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "optional": true, + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "optional": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", + "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", + "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", + "optional": true, + "dependencies": { + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "optional": true, + "dependencies": { + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "optional": true, + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", + "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agenda": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/agenda/-/agenda-4.4.0.tgz", + "integrity": "sha512-7fIO4indmmrtkDmj2woOBJnhHIM7jPtkdGR4VOApB46eeBrPGUnO28RFrmjHebc3PMDnKJI0PWFyu9L9VotgJg==", + "dependencies": { + "cron-parser": "^3.0.0", + "date.js": "~0.3.3", + "debug": "~4.3.0", + "human-interval": "~2.0.0", + "moment-timezone": "~0.5.37", + "mongodb": "^4.1.0" + }, + "engines": { + "node": ">=12.9.0" + } + }, + "node_modules/agenda/node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/agenda/node_modules/bson": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/agenda/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agenda/node_modules/mongodb": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.2.tgz", + "integrity": "sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==", + "dependencies": { + "bson": "^4.7.2", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "@aws-sdk/credential-providers": "^3.186.0", + "@mongodb-js/saslprep": "^1.1.0" + } + }, + "node_modules/agenda/node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/agenda/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/agenda/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/agenda/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/agenda/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/agendash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/agendash/-/agendash-4.0.0.tgz", + "integrity": "sha512-yAHyXwigBqd/6VTyzp1SHdZDqvI57+KpqY0DHcJoTiKszCyrsybJA4bMce6SOef1icIiJU9YSKiucRn0VEt2iQ==", + "dependencies": { + "agenda": "^4.2.1", + "body-parser": "^1.19.2", + "commander": "^2.9.0", + "express": "^4.17.3", + "mongodb": "*", + "semver": "^7.3.4" + }, + "bin": { + "agendash": "bin/agendash-standalone.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.4.0.tgz", + "integrity": "sha512-6/gSSEdbkuFlSb+ufj5jUSU4+wo8xQOwm2bDSqwmxiPE17JTpsP63eAwoN8iF8Oy4gJYj+PAL3zdRCTdaw5Y1g==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "devOptional": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cron-parser": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-3.5.0.tgz", + "integrity": "sha512-wyVZtbRs6qDfFd8ap457w3XVntdvqcwBGxBoTvJQH9KGVKL/fB+h2k3C8AqiVxvUQKN1Ps/Ns46CNViOpVDhfQ==", + "dependencies": { + "is-nan": "^1.3.2", + "luxon": "^1.26.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/date.js": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/date.js/-/date.js-0.3.3.tgz", + "integrity": "sha512-HgigOS3h3k6HnW011nAb43c5xx5rBXk8P2v/WIT9Zv4koIaVXiH2BURguI78VVp+5Qc076T7OR378JViCnZtBw==", + "dependencies": { + "debug": "~3.1.0" + } + }, + "node_modules/date.js/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-async-handler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz", + "integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "optional": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", + "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/https-proxy-agent": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", + "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/human-interval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/human-interval/-/human-interval-2.0.1.tgz", + "integrity": "sha512-r4Aotzf+OtKIGQCB3odUowy4GfUDTy3aTWTfLd7ZF2gBCy3XW3v/dJLRefZnOFFnjqs5B1TypvS8WarpBkYUNQ==", + "dependencies": { + "numbered": "^1.1.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/ignore-walk": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.12", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz", + "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==", + "dependencies": { + "@ljharb/through": "^2.3.11", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^5.0.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/luxon": { + "version": "1.28.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.1.tgz", + "integrity": "sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==", + "engines": { + "node": "*" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.5.0.tgz", + "integrity": "sha512-Fozq68InT+JKABGLqctgtb8P56pRrJFkbhW0ux+x1mdHeyinor8oNzJqwLjV/t5X5nJGfTlluxfyMnOXNggIUA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.4.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", + "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/nodemon": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz", + "integrity": "sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", + "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", + "dependencies": { + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/numbered": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/numbered/-/numbered-1.1.0.tgz", + "integrity": "sha512-pv/ue2Odr7IfYOO0byC1KgBI10wo5YDauLhxY6/saNzAdAs0r1SotGCPzzCLNPL0xtrAwWRialLu23AAu9xO1g==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote": { + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.5.tgz", + "integrity": "sha512-TAE0m20zSDMnchPja9vtQjri19X3pZIyRpm2TJVeI+yU42leJBBDTRYhOcWFsPhaMxf+3iwQkFiKz16G9AEeeA==", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.1.tgz", + "integrity": "sha512-OBBSKvmjr4DCyUb+IC2p7wooOCsCNwaqvCilTJVNPo0y8lJl+LsCrfz4LtMwnw3Gn+8frt816wi1+DWZTUCpBQ==", + "dependencies": { + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.2.1", + "@sigstore/sign": "^2.2.2", + "@sigstore/tuf": "^2.3.0", + "@sigstore/verify": "^1.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz", + "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", + "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "optional": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tuf-js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", + "dependencies": { + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tuf-js/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..d19352e --- /dev/null +++ b/backend/package.json @@ -0,0 +1,27 @@ +{ + "name": "jucundus", + "version": "1.0.0", + "description": "", + "main": "server.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js", + "dev": "nodemon --watch ./ server.js --ignore node_modules/" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@angular/cli": "^17.1.3", + "@hokify/agenda": "^6.3.0", + "agendash": "^4.0.0", + "cors": "^2.8.5", + "express": "^4.18.2", + "express-async-handler": "^1.2.0", + "mongodb": "^6.5.0", + "node-fetch": "^2.7.0" + }, + "devDependencies": { + "nodemon": "^3.0.3" + } +} diff --git a/backend/routes/favorite.js b/backend/routes/favorite.js new file mode 100644 index 0000000..d542c66 --- /dev/null +++ b/backend/routes/favorite.js @@ -0,0 +1,7 @@ +const controllers = require('../controllers/favorite') +const router = require('express').Router() + +router.post('/save/', controllers.save) +router.get('/getAll/', controllers.getAll) + +module.exports = router \ No newline at end of file diff --git a/backend/routes/lot.js b/backend/routes/lot.js new file mode 100644 index 0000000..823fa85 --- /dev/null +++ b/backend/routes/lot.js @@ -0,0 +1,12 @@ +const controllers = require('../controllers/lot') +const router = require('express').Router() + +router.get('/getInfos/:url', controllers.getInfos) +router.get('/getPictures/:url', controllers.getPictures) +router.get('/getLotsBySale/:id', controllers.getLotsBySale) + +router.post('/NextItem/', controllers.NextItem) +router.post('/AuctionedItem/', controllers.AuctionedItem) +router.post('/Bid/', controllers.Bid) + +module.exports = router \ No newline at end of file diff --git a/backend/routes/sale.js b/backend/routes/sale.js new file mode 100644 index 0000000..1c4d234 --- /dev/null +++ b/backend/routes/sale.js @@ -0,0 +1,21 @@ +const controllers = require('../controllers/sale') +const router = require('express').Router() + +// AuctionAgent +router.get('/getSaleInfos/:url', controllers.getSaleInfos) +router.get('/prepareSale/:id', controllers.prepareSale) +router.get('/followSale/:id', controllers.followSale) + + +// DB +router.get('/sale/:id', controllers.get) +router.post('/sale/', controllers.post) +router.put('/sale/:id', controllers.put) +router.delete('/sale/:id', controllers.delete) + +router.get('/getAll/', controllers.getAll) +router.get('/getByUrl/:url', controllers.getByUrl) +router.get('/postProcessing/:id', controllers.postProcessing) + + +module.exports = router \ No newline at end of file diff --git a/backend/server.js b/backend/server.js new file mode 100644 index 0000000..92ab143 --- /dev/null +++ b/backend/server.js @@ -0,0 +1,5 @@ +const app = require('./index.js') +const port = process.env.PORT || '3000' +app.listen(port, '0.0.0.0', () => { + console.log('Server listening on port '+port); +}); diff --git a/backend/services/agenda.js b/backend/services/agenda.js new file mode 100644 index 0000000..e9c5de4 --- /dev/null +++ b/backend/services/agenda.js @@ -0,0 +1,23 @@ +const Agenda = require("agenda"); +const agenda = new Agenda({ db: { address: "mongodb://db:27017/agendaDb" } }); +const {Agent} = require('./agent'); +const agent = new Agent(); + +// Define a job +agenda.define('followSale', async (job, done) => { + const { saleId } = job.attrs.data; + agent.followSale(saleId) + .then(data => {; + done(); + }) + }); + + agenda.define('prepareSale', async (job, done) => { + const { saleId } = job.attrs.data; + agent.prepareSale(saleId) + .then(data => {; + done(); + }) + }); + +module.exports = agenda; \ No newline at end of file diff --git a/backend/services/agent.js b/backend/services/agent.js new file mode 100644 index 0000000..91d4139 --- /dev/null +++ b/backend/services/agent.js @@ -0,0 +1,89 @@ +const fetch = require('node-fetch'); +const { LotDb } = require("./lotDb"); +const lotDb = new LotDb(); +const { SaleDb } = require("./saleDb"); +const saleDb = new SaleDb(); +const moment = require('moment-timezone'); + +const Agent = class +{ + constructor() + { + this.ApiAgentURL = "http://host.docker.internal:3020/api"; + } + + async getSaleInfos(url) + { + return new Promise((resolve, reject) => { + url = encodeURIComponent(url); + fetch(this.ApiAgentURL+'/sale/getSaleInfos/'+url) + .then(response => response.json()) + .then(data => { + resolve(data); + }) + .catch(error => { + reject(error); + }); + }); + } + + async prepareSale(id) + { + return new Promise(async (resolve, reject) => { + + let Sale = await saleDb.get(id); + + const DateSale = moment.tz(Sale.date, "Europe/Paris"); + const NowParis = moment.tz(new Date(),"Europe/Paris") + + if (NowParis.isBefore(DateSale)){ + + let url = Sale.url + url = encodeURIComponent(url); + + fetch(this.ApiAgentURL+'/sale/getLotList/'+url) + .then(response => response.json()) + .then( async data => { + + for (let lot of data) { + lot.sale_id = Sale._id + await lotDb.post(lot); + } + resolve(data); + }) + .catch(error => { + reject(error); + }); + }else{ + console.log("Sale started or finished"); + resolve([]); + } + }); + } + + async followSale(id) + { + return new Promise(async (resolve, reject) => { + let Sale = await saleDb.get(id); + + let url = Sale.url + url = encodeURIComponent(url); + + fetch(this.ApiAgentURL+'/sale/followSale/'+url) + .then(response => response.json()) + .then(async data => { + + // set the Sale status to following + Sale.status = "following"; + Sale = await saleDb.put(id, Sale); + resolve(data); + }) + .catch(error => { + reject(error); + }); + }); + } + +} + +module.exports = {Agent}; \ No newline at end of file diff --git a/backend/services/db.js b/backend/services/db.js new file mode 100644 index 0000000..4acc778 --- /dev/null +++ b/backend/services/db.js @@ -0,0 +1,18 @@ +const MongoClient = require("mongodb").MongoClient; +const connectionString = "mongodb://db:27017"; +const client = new MongoClient(connectionString); + +let db; + +const connectDb = async () => { + if (db) return db; + try { + const conn = await client.connect(); + db = conn.db("jucundus"); + return db; + } catch(e) { + console.error(e); + } +}; + +module.exports = connectDb; \ No newline at end of file diff --git a/backend/services/favorites.js b/backend/services/favorites.js new file mode 100644 index 0000000..4493f71 --- /dev/null +++ b/backend/services/favorites.js @@ -0,0 +1,27 @@ + +const connectDb = require("./db"); + +const save = async (newDocument) => { + const db = await connectDb(); + if (!db) { + throw new Error('Database not connected'); + } + + const collection = db.collection("Favorites"); + let result = await collection.insertOne(newDocument); + + return result; +}; + +const getAll = async () => { + const db = await connectDb(); + if (!db) { + throw new Error('Database not connected'); + } + const collection = db.collection("Favorites"); + let result = await collection.find({}).toArray(); + + return result; +}; + +module.exports = { save, getAll }; \ No newline at end of file diff --git a/backend/services/lotDb.js b/backend/services/lotDb.js new file mode 100644 index 0000000..2c27b48 --- /dev/null +++ b/backend/services/lotDb.js @@ -0,0 +1,75 @@ + +const { ObjectId } = require('mongodb'); +const connectDb = require("./db"); + +const LotDb = class +{ + constructor() + { + this.getCollection(); + } + + async getCollection() + { + const db = await connectDb(); + if (!db) { + throw new Error('Database not connected'); + } + this.collection = db.collection("Lots"); + } + + // CRUD + async get(id) + { + let result = await this.collection.findOne({_id: new ObjectId(id)}); + return result; + } + + async post(newDocument) + { + let result = await this.collection.insertOne(newDocument); + return result; + } + + async put(id, data) + { + let result = await this.collection.updateOne({_id: new ObjectId(id)}, {$set: data}); + return result; + } + + async remove(id) + { + let result = await this.collection.deleteOne({_id: new ObjectId(id)}); + return result; + } + + // Fucntions + + async getAll() + { + let result = await this.collection.find({}).toArray(); + return result; + } + + async getBySaleId(idSalePlatform, platformName) + { + console.log(platformName); + let result = await this.collection.find({sale_id: new ObjectId(idSalePlatform), platform: platformName}); + return result.toArray(); + } + + async getByIDPlatform(idLotPlatform, platformName) + { + let result = await this.collection.findOne({idPlatform: String(idLotPlatform), platform: platformName}); + return result; + } + + async deleteAllLotBySaleId(sale_id){ + let result = await this.collection.deleteMany({sale_id: new ObjectId(sale_id)}); + return result; + } +} + + + +module.exports = {LotDb}; \ No newline at end of file diff --git a/backend/services/saleDb.js b/backend/services/saleDb.js new file mode 100644 index 0000000..65eaa92 --- /dev/null +++ b/backend/services/saleDb.js @@ -0,0 +1,67 @@ + +const { ObjectId } = require('mongodb'); +const connectDb = require("./db"); + +const SaleDb = class +{ + constructor() + { + this.getCollection(); + } + + async getCollection() + { + const db = await connectDb(); + if (!db) { + throw new Error('Database not connected'); + } + this.collection = db.collection("Sales"); + } + + // CRUD + async get(id) + { + let result = await this.collection.findOne({_id: new ObjectId(id)}); + return result; + } + + async post(newDocument) + { + let result = await this.collection.insertOne(newDocument); + return result; + } + + async put(id, data) + { + let result = await this.collection.updateOne({_id: new ObjectId(id)}, {$set: data}); + return result; + } + + async remove(id) + { + let result = await this.collection.deleteOne({_id: new ObjectId(id)}); + return result; + } + + // Fucntions + + async getAll() + { + let result = await this.collection.find({}).toArray(); + return result; + } + + async getByUrl(url) + { + let result = await this.collection.findOne({url: url}); + return result; + } + + async getByIDPlatform(idSalePlatform, platformName) + { + let result = await this.collection.findOne({idPlatform: String(idSalePlatform), platform: String(platformName)}); + return result; + } +} + +module.exports = { SaleDb }; \ No newline at end of file diff --git a/client/.DS_Store b/client/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..84a80904f444da07ec457fa9b7fc88e1783d63ed GIT binary patch literal 6148 zcmeHKJ5Iwu5S<|rvXmwz?k8+pxPO;#j4%zJbFB+{yJdX zkzC7_tTq>Y{_XxVvu&GZxoMY(RCoL5$A_1v(|&gSLw0xBJ9Y938jT820V+TRsKCEg z06p8RngnvC0#twsd?;YwhXOaO6T3kFbYSrj0BFDQZg}=t0$3~ntP{IHL|__JU{Ezj z3=KNsCF|h#elyO=n>8mC_1h6IUM^Y(a-{-P;81~4Y^T=$&*0z8|A!>*r~noC zQwr#~Su}IJQufxt%UQ22@N@XPq1MZ>cq;~aE5^oJ@ky_)*fa8VVi)Li#GMZ0kAUey JqXNI7z#H+fDqsKr literal 0 HcmV?d00001 diff --git a/client/.eslintrc.json b/client/.eslintrc.json new file mode 100644 index 0000000..47c17dd --- /dev/null +++ b/client/.eslintrc.json @@ -0,0 +1,50 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "parserOptions": { + "project": [ + "tsconfig.json" + ], + "createDefaultProgram": true + }, + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended" + ], + "rules": {} + } + ] +} diff --git a/client/LICENSE b/client/LICENSE new file mode 100644 index 0000000..1592258 --- /dev/null +++ b/client/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Umut Esen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/client/README copy.md b/client/README copy.md new file mode 100644 index 0000000..40bec36 --- /dev/null +++ b/client/README copy.md @@ -0,0 +1,18 @@ +## Backend +# Dev +npm run dev +http://localhost:3000 + +# Prod +npm run start + +## Frontend +# Dev +ng serve +http://localhost:4200 + +## Docker Database Dev +```bash +docker-compose -f docker-compose-dev.yml build +docker-compose -f docker-compose-dev.yml up +``` diff --git a/client/README.md b/client/README.md new file mode 100644 index 0000000..7de8052 --- /dev/null +++ b/client/README.md @@ -0,0 +1,67 @@ +[![Build status](https://dev.azure.com/umutesen/onthecode/_apis/build/status/Material%20Template%20CI)](https://dev.azure.com/umutesen/onthecode/_build/latest?definitionId=11) + + # Angular Material Starter Template + + ![Product Gif](https://github.com/umutesen/angular-material-template/blob/media/material-template-demo.gif) + + +Angular Material Starter Template is a free template built with Angular and Angular Material. You can use it out of the box without having to change any file paths. Everything you need to start development on an Angular project is here. + +Angular Material starter template has been built with the official style guide in mind, which means it promotes a clean folder structure and separation of concerns. The material template is fully responsive and contains the fundamental building blocks of a scalable Angular application: + +Authentication module with login, logout and password reset components +Responsive Admin dashboard with sidebar +Account area with change password component +All Angular Material components +In addition to Angular, other well-known open-source libraries such as rxjs, moment and ngx-logger are also included. + +This application template came as a result of several applications that I have developed over the past few years. + +Having mostly used Angular Material component, I wanted to create a starter template to save time for greenfield projects. I developed it based on user feedback and it is a powerful Angular admin dashboard, which allows you to build products like admin panels, content management systems (CMS) and customer relationship management (CRM) software. + +## Starter Template Features + +Clean folder structure +Core module +Shared module +Example feature modules +Lazy-loaded feature modules +Global error-handling +Error logging with ngx-logger (logging to browser & remote API) +HTTP Interceptors to inject JWT-tokens Authentication and role guards (for Role-based access) +Shows spinner for all HTTP requests +Angular flex layout +Browser Support + +At present, the template aims to support the last two versions of the following browsers: + +Chrome +Firefox +Microsoft Edge +Safari +Opera + + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/client/angular.json b/client/angular.json new file mode 100644 index 0000000..8634862 --- /dev/null +++ b/client/angular.json @@ -0,0 +1,122 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "angular-material-template": { + "projectType": "application", + "schematics": { + "@schematics/angular:application": { + "strict": true + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/angular-material-template", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.css", + "node_modules/primeng/resources/themes/lara-light-blue/theme.css", + "node_modules/primeng/resources/primeng.min.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "2mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true, + "allowedCommonJsDependencies": ["moment-timezone"] + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "angular-material-template:build:production" + }, + "development": { + "buildTarget": "angular-material-template:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "angular-material-template:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.css" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + } + } + } + }, + "cli": { + "schematicCollections": [ + "@angular-eslint/schematics" + ] + } +} diff --git a/client/karma.conf.js b/client/karma.conf.js new file mode 100644 index 0000000..60e1b39 --- /dev/null +++ b/client/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/angular-material-template'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 0000000..6f5fb39 --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,15330 @@ +{ + "name": "angular-material-template", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "angular-material-template", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^17.2.2", + "@angular/cdk": "^16.2.14", + "@angular/common": "^17.2.2", + "@angular/compiler": "^17.2.2", + "@angular/core": "^17.2.2", + "@angular/flex-layout": "^15.0.0-beta.42", + "@angular/forms": "^17.2.2", + "@angular/material": "^16.2.14", + "@angular/material-moment-adapter": "^16.2.14", + "@angular/platform-browser": "^17.2.2", + "@angular/platform-browser-dynamic": "^17.2.2", + "@angular/router": "^17.2.2", + "jwt-decode": "^3.1.2", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", + "ngx-logger": "^5.0.7", + "primeng": "^17.8.0", + "rxjs": "^7.8.1", + "tslib": "^2.3.0", + "zone.js": "~0.14.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.2.1", + "@angular-eslint/builder": "14.1.1", + "@angular-eslint/eslint-plugin": "14.1.1", + "@angular-eslint/eslint-plugin-template": "14.1.1", + "@angular-eslint/template-parser": "14.1.1", + "@angular/cli": "^17.2.1", + "@angular/compiler-cli": "^17.2.2", + "@types/jasmine": "~3.10.0", + "@types/node": "^12.11.1", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", + "eslint": "^8.23.0", + "jasmine-core": "~4.0.0", + "karma": "~6.3.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.1.0", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "~1.7.0", + "typescript": "~5.3.3" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1702.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1702.1.tgz", + "integrity": "sha512-eYYtR3kCG0V7aHsL34O4v8W2nW6MX4+SebhBO2dHGz2nCAS09LPtyO2fZZGawPgXOrN0nkLfghghI0hJ0dDaOw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.2.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.2.1.tgz", + "integrity": "sha512-Wq3ggliCMQCRVCucbjE4/9BJCN1KMSGfF6Bx1ke2B+vW3ElLt+M4x4Eeyg2dSPEYB7slgY9WOx7qtyOkUy15tQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1702.1", + "@angular-devkit/build-webpack": "0.1702.1", + "@angular-devkit/core": "17.2.1", + "@babel/core": "7.23.9", + "@babel/generator": "7.23.6", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.6", + "@babel/plugin-transform-async-generator-functions": "7.23.9", + "@babel/plugin-transform-async-to-generator": "7.23.3", + "@babel/plugin-transform-runtime": "7.23.9", + "@babel/preset-env": "7.23.9", + "@babel/runtime": "7.23.9", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "17.2.1", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.17", + "babel-loader": "9.1.3", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.20", + "css-loader": "6.10.0", + "esbuild-wasm": "0.20.0", + "fast-glob": "3.3.2", + "http-proxy-middleware": "2.0.6", + "https-proxy-agent": "7.0.2", + "inquirer": "9.2.14", + "jsonc-parser": "3.2.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.7", + "mini-css-extract-plugin": "2.8.0", + "mrmime": "2.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.1", + "piscina": "4.3.1", + "postcss": "8.4.35", + "postcss-loader": "8.1.0", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.70.0", + "sass-loader": "14.1.0", + "semver": "7.6.0", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.27.0", + "tree-kill": "1.2.2", + "tslib": "2.6.2", + "undici": "6.6.2", + "vite": "5.0.12", + "watchpack": "2.4.0", + "webpack": "5.90.1", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.10.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.20.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "@angular/localize": "^17.0.0", + "@angular/platform-server": "^17.0.0", + "@angular/service-worker": "^17.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^17.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.2 <5.4" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@types/node": { + "version": "20.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/vite": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1702.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1702.1.tgz", + "integrity": "sha512-cmtGn8IYqruHuq1yPYEA17tLDTGmMhDPLagAbjZPVAjTpwCwC28H6sRXyhLTiSpzXdXUgROTO6bSXTvtJyyDSA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1702.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.2.1.tgz", + "integrity": "sha512-4jWG7akd5wVxjKkLKDT1zUTyLJeBP5mDmGUPooZ6zVHy39X6htYC+BV3uu/T6gVrD4FyONMDezedpBOrQPtZ6A==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/@angular-devkit/core/node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.2.1.tgz", + "integrity": "sha512-PgbjZgMSk1Q8QAH4mAx/dHDzPjNnXFONsNmwo80JPp6eJcBN0pODbchulFYdY7kPry07sNtGGWpQeWtdPAZHPw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.2.1", + "jsonc-parser": "3.2.1", + "magic-string": "0.30.7", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/@angular-eslint/builder": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-14.1.1.tgz", + "integrity": "sha512-iRjSjJoS1kqTBCv/qZXSq6s/TYmC2NVaz3gX8PTbi0jTeR9rEVdVHJzMTYp+v66QEIbIIgENZ8m3jcNGVlbTGg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "^14.7.5", + "nx": "^14.7.5" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-14.1.1.tgz", + "integrity": "sha512-/l4741bivWuyA7zDXXjQc/MENOkIGKG6f7b5dTgquEGLyafFNIGXVHbHKD8BYOJ8ou6cheWGGKB9gL/JOltn7w==", + "dev": true + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.1.1.tgz", + "integrity": "sha512-mqo/kdb5gWA+OJjjaz5Is0f2NUYjJ50iwrCWLnLQFVGAvXABZD4GUCPjWFD8VbUv1KMNQ4J/+Ptgn3qBf0AOQQ==", + "dev": true, + "dependencies": { + "@angular-eslint/utils": "14.1.1", + "@typescript-eslint/utils": "5.37.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-14.1.1.tgz", + "integrity": "sha512-jFvUFx+rn7cqLjsvvZP8Sr0VA9ihYYzaXJHDx5KBVyyA1+VpTecBBKNW9nKW23IcJFwuW2Xxx2lqwj2H8xcTtQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "14.1.1", + "@typescript-eslint/type-utils": "5.37.0", + "@typescript-eslint/utils": "5.37.0", + "aria-query": "5.0.2", + "axobject-query": "3.0.1" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-14.1.1.tgz", + "integrity": "sha512-Uzk6zfkf3KHqnd7x12Gr68fUvRz4c7J2XNTDLM3WAYa/m2wO78/zyP/Nd4DCrqmQvsDyuDRgN8LY7msuoOA3rg==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "14.1.1", + "eslint-scope": "^5.1.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/utils": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.1.1.tgz", + "integrity": "sha512-J9Q8XbS5SpNbCJ4NWnGirU33lLNWs1jXp+G2Rm7uTHyHeQYU+JYe9P6ZQ6P90htMomyP648nazfVXWki5skscQ==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "14.1.1", + "@typescript-eslint/utils": "5.37.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular/animations": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.2.2.tgz", + "integrity": "sha512-ENr35pDVslioJO8zBLo1QClzC7NqTc0Du36UMtWkw3cg+QRLnAZ7zfju5w0O8K7Z3omDtFzgVSPfyS0VDkrXPQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.2.2" + } + }, + "node_modules/@angular/cdk": { + "version": "16.2.14", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.14.tgz", + "integrity": "sha512-n6PrGdiVeSTEmM/HEiwIyg6YQUUymZrb5afaNLGFRM5YL0Y8OBqd+XhCjb0OfD/AfgCUtedVEPwNqrfW8KzgGw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^16.0.0 || ^17.0.0", + "@angular/core": "^16.0.0 || ^17.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.2.1.tgz", + "integrity": "sha512-zurPJunprq6ZRpNd6Icx7Ne819WN+pL7tQAlwTof7xuCnwfnIV32xiylFkvn77eyRN0Qh+so1FLlFy0t1jH4Mw==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1702.1", + "@angular-devkit/core": "17.2.1", + "@angular-devkit/schematics": "17.2.1", + "@schematics/angular": "17.2.1", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "9.2.14", + "jsonc-parser": "3.2.1", + "npm-package-arg": "11.0.1", + "npm-pick-manifest": "9.0.0", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "17.0.6", + "resolve": "1.22.8", + "semver": "7.6.0", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/@angular/common": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.2.2.tgz", + "integrity": "sha512-F2wQj/lYcZUNZuNmuuDb8RK8tU7e1w7IzN8J6nT2gQHq6NiZfYiUL2XrToGtdd/cZjBeYKGiWRBW/PsZzKyC3A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.2.2", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.2.2.tgz", + "integrity": "sha512-loRr4+9/JkSDszExZiS+iuhjXj7wvLF4gJeqlbp2PbPl4eUoGKYq0RVZ3a7IkIXxB5sgoYB5MjKsbdm/uaMK1A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/core": "17.2.2" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.2.2.tgz", + "integrity": "sha512-tFfbamdLhn8R30/aKxhXNG6CwelJOpVxfUnTizb7pWUJ/UQ4py0xzJp7s0QzKjR1lpRAq3rPtsE3f9BbcHD1HA==", + "dev": true, + "dependencies": { + "@babel/core": "7.23.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/compiler": "17.2.2", + "typescript": ">=5.2 <5.4" + } + }, + "node_modules/@angular/core": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.2.2.tgz", + "integrity": "sha512-jXnrOVsA9b34PJN383EOss3ejd5+xUTeijuUy5njPRXpxMxrGjV5gkk0lSxsALRxw2ICax2tMoGmHXfXO1x9gw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.0" + } + }, + "node_modules/@angular/flex-layout": { + "version": "15.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-15.0.0-beta.42.tgz", + "integrity": "sha512-cTAPVMMxnyIFwpZwdq0PL5mdP9Qh+R8MB7ZBezVaN3Rz2fRrkagzKpLvPX3TFzepXrvHBdpKsU4b8u+NxEC/6g==", + "deprecated": "This package has been deprecated. Please see https://blog.angular.io/modern-css-in-angular-layouts-4a259dca9127", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": ">=15.0.0", + "@angular/common": ">=15.0.2", + "@angular/core": ">=15.0.2", + "@angular/platform-browser": ">=15.0.2", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/forms": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.2.2.tgz", + "integrity": "sha512-xxy1Khpun2TpSDQch6BK4uHkqIxZvxsBU2LZgo/3W604lKoVjBGKPZqoYFRew2OPeCQ3VjK9P8a8ZhitsLLlKQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.2.2", + "@angular/core": "17.2.2", + "@angular/platform-browser": "17.2.2", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material": { + "version": "16.2.14", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.14.tgz", + "integrity": "sha512-zQIxUb23elPfiIvddqkIDYqQhAHa9ZwMblfbv+ug8bxr4D0Dw360jIarxCgMjAcLj7Ccl3GBqZMUnVeM6cjthw==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", + "@material/banner": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/button": "15.0.0-canary.bc9ae6c9c.0", + "@material/card": "15.0.0-canary.bc9ae6c9c.0", + "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", + "@material/chips": "15.0.0-canary.bc9ae6c9c.0", + "@material/circular-progress": "15.0.0-canary.bc9ae6c9c.0", + "@material/data-table": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dialog": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/drawer": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/fab": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", + "@material/form-field": "15.0.0-canary.bc9ae6c9c.0", + "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", + "@material/image-list": "15.0.0-canary.bc9ae6c9c.0", + "@material/layout-grid": "15.0.0-canary.bc9ae6c9c.0", + "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/linear-progress": "15.0.0-canary.bc9ae6c9c.0", + "@material/list": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", + "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", + "@material/radio": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/segmented-button": "15.0.0-canary.bc9ae6c9c.0", + "@material/select": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/slider": "15.0.0-canary.bc9ae6c9c.0", + "@material/snackbar": "15.0.0-canary.bc9ae6c9c.0", + "@material/switch": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-bar": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-scroller": "15.0.0-canary.bc9ae6c9c.0", + "@material/textfield": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tooltip": "15.0.0-canary.bc9ae6c9c.0", + "@material/top-app-bar": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^16.0.0 || ^17.0.0", + "@angular/cdk": "16.2.14", + "@angular/common": "^16.0.0 || ^17.0.0", + "@angular/core": "^16.0.0 || ^17.0.0", + "@angular/forms": "^16.0.0 || ^17.0.0", + "@angular/platform-browser": "^16.0.0 || ^17.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material-moment-adapter": { + "version": "16.2.14", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-16.2.14.tgz", + "integrity": "sha512-LagTDXEq8XOVLy8CVswCbmq7v9bb84+VikEEN09tz831U/7PHjDZ3xRgpKtv7hXrh8cTZOg3UPQw5tZk0hwh3Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/core": "^16.0.0 || ^17.0.0", + "@angular/material": "16.2.14", + "moment": "^2.18.1" + } + }, + "node_modules/@angular/platform-browser": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.2.2.tgz", + "integrity": "sha512-6AZhQfZpo/apiRKwhy6es1RpoxgCXMR4y7Eo7GvVHpMKBwioWwP2H+qg83ed2xv0/GXIyqZsHjpEjsLPE83uyw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/animations": "17.2.2", + "@angular/common": "17.2.2", + "@angular/core": "17.2.2" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.2.2.tgz", + "integrity": "sha512-I52zbDSic4LB0yhCFUEBZKg9QkLKVUCGTco0XFHNRy3EF54Jvs0uWBqG79egsuXmyBNQY0E3op9eqhhn6Mnwbw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.2.2", + "@angular/compiler": "17.2.2", + "@angular/core": "17.2.2", + "@angular/platform-browser": "17.2.2" + } + }, + "node_modules/@angular/router": { + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.2.2.tgz", + "integrity": "sha512-3mT2+qBF8urFeY6eZVZX5bmAdK9ojJRZi7yB9ocpieE1Jdd/1NYCfIsQxJk032syEGc2NJftijTzuNiflLzlTA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0" + }, + "peerDependencies": { + "@angular/common": "17.2.2", + "@angular/core": "17.2.2", + "@angular/platform-browser": "17.2.2", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz", + "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@ljharb/through": { + "version": "2.3.12", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.12.tgz", + "integrity": "sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@material/animation": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-leRf+BcZTfC/iSigLXnYgcHAGvFVQveoJT5+2PIRdyPI/bIG7hhciRgacHRsCKC0sGya81dDblLgdkjSUemYLw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/auto-init": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-uxzDq7q3c0Bu1pAsMugc1Ik9ftQYQqZY+5e2ybNplT8gTImJhNt4M2mMiMHbMANk2l3UgICmUyRSomgPBWCPIA==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/banner": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-SHeVoidCUFVhXANN6MNWxK9SZoTSgpIP8GZB7kAl52BywLxtV+FirTtLXkg/8RUkxZRyRWl7HvQ0ZFZa7QQAyA==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/button": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-Fc3vGuOf+duGo22HTRP6dHdc+MUe0VqQfWOuKrn/wXKD62m0QQR2TqJd3rRhCumH557T5QUyheW943M3E+IGfg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-3AQgwrPZCTWHDJvwgKq7Cj+BurQ4wTjDdGL+FEnIGUAjJDskwi1yzx5tW2Wf/NxIi7IoPFyOY3UB41jwMiOrnw==", + "dependencies": { + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/card": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-nPlhiWvbLmooTnBmV5gmzB0eLWSgLKsSRBYAbIBmO76Okgz1y+fQNLag+lpm/TDaHVsn5fmQJH8e0zIg0rYsQA==", + "dependencies": { + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/checkbox": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-4tpNnO1L0IppoMF3oeQn8F17t2n0WHB0D7mdJK9rhrujen/fLbekkIC82APB3fdGtLGg3qeNqDqPsJm1YnmrwA==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/chips": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-fqHKvE5bSWK0bXVkf57MWxZtytGqYBZvvHIOs4JI9HPHEhaJy4CpSw562BEtbm3yFxxALoQknvPW2KYzvADnmA==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/circular-progress": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-Lxe8BGAxQwCQqrLhrYrIP0Uok10h7aYS3RBXP41ph+5GmwJd5zdyE2t93qm2dyThvU6qKuXw9726Dtq/N+wvZQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/progress-indicator": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/data-table": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-j/7qplT9+sUpfe4pyWhPbl01qJA+OoNAG3VMJruBBR461ZBKyTi7ssKH9yksFGZ8eCEPkOsk/+kDxsiZvRWkeQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", + "@material/linear-progress": "15.0.0-canary.bc9ae6c9c.0", + "@material/list": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/select": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-Zt3u07fXrBWLW06Tl5fgvjicxNQMkFdawLyNTzZ5TvbXfVkErILLePwwGaw8LNcvzqJP6ABLA8jiR+sKNoJQCg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-o+9a/fmwJ9+gY3Z/uhj/PMVJDq7it1NTWKJn2GwAKdB+fDkT4hb9qEdcxMPyvJJ5ups+XiKZo03+tZrD+38c1w==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/button": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-ly78R7aoCJtundSUu0UROU+5pQD5Piae0Y1MkN6bs0724azeazX1KeXFeaf06JOXnlr5/41ol+fSUPowjoqnOg==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-PFL4cEFnt7VTxDsuspFVNhsFDYyumjU0VWfj3PWB7XudsEfQ3lo85D3HCEtTTbRsCainGN8bgYNDNafLBqiigw==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/list": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-Ro+Pk8jFuap+T0B0shA3xI1hs2b89dNQ2EIPCNjNMp87emHKAzJfhKb7EZGIwv3+gFLlVaLyIVkb94I89KLsyg==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/fab": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-dvU0KWMRglwJEQwmQtFAmJcAjzg9VFF6Aqj78bJYu/DAIGFJ1VTTTSgoXM/XCm1YyQEZ7kZRvxBO37CH54rSDg==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-wkDjVcoVEYYaJvun28IXdln/foLgPD7n9ZC9TY76GErGCwTq+HWpU6wBAAk+ePmpRFDayw4vI4wBlaWGxLtysQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-bUWPtXzZITOD/2mkvLkEPO1ngDWmb74y0Kgbz6llHLOQBtycyJIpuoQJ1q2Ez0NM/tFLwPphhAgRqmL3YQ/Kzw==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/focus-ring": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-cZHThVose3GvAlJzpJoBI1iqL6d1/Jj9hXrR+r8Mwtb1hBIUEG3hxfsRd4vGREuzROPlf0OgNf/V+YHoSwgR5w==", + "dependencies": { + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0" + } + }, + "node_modules/@material/form-field": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-+JFXy5X44Gue1CbZZAQ6YejnI203lebYwL0i6k0ylDpWHEOdD5xkF2PyHR28r9/65Ebcbwbff6q7kI1SGoT7MA==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/icon-button": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-1a0MHgyIwOs4RzxrVljsqSizGYFlM1zY2AZaLDsgT4G3kzsplTx8HZQ022GpUCjAygW+WLvg4z1qAhQHvsbqlw==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/image-list": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-WKWmiYap2iu4QdqmeUSliLlN4O2Ueqa0OuVAYHn/TCzmQ2xmnhZ1pvDLbs6TplpOmlki7vFfe+aSt5SU9gwfOQ==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/layout-grid": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-5GqmT6oTZhUGWIb+CLD0ZNyDyTiJsr/rm9oRIi3+vCujACwxFkON9tzBlZohdtFS16nuzUusthN6Jt9UrJcN6Q==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-8S30WXEuUdgDdBulzUDlPXD6qMzwCX9SxYb5mGDYLwl199cpSGdXHtGgEcCjokvnpLhdZhcT1Dsxeo1g2Evh5Q==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-6EJpjrz6aoH2/gXLg9iMe0yF2C42hpQyZoHpmcgTLKeci85ktDvJIjwup8tnk8ULQyFiGiIrhXw2v2RSsiFjvQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/progress-indicator": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-TQ1ppqiCMQj/P7bGD4edbIIv4goczZUoiUAaPq/feb1dflvrFMzYqJ7tQRRCyBL8nRhJoI2x99tk8Q2RXvlGUQ==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-IlAh61xzrzxXs38QZlt74UYt8J431zGznSzDtB1Fqs6YFNd11QPKoiRXn1J2Qu/lUxbFV7i8NBKMCKtia0n6/Q==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/list": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-dMtSPN+olTWE+08M5qe4ea1IZOhVryYqzK0Gyb2u1G75rSArUxCOB5rr6OC/ST3Mq3RS6zGuYo7srZt4534K9Q==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/notched-outline": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-WuurMg44xexkvLTBTnsO0A+qnzFjpcPdvgWBGstBepYozsvSF9zJGdb1x7Zv1MmqbpYh/Ohnuxtb/Y3jOh6irg==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-uOnsvqw5F2fkeTnTl4MrYzjI7KCLmmLyZaM0cgLNuLsWVlddQE+SGMl28tENx7DUK3HebWq0FxCP8f25LuDD+w==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-ehzOK+U1IxQN+OQjgD2lsnf1t7t7RAwQzeO6Czkiuid29ookYbQynWuLWk7NW8H8ohl7lnmfqTP1xSNkkL/F0g==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-JfLW+g3GMVDv4cruQ19+HUxpKVdWCldFlIPw1UYezz2h3WTNDy05S3uP2zUdXzZ01C3dkBFviv4nqZ0GCT16MA==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-SkKLNLFp5QtG7/JEFg9R92qq4MzTcZ5As6sWbH7rRg6ahTHoJEuqE+pOb9Vrtbj84k5gtX+vCYPvCILtSlr2uw==", + "dependencies": { + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/segmented-button": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-YDwkCWP9l5mIZJ7pZJZ2hMDxfBlIGVJ+deNzr8O+Z7/xC5LGXbl4R5aPtUVHygvXAXxpf5096ZD+dSXzYzvWlw==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/select": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-unfOWVf7T0sixVG+3k3RTuATfzqvCF6QAzA6J9rlCh/Tq4HuIBNDdV4z19IVu4zwmgWYxY0iSvqWUvdJJYwakQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", + "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/list": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", + "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-Dsvr771ZKC46ODzoixLdGwlLEQLfxfLrtnRojXABoZf5G3o9KtJU+J+5Ld5aa960OAsCzzANuaub4iR88b1guA==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/slider": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-3AEu+7PwW4DSNLndue47dh2u7ga4hDJRYmuu7wnJCIWJBnLCkp6C92kNc4Rj5iQY2ftJio5aj1gqryluh5tlYg==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/snackbar": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-TwwQSYxfGK6mc03/rdDamycND6o+1p61WNd7ElZv1F1CLxB4ihRjbCoH7Qo+oVDaP8CTpjeclka+24RLhQq0mA==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/button": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/switch": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-OjUjtT0kRz1ASAsOS+dNzwMwvsjmqy5edK57692qmrP6bL4GblFfBDoiNJ6t0AN4OaKcmL5Hy/xNrTdOZW7Qqw==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-s/L9otAwn/pZwVQZBRQJmPqYeNbjoEbzbjMpDQf/VBG/6dJ+aP03ilIBEkqo8NVnCoChqcdtVCoDNRtbU+yp6w==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/focus-ring": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-Xmtq0wJGfu5k+zQeFeNsr4bUKv7L+feCmUp/gsapJ655LQKMXOUQZtSv9ZqWOfrCMy55hoF1CzGFV+oN3tyWWQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-scroller": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-despCJYi1GrDDq7F2hvLQkObHnSLZPPDxnOzU16zJ6FNYvIdszgfzn2HgAZ6pl5hLOexQ8cla6cAqjTDuaJBhQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-QWHG/EWxirj4V9u2IHz+OSY9XCWrnNrPnNgEufxAJVUKV/A8ma1DYeFSQqxhX709R8wKGdycJksg0Flkl7Gq7w==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-R3qRex9kCaZIAK8DuxPnVC42R0OaW7AB7fsFknDKeTeVQvRcbnV8E+iWSdqTiGdsi6QQHifX8idUrXw+O45zPw==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", + "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-CpUwXGE0dbhxQ45Hu9r9wbJtO/MAlv5ER4tBHA9tp/K+SU+lDgurBE2touFMg5INmdfVNtdumxb0nPPLaNQcUg==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tokens": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-nbEuGj05txWz6ZMUanpM47SaAD7soyjKILR+XwDell9Zg3bGhsnexCNXPEz2fD+YgomS+jM5XmIcaJJHg/H93Q==", + "dependencies": { + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0" + } + }, + "node_modules/@material/tooltip": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-UzuXp0b9NuWuYLYpPguxrjbJnCmT/Cco8CkjI/6JajxaeA3o2XEBbQfRMTq8PTafuBjCHTc0b0mQY7rtxUp1Gg==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/button": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tokens": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-vJWjsvqtdSD5+yQ/9vgoBtBSCvPJ5uF/DVssv8Hdhgs1PYaAcODUi77kdi0+sy/TaWyOsTkQixqmwnFS16zesA==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-AqYh9fjt+tv4ZE0C6MeYHblS2H+XwLbDl2mtyrK0DOEnCVQk5/l5ImKDfhrUdFWHvS4a5nBM4AA+sa7KaroLoA==", + "dependencies": { + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "15.0.0-canary.bc9ae6c9c.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.bc9ae6c9c.0.tgz", + "integrity": "sha512-CKsG1zyv34AKPNyZC8olER2OdPII64iR2SzQjpqh1UUvmIFiMPk23LvQ1OnC5aCB14pOXzmVgvJt31r9eNdZ6Q==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.2.1.tgz", + "integrity": "sha512-5O493oqZw0os1Gj3otVTcIXS3nGs60eXZ9w3vsK5w7tZ5x6XqZvO00X8WZQhcxXA9HMG4iDCsU2ll3lcYZVxmg==", + "dev": true, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^17.0.0", + "typescript": ">=5.2 <5.4", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", + "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", + "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", + "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "dev": true, + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/cli": { + "version": "14.8.9", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.8.9.tgz", + "integrity": "sha512-NsnVfM4B4Fqjvu9a9ZeJAzDKQclKeyWvSMXLGCebzsKcIBwbeh6G30nmVV8Z8VkdaJDOvle6QsYSVVNrl416fw==", + "dev": true, + "dependencies": { + "nx": "14.8.9" + } + }, + "node_modules/@nrwl/devkit": { + "version": "14.8.9", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-14.8.9.tgz", + "integrity": "sha512-C9PxTxTrVundP9xDbub7apkMPP1v1PSIu/d82VdOVnnU3Kvc2fRX2gafSdH+BMBP3SE4bIBblQI6gUuDXbYubw==", + "dev": true, + "dependencies": { + "@phenomnomnominal/tsquery": "4.1.1", + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 13.10 <= 15" + } + }, + "node_modules/@nrwl/devkit/node_modules/@phenomnomnominal/tsquery": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz", + "integrity": "sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ==", + "dev": true, + "dependencies": { + "esquery": "^1.0.1" + }, + "peerDependencies": { + "typescript": "^3 || ^4" + } + }, + "node_modules/@nrwl/devkit/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/@nrwl/tao": { + "version": "14.8.9", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.8.9.tgz", + "integrity": "sha512-llaZvTCXUmj4WtpbnjZOOzyTWcZIkj7gmtY5sa1nrTvbls9BaFRabOvfW4/z3s3E3iavni9ENMuuaHOfHyiRkg==", + "dev": true, + "dependencies": { + "nx": "14.8.9" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", + "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", + "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", + "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", + "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", + "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", + "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", + "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", + "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", + "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", + "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", + "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", + "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.2.1.tgz", + "integrity": "sha512-OUKupokfgmomWVysBpZ6CB7S3gzyjbVBb5L6UyhNLKAGRFxKOG5XWMPOo0ZdZjfuHB++HyRVj9Dh/rq0+PKHfA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "17.2.1", + "@angular-devkit/schematics": "17.2.1", + "jsonc-parser": "3.2.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@schematics/angular/node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/@sigstore/bundle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.2.0.tgz", + "integrity": "sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", + "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.0.tgz", + "integrity": "sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.3.tgz", + "integrity": "sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.1.tgz", + "integrity": "sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.1.0.tgz", + "integrity": "sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", + "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.43", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", + "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "3.10.18", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.18.tgz", + "integrity": "sha512-jOk52a1Kz+1oU5fNWwAcNe64/GsE7r/Q6ronwDox0D3ETo/cr4ICMQyeXrj7G6FPW1n8YjRoAZA2F0XBr6GicQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz", + "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.37.0", + "@typescript-eslint/utils": "5.37.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", + "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", + "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", + "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz", + "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.37.0", + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/typescript-estree": "5.37.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz", + "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz", + "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz", + "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "@typescript-eslint/visitor-keys": "5.37.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz", + "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.37.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0.tgz", + "integrity": "sha512-jVZa3njBv6tcOUw34nlUdUM/40wwtm/gnVF8rtk0tA6vNcokqYI8CFU1BZjlpFwUSZaXxYkrtuPE/f2MMFlTxQ==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.2.tgz", + "integrity": "sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.17", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.22.2", + "caniuse-lite": "^1.0.30001578", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.0.1.tgz", + "integrity": "sha512-vy5JPSOibF9yAeC2PoemRdA1MuSXX7vX5osdoxKf/6OUeppAWekZ3JIJVNWFMH6wgj7uHYyqZUSqE/b/3JLV1A==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001587", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", + "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js-compat": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", + "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", + "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.672", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.672.tgz", + "integrity": "sha512-YYCy+goe3UqZqa3MOQCI5Mx/6HdBLzXL/mkbGCEWL3sP3Z1BP9zqAzeD3YEmLZlespYGFtyM8tRp5i2vfaUGCA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "devOptional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.0", + "@esbuild/android-arm": "0.20.0", + "@esbuild/android-arm64": "0.20.0", + "@esbuild/android-x64": "0.20.0", + "@esbuild/darwin-arm64": "0.20.0", + "@esbuild/darwin-x64": "0.20.0", + "@esbuild/freebsd-arm64": "0.20.0", + "@esbuild/freebsd-x64": "0.20.0", + "@esbuild/linux-arm": "0.20.0", + "@esbuild/linux-arm64": "0.20.0", + "@esbuild/linux-ia32": "0.20.0", + "@esbuild/linux-loong64": "0.20.0", + "@esbuild/linux-mips64el": "0.20.0", + "@esbuild/linux-ppc64": "0.20.0", + "@esbuild/linux-riscv64": "0.20.0", + "@esbuild/linux-s390x": "0.20.0", + "@esbuild/linux-x64": "0.20.0", + "@esbuild/netbsd-x64": "0.20.0", + "@esbuild/openbsd-x64": "0.20.0", + "@esbuild/sunos-x64": "0.20.0", + "@esbuild/win32-arm64": "0.20.0", + "@esbuild/win32-ia32": "0.20.0", + "@esbuild/win32-x64": "0.20.0" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.0.tgz", + "integrity": "sha512-Lc9KeQCg1Zf8kCtfDXgy29rx0x8dOuhDWbkP76Wc64q7ctOOc1Zv1C39AxiE+y4N6ONyXtJk4HKpM7jlU7/jSA==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "9.2.14", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.14.tgz", + "integrity": "sha512-4ByIMt677Iz5AvjyKrDpzaepIyMewNvDcvwpVVRZNmy9dLakVoVgdCHZXbK1SlVJra1db0JZ6XkJyHsanpdrdQ==", + "dev": true, + "dependencies": { + "@ljharb/through": "^2.3.12", + "ansi-escapes": "^4.3.2", + "chalk": "^5.3.0", + "cli-cursor": "^3.1.0", + "cli-width": "^4.1.0", + "external-editor": "^3.1.0", + "figures": "^3.2.0", + "lodash": "^4.17.21", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jasmine-core": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.0.1.tgz", + "integrity": "sha512-w+JDABxQCkxbGGxg+a2hUVZyqUS2JKngvIyLGu/xiw2ZwgsoSB0iiecLQsQORSeaKQ6iGrCyWG86RfNDuoA7Lg==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, + "node_modules/karma": { + "version": "6.3.20", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.20.tgz", + "integrity": "sha512-HRNQhMuKOwKpjYlWiJP0DUrJOh+QjaI/DTaD8b9rEm4Il3tJ8MijutVZH4ts10LuUFst/CedwTS6vieCN8yTSw==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/karma-coverage": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.1.1.tgz", + "integrity": "sha512-oxeOSBVK/jdZsiX03LhHQkO4eISSQb5GbHi6Nsw3Mw7G4u6yUgacBAftnO7q+emPBLMsrNbz1pGIrj+Jb3z17A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-4.0.2.tgz", + "integrity": "sha512-ggi84RMNQffSDmWSyyt4zxzh2CQGwsxvYYsprgyR1j8ikzIduEdOlcLvXjZGwXG/0j41KUXOWsUCBfbEHPWP9g==", + "dev": true, + "dependencies": { + "jasmine-core": "^3.6.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "karma": "*" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz", + "integrity": "sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": ">=3.8", + "karma": ">=0.9", + "karma-jasmine": ">=1.1" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "3.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.99.1.tgz", + "integrity": "sha512-Hu1dmuoGcZ7AfyynN3LsfruwMbxMALMka+YtZeGoLuDEySVmVAPaonkNoBRIw/ectu8b9tVQCJNgp4a4knp+tg==", + "dev": true + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", + "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "dev": true, + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz", + "integrity": "sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/ngx-logger": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/ngx-logger/-/ngx-logger-5.0.12.tgz", + "integrity": "sha512-4kTtPvxQoV2ka6pigtvkbtaLKpMYWqZm7Slu0YQVcwzBKoVR2K+oLmMVcA50S6kCxkZXq7iKcrXUKR2vhMXPqQ==", + "dependencies": { + "tslib": "^2.3.0", + "vlq": "^1.0.0" + }, + "peerDependencies": { + "rxjs": ">6.0.0" + } + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", + "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", + "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", + "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", + "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "dev": true, + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", + "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", + "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nx": { + "version": "14.8.9", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.8.9.tgz", + "integrity": "sha512-X29mxovtXkrqcYNndTNMUOrtO3tkSZF0GkdsQ16kCxo4YIqUVVOpM7IzZYx+JxO6fVDFMlK7eGU2C2lTHz/MSQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nrwl/cli": "14.8.9", + "@nrwl/tao": "14.8.9", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^3.9.0", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.4.0", + "yargs-parser": "21.0.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/nx/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nx/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/nx/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/nx/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/nx/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nx/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nx/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nx/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "dev": true, + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^7.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^7.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.3.1.tgz", + "integrity": "sha512-MBj0QYm3hJQ/C/wIXTN1OCYC8uQ4BBJ4LVele2P4ZwVQAH04vkk8E1SpDbuemLAL1dZorbuOob9rYqJeWCcCRg==", + "dev": true, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.0.tgz", + "integrity": "sha512-AbperNcX3rlob7Ay7A/HQcrofug1caABBkopoFeOQMspZBqcqj6giYn1Bwey/0uiOPAcR+NQD0I2HC7rXzk91w==", + "dev": true, + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/primeng": { + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-17.8.0.tgz", + "integrity": "sha512-rixgVfSkWhLiC5oIYcMr5H9hFTgOuSjvhCL/1cElBUjFuCGajGfA1v+nIxB11Oa3L+vyn8zbVQQNx8Q76HO68A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^17.0.0", + "@angular/core": "^17.0.0", + "@angular/forms": "^17.0.0", + "rxjs": "^6.0.0 || ^7.8.1", + "zone.js": "~0.14.0" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", + "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", + "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rollup": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", + "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.12.0", + "@rollup/rollup-android-arm64": "4.12.0", + "@rollup/rollup-darwin-arm64": "4.12.0", + "@rollup/rollup-darwin-x64": "4.12.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", + "@rollup/rollup-linux-arm64-gnu": "4.12.0", + "@rollup/rollup-linux-arm64-musl": "4.12.0", + "@rollup/rollup-linux-riscv64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-gnu": "4.12.0", + "@rollup/rollup-linux-x64-musl": "4.12.0", + "@rollup/rollup-win32-arm64-msvc": "4.12.0", + "@rollup/rollup-win32-ia32-msvc": "4.12.0", + "@rollup/rollup-win32-x64-msvc": "4.12.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/safevalues": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.3.4.tgz", + "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==" + }, + "node_modules/sass": { + "version": "1.70.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", + "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.0.tgz", + "integrity": "sha512-LS2mLeFWA+orYxHNu+O18Xe4jR0kyamNOOUsE3NyBP4DvIL+8stHpNX0arYTItdPe80kluIiJ7Wfe/9iHSRO0Q==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.2.tgz", + "integrity": "sha512-2A3WvXkQurhuMgORgT60r6pOWiCOO5LlEqY2ADxGBDGVYLSo5HN0uLtb68YpVpuL/Vi8mLTe7+0Dx2Fq8lLqEg==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0", + "@sigstore/sign": "^2.2.3", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz", + "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", + "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.1.tgz", + "integrity": "sha512-29wAr6UU/oQpnTw5HoadwjUZnFQXGdOfj0LjZ4sVxzqwHh/QVkvr7m8y9WoR4iN3FRitVduTc6KdjcW38Npsug==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tuf-js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "2.0.0", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz", + "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/undici": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.6.2.tgz", + "integrity": "sha512-vSqvUE5skSxQJ5sztTZ/CdeJb1Wq0Hf44hlYMciqHghvz+K88U0l7D6u1VsndoFgskDcnU+nG3gYmMzJVzd9Qg==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==" + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.90.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.1.tgz", + "integrity": "sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.4.tgz", + "integrity": "sha512-NtTUvIlNELez7Q1DzKVIFZBzNb646boQMgpATo9z3Ftuu/gWvzxCW7jdjcUDoRGxRikrhVHB/zLXh1hxeJawvw==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/client/package.json b/client/package.json new file mode 100644 index 0000000..858fc53 --- /dev/null +++ b/client/package.json @@ -0,0 +1,57 @@ +{ + "name": "angular-material-template", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "lint": "ng lint", + "test": "ng test", + "build-production": "ng build --configuration=production --base-href=/angular-material-template/" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.2.2", + "@angular/cdk": "^16.2.14", + "@angular/common": "^17.2.2", + "@angular/compiler": "^17.2.2", + "@angular/core": "^17.2.2", + "@angular/flex-layout": "^15.0.0-beta.42", + "@angular/forms": "^17.2.2", + "@angular/material": "^16.2.14", + "@angular/material-moment-adapter": "^16.2.14", + "@angular/platform-browser": "^17.2.2", + "@angular/platform-browser-dynamic": "^17.2.2", + "@angular/router": "^17.2.2", + "jwt-decode": "^3.1.2", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", + "ngx-logger": "^5.0.7", + "primeng": "^17.8.0", + "rxjs": "^7.8.1", + "tslib": "^2.3.0", + "zone.js": "~0.14.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.2.1", + "@angular-eslint/builder": "14.1.1", + "@angular-eslint/eslint-plugin": "14.1.1", + "@angular-eslint/eslint-plugin-template": "14.1.1", + "@angular-eslint/template-parser": "14.1.1", + "@angular/cli": "^17.2.1", + "@angular/compiler-cli": "^17.2.2", + "@types/jasmine": "~3.10.0", + "@types/node": "^12.11.1", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", + "eslint": "^8.23.0", + "jasmine-core": "~4.0.0", + "karma": "~6.3.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.1.0", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "~1.7.0", + "typescript": "~5.3.3" + } +} diff --git a/client/src/.DS_Store b/client/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f609d3e4ce27815ac3b3a3759114663adc0ab4f8 GIT binary patch literal 6148 zcmeHK%}T>S5T5NH5ql^I;=#kdLXX~JiBC`;Kx>N%i3wH(Z_$f=3Kbtik3NR4;=ylb z7n8K62nE416L!Dd*_oZmmypR4kr`Z%`$Rn=3eXrE8|Z!zUgx$T4X^0}4e!w(o}@`8 zTFh1c0R#N(nsiJVW$|hG`R%ljt=5Y zaZTuorj@Ae-9zkKSue+ay?ws-vFB`x4C-tud35-Fr!F$Mpc^`;OG+_HWImr0HC~q4 zmh=0(i?<&fH??~wX_4!1>??Vb<-Apt0cAiLSd{@^ql3*=H&TCPKp9v&2Kf76(HKLI zxkLGMppzp2um!aU#`13kw5$Mz9&?A#K#X$*I#=V57{<9nZ@pdUF?Z^fu@`Gxc(p1pZ}{)I#ULefwf}5w4z}&z%BXOx^Qz`Yc1Ll p8VlRy4!>P6kWvg=F2y@&BG6kN07H+tLuerSBOo+rrwsfl178>jb1?t_ literal 0 HcmV?d00001 diff --git a/client/src/app/.DS_Store b/client/src/app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..294f89b8681ddd5bdb87f880b3e6b816f8576589 GIT binary patch literal 8196 zcmeHMF>ljA6n;k&2rYslK&r%I!Gr`u2PTG^5_X^?OOhsPkditgWaxy44lpnY$n4|2^%g11%d)WfuKN8ASm!}D1bGaTccv# zH{Ngz3IqlIO9lA*Awp*xTbmlIzdCTxB>-#Hr-RSsPoM8mmJwrl}s34OO

TdtN_>Ub!t-iJJkI{!&3F{X z874WGYLw*jlKIrY2U<{H?q*#5;`&?;-|jxnI80;R>^{HDo0`0=!F}qOD z?fiO@=bifVS^NAl?`O_?3ffO-j2S01q$}ucocF-w9?k}m%{ksGni1i0yzud9#&Kp; z&iwFEay~K7=eU>;&toj-aQeF+x`FoOqbs*tl&xdd8+HT*Ylh=?tq=+bvf<5dy{bzi2Q!}5i);_1fk8T0t<%s3fKQw zWvll8=X7>~c2FQFa2N$tt+~-$2h!Hor5LWYBlH$JH^!yL>JS_l!q;^<4m0qSDYQ9M;16$Q(mwzI literal 0 HcmV?d00001 diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts new file mode 100644 index 0000000..e80dabe --- /dev/null +++ b/client/src/app/app-routing.module.ts @@ -0,0 +1,75 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { AuthGuard } from './core/guards/auth.guard'; + +const appRoutes: Routes = [ + { + path: 'auth', + loadChildren: () => import('./features/auth/auth.module').then(m => m.AuthModule), + }, + { + path: 'dashboard', + loadChildren: () => import('./features/dashboard/dashboard.module').then(m => m.DashboardModule), + canActivate: [AuthGuard] + }, + { + path: 'sales', + loadChildren: () => import('./features/sales/sales.module').then(m => m.SalesModule), + canActivate: [AuthGuard] + }, + { + path: 'favorites', + loadChildren: () => import('./features/favorites/favorites.module').then(m => m.FavoritesModule), + canActivate: [AuthGuard] + }, + { + path: 'pictures', + loadChildren: () => import('./features/pictures/pictures.module').then(m => m.PicturesModule), + canActivate: [AuthGuard] + }, + { + path: 'customers', + loadChildren: () => import('./features/customers/customers.module').then(m => m.CustomersModule), + canActivate: [AuthGuard] + }, + { + path: 'users', + loadChildren: () => import('./features/users/users.module').then(m => m.UsersModule), + canActivate: [AuthGuard] + }, + { + path: 'account', + loadChildren: () => import('./features/account/account.module').then(m => m.AccountModule), + canActivate: [AuthGuard] + }, + { + path: 'icons', + loadChildren: () => import('./features/icons/icons.module').then(m => m.IconsModule), + canActivate: [AuthGuard] + }, + { + path: 'typography', + loadChildren: () => import('./features/typography/typography.module').then(m => m.TypographyModule), + canActivate: [AuthGuard] + }, + { + path: 'about', + loadChildren: () => import('./features/about/about.module').then(m => m.AboutModule), + canActivate: [AuthGuard] + }, + { + path: '**', + redirectTo: 'dashboard', + pathMatch: 'full' + } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(appRoutes) + ], + exports: [RouterModule], + providers: [] +}) +export class AppRoutingModule { } diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts new file mode 100644 index 0000000..403b209 --- /dev/null +++ b/client/src/app/app.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + template: `` +}) +export class AppComponent {} diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts new file mode 100644 index 0000000..e599d89 --- /dev/null +++ b/client/src/app/app.module.ts @@ -0,0 +1,32 @@ +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +import { AppComponent } from './app.component'; +import { CoreModule } from './core/core.module'; +import { SharedModule } from './shared/shared.module'; +import { CustomMaterialModule } from './custom-material/custom-material.module'; +import { AppRoutingModule } from './app-routing.module'; +import { LoggerModule } from 'ngx-logger'; +import { environment } from '../environments/environment'; + +@NgModule({ + declarations: [ + AppComponent, + ], + imports: [ + BrowserModule, + BrowserAnimationsModule, + CoreModule, + SharedModule, + CustomMaterialModule.forRoot(), + AppRoutingModule, + LoggerModule.forRoot({ + serverLoggingUrl: `http://my-api/logs`, + level: environment.logLevel, + serverLogLevel: environment.serverLogLevel + }) + ], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/client/src/app/core/core.module.ts b/client/src/app/core/core.module.ts new file mode 100644 index 0000000..c73ebe2 --- /dev/null +++ b/client/src/app/core/core.module.ts @@ -0,0 +1,49 @@ +import { NgModule, Optional, SkipSelf, ErrorHandler } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { MediaMatcher } from '@angular/cdk/layout'; +import { NGXLogger } from 'ngx-logger'; + +import { AuthInterceptor } from './interceptors/auth.interceptor'; +import { SpinnerInterceptor } from './interceptors/spinner.interceptor'; +import { AuthGuard } from './guards/auth.guard'; +import { throwIfAlreadyLoaded } from './guards/module-import.guard'; +import { GlobalErrorHandler } from './services/globar-error.handler'; +import { AdminGuard } from './guards/admin.guard'; + +@NgModule({ + imports: [ + CommonModule, + HttpClientModule + ], + declarations: [ + ], + providers: [ + AuthGuard, + AdminGuard, + MediaMatcher, + { + provide: HTTP_INTERCEPTORS, + useClass: SpinnerInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: AuthInterceptor, + multi: true + }, + { + provide: ErrorHandler, + useClass: GlobalErrorHandler + }, + { provide: NGXLogger, useClass: NGXLogger }, + { provide: 'LOCALSTORAGE', useValue: window.localStorage } + ], + exports: [ + ] +}) +export class CoreModule { + constructor(@Optional() @SkipSelf() parentModule: CoreModule) { + throwIfAlreadyLoaded(parentModule, 'CoreModule'); + } +} diff --git a/client/src/app/core/guards/admin.guard.spec.ts b/client/src/app/core/guards/admin.guard.spec.ts new file mode 100644 index 0000000..08b9de2 --- /dev/null +++ b/client/src/app/core/guards/admin.guard.spec.ts @@ -0,0 +1,66 @@ +import { AdminGuard } from './admin.guard'; + +describe('AdminGuard', () => { + + let router; + let authService; + + beforeEach(() => { + router = jasmine.createSpyObj(['navigate']); + authService = jasmine.createSpyObj(['getCurrentUser']); + }); + + it('create an instance', () => { + const guard = new AdminGuard(router, authService); + expect(guard).toBeTruthy(); + }); + + it('returns true if user is admin', () => { + const user = { 'isAdmin': true }; + authService.getCurrentUser.and.returnValue(user); + const guard = new AdminGuard(router, authService); + + const result = guard.canActivate(); + + expect(result).toBe(true); + }); + + it('returns false if user does not exist', () => { + authService.getCurrentUser.and.returnValue(null); + const guard = new AdminGuard(router, authService); + + const result = guard.canActivate(); + + expect(result).toBe(false); + }); + + it('returns false if user is not admin', () => { + const user = { 'isAdmin': false }; + authService.getCurrentUser.and.returnValue(user); + const guard = new AdminGuard(router, authService); + + const result = guard.canActivate(); + + expect(result).toBe(false); + }); + + it('redirects to root if user is not an admin', () => { + const user = { 'isAdmin': false }; + authService.getCurrentUser.and.returnValue(user); + const guard = new AdminGuard(router, authService); + + guard.canActivate(); + + expect(router.navigate).toHaveBeenCalledWith(['/']); + }); + + it('redirects to root if user does not exist', () => { + authService.getCurrentUser.and.returnValue(null); + const guard = new AdminGuard(router, authService); + + guard.canActivate(); + + expect(router.navigate).toHaveBeenCalledWith(['/']); + }); + +}); diff --git a/client/src/app/core/guards/admin.guard.ts b/client/src/app/core/guards/admin.guard.ts new file mode 100644 index 0000000..ffff620 --- /dev/null +++ b/client/src/app/core/guards/admin.guard.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthenticationService } from '../services/auth.service'; + +@Injectable() +export class AdminGuard { + + constructor(private router: Router, + private authService: AuthenticationService) { } + + canActivate() { + const user = this.authService.getCurrentUser(); + + if (user && user.isAdmin) { + return true; + + } else { + this.router.navigate(['/']); + return false; + } + } +} diff --git a/client/src/app/core/guards/auth.guard.spec.ts b/client/src/app/core/guards/auth.guard.spec.ts new file mode 100644 index 0000000..c86d945 --- /dev/null +++ b/client/src/app/core/guards/auth.guard.spec.ts @@ -0,0 +1,79 @@ +import { AuthGuard } from './auth.guard'; +import * as moment from 'moment'; + +describe('AuthGuard', () => { + + let router; + let authService; + let notificationService; + + beforeEach(() => { + router = jasmine.createSpyObj(['navigate']); + authService = jasmine.createSpyObj(['getCurrentUser']); + notificationService = jasmine.createSpyObj(['openSnackBar']); + }); + + it('create an instance', () => { + const guard = new AuthGuard(router, notificationService, authService); + expect(guard).toBeTruthy(); + }); + + it('returns false if user is null', () => { + authService.getCurrentUser.and.returnValue(null); + const guard = new AuthGuard(router, notificationService, authService); + + const result = guard.canActivate(); + + expect(result).toBe(false); + }); + + it('redirects to login if user is null', () => { + authService.getCurrentUser.and.returnValue(null); + const guard = new AuthGuard(router, notificationService, authService); + + guard.canActivate(); + + expect(router.navigate).toHaveBeenCalledWith(['auth/login']); + }); + + it('does not display expired notification if user is null', () => { + authService.getCurrentUser.and.returnValue(null); + const guard = new AuthGuard(router, notificationService, authService); + + guard.canActivate(); + + expect(notificationService.openSnackBar).toHaveBeenCalledTimes(0); + }); + + it('redirects to login if user session has expired', () => { + const user = { expiration: moment().add(-1, 'minutes') }; + authService.getCurrentUser.and.returnValue(user); + const guard = new AuthGuard(router, notificationService, authService); + + guard.canActivate(); + + expect(router.navigate).toHaveBeenCalledWith(['auth/login']); + }); + + it('displays notification if user session has expired', () => { + const user = { expiration: moment().add(-1, 'seconds') }; + authService.getCurrentUser.and.returnValue(user); + const guard = new AuthGuard(router, notificationService, authService); + + guard.canActivate(); + + expect(notificationService.openSnackBar) + .toHaveBeenCalledWith('Your session has expired'); + }); + + it('returns true if user session is valid', () => { + const user = { expiration: moment().add(1, 'minutes') }; + authService.getCurrentUser.and.returnValue(user); + const guard = new AuthGuard(router, notificationService, authService); + + const result = guard.canActivate(); + + expect(result).toBe(true); + }); + +}); diff --git a/client/src/app/core/guards/auth.guard.ts b/client/src/app/core/guards/auth.guard.ts new file mode 100644 index 0000000..47d3dc1 --- /dev/null +++ b/client/src/app/core/guards/auth.guard.ts @@ -0,0 +1,32 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import * as moment from 'moment'; + +import { AuthenticationService } from '../services/auth.service'; +import { NotificationService } from '../services/notification.service'; + +@Injectable() +export class AuthGuard { + + constructor(private router: Router, + private notificationService: NotificationService, + private authService: AuthenticationService) { } + + canActivate() { + const user = this.authService.getCurrentUser(); + + if (user && user.expiration) { + + if (moment() < moment(user.expiration)) { + return true; + } else { + this.notificationService.openSnackBar('Your session has expired'); + this.router.navigate(['auth/login']); + return false; + } + } + + this.router.navigate(['auth/login']); + return false; + } +} diff --git a/client/src/app/core/guards/module-import.guard.ts b/client/src/app/core/guards/module-import.guard.ts new file mode 100644 index 0000000..445640c --- /dev/null +++ b/client/src/app/core/guards/module-import.guard.ts @@ -0,0 +1,5 @@ +export function throwIfAlreadyLoaded(parentModule: any, moduleName: string) { + if (parentModule) { + throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`); + } +} diff --git a/client/src/app/core/interceptors/auth.interceptor.ts b/client/src/app/core/interceptors/auth.interceptor.ts new file mode 100644 index 0000000..265e74d --- /dev/null +++ b/client/src/app/core/interceptors/auth.interceptor.ts @@ -0,0 +1,44 @@ +import { Router } from '@angular/router'; +import { Observable } from 'rxjs'; +import { Injectable } from '@angular/core'; +import { HttpInterceptor, HttpErrorResponse } from '@angular/common/http'; +import { HttpRequest } from '@angular/common/http'; +import { HttpHandler } from '@angular/common/http'; +import { HttpEvent } from '@angular/common/http'; +import { tap } from 'rxjs/operators'; + +import { AuthenticationService } from '../services/auth.service'; +import { MatDialog } from '@angular/material/dialog'; + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + + constructor(private authService: AuthenticationService, + private router: Router, + private dialog: MatDialog) { } + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + + const user = this.authService.getCurrentUser(); + + if (user && user.token) { + + const cloned = req.clone({ + headers: req.headers.set('Authorization', + 'Bearer ' + user.token) + }); + + return next.handle(cloned).pipe(tap(() => { }, (err: any) => { + if (err instanceof HttpErrorResponse) { + if (err.status === 401) { + this.dialog.closeAll(); + this.router.navigate(['/auth/login']); + } + } + })); + + } else { + return next.handle(req); + } + } +} diff --git a/client/src/app/core/interceptors/spinner.interceptor.ts b/client/src/app/core/interceptors/spinner.interceptor.ts new file mode 100644 index 0000000..bb672bf --- /dev/null +++ b/client/src/app/core/interceptors/spinner.interceptor.ts @@ -0,0 +1,33 @@ +import { Router } from '@angular/router'; +import { Observable } from 'rxjs'; +import { Injectable } from '@angular/core'; +import { HttpInterceptor, HttpResponse } from '@angular/common/http'; +import { HttpRequest } from '@angular/common/http'; +import { HttpHandler } from '@angular/common/http'; +import { HttpEvent } from '@angular/common/http'; +import { tap } from 'rxjs/operators'; + +import { SpinnerService } from './../services/spinner.service'; + +@Injectable() +export class SpinnerInterceptor implements HttpInterceptor { + + constructor(private spinnerService: SpinnerService) { } + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + + this.spinnerService.show(); + + return next + .handle(req) + .pipe( + tap((event: HttpEvent) => { + if (event instanceof HttpResponse) { + this.spinnerService.hide(); + } + }, (error) => { + this.spinnerService.hide(); + }) + ); + } +} diff --git a/client/src/app/core/services/api.service.ts b/client/src/app/core/services/api.service.ts new file mode 100644 index 0000000..01a962c --- /dev/null +++ b/client/src/app/core/services/api.service.ts @@ -0,0 +1,88 @@ +import { Injectable, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +import { LotInfo } from './model/lotInfo.interface'; +import { SaleInfo } from './model/saleInfo.interface'; +import { Sale } from './model/sale.interface'; +import { Lot } from './model/lot.interface'; + +@Injectable({ + providedIn: 'root' +}) +export class apiService { + ApiURL = "http://localhost:3000/api"; + + constructor(private http: HttpClient){} + + // Lot + getLotInfo(url: string): Observable { + let encodeUrl = encodeURIComponent(url); + return this.http.get(this.ApiURL+'/lot/getInfos/'+encodeUrl); + } + + getPictures(url: string): Observable { + let encodeUrl = encodeURIComponent(url); + return this.http.get(this.ApiURL+'/lot/getPictures/'+encodeUrl); + } + + getLotsBySale(_id: String): Observable { + return this.http.get(this.ApiURL+'/lot/getLotsBySale/'+_id); + } + + // Sale + getSaleInfos(url: string): Observable { + let encodeUrl = encodeURIComponent(url); + + return this.http.get(this.ApiURL+'/sale/getSaleInfos/'+encodeUrl); + } + + prepareSale(saleInfo: SaleInfo): Observable { + + let follow = this.http.get(this.ApiURL+'/sale/prepareSale/'+saleInfo._id); + return follow + } + + followSale(saleInfo: SaleInfo): Observable { + + let follow = this.http.get(this.ApiURL+'/sale/followSale/'+saleInfo._id); + return follow + } + + // CRUD DB Sale + getSale(_id: String): Observable { + return this.http.get(this.ApiURL+'/sale/sale/'+_id); + } + + saveSale(saleInfo: SaleInfo): Observable { + return this.http.post(this.ApiURL+'/sale/sale', saleInfo); + } + + updateSale(saleInfo: SaleInfo): Observable { + return this.http.put(this.ApiURL+'/sale/sale/'+saleInfo._id, saleInfo); + } + + deleteSale(_id: String): Observable { + return this.http.delete(this.ApiURL+'/sale/sale/'+_id); + } + + // Function DB Sale + + getAllSale(): Observable { + return this.http.get(this.ApiURL+'/sale/getAll'); + } + + postProcessing(_id: String): Observable { + return this.http.get(this.ApiURL+'/sale/postProcessing/'+_id); + } + + + //Favorites + saveFavorite(lotInfo: LotInfo, saleInfo: SaleInfo, picture: String, dateTime: string, buyProject: boolean, maxPrice: number, Note: string): Observable { + return this.http.post(this.ApiURL+'/favorite/save', {lotInfo, saleInfo, picture, dateTime, buyProject, maxPrice, Note}); + } + + getAllFavorite(): Observable { + return this.http.get(this.ApiURL+'/favorite/getAll'); + } +} diff --git a/client/src/app/core/services/auth.service.ts b/client/src/app/core/services/auth.service.ts new file mode 100644 index 0000000..a26e264 --- /dev/null +++ b/client/src/app/core/services/auth.service.ts @@ -0,0 +1,71 @@ +import { Injectable, Inject } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { delay, map } from 'rxjs/operators'; +import * as jwt_decode from 'jwt-decode'; +import * as moment from 'moment'; + +import { environment } from '../../../environments/environment'; +import { of, EMPTY } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthenticationService { + + constructor(private http: HttpClient, + @Inject('LOCALSTORAGE') private localStorage: Storage) { + } + + login(email: string, password: string) { + return of(true) + .pipe(delay(1000), + map((/*response*/) => { + // set token property + // const decodedToken = jwt_decode(response['token']); + + // store email and jwt token in local storage to keep user logged in between page refreshes + this.localStorage.setItem('currentUser', JSON.stringify({ + token: 'aisdnaksjdn,axmnczm', + isAdmin: true, + email: 'john.doe@gmail.com', + id: '12312323232', + alias: 'john.doe@gmail.com'.split('@')[0], + expiration: moment().add(1, 'days').toDate(), + fullName: 'John Doe' + })); + + return true; + })); + } + + logout(): void { + // clear token remove user from local storage to log user out + this.localStorage.removeItem('currentUser'); + } + + getCurrentUser(): any { + // TODO: Enable after implementation + // return JSON.parse(this.localStorage.getItem('currentUser')); + return { + token: 'aisdnaksjdn,axmnczm', + isAdmin: true, + email: 'john.doe@gmail.com', + id: '12312323232', + alias: 'john.doe@gmail.com'.split('@')[0], + expiration: moment().add(1, 'days').toDate(), + fullName: 'John Doe' + }; + } + + passwordResetRequest(email: string) { + return of(true).pipe(delay(1000)); + } + + changePassword(email: string, currentPwd: string, newPwd: string) { + return of(true).pipe(delay(1000)); + } + + passwordReset(email: string, token: string, password: string, confirmPassword: string): any { + return of(true).pipe(delay(1000)); + } +} diff --git a/client/src/app/core/services/globar-error.handler.ts b/client/src/app/core/services/globar-error.handler.ts new file mode 100644 index 0000000..9f65cce --- /dev/null +++ b/client/src/app/core/services/globar-error.handler.ts @@ -0,0 +1,27 @@ +import { ErrorHandler, Injectable, Injector } from '@angular/core'; +import { NGXLogger } from 'ngx-logger'; + +@Injectable() +export class GlobalErrorHandler implements ErrorHandler { + + + constructor(private injector: Injector) { } + + handleError(error: Error) { + // Obtain dependencies at the time of the error + // This is because the GlobalErrorHandler is registered first + // which prevents constructor dependency injection + const logger = this.injector.get(NGXLogger); + + const err = { + message: error.message ? error.message : error.toString(), + stack: error.stack ? error.stack : '' + }; + + // Log the error + logger.error(err); + + // Re-throw the error + throw error; + } +} diff --git a/client/src/app/core/services/model/lot.interface.ts b/client/src/app/core/services/model/lot.interface.ts new file mode 100644 index 0000000..2436e61 --- /dev/null +++ b/client/src/app/core/services/model/lot.interface.ts @@ -0,0 +1,29 @@ + +export interface Bid { + timestamp: string; + amount: number; + auctioned_type: string; +} + +export interface Auctioned { + timestamp: string; + amount: number; + auctioned_type: string; + sold: boolean; +} + +export interface Lot { + _id: { + $oid: string; + }; + idPlatform: string; + platform: string; + timestamp: string; + lotNumber: string; + RawData?: Object; + sale_id: { + $oid: string; + }; + Bids?: Bid[]; + auctioned?: Auctioned; +} \ No newline at end of file diff --git a/client/src/app/core/services/model/lotInfo.interface.ts b/client/src/app/core/services/model/lotInfo.interface.ts new file mode 100644 index 0000000..699ceba --- /dev/null +++ b/client/src/app/core/services/model/lotInfo.interface.ts @@ -0,0 +1,15 @@ +export interface LotInfo { + idLotInterencheres: string; + url: string; + title: string; + lotNumber: string; + EstimateLow: number; + EstimateHigh: number; + Description: string; + feesText: string; + fees: string; + saleInfo: { + idSaleInterencheres: string; + url: string; + }; +} \ No newline at end of file diff --git a/client/src/app/core/services/model/sale.interface.ts b/client/src/app/core/services/model/sale.interface.ts new file mode 100644 index 0000000..8ad7cd1 --- /dev/null +++ b/client/src/app/core/services/model/sale.interface.ts @@ -0,0 +1,24 @@ + +export interface PostProcessing { + nbrLots: number; + duration: number; + durationPerLots: string; + totalAmount: number; + averageAmount: string; + medianAmount: string; +} + +export interface Sale { + _id: { + $oid: string; + }; + idPlatform: string; + platform: string; + url: string; + title: string; + date: string; + location: string; + saleHouseName: string; + status: string; + postProcessing?: PostProcessing; +} \ No newline at end of file diff --git a/client/src/app/core/services/model/saleInfo.interface.ts b/client/src/app/core/services/model/saleInfo.interface.ts new file mode 100644 index 0000000..2076939 --- /dev/null +++ b/client/src/app/core/services/model/saleInfo.interface.ts @@ -0,0 +1,11 @@ +export interface SaleInfo { + _id: string; + idPlatform: string; + platform: string; + url: string; + title: string; + date: string; + location: string; + saleHouseName: string; + status: string; +} \ No newline at end of file diff --git a/client/src/app/core/services/notification.service.ts b/client/src/app/core/services/notification.service.ts new file mode 100644 index 0000000..246b753 --- /dev/null +++ b/client/src/app/core/services/notification.service.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; +@Injectable({ + providedIn: 'root' +}) +export class NotificationService { + + constructor(private snackBar: MatSnackBar) { } + + public openSnackBar(message: string) { + this.snackBar.open(message, '', { + duration: 5000 + }); + } +} diff --git a/client/src/app/core/services/spinner.service.spec.ts b/client/src/app/core/services/spinner.service.spec.ts new file mode 100644 index 0000000..bdde388 --- /dev/null +++ b/client/src/app/core/services/spinner.service.spec.ts @@ -0,0 +1,36 @@ +import { SpinnerConsumer } from '../../shared/mocks/spinner-consumer'; +import { SpinnerService } from './spinner.service'; + +describe('BusyIndicatorService', () => { + let component: SpinnerService; + let consumer1: SpinnerConsumer; + let consumer2: SpinnerConsumer; + + beforeEach(() => { + component = new SpinnerService(); + consumer1 = new SpinnerConsumer(component); + consumer2 = new SpinnerConsumer(component); + }); + + it('should be created', () => { + expect(component).toBeTruthy(); + }); + + it('should initialise visibility to false', () => { + component.visibility.subscribe((value: boolean) => { + expect(value).toBe(false); + }); + }); + + it('should broadcast visibility to all consumers', () => { + expect(consumer1.isBusy).toBe(false); + expect(consumer2.isBusy).toBe(false); + }); + + it('should broadcast visibility to all consumers when the value changes', () => { + component.visibility.next(true); + + expect(consumer1.isBusy).toBe(true); + expect(consumer2.isBusy).toBe(true); + }); +}); diff --git a/client/src/app/core/services/spinner.service.ts b/client/src/app/core/services/spinner.service.ts new file mode 100644 index 0000000..9ab8e07 --- /dev/null +++ b/client/src/app/core/services/spinner.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class SpinnerService { + + visibility = new BehaviorSubject(false); + + constructor() { + } + + show() { + this.visibility.next(true); + } + + hide() { + this.visibility.next(false); + } +} diff --git a/client/src/app/custom-material/custom-material.module.ts b/client/src/app/custom-material/custom-material.module.ts new file mode 100644 index 0000000..c069267 --- /dev/null +++ b/client/src/app/custom-material/custom-material.module.ts @@ -0,0 +1,98 @@ +import { NgModule, LOCALE_ID } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatMomentDateModule, MomentDateAdapter, MAT_MOMENT_DATE_FORMATS } from '@angular/material-moment-adapter'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatButtonModule } from '@angular/material/button'; +import { MatInputModule } from '@angular/material/input'; +import { MatAutocompleteModule } from '@angular/material/autocomplete'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatFormFieldModule} from '@angular/material/form-field'; +import {MatRadioModule} from '@angular/material/radio'; +import { MatSelectModule } from '@angular/material/select'; +import {MatSliderModule} from '@angular/material/slider'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatBadgeModule } from '@angular/material/badge'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatListModule } from '@angular/material/list'; +import { MatGridListModule } from '@angular/material/grid-list'; +import { MatCardModule } from '@angular/material/card'; +import { MatStepperModule } from '@angular/material/stepper'; +import {MatTabsModule} from '@angular/material/tabs'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MatButtonToggleModule } from '@angular/material/button-toggle'; +import { MatChipsModule } from '@angular/material/chips'; +import { MatIconModule } from '@angular/material/icon'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatTableModule } from '@angular/material/table'; +import { MatSortModule } from '@angular/material/sort'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { SelectCheckAllComponent } from './select-check-all/select-check-all.component'; +import { DragDropModule } from '@angular/cdk/drag-drop'; +import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core'; + + +// Prime NG +import { GalleriaModule } from 'primeng/galleria'; +import { ImageModule } from 'primeng/image'; +import { SkeletonModule } from 'primeng/skeleton'; + +export const MY_FORMATS = { + parse: { + dateInput: 'DD MMM YYYY', + }, + display: { + dateInput: 'DD MMM YYYY', + monthYearLabel: 'MMM YYYY', + dateA11yLabel: 'LL', + monthYearA11yLabel: 'MMMM YYYY' + } +}; + +@NgModule({ + imports: [ + CommonModule, + MatMomentDateModule, + MatSidenavModule, MatIconModule, MatToolbarModule, MatButtonModule, + MatListModule, MatGridListModule, MatCardModule, MatProgressBarModule, MatInputModule, + MatSnackBarModule, MatProgressSpinnerModule, MatDatepickerModule, + MatAutocompleteModule, MatTableModule, MatDialogModule, MatTabsModule, + MatTooltipModule, MatSelectModule, MatPaginatorModule, MatChipsModule, + MatButtonToggleModule, MatSlideToggleModule, MatBadgeModule, MatCheckboxModule, + MatExpansionModule, DragDropModule, MatSortModule, + + GalleriaModule,ImageModule,SkeletonModule + ], + exports: [ + CommonModule, + MatSidenavModule, MatIconModule, MatToolbarModule, MatButtonModule, + MatListModule, MatGridListModule, MatCardModule, MatProgressBarModule, MatInputModule, + MatSnackBarModule, MatMenuModule, MatProgressSpinnerModule, MatDatepickerModule, + MatAutocompleteModule, MatTableModule, MatDialogModule, MatTabsModule, + MatTooltipModule, MatSelectModule, MatPaginatorModule, MatChipsModule, + MatButtonToggleModule, MatSlideToggleModule, MatBadgeModule, MatCheckboxModule, + MatExpansionModule, SelectCheckAllComponent, DragDropModule, MatSortModule, + + GalleriaModule,ImageModule,SkeletonModule + ], + providers: [ + { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] }, + { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }, + { provide: LOCALE_ID, useValue: 'en-gb' } + ], + declarations: [SelectCheckAllComponent] +}) +export class CustomMaterialModule { + static forRoot() { + return { + ngModule: CustomMaterialModule, + providers: [ + ] + }; + } +} diff --git a/client/src/app/custom-material/select-check-all/select-check-all.component.css b/client/src/app/custom-material/select-check-all/select-check-all.component.css new file mode 100644 index 0000000..8f8ff64 --- /dev/null +++ b/client/src/app/custom-material/select-check-all/select-check-all.component.css @@ -0,0 +1,4 @@ +app-select-check-all .mat-checkbox-layout, +app-select-check-all .mat-checkbox-label { + width:100% !important; +} \ No newline at end of file diff --git a/client/src/app/custom-material/select-check-all/select-check-all.component.html b/client/src/app/custom-material/select-check-all/select-check-all.component.html new file mode 100644 index 0000000..bcd08c0 --- /dev/null +++ b/client/src/app/custom-material/select-check-all/select-check-all.component.html @@ -0,0 +1,4 @@ + + {{text}} + \ No newline at end of file diff --git a/client/src/app/custom-material/select-check-all/select-check-all.component.ts b/client/src/app/custom-material/select-check-all/select-check-all.component.ts new file mode 100644 index 0000000..9a875dd --- /dev/null +++ b/client/src/app/custom-material/select-check-all/select-check-all.component.ts @@ -0,0 +1,35 @@ +import { Component, Input, ViewEncapsulation } from '@angular/core'; +import { UntypedFormControl } from '@angular/forms'; +import { MatCheckboxChange } from '@angular/material/checkbox'; +@Component({ + selector: 'app-select-check-all', + templateUrl: './select-check-all.component.html', + styleUrls: ['./select-check-all.component.css'], + encapsulation: ViewEncapsulation.None +}) +export class SelectCheckAllComponent { + @Input() + model: UntypedFormControl = new UntypedFormControl; + @Input() values = []; + @Input() text = 'Select All'; + + constructor() { } + + isChecked(): boolean { + return this.model.value && this.values.length + && this.model.value.length === this.values.length; + } + + isIndeterminate(): boolean { + return this.model.value && this.values.length && this.model.value.length + && this.model.value.length < this.values.length; + } + + toggleSelection(change: MatCheckboxChange): void { + if (change.checked) { + this.model.setValue(this.values); + } else { + this.model.setValue([]); + } + } +} diff --git a/client/src/app/features/about/about-page/about-page.component.css b/client/src/app/features/about/about-page/about-page.component.css new file mode 100644 index 0000000..ffebf7a --- /dev/null +++ b/client/src/app/features/about/about-page/about-page.component.css @@ -0,0 +1,3 @@ +mat-icon { + color: rgb(200, 0, 0); +} \ No newline at end of file diff --git a/client/src/app/features/about/about-page/about-page.component.html b/client/src/app/features/about/about-page/about-page.component.html new file mode 100644 index 0000000..03f000a --- /dev/null +++ b/client/src/app/features/about/about-page/about-page.component.html @@ -0,0 +1,32 @@ +

+
+ + + +

About

+ +

+ Built on top of Angular & Angular Material, angular-material-template provides a simple template that you can use for your next project. +

+ +

+ Support the project by starring it on + GitHub + . +

+ +

+ Made with favorite by onthecode. +

+ + +
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/about/about-page/about-page.component.spec.ts b/client/src/app/features/about/about-page/about-page.component.spec.ts new file mode 100644 index 0000000..ad97130 --- /dev/null +++ b/client/src/app/features/about/about-page/about-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AboutPageComponent } from './about-page.component'; + +describe('AboutHomeComponent', () => { + let component: AboutPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AboutPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AboutPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/features/about/about-page/about-page.component.ts b/client/src/app/features/about/about-page/about-page.component.ts new file mode 100644 index 0000000..0287b24 --- /dev/null +++ b/client/src/app/features/about/about-page/about-page.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-about-page', + templateUrl: './about-page.component.html', + styleUrls: ['./about-page.component.css'] +}) +export class AboutPageComponent { + + constructor() { } + +} diff --git a/client/src/app/features/about/about-routing.module.ts b/client/src/app/features/about/about-routing.module.ts new file mode 100644 index 0000000..c1a3ddb --- /dev/null +++ b/client/src/app/features/about/about-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { LayoutComponent } from '../../shared/layout/layout.component'; +import { AboutPageComponent } from './about-page/about-page.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: AboutPageComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class AboutRoutingModule { } diff --git a/client/src/app/features/about/about.module.ts b/client/src/app/features/about/about.module.ts new file mode 100644 index 0000000..f13d948 --- /dev/null +++ b/client/src/app/features/about/about.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { AboutRoutingModule } from './about-routing.module'; +import { AboutPageComponent } from './about-page/about-page.component'; +import { SharedModule } from '../../shared/shared.module'; + +@NgModule({ + declarations: [AboutPageComponent], + imports: [ + CommonModule, + SharedModule, + AboutRoutingModule + ] +}) +export class AboutModule { } diff --git a/client/src/app/features/account/account-page/account-page.component.css b/client/src/app/features/account/account-page/account-page.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/features/account/account-page/account-page.component.html b/client/src/app/features/account/account-page/account-page.component.html new file mode 100644 index 0000000..d633585 --- /dev/null +++ b/client/src/app/features/account/account-page/account-page.component.html @@ -0,0 +1,35 @@ +
+ +
+ + + +

My Profile

+ +
+ +
+ +
+ +
+ +
+ + + + + + + + + +
+ +
+
+
+
+ + +
\ No newline at end of file diff --git a/client/src/app/features/account/account-page/account-page.component.ts b/client/src/app/features/account/account-page/account-page.component.ts new file mode 100644 index 0000000..ed520b7 --- /dev/null +++ b/client/src/app/features/account/account-page/account-page.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; + +@Component({ + selector: 'app-account-page', + templateUrl: './account-page.component.html', + styleUrls: ['./account-page.component.css'] +}) +export class AccountPageComponent implements OnInit { + + constructor(private titleService: Title) { } + + ngOnInit() { + this.titleService.setTitle('Jucundus - Account'); + } + +} diff --git a/client/src/app/features/account/account-routing.module.ts b/client/src/app/features/account/account-routing.module.ts new file mode 100644 index 0000000..7c81b06 --- /dev/null +++ b/client/src/app/features/account/account-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { LayoutComponent } from 'src/app/shared/layout/layout.component'; + +import { AccountPageComponent } from './account-page/account-page.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: 'profile', component: AccountPageComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class AccountRoutingModule { } diff --git a/client/src/app/features/account/account.module.ts b/client/src/app/features/account/account.module.ts new file mode 100644 index 0000000..4c9a285 --- /dev/null +++ b/client/src/app/features/account/account.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { AccountRoutingModule } from './account-routing.module'; +import { AccountPageComponent } from './account-page/account-page.component'; +import { ChangePasswordComponent } from './change-password/change-password.component'; +import { ProfileDetailsComponent } from './profile-details/profile-details.component'; +import { SharedModule } from 'src/app/shared/shared.module'; + +@NgModule({ + imports: [ + CommonModule, + SharedModule, + AccountRoutingModule + ], + declarations: [AccountPageComponent, ChangePasswordComponent, ProfileDetailsComponent], + exports: [AccountPageComponent] +}) +export class AccountModule { } diff --git a/client/src/app/features/account/change-password/change-password.component.css b/client/src/app/features/account/change-password/change-password.component.css new file mode 100644 index 0000000..ddab79c --- /dev/null +++ b/client/src/app/features/account/change-password/change-password.component.css @@ -0,0 +1,6 @@ +.password-rules .mat-divider { + position: unset !important; +} +.container{ + padding-top: 20px; +} \ No newline at end of file diff --git a/client/src/app/features/account/change-password/change-password.component.html b/client/src/app/features/account/change-password/change-password.component.html new file mode 100644 index 0000000..7eb715e --- /dev/null +++ b/client/src/app/features/account/change-password/change-password.component.html @@ -0,0 +1,70 @@ +
+

Use the form below to change your password.

+ +
+ +
+ + + + + {{hideCurrentPassword ? 'visibility' : 'visibility_off'}} + + + + Please enter a your current password + + + + + + + {{hideNewPassword ? 'visibility' : 'visibility_off'}} + + + + Please enter a new password + + + + + + + {{hideNewPassword ? 'visibility' : 'visibility_off'}} + + + + Please confirm your new password + + + + + +
+ +
+ +
+ + \ No newline at end of file diff --git a/client/src/app/features/account/change-password/change-password.component.ts b/client/src/app/features/account/change-password/change-password.component.ts new file mode 100644 index 0000000..cbb4c54 --- /dev/null +++ b/client/src/app/features/account/change-password/change-password.component.ts @@ -0,0 +1,75 @@ +import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms'; +import { Component, OnInit } from '@angular/core'; +import { NGXLogger } from 'ngx-logger'; +import { AuthenticationService } from 'src/app/core/services/auth.service'; +import { NotificationService } from 'src/app/core/services/notification.service'; +import { SpinnerService } from 'src/app/core/services/spinner.service'; + + +@Component({ + selector: 'app-change-password', + templateUrl: './change-password.component.html', + styleUrls: ['./change-password.component.css'] +}) +export class ChangePasswordComponent implements OnInit { + + form!: UntypedFormGroup; + hideCurrentPassword: boolean; + hideNewPassword: boolean; + currentPassword!: string; + newPassword!: string; + newPasswordConfirm!: string; + disableSubmit!: boolean; + + constructor(private authService: AuthenticationService, + private logger: NGXLogger, + private spinnerService: SpinnerService, + private notificationService: NotificationService) { + + this.hideCurrentPassword = true; + this.hideNewPassword = true; + } + + ngOnInit() { + this.form = new UntypedFormGroup({ + currentPassword: new UntypedFormControl('', Validators.required), + newPassword: new UntypedFormControl('', Validators.required), + newPasswordConfirm: new UntypedFormControl('', Validators.required), + }); + + this.form.get('currentPassword')?.valueChanges + .subscribe(val => { this.currentPassword = val; }); + + this.form.get('newPassword')?.valueChanges + .subscribe(val => { this.newPassword = val; }); + + this.form.get('newPasswordConfirm')?.valueChanges + .subscribe(val => { this.newPasswordConfirm = val; }); + + this.spinnerService.visibility.subscribe((value) => { + this.disableSubmit = value; + }); + } + + changePassword() { + + if (this.newPassword !== this.newPasswordConfirm) { + this.notificationService.openSnackBar('New passwords do not match.'); + return; + } + + const email = this.authService.getCurrentUser().email; + + this.authService.changePassword(email, this.currentPassword, this.newPassword) + .subscribe( + data => { + this.logger.info(`User ${email} changed password.`); + this.form.reset(); + this.notificationService.openSnackBar('Your password has been changed.'); + }, + error => { + this.notificationService.openSnackBar(error.error); + } + ); + } +} diff --git a/client/src/app/features/account/profile-details/profile-details.component.css b/client/src/app/features/account/profile-details/profile-details.component.css new file mode 100644 index 0000000..b6c8e91 --- /dev/null +++ b/client/src/app/features/account/profile-details/profile-details.component.css @@ -0,0 +1,3 @@ +.profile-card { + text-align: center; +} \ No newline at end of file diff --git a/client/src/app/features/account/profile-details/profile-details.component.html b/client/src/app/features/account/profile-details/profile-details.component.html new file mode 100644 index 0000000..4c136fe --- /dev/null +++ b/client/src/app/features/account/profile-details/profile-details.component.html @@ -0,0 +1,15 @@ +
+ + +

+ {{fullName}} +

+ + + + +
\ No newline at end of file diff --git a/client/src/app/features/account/profile-details/profile-details.component.ts b/client/src/app/features/account/profile-details/profile-details.component.ts new file mode 100644 index 0000000..fc1cdd4 --- /dev/null +++ b/client/src/app/features/account/profile-details/profile-details.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; +import { AuthenticationService } from 'src/app/core/services/auth.service'; + +@Component({ + selector: 'app-profile-details', + templateUrl: './profile-details.component.html', + styleUrls: ['./profile-details.component.css'] +}) +export class ProfileDetailsComponent implements OnInit { + + fullName: string = ""; + email: string = ""; + alias: string = ""; + + constructor(private authService: AuthenticationService) { } + + ngOnInit() { + this.fullName = this.authService.getCurrentUser().fullName; + this.email = this.authService.getCurrentUser().email; + } + +} diff --git a/client/src/app/features/auth/auth-routing.module.ts b/client/src/app/features/auth/auth-routing.module.ts new file mode 100644 index 0000000..9a934db --- /dev/null +++ b/client/src/app/features/auth/auth-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { LoginComponent } from './login/login.component'; +import { PasswordResetRequestComponent } from './password-reset-request/password-reset-request.component'; +import { PasswordResetComponent } from './password-reset/password-reset.component'; + +const routes: Routes = [ + { path: 'login', component: LoginComponent }, + { path: 'password-reset-request', component: PasswordResetRequestComponent }, + { path: 'password-reset', component: PasswordResetComponent } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class AuthRoutingModule { } diff --git a/client/src/app/features/auth/auth.module.ts b/client/src/app/features/auth/auth.module.ts new file mode 100644 index 0000000..3ef111a --- /dev/null +++ b/client/src/app/features/auth/auth.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { AuthRoutingModule } from './auth-routing.module'; +import { LoginComponent } from './login/login.component'; +import { PasswordResetRequestComponent } from './password-reset-request/password-reset-request.component'; +import { PasswordResetComponent } from './password-reset/password-reset.component'; +import { SharedModule } from 'src/app/shared/shared.module'; + +@NgModule({ + imports: [ + CommonModule, + SharedModule, + AuthRoutingModule + ], + declarations: [LoginComponent, PasswordResetRequestComponent, PasswordResetComponent] +}) +export class AuthModule { } diff --git a/client/src/app/features/auth/login/login.component.css b/client/src/app/features/auth/login/login.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/features/auth/login/login.component.html b/client/src/app/features/auth/login/login.component.html new file mode 100644 index 0000000..5807194 --- /dev/null +++ b/client/src/app/features/auth/login/login.component.html @@ -0,0 +1,47 @@ + \ No newline at end of file diff --git a/client/src/app/features/auth/login/login.component.ts b/client/src/app/features/auth/login/login.component.ts new file mode 100644 index 0000000..16dda0d --- /dev/null +++ b/client/src/app/features/auth/login/login.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { UntypedFormControl, Validators, UntypedFormGroup } from '@angular/forms'; +import { Title } from '@angular/platform-browser'; +import { AuthenticationService } from 'src/app/core/services/auth.service'; +import { NotificationService } from 'src/app/core/services/notification.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.css'] +}) +export class LoginComponent implements OnInit { + + loginForm!: UntypedFormGroup; + loading!: boolean; + + constructor(private router: Router, + private titleService: Title, + private notificationService: NotificationService, + private authenticationService: AuthenticationService) { + } + + ngOnInit() { + this.titleService.setTitle('Jucundus - Login'); + this.authenticationService.logout(); + this.createForm(); + } + + private createForm() { + const savedUserEmail = localStorage.getItem('savedUserEmail'); + + this.loginForm = new UntypedFormGroup({ + email: new UntypedFormControl(savedUserEmail, [Validators.required, Validators.email]), + password: new UntypedFormControl('', Validators.required), + rememberMe: new UntypedFormControl(savedUserEmail !== null) + }); + } + + login() { + const email = this.loginForm.get('email')?.value; + const password = this.loginForm.get('password')?.value; + const rememberMe = this.loginForm.get('rememberMe')?.value; + + this.loading = true; + this.authenticationService + .login(email.toLowerCase(), password) + .subscribe( + data => { + if (rememberMe) { + localStorage.setItem('savedUserEmail', email); + } else { + localStorage.removeItem('savedUserEmail'); + } + this.router.navigate(['/']); + }, + error => { + this.notificationService.openSnackBar(error.error); + this.loading = false; + } + ); + } + + resetPassword() { + this.router.navigate(['/auth/password-reset-request']); + } +} diff --git a/client/src/app/features/auth/password-reset-request/password-reset-request.component.css b/client/src/app/features/auth/password-reset-request/password-reset-request.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/features/auth/password-reset-request/password-reset-request.component.html b/client/src/app/features/auth/password-reset-request/password-reset-request.component.html new file mode 100644 index 0000000..8173cdf --- /dev/null +++ b/client/src/app/features/auth/password-reset-request/password-reset-request.component.html @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/client/src/app/features/auth/password-reset-request/password-reset-request.component.ts b/client/src/app/features/auth/password-reset-request/password-reset-request.component.ts new file mode 100644 index 0000000..5ef8e69 --- /dev/null +++ b/client/src/app/features/auth/password-reset-request/password-reset-request.component.ts @@ -0,0 +1,54 @@ +import { Router } from '@angular/router'; +import { Component, OnInit } from '@angular/core'; +import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms'; +import { Title } from '@angular/platform-browser'; + +import { NotificationService } from 'src/app/core/services/notification.service'; +import { AuthenticationService } from 'src/app/core/services/auth.service'; + +@Component({ + selector: 'app-password-reset-request', + templateUrl: './password-reset-request.component.html', + styleUrls: ['./password-reset-request.component.css'] +}) +export class PasswordResetRequestComponent implements OnInit { + + private email!: string; + form!: UntypedFormGroup; + loading!: boolean; + + constructor(private authService: AuthenticationService, + private notificationService: NotificationService, + private titleService: Title, + private router: Router) { } + + ngOnInit() { + this.titleService.setTitle('Jucundus - Password Reset Request'); + + this.form = new UntypedFormGroup({ + email: new UntypedFormControl('', [Validators.required, Validators.email]) + }); + + this.form.get('email')?.valueChanges + .subscribe((val: string) => { this.email = val.toLowerCase(); }); + } + + resetPassword() { + this.loading = true; + this.authService.passwordResetRequest(this.email) + .subscribe( + results => { + this.router.navigate(['/auth/login']); + this.notificationService.openSnackBar('Password verification mail has been sent to your email address.'); + }, + error => { + this.loading = false; + this.notificationService.openSnackBar(error.error); + } + ); + } + + cancel() { + this.router.navigate(['/']); + } +} diff --git a/client/src/app/features/auth/password-reset/password-reset.component.css b/client/src/app/features/auth/password-reset/password-reset.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/features/auth/password-reset/password-reset.component.html b/client/src/app/features/auth/password-reset/password-reset.component.html new file mode 100644 index 0000000..38b193f --- /dev/null +++ b/client/src/app/features/auth/password-reset/password-reset.component.html @@ -0,0 +1,45 @@ + \ No newline at end of file diff --git a/client/src/app/features/auth/password-reset/password-reset.component.ts b/client/src/app/features/auth/password-reset/password-reset.component.ts new file mode 100644 index 0000000..eb70449 --- /dev/null +++ b/client/src/app/features/auth/password-reset/password-reset.component.ts @@ -0,0 +1,77 @@ +import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms'; +import { ActivatedRoute, Router, ParamMap } from '@angular/router'; +import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; +import { AuthenticationService } from 'src/app/core/services/auth.service'; +import { NotificationService } from 'src/app/core/services/notification.service'; + +@Component({ + selector: 'app-password-reset', + templateUrl: './password-reset.component.html', + styleUrls: ['./password-reset.component.css'] +}) +export class PasswordResetComponent implements OnInit { + + private token!: string; + email!: string; + form!: UntypedFormGroup; + loading!: boolean; + hideNewPassword: boolean; + hideNewPasswordConfirm: boolean; + + constructor(private activeRoute: ActivatedRoute, + private router: Router, + private authService: AuthenticationService, + private notificationService: NotificationService, + private titleService: Title) { + + this.titleService.setTitle('Jucundus - Password Reset'); + this.hideNewPassword = true; + this.hideNewPasswordConfirm = true; + } + + ngOnInit() { + this.activeRoute.queryParamMap.subscribe((params: ParamMap) => { + this.token = params.get('token') + ''; + this.email = params.get('email') + ''; + + if (!this.token || !this.email) { + this.router.navigate(['/']); + } + }); + + this.form = new UntypedFormGroup({ + newPassword: new UntypedFormControl('', Validators.required), + newPasswordConfirm: new UntypedFormControl('', Validators.required) + }); + } + + resetPassword() { + + const password = this.form.get('newPassword')?.value; + const passwordConfirm = this.form.get('newPasswordConfirm')?.value; + + if (password !== passwordConfirm) { + this.notificationService.openSnackBar('Passwords do not match'); + return; + } + + this.loading = true; + + this.authService.passwordReset(this.email, this.token, password, passwordConfirm) + .subscribe( + () => { + this.notificationService.openSnackBar('Your password has been changed.'); + this.router.navigate(['/auth/login']); + }, + (error: any) => { + this.notificationService.openSnackBar(error.error); + this.loading = false; + } + ); + } + + cancel() { + this.router.navigate(['/']); + } +} diff --git a/client/src/app/features/customers/customer-list/customer-list.component.css b/client/src/app/features/customers/customer-list/customer-list.component.css new file mode 100644 index 0000000..e25d930 --- /dev/null +++ b/client/src/app/features/customers/customer-list/customer-list.component.css @@ -0,0 +1,7 @@ +table { + width: 100%; +} + +th.mat-sort-header-sorted { + color: black; +} \ No newline at end of file diff --git a/client/src/app/features/customers/customer-list/customer-list.component.html b/client/src/app/features/customers/customer-list/customer-list.component.html new file mode 100644 index 0000000..b6039cf --- /dev/null +++ b/client/src/app/features/customers/customer-list/customer-list.component.html @@ -0,0 +1,42 @@ +
+
+ + + +

Customers

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
No. {{element.position}} Name {{element.name}} Weight {{element.weight}} Symbol {{element.symbol}}
+ +
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/customers/customer-list/customer-list.component.ts b/client/src/app/features/customers/customer-list/customer-list.component.ts new file mode 100644 index 0000000..b45ac41 --- /dev/null +++ b/client/src/app/features/customers/customer-list/customer-list.component.ts @@ -0,0 +1,53 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { NGXLogger } from 'ngx-logger'; +import { Title } from '@angular/platform-browser'; +import { NotificationService } from 'src/app/core/services/notification.service'; + +export interface PeriodicElement { + name: string; + position: number; + weight: number; + symbol: string; +} + +const ELEMENT_DATA: PeriodicElement[] = [ + { position: 1, name: 'Hydrogen', weight: 1.0079, symbol: 'H' }, + { position: 2, name: 'Helium', weight: 4.0026, symbol: 'He' }, + { position: 3, name: 'Lithium', weight: 6.941, symbol: 'Li' }, + { position: 4, name: 'Beryllium', weight: 9.0122, symbol: 'Be' }, + { position: 5, name: 'Boron', weight: 10.811, symbol: 'B' }, + { position: 6, name: 'Carbon', weight: 12.0107, symbol: 'C' }, + { position: 7, name: 'Nitrogen', weight: 14.0067, symbol: 'N' }, + { position: 8, name: 'Oxygen', weight: 15.9994, symbol: 'O' }, + { position: 9, name: 'Fluorine', weight: 18.9984, symbol: 'F' }, + { position: 10, name: 'Neon', weight: 20.1797, symbol: 'Ne' }, +]; + +@Component({ + selector: 'app-customer-list', + templateUrl: './customer-list.component.html', + styleUrls: ['./customer-list.component.css'] +}) +export class CustomerListComponent implements OnInit { + displayedColumns: string[] = ['position', 'name', 'weight', 'symbol']; + dataSource = new MatTableDataSource(ELEMENT_DATA); + + @ViewChild(MatSort, { static: true }) + sort: MatSort = new MatSort; + + constructor( + private logger: NGXLogger, + private notificationService: NotificationService, + private titleService: Title + ) { } + + ngOnInit() { + this.titleService.setTitle('Jucundus - Customers'); + this.logger.log('Customers loaded'); + this.notificationService.openSnackBar('Customers loaded'); + this.dataSource.sort = this.sort; + + } +} diff --git a/client/src/app/features/customers/customers-routing.module.ts b/client/src/app/features/customers/customers-routing.module.ts new file mode 100644 index 0000000..1bbc991 --- /dev/null +++ b/client/src/app/features/customers/customers-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { LayoutComponent } from 'src/app/shared/layout/layout.component'; + +import { CustomerListComponent } from './customer-list/customer-list.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: CustomerListComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class CustomersRoutingModule { } diff --git a/client/src/app/features/customers/customers.module.ts b/client/src/app/features/customers/customers.module.ts new file mode 100644 index 0000000..be2a4ce --- /dev/null +++ b/client/src/app/features/customers/customers.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CustomersRoutingModule } from './customers-routing.module'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { CustomerListComponent } from './customer-list/customer-list.component'; + +@NgModule({ + imports: [ + CommonModule, + CustomersRoutingModule, + SharedModule + ], + declarations: [ + CustomerListComponent + ] +}) +export class CustomersModule { } diff --git a/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.css b/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.css new file mode 100644 index 0000000..aaaa05f --- /dev/null +++ b/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.css @@ -0,0 +1,17 @@ +.single-cards { + margin: 20px 0; +} + +.single-card .mat-card-avatar { + width: 50px; + height: 50px; +} + +.single-card .mat-icon { + font-size: 55px; +} + +.projects-card>mat-card-content { + max-height: 400px; + overflow: auto; +} diff --git a/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.html b/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.html new file mode 100644 index 0000000..90ca9cf --- /dev/null +++ b/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.html @@ -0,0 +1,18 @@ +
+ +
+
+ +

Welcome back, {{currentUser.fullName}}!

+ +
+ +
+
+ dashboard +

This is the dashboard.

+
+ +
+
+
\ No newline at end of file diff --git a/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.ts b/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.ts new file mode 100644 index 0000000..a9d7bc4 --- /dev/null +++ b/client/src/app/features/dashboard/dashboard-home/dashboard-home.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; +import { NotificationService } from 'src/app/core/services/notification.service'; +import { Title } from '@angular/platform-browser'; +import { NGXLogger } from 'ngx-logger'; +import { AuthenticationService } from 'src/app/core/services/auth.service'; + +@Component({ + selector: 'app-dashboard-home', + templateUrl: './dashboard-home.component.html', + styleUrls: ['./dashboard-home.component.css'] +}) +export class DashboardHomeComponent implements OnInit { + currentUser: any; + + constructor(private notificationService: NotificationService, + private authService: AuthenticationService, + private titleService: Title, + private logger: NGXLogger) { + } + + ngOnInit() { + this.currentUser = this.authService.getCurrentUser(); + this.titleService.setTitle('Jucundus - Dashboard'); + this.logger.log('Dashboard loaded'); + + setTimeout(() => { + this.notificationService.openSnackBar('Welcome!'); + }); + } +} diff --git a/client/src/app/features/dashboard/dashboard-routing.module.ts b/client/src/app/features/dashboard/dashboard-routing.module.ts new file mode 100644 index 0000000..6f85e35 --- /dev/null +++ b/client/src/app/features/dashboard/dashboard-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { LayoutComponent } from 'src/app/shared/layout/layout.component'; + +import { DashboardHomeComponent } from './dashboard-home/dashboard-home.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: DashboardHomeComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DashboardRoutingModule { } diff --git a/client/src/app/features/dashboard/dashboard.module.ts b/client/src/app/features/dashboard/dashboard.module.ts new file mode 100644 index 0000000..3fd04d0 --- /dev/null +++ b/client/src/app/features/dashboard/dashboard.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DashboardRoutingModule } from './dashboard-routing.module'; +import { DashboardHomeComponent } from './dashboard-home/dashboard-home.component'; +import { SharedModule } from 'src/app/shared/shared.module'; + +@NgModule({ + declarations: [DashboardHomeComponent], + imports: [ + CommonModule, + DashboardRoutingModule, + SharedModule + ] +}) +export class DashboardModule { } diff --git a/client/src/app/features/favorites/favorites-page/favorites-page.component.css b/client/src/app/features/favorites/favorites-page/favorites-page.component.css new file mode 100644 index 0000000..ffebf7a --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/favorites-page.component.css @@ -0,0 +1,3 @@ +mat-icon { + color: rgb(200, 0, 0); +} \ No newline at end of file diff --git a/client/src/app/features/favorites/favorites-page/favorites-page.component.html b/client/src/app/features/favorites/favorites-page/favorites-page.component.html new file mode 100644 index 0000000..2488018 --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/favorites-page.component.html @@ -0,0 +1,64 @@ +
+
+ + + + New Lot + + +
+ + Url + + + +
+
+
+ + + + Favorites + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Picture Picture Lot {{element.lotInfo.lotNumber}} Title {{element.lotInfo.title}} Estimate {{element.lotInfo.EstimateLow}} - {{element.lotInfo.EstimateHigh}}
+ +
+
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/favorites/favorites-page/favorites-page.component.ts b/client/src/app/features/favorites/favorites-page/favorites-page.component.ts new file mode 100644 index 0000000..264b1c4 --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/favorites-page.component.ts @@ -0,0 +1,34 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; + +import { apiService } from 'src/app/core/services/api.service'; + +@Component({ + selector: 'app-favorites-page', + templateUrl: './favorites-page.component.html', + styleUrls: ['./favorites-page.component.css'] +}) +export class FavoritesPageComponent implements OnInit { + + url: string = ''; + displayedColumns: string[] = ['picture', 'lot', 'title', 'estimate']; + dataSource = [] + + constructor( + private router: Router, + private apiService: apiService) {} + + openDialog(): void { + + this.router.navigate(['favorites/new', this.url]); + + } + + ngOnInit(): void { + this.apiService.getAllFavorite().subscribe((data: any) => { + this.dataSource = data; + }); + } + +} + diff --git a/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.css b/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.css new file mode 100644 index 0000000..a203e17 --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.css @@ -0,0 +1,4 @@ +.example-card { + + margin-bottom: 8px; + } \ No newline at end of file diff --git a/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.html b/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.html new file mode 100644 index 0000000..76349ef --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.html @@ -0,0 +1,16 @@ + + + Picture + select the picture + + + + + +
+ +
+
+
+
+
\ No newline at end of file diff --git a/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.ts b/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.ts new file mode 100644 index 0000000..f4bb044 --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component.ts @@ -0,0 +1,33 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; + + +@Component({ + selector: 'change-image-dialog-dialog', + templateUrl: './change-image-dialog.component.html', + styleUrls: ['./change-image-dialog.component.css'] +}) +export class ChangeImageDialogComponent implements OnInit { + + images: any[] = []; + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: any) { + + } + + ngOnInit(): void { + this.images = this.data.images; + console.log(this.images); + } + + onSelectImage(picture: any): void { + this.dialogRef.close(picture); + } + + onNoClick(): void { + this.dialogRef.close(); + } + +} diff --git a/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.css b/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.css new file mode 100644 index 0000000..ffebf7a --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.css @@ -0,0 +1,3 @@ +mat-icon { + color: rgb(200, 0, 0); +} \ No newline at end of file diff --git a/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.html b/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.html new file mode 100644 index 0000000..945023c --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.html @@ -0,0 +1,121 @@ + + + Lot + Lot information + + + +
+
+ + Title + + + Lot + + +
+ +
+
+ +
+
+ +
+
+
+
+ + Fees + percent + +

{{lotInfo.feesText}}

+
+
+ + Estimate Low + + + Estimate High + +
+
+ + Description + +
+
+
+ + + + + Sale + Sale information + + + +
+ + Title + +
+
+
+ + Choose a date + + + + +
+ +
+ + Hour + +
+
+
+ + location + +
+
+ + Sale House + +
+
+
+ + + + Perso + + + +
+ Buy Project +
+
+ + Max price + +
+
+ + Note + +
+
+
+ + +
+ + +
+
+
\ No newline at end of file diff --git a/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.ts b/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.ts new file mode 100644 index 0000000..99dcfef --- /dev/null +++ b/client/src/app/features/favorites/favorites-page/new-favorite-page/new-favorite-page.component.ts @@ -0,0 +1,138 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { Router, ActivatedRoute } from '@angular/router'; + +import {ChangeImageDialogComponent} from './change-image-dialog/change-image-dialog.component'; +import * as moment from 'moment-timezone'; + +//Services +import { NotificationService } from 'src/app/core/services/notification.service'; +import { apiService } from 'src/app/core/services/api.service'; + +// Models +import { LotInfo } from 'src/app/core/services/model/lotInfo.interface'; +import { SaleInfo } from 'src/app/core/services/model/saleInfo.interface'; + +@Component({ + selector: 'app-new-favorites-page', + templateUrl: './new-favorite-page.component.html', + styleUrls: ['./new-favorite-page.component.css'] +}) +export class NewFavoritesPageComponent implements OnInit { + + url: string = ''; + lotInfo: LotInfo; + SaleInfo: SaleInfo; + images: any[] = []; + picture: String = ""; + date: Date; + hour: string = ""; + buyProject: boolean = false; + maxPrice: number = 0; + Note: string = ""; + + constructor( + public dialog: MatDialog, + private ActivatedRoute: ActivatedRoute, + private router: Router, + private notificationService: NotificationService, + private apiService: apiService,) { + + this.ActivatedRoute.params.subscribe(params => { + this.url = params['url']; + }); + + + this.lotInfo = { + idLotInterencheres: '', + url: '', + title:'', + lotNumber: '', + EstimateLow: 0, + EstimateHigh: 0, + Description: "", + feesText: "", + fees: "", + saleInfo: { + idSaleInterencheres: "", + url: "" + } + }; + + this.SaleInfo = { + _id: "", + idPlatform: "", + platform: "", + url: "", + title: "", + date: "", + location: "", + saleHouseName: "", + status: "" + }; + + this.date = new Date(); + } + + ngOnInit(): void { + console.log("url: "+this.url); + + // this.date = moment(this.SaleInfo.date).tz('Europe/Paris').toDate(); + // this.hour = moment(this.SaleInfo.date).tz('Europe/Paris').format('HH:mm'); + + this.apiService.getLotInfo(this.url).subscribe( lotInfo => { + console.log(lotInfo); + this.lotInfo = lotInfo; + + this.apiService.getSaleInfos(this.lotInfo.saleInfo.url).subscribe( SaleInfo => { + console.log(SaleInfo); + this.SaleInfo = SaleInfo; + + //hour + // Europe/Paris is the timezone of the user + this.date = moment(this.SaleInfo.date).tz('Europe/Paris').toDate(); + this.hour = moment(this.SaleInfo.date).tz('Europe/Paris').format('HH:mm'); + this.notificationService.openSnackBar("Loaded: "+lotInfo.title); + } + ); + + } + ); + + this.apiService.getPictures(this.url).subscribe( pictures => { + this.images = pictures; + this.picture = pictures[0]; + }); + + } + + openChangeImage(): void { + const dialogRef = this.dialog.open(ChangeImageDialogComponent, { + width: '300px', + data: {images: this.images} + }); + + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.picture = result; + } + }); + } + + cancel(): void { + this.router.navigate(['favorites']); + } + + save(): void { + // Europe/Paris is the timezone of the user + let dateTime = moment.tz(`${this.date.toISOString().split('T')[0]}T${this.hour}`, 'Europe/Paris').format(); + + this.apiService.saveFavorite(this.lotInfo, this.SaleInfo, this.picture, dateTime, this.buyProject, this.maxPrice, this.Note).subscribe( res => { + this.notificationService.openSnackBar("Favorite saved"); + this.router.navigate(['favorites']); + }); + } + + +} + diff --git a/client/src/app/features/favorites/favorites-routing.module.ts b/client/src/app/features/favorites/favorites-routing.module.ts new file mode 100644 index 0000000..ad6ba29 --- /dev/null +++ b/client/src/app/features/favorites/favorites-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { LayoutComponent } from '../../shared/layout/layout.component'; +import { FavoritesPageComponent } from './favorites-page/favorites-page.component'; +import { NewFavoritesPageComponent } from './favorites-page/new-favorite-page/new-favorite-page.component' + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: FavoritesPageComponent }, + { path: 'new/:url', component: NewFavoritesPageComponent} + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class FavoritesRoutingModule { } diff --git a/client/src/app/features/favorites/favorites.module.ts b/client/src/app/features/favorites/favorites.module.ts new file mode 100644 index 0000000..4057581 --- /dev/null +++ b/client/src/app/features/favorites/favorites.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { FavoritesRoutingModule } from './favorites-routing.module'; +import { FavoritesPageComponent } from './favorites-page/favorites-page.component'; +import { NewFavoritesPageComponent } from './favorites-page/new-favorite-page/new-favorite-page.component'; +import { ChangeImageDialogComponent } from './favorites-page/new-favorite-page/change-image-dialog/change-image-dialog.component'; +import { SharedModule } from '../../shared/shared.module'; + +@NgModule({ + declarations: [ + FavoritesPageComponent, + NewFavoritesPageComponent, + ChangeImageDialogComponent + ], + imports: [ + CommonModule, + SharedModule, + FavoritesRoutingModule, + ] +}) +export class FavoritesModule { } diff --git a/client/src/app/features/icons/icons-routing.module.ts b/client/src/app/features/icons/icons-routing.module.ts new file mode 100644 index 0000000..eea4910 --- /dev/null +++ b/client/src/app/features/icons/icons-routing.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { LayoutComponent } from 'src/app/shared/layout/layout.component'; +import { IconsComponent } from './icons/icons.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: IconsComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class IconsRoutingModule { } diff --git a/client/src/app/features/icons/icons.module.ts b/client/src/app/features/icons/icons.module.ts new file mode 100644 index 0000000..6873d6d --- /dev/null +++ b/client/src/app/features/icons/icons.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { IconsRoutingModule } from './icons-routing.module'; +import { IconsComponent } from './icons/icons.component'; +import { SharedModule } from 'src/app/shared/shared.module'; + + +@NgModule({ + declarations: [IconsComponent], + imports: [ + CommonModule, + SharedModule, + IconsRoutingModule + ] +}) +export class IconsModule { } diff --git a/client/src/app/features/icons/icons/icons.component.css b/client/src/app/features/icons/icons/icons.component.css new file mode 100644 index 0000000..fe496d6 --- /dev/null +++ b/client/src/app/features/icons/icons/icons.component.css @@ -0,0 +1,4 @@ +iframe { + width: 100%; + height: 650px; +} \ No newline at end of file diff --git a/client/src/app/features/icons/icons/icons.component.html b/client/src/app/features/icons/icons/icons.component.html new file mode 100644 index 0000000..be1bbe6 --- /dev/null +++ b/client/src/app/features/icons/icons/icons.component.html @@ -0,0 +1,16 @@ +
+
+ + + +

Icons

+ + + +
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/icons/icons/icons.component.spec.ts b/client/src/app/features/icons/icons/icons.component.spec.ts new file mode 100644 index 0000000..0cd7034 --- /dev/null +++ b/client/src/app/features/icons/icons/icons.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { IconsComponent } from './icons.component'; + +describe('IconsComponent', () => { + let component: IconsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ IconsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(IconsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/features/icons/icons/icons.component.ts b/client/src/app/features/icons/icons/icons.component.ts new file mode 100644 index 0000000..776480b --- /dev/null +++ b/client/src/app/features/icons/icons/icons.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-icons', + templateUrl: './icons.component.html', + styleUrls: ['./icons.component.css'] +}) +export class IconsComponent { + + constructor() { } +} diff --git a/client/src/app/features/pictures/pictures-page/pictures-page.component.css b/client/src/app/features/pictures/pictures-page/pictures-page.component.css new file mode 100644 index 0000000..ffebf7a --- /dev/null +++ b/client/src/app/features/pictures/pictures-page/pictures-page.component.css @@ -0,0 +1,3 @@ +mat-icon { + color: rgb(200, 0, 0); +} \ No newline at end of file diff --git a/client/src/app/features/pictures/pictures-page/pictures-page.component.html b/client/src/app/features/pictures/pictures-page/pictures-page.component.html new file mode 100644 index 0000000..456af97 --- /dev/null +++ b/client/src/app/features/pictures/pictures-page/pictures-page.component.html @@ -0,0 +1,33 @@ +
+
+ + +

Pictures

+ + Url + + + + +
+
+ + +
+
+ + + + + +
+ +
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/client/src/app/features/pictures/pictures-page/pictures-page.component.spec.ts b/client/src/app/features/pictures/pictures-page/pictures-page.component.spec.ts new file mode 100644 index 0000000..9c86fac --- /dev/null +++ b/client/src/app/features/pictures/pictures-page/pictures-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FavoritesPageComponent } from './favorites-page.component'; + +describe('AboutHomeComponent', () => { + let component: FavoritesPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FavoritesPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FavoritesPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/features/pictures/pictures-page/pictures-page.component.ts b/client/src/app/features/pictures/pictures-page/pictures-page.component.ts new file mode 100644 index 0000000..57a3242 --- /dev/null +++ b/client/src/app/features/pictures/pictures-page/pictures-page.component.ts @@ -0,0 +1,81 @@ +import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; +import { Title } from '@angular/platform-browser'; +import { apiService } from 'src/app/core/services/api.service'; + +@Component({ + selector: 'app-pictures-page', + templateUrl: './pictures-page.component.html', + styleUrls: ['./pictures-page.component.css'] +}) + +export class PicturesPageComponent implements OnInit { + + @Input() value: any; + @Output() valueChange = new EventEmitter(); + + url: string = ''; + images: any[] = []; + position: "bottom" | "top" | "left" | "right" | undefined = 'top'; + responsiveOptions: any[] | undefined; + + constructor( + private titleService: Title, + private apiService: apiService, + ) { + } + + ngOnInit() { + this.titleService.setTitle('Jucundus - Users'); + this.responsiveOptions = [ + { + breakpoint: '1024px', + numVisible: 5 + }, + { + breakpoint: '768px', + numVisible: 3 + }, + { + breakpoint: '560px', + numVisible: 1 + } + ]; + } + + getPictures(): void { + this.apiService.getPictures(this.url).subscribe( Pictures => { + this.images = []; + const newImages = [...this.images]; + + Pictures.forEach((picture: any) => { + newImages.push({ + itemImageSrc: picture, + thumbnailImageSrc: picture, + alt: "img", + title: "img1" + }); + }) + this.images = newImages; + console.log(this.images); + this.updateValue(this.images); + }) + } + + updateValue(newValue: any) { + this.value = newValue; + this.valueChange.emit(this.value); + } + + openFullscreen(event: any) { + const element = event.target; + if (element.requestFullscreen) { + element.requestFullscreen(); + } else if (element.mozRequestFullScreen) { /* Firefox */ + element.mozRequestFullScreen(); + } else if (element.webkitRequestFullscreen) { /* Chrome, Safari and Opera */ + element.webkitRequestFullscreen(); + } else if (element.msRequestFullscreen) { /* IE/Edge */ + element.msRequestFullscreen(); + } +} +} \ No newline at end of file diff --git a/client/src/app/features/pictures/pictures-routing.module.ts b/client/src/app/features/pictures/pictures-routing.module.ts new file mode 100644 index 0000000..fd0ee95 --- /dev/null +++ b/client/src/app/features/pictures/pictures-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { LayoutComponent } from '../../shared/layout/layout.component'; +import { PicturesPageComponent } from './pictures-page/pictures-page.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: PicturesPageComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class PicturesRoutingModule { } diff --git a/client/src/app/features/pictures/pictures.module.ts b/client/src/app/features/pictures/pictures.module.ts new file mode 100644 index 0000000..909e376 --- /dev/null +++ b/client/src/app/features/pictures/pictures.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { PicturesRoutingModule } from './pictures-routing.module'; +import { PicturesPageComponent } from './pictures-page/pictures-page.component'; + +import { SharedModule } from '../../shared/shared.module'; + +@NgModule({ + declarations: [PicturesPageComponent], + imports: [ + CommonModule, + SharedModule, + PicturesRoutingModule, + ] +}) +export class PicturesModule { } diff --git a/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.css b/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.css new file mode 100644 index 0000000..a203e17 --- /dev/null +++ b/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.css @@ -0,0 +1,4 @@ +.example-card { + + margin-bottom: 8px; + } \ No newline at end of file diff --git a/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.html b/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.html new file mode 100644 index 0000000..a087f76 --- /dev/null +++ b/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.html @@ -0,0 +1,31 @@ + + + Sale + Sale informations + + + +
+ + + + + +
+
+

{{SaleInfo.title}}

+

event{{date | date:'dd/MM/yyyy' }} - {{hour}}

+

account_balance{{SaleInfo.saleHouseName}}

+

location_on{{SaleInfo.location}}

+
+ +
+
+ + +
+ + +
+
+
\ No newline at end of file diff --git a/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.ts b/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.ts new file mode 100644 index 0000000..8c938d6 --- /dev/null +++ b/client/src/app/features/sales/sales-page/loading-sale-dialog/loading-sale-dialog.component.ts @@ -0,0 +1,68 @@ +import { Component, OnInit, Inject } from '@angular/core'; +import {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; +import * as moment from 'moment-timezone'; + +//Services +import { apiService } from 'src/app/core/services/api.service'; + +// Models +import { SaleInfo } from 'src/app/core/services/model/saleInfo.interface'; + +@Component({ + selector: 'loading-sale-dialog-dialog', + templateUrl: './loading-sale-dialog.component.html', + styleUrls: ['./loading-sale-dialog.component.css'] +}) +export class LoadingSaleDialogComponent implements OnInit { + + url: string = ''; + SaleInfo: SaleInfo; + date: Date; + hour: string = ""; + + constructor( + private apiService: apiService, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: any) { + this.SaleInfo = { + _id: "", + idPlatform: "", + platform: "", + url: "", + title: "", + date: "", + location: "", + saleHouseName: "", + status: "" + }; + this.date = new Date(); + } + + ngOnInit(): void { + this.url = this.data.url; + console.log(this.url); + + this.apiService.getSaleInfos(this.url).subscribe( SaleInfo => { + console.log(SaleInfo); + this.SaleInfo = SaleInfo; + + //hour + // Europe/Paris is the timezone of the user + this.date = moment(this.SaleInfo.date).tz('Europe/Paris').toDate(); + this.hour = moment(this.SaleInfo.date).tz('Europe/Paris').format('HH:mm'); + + } + ); + } + + save(): void { + this.apiService.saveSale(this.SaleInfo).subscribe( SaleInfo => { + this.dialogRef.close(true); + }); + } + + cancel(): void { + this.dialogRef.close(false); + } + +} diff --git a/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.css b/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.html b/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.html new file mode 100644 index 0000000..df3750b --- /dev/null +++ b/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.html @@ -0,0 +1,119 @@ +
+
+ + + + Sale Detail + + +
+

{{Sale.title}}

+
+
+
+

event {{Sale.date | date:'dd/MM/yyyy' }} - {{Sale.date | date:'HH:mm'}} |

+

account_balance {{Sale.saleHouseName}}

+

location_on {{Sale.location}}

+
+
+

tag{{Sale.postProcessing?.nbrLots}} Lots

+

hourglass_bottom{{getDurationInMinutes(Sale.postProcessing?.duration ?? 0)}} min

+

hourglass_bottom/Lot {{getTimePerLot(parseToNumber(Sale.postProcessing?.durationPerLots ?? '0'))}}

+
+
+

Total amount: {{Sale.postProcessing?.totalAmount | currency:'EUR':'symbol':'1.2-2'}}

+

Average amount: {{Sale.postProcessing?.averageAmount | currency:'EUR':'symbol':'1.2-2'}}

+

Median amount: {{Sale.postProcessing?.medianAmount | currency:'EUR':'symbol':'1.2-2'}}

+
+
+ +
+
+ + + + Lots + + + + + + Lots + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
# + {{element.lotNumber}} + Title + {{element.title ? element.title : "Lot "+element.lotNumber}} + Estimate Low + {{element.EstimateLow ? element.EstimateLow : "-"}} + Estimate High + {{element.EstimateHigh ? element.EstimateHigh : "-"}} + Price + {{element.auctionedAmount}} + nbrBids + {{element.bidsLength}} +
+
+ +
+ + + +
+ +
+
+ +
+ + +
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.ts b/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.ts new file mode 100644 index 0000000..54cac1c --- /dev/null +++ b/client/src/app/features/sales/sales-page/sale-detail-page/sale-detail-page.component.ts @@ -0,0 +1,129 @@ +import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { Router, ActivatedRoute } from '@angular/router'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatTableDataSource } from '@angular/material/table'; +import { MatSort } from '@angular/material/sort'; + +import * as moment from 'moment'; + +// Services +import { apiService } from 'src/app/core/services/api.service'; +import { NotificationService } from 'src/app/core/services/notification.service'; + +//Models +import { Sale } from 'src/app/core/services/model/sale.interface'; +import { Lot } from 'src/app/core/services/model/lot.interface'; + +@Component({ + selector: 'app-favorites-page', + templateUrl: './sale-detail-page.component.html', + styleUrls: ['./sale-detail-page.component.css'] +}) + + +export class SaleDetailPageComponent implements OnInit, AfterViewInit { + + id: any = ''; + Sale: Sale; + displayedColumns: string[] = ['lotNum', 'title', 'estimateLow', 'estimateHigh', 'price', 'nbrBids']; + + lotList: MatTableDataSource = new MatTableDataSource(); + @ViewChild(MatPaginator) paginator?: MatPaginator; + @ViewChild(MatSort) sort?: MatSort; + + constructor( + private route: ActivatedRoute, + private notificationService: NotificationService, + private router: Router, + public dialog: MatDialog, + private apiService: apiService) { + + this.Sale = { + _id: { $oid: '' }, + idPlatform: '', + platform: '', + url: '', + title: '', + date: '', + location: '', + saleHouseName: '', + status: '', + postProcessing: { + nbrLots: 0, + duration: 0, + durationPerLots: '', + totalAmount: 0, + averageAmount: '', + medianAmount: '' + } + } + + } + + ngOnInit(): void { + this.route.paramMap.subscribe(params => { + this.id = params.get('id'); + + this.getSale(); + this.getLotList(); + }); + } + + ngAfterViewInit(): void { + + } + + getSale(){ + this.apiService.getSale(this.id).subscribe((sale: Sale) => { + this.Sale = sale; + }); + } + + getLotList(){ + this.apiService.getLotsBySale(this.id).subscribe((lotList: Lot[]) => { + + // adding the Bids length info + lotList = lotList.map((lot) => { + return {...lot, bidsLength: lot.Bids ? lot.Bids.length : 0}; + }); + + // adding the Auctionned ammount info + lotList = lotList.map((lot) => { + return {...lot, auctionedAmount: lot.auctioned?.amount ? lot.auctioned?.amount : 0}; + }); + + console.log(lotList); + this.lotList = new MatTableDataSource(lotList); + this.lotList.paginator = this.paginator ?? null; + this.lotList.sort = this.sort ?? null; + }); + } + + getDurationInMinutes(duration: number): number { + return Math.floor(duration / 60); + } + + getTimePerLot(duration: number): string { + + const minutes = Math.floor((duration % 3600) / 60); + const seconds = duration % 60; + + let returnString = ''; + + if (minutes > 0) { + returnString += minutes + 'm '; + } + returnString += seconds + 's'; + + return returnString; + } + + parseToNumber(value: string | null): number { + return parseFloat(value || '0'); + } + + + +} + diff --git a/client/src/app/features/sales/sales-page/sales-page.component.css b/client/src/app/features/sales/sales-page/sales-page.component.css new file mode 100644 index 0000000..ffebf7a --- /dev/null +++ b/client/src/app/features/sales/sales-page/sales-page.component.css @@ -0,0 +1,3 @@ +mat-icon { + color: rgb(200, 0, 0); +} \ No newline at end of file diff --git a/client/src/app/features/sales/sales-page/sales-page.component.html b/client/src/app/features/sales/sales-page/sales-page.component.html new file mode 100644 index 0000000..afcea8f --- /dev/null +++ b/client/src/app/features/sales/sales-page/sales-page.component.html @@ -0,0 +1,162 @@ +
+
+ + + + New Sale + + +
+ + Url + + + +
+
+
+ + + + Sales + + + + + + Current Sales + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Title + {{element.title}} +
+ +
+
Date {{element.date | date:'dd/MM/yyyy' }} - {{element.date | date:'HH:mm'}} Sale House {{element.saleHouseName}} Plateforme Interencheres Prepare + + Follow + + +
+ + + + +
Delete + +
+
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Title + {{element.title}} + Date {{element.date | date:'dd/MM/yyyy' }} - {{element.date | date:'HH:mm'}} Sale House {{element.saleHouseName}} Plateforme Interencheres Post Processing + + Delete + +
+
+
+ +
+ + +
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/sales/sales-page/sales-page.component.ts b/client/src/app/features/sales/sales-page/sales-page.component.ts new file mode 100644 index 0000000..74063a5 --- /dev/null +++ b/client/src/app/features/sales/sales-page/sales-page.component.ts @@ -0,0 +1,118 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { Router } from '@angular/router'; +import { LoadingSaleDialogComponent } from './loading-sale-dialog/loading-sale-dialog.component'; +import * as moment from 'moment'; + +// Services +import { apiService } from 'src/app/core/services/api.service'; +import { NotificationService } from 'src/app/core/services/notification.service'; +import { SaleInfo } from 'src/app/core/services/model/saleInfo.interface'; + +@Component({ + selector: 'app-favorites-page', + templateUrl: './sales-page.component.html', + styleUrls: ['./sales-page.component.css'] +}) +export class SalesPageComponent implements OnInit { + + url: string = ''; + refreshSalesId: any; + displayedColumns: string[] = ['title', 'date', 'house', 'plateform', 'prepare', 'follow', 'delete']; + displayedColumnsOld: string[] = ['title', 'date', 'house', 'plateform', 'postProcessing', 'delete']; + + futureSales = [] + pastSales = [] + + constructor( + private notificationService: NotificationService, + private router: Router, + public dialog: MatDialog, + private apiService: apiService) {} + + openLoadingSale(): void { + const dialogRef = this.dialog.open(LoadingSaleDialogComponent, { + width: '300px', + data: {url: this.url} + }); + + dialogRef.afterClosed().subscribe(result => { + if (result) { + this.refreshSales(); + this.url = ""; + this.notificationService.openSnackBar("Sale Added"); + } + }); + } + + refreshSales(): void { + this.apiService.getAllSale().subscribe((data: any) => { + console.log(data); + const today = moment(); + + this.futureSales = data + .filter((element: SaleInfo) => moment(element.date).isAfter(today)) + .sort((a: any, b: any) => moment(a.date).isAfter(b.date) ? 1 : -1); + + this.pastSales = data + .filter((element: SaleInfo) => moment(element.date).isBefore(today)) + .sort((a: any, b: any) => moment(a.date).isAfter(b.date) ? 1 : -1); + }); + } + + ngOnInit(): void { + this.refreshSales(); + this.refreshSalesId = setInterval(() => { + this.refreshSales(); + }, 5000); + } + + prepareSale(saleInfo: SaleInfo): void { + + this.apiService.prepareSale(saleInfo).subscribe( data => { + console.log(data); + this.refreshSales(); + this.notificationService.openSnackBar("Prepare Sale"); + + }) + } + + followSale(saleInfo: SaleInfo): void { + + this.apiService.followSale(saleInfo).subscribe( data => { + console.log(data); + this.refreshSales(); + this.notificationService.openSnackBar("Sale followed"); + + }) + } + + stopFollowSale(saleInfo: SaleInfo): void { + saleInfo.status = "askStop"; + this.apiService.updateSale(saleInfo).subscribe( data => { + this.refreshSales(); + this.notificationService.openSnackBar("Sale Stopping..."); + }) + } + + deleteSale(_id: string): void { + this.apiService.deleteSale(_id).subscribe( data => { + this.refreshSales(); + this.notificationService.openSnackBar("Sale deleted"); + }) + } + + navigateToSaleDetail(id: string) { + console.log(id); + clearInterval(this.refreshSalesId); + this.router.navigate(['/sales/detail', id]); + } + + postProcessing(id: string) { + this.apiService.postProcessing(id).subscribe( data => { + this.notificationService.openSnackBar("Sale processing"); + }) + } + +} + diff --git a/client/src/app/features/sales/sales-routing.module.ts b/client/src/app/features/sales/sales-routing.module.ts new file mode 100644 index 0000000..aca53a0 --- /dev/null +++ b/client/src/app/features/sales/sales-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { LayoutComponent } from '../../shared/layout/layout.component'; +import { SalesPageComponent } from './sales-page/sales-page.component'; +import { SaleDetailPageComponent } from './sales-page/sale-detail-page/sale-detail-page.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: SalesPageComponent }, + { path: 'detail/:id', component: SaleDetailPageComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class SalesRoutingModule { } diff --git a/client/src/app/features/sales/sales.module.ts b/client/src/app/features/sales/sales.module.ts new file mode 100644 index 0000000..d053a45 --- /dev/null +++ b/client/src/app/features/sales/sales.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { SalesRoutingModule } from './sales-routing.module'; +import { SalesPageComponent } from './sales-page/sales-page.component'; +import { LoadingSaleDialogComponent } from './sales-page/loading-sale-dialog/loading-sale-dialog.component'; +import { SaleDetailPageComponent } from './sales-page/sale-detail-page/sale-detail-page.component'; +import { SharedModule } from '../../shared/shared.module'; + +@NgModule({ + declarations: [ + SalesPageComponent, + LoadingSaleDialogComponent, + SaleDetailPageComponent + ], + imports: [ + CommonModule, + SharedModule, + SalesRoutingModule, + ] +}) +export class SalesModule { } diff --git a/client/src/app/features/typography/typography-routing.module.ts b/client/src/app/features/typography/typography-routing.module.ts new file mode 100644 index 0000000..d009d69 --- /dev/null +++ b/client/src/app/features/typography/typography-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { LayoutComponent } from 'src/app/shared/layout/layout.component'; +import { TypographyComponent } from './typography/typography.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: TypographyComponent }, + ] + } +]; +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class TypographyRoutingModule { } diff --git a/client/src/app/features/typography/typography.module.ts b/client/src/app/features/typography/typography.module.ts new file mode 100644 index 0000000..d24364c --- /dev/null +++ b/client/src/app/features/typography/typography.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { TypographyRoutingModule } from './typography-routing.module'; +import { TypographyComponent } from './typography/typography.component'; +import { SharedModule } from 'src/app/shared/shared.module'; + + +@NgModule({ + declarations: [TypographyComponent], + imports: [ + CommonModule, + SharedModule, + TypographyRoutingModule + ] +}) +export class TypographyModule { } diff --git a/client/src/app/features/typography/typography/typography.component.css b/client/src/app/features/typography/typography/typography.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/features/typography/typography/typography.component.html b/client/src/app/features/typography/typography/typography.component.html new file mode 100644 index 0000000..86e67ef --- /dev/null +++ b/client/src/app/features/typography/typography/typography.component.html @@ -0,0 +1,63 @@ +
+
+ + + +

Typography

+ + + Header 1 +

+ The Life of Material Dashboard +

+ + Header 2 +

+ The Life of Material Dashboard +

+ + Header 3 +

+ The Life of Material Dashboard +

+ + Header 4 +

+ The Life of Material Dashboard +

+ + Header 5 +
+ The Life of Material Dashboard +
+ + Header 6 +
+ The Life of Material Dashboard +
+ + Paragraph +

+ I will be the leader of a company that ends up being worth billions of dollars, because I got + the answers. I understand culture. I am the nucleus. I think that’s a responsibility that I + have, to push possibilities, to show people, this is the level that things could be at. +

+ + Quote +
+

+ I will be the leader of a company that ends up being worth billions of dollars, because I + got the answers. I understand culture. I am the nucleus. I think that’s a responsibility + that I have, to push possibilities, to show people, this is the level that things could be + at. +

+ + Kanye West, Musician + +
+ +
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/typography/typography/typography.component.spec.ts b/client/src/app/features/typography/typography/typography.component.spec.ts new file mode 100644 index 0000000..ac01d8b --- /dev/null +++ b/client/src/app/features/typography/typography/typography.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TypographyComponent } from './typography.component'; + +describe('TypographyComponent', () => { + let component: TypographyComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ TypographyComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TypographyComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/features/typography/typography/typography.component.ts b/client/src/app/features/typography/typography/typography.component.ts new file mode 100644 index 0000000..bb34fa2 --- /dev/null +++ b/client/src/app/features/typography/typography/typography.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-typography', + templateUrl: './typography.component.html', + styleUrls: ['./typography.component.css'] +}) +export class TypographyComponent { + + constructor() { } +} diff --git a/client/src/app/features/users/user-list/user-list.component.css b/client/src/app/features/users/user-list/user-list.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/features/users/user-list/user-list.component.html b/client/src/app/features/users/user-list/user-list.component.html new file mode 100644 index 0000000..88cb815 --- /dev/null +++ b/client/src/app/features/users/user-list/user-list.component.html @@ -0,0 +1,21 @@ +
+
+ + + +

Users

+ + +
+
+ people_outline +

No users exist.

+
+ +
+ +
+
+ +
+
\ No newline at end of file diff --git a/client/src/app/features/users/user-list/user-list.component.ts b/client/src/app/features/users/user-list/user-list.component.ts new file mode 100644 index 0000000..a4f3063 --- /dev/null +++ b/client/src/app/features/users/user-list/user-list.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; + +import { NGXLogger } from 'ngx-logger'; +import { NotificationService } from 'src/app/core/services/notification.service'; + +@Component({ + selector: 'app-user-list', + templateUrl: './user-list.component.html', + styleUrls: ['./user-list.component.css'] +}) +export class UserListComponent implements OnInit { + + constructor( + private logger: NGXLogger, + private notificationService: NotificationService, + private titleService: Title + ) { } + + ngOnInit() { + this.titleService.setTitle('Jucundus - Users'); + this.logger.log('Users loaded'); + } +} diff --git a/client/src/app/features/users/users-routing.module.ts b/client/src/app/features/users/users-routing.module.ts new file mode 100644 index 0000000..f5944f1 --- /dev/null +++ b/client/src/app/features/users/users-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { LayoutComponent } from 'src/app/shared/layout/layout.component'; + +import { UserListComponent } from './user-list/user-list.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', component: UserListComponent }, + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class UsersRoutingModule { } diff --git a/client/src/app/features/users/users.module.ts b/client/src/app/features/users/users.module.ts new file mode 100644 index 0000000..b127a94 --- /dev/null +++ b/client/src/app/features/users/users.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { UsersRoutingModule } from './users-routing.module'; +import { UserListComponent } from './user-list/user-list.component'; +import { SharedModule } from 'src/app/shared/shared.module'; + +@NgModule({ + imports: [ + CommonModule, + SharedModule, + UsersRoutingModule + ], + declarations: [UserListComponent] +}) +export class UsersModule { } diff --git a/client/src/app/shared/confirm-dialog/confirm-dialog.component.css b/client/src/app/shared/confirm-dialog/confirm-dialog.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/shared/confirm-dialog/confirm-dialog.component.html b/client/src/app/shared/confirm-dialog/confirm-dialog.component.html new file mode 100644 index 0000000..28f5c78 --- /dev/null +++ b/client/src/app/shared/confirm-dialog/confirm-dialog.component.html @@ -0,0 +1,12 @@ +

+ {{title}} +

+ +
+

{{message}}

+
+ +
+ + +
\ No newline at end of file diff --git a/client/src/app/shared/confirm-dialog/confirm-dialog.component.ts b/client/src/app/shared/confirm-dialog/confirm-dialog.component.ts new file mode 100644 index 0000000..848f558 --- /dev/null +++ b/client/src/app/shared/confirm-dialog/confirm-dialog.component.ts @@ -0,0 +1,37 @@ +import { Component, Inject } from '@angular/core'; +import {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; + +@Component({ + selector: 'app-confirm-dialog', + templateUrl: './confirm-dialog.component.html', + styleUrls: ['./confirm-dialog.component.css'] +}) +export class ConfirmDialogComponent { + title: string; + message: string; + + constructor(public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: ConfirmDialogModel) { + this.title = data.title; + this.message = data.message; + } + + onConfirm(): void { + this.dialogRef.close(true); + } + + onDismiss(): void { + this.dialogRef.close(false); + } +} + +/** + * Class to represent confirm dialog model. + * + * It has been kept here to keep it as part of shared component. + */ +export class ConfirmDialogModel { + + constructor(public title: string, public message: string) { + } +} diff --git a/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.css b/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.css new file mode 100644 index 0000000..ffff6f7 --- /dev/null +++ b/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.css @@ -0,0 +1,76 @@ +.container { + height: 220px; + border-radius: 5px; + width: 100%; +} + +.line { + height: 12px; + margin: 10px; + animation: pulse 1s infinite ease-in-out; + -webkit-animation: pulse 1s infinite ease-in-out; +} + +.container div:nth-child(1) { + width: 20%; +} + +.container div:nth-child(2) { + width: 25%; +} + +.container div:nth-child(3) { + width: 15%; +} + +.container div:nth-child(4) { + width: 40%; +} + +.container div:nth-child(5) { + width: 30%; +} + +.container div:nth-child(6) { + width: 25%; +} + +.container div:nth-child(7) { + width: 35%; +} + +.container div:nth-child(8) { + width: 15%; +} + +.container div:nth-child(9) { + width: 25%; +} + +.container div:nth-child(10) { + width: 10%; +} + +@keyframes pulse { + 0% { + background-color: rgba(165, 165, 165, .1); + } + 50% { + background-color: rgba(165, 165, 165, .3); + } + 100% { + background-color: rgba(165, 165, 165, .1); + } +} + +@-webkit-keyframes pulse { + 0% { + background-color: rgba(165, 165, 165, .1); + } + 50% { + background-color: rgba(165, 165, 165, .3); + } + 100% { + background-color: rgba(165, 165, 165, .1); + } +} \ No newline at end of file diff --git a/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.html b/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.html new file mode 100644 index 0000000..d8d6aeb --- /dev/null +++ b/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.html @@ -0,0 +1,11 @@ +
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.ts b/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.ts new file mode 100644 index 0000000..e67c9b0 --- /dev/null +++ b/client/src/app/shared/content-placeholder-animation/content-placeholder-animation.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-content-placeholder-animation', + templateUrl: './content-placeholder-animation.component.html', + styleUrls: ['./content-placeholder-animation.component.css'] +}) +export class ContentPlaceholderAnimationComponent { + + constructor() { } + +} diff --git a/client/src/app/shared/layout/layout.component.css b/client/src/app/shared/layout/layout.component.css new file mode 100644 index 0000000..970e18a --- /dev/null +++ b/client/src/app/shared/layout/layout.component.css @@ -0,0 +1,64 @@ +.navbar-spacer { + flex: 1 1 auto; +} + +.navbar { + z-index: 2; +} + +.navbar-brand { + text-decoration: none; + color: white; +} + +.navbar-container { + display: flex; + flex-direction: column; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +.navbar-is-mobile .navbar { + position: fixed; + /* Make sure the toolbar will stay on top of the content as it scrolls past. */ + z-index: 2; +} + +.navbar-sidenav-container { + /* When the sidenav is not fixed, stretch the sidenav container to fill the available space. This + causes `` to act as our scrolling element for desktop layouts. */ + flex: 1; +} + +.navbar-is-mobile .navbar-sidenav-container { + /* When the sidenav is fixed, don't constrain the height of the sidenav container. This allows the + `` to be our scrolling element for mobile layouts. */ + flex: 1 0 auto; +} + +/*Set sidenav width*/ + +mat-sidenav { + min-width: 180px !important; + border-right: 1px solid #eee; + box-shadow: 6px 0 6px rgba(0, 0, 0, .1); + /* background-color:rgb(63, 81, 181); */ +} + +/* Set height of wrapper to stop content from moving up & down */ + +.progress-bar-container { + height: 5px; +} + +a.mat-list-item.active { + background: rgba(0, 0, 0, .04); +} + +#push-bottom { + position: absolute; + bottom: 0; +} \ No newline at end of file diff --git a/client/src/app/shared/layout/layout.component.html b/client/src/app/shared/layout/layout.component.html new file mode 100644 index 0000000..7ccd6f6 --- /dev/null +++ b/client/src/app/shared/layout/layout.component.html @@ -0,0 +1,140 @@ + \ No newline at end of file diff --git a/client/src/app/shared/layout/layout.component.ts b/client/src/app/shared/layout/layout.component.ts new file mode 100644 index 0000000..9f5094f --- /dev/null +++ b/client/src/app/shared/layout/layout.component.ts @@ -0,0 +1,59 @@ +import { Component, OnInit, ChangeDetectorRef, OnDestroy, AfterViewInit } from '@angular/core'; +import { MediaMatcher } from '@angular/cdk/layout'; +import { timer } from 'rxjs'; +import { Subscription } from 'rxjs'; + + import { AuthenticationService } from 'src/app/core/services/auth.service'; +import { SpinnerService } from '../../core/services/spinner.service'; +import { AuthGuard } from 'src/app/core/guards/auth.guard'; + +@Component({ + selector: 'app-layout', + templateUrl: './layout.component.html', + styleUrls: ['./layout.component.css'] +}) +export class LayoutComponent implements OnInit, OnDestroy, AfterViewInit { + + private _mobileQueryListener: () => void; + mobileQuery: MediaQueryList; + showSpinner: boolean = false; + userName: string = ""; + isAdmin: boolean = false; + + private autoLogoutSubscription: Subscription = new Subscription; + + constructor(private changeDetectorRef: ChangeDetectorRef, + private media: MediaMatcher, + public spinnerService: SpinnerService, + private authService: AuthenticationService, + private authGuard: AuthGuard) { + + this.mobileQuery = this.media.matchMedia('(max-width: 1000px)'); + this._mobileQueryListener = () => changeDetectorRef.detectChanges(); + // tslint:disable-next-line: deprecation + this.mobileQuery.addListener(this._mobileQueryListener); + } + + ngOnInit(): void { + const user = this.authService.getCurrentUser(); + + this.isAdmin = user.isAdmin; + this.userName = user.fullName; + + // Auto log-out subscription + const timer$ = timer(2000, 5000); + this.autoLogoutSubscription = timer$.subscribe(() => { + this.authGuard.canActivate(); + }); + } + + ngOnDestroy(): void { + // tslint:disable-next-line: deprecation + this.mobileQuery.removeListener(this._mobileQueryListener); + this.autoLogoutSubscription.unsubscribe(); + } + + ngAfterViewInit(): void { + this.changeDetectorRef.detectChanges(); + } +} diff --git a/client/src/app/shared/mocks/spinner-consumer.ts b/client/src/app/shared/mocks/spinner-consumer.ts new file mode 100644 index 0000000..91c5288 --- /dev/null +++ b/client/src/app/shared/mocks/spinner-consumer.ts @@ -0,0 +1,11 @@ +import { SpinnerService } from '../../core/services/spinner.service'; + +export class SpinnerConsumer { + isBusy = false; + + constructor(private spinnerService: SpinnerService) { + this.spinnerService.visibility.subscribe((value: boolean) => { + this.isBusy = value; + }); + } +} diff --git a/client/src/app/shared/pipes/limit-to.pipe.spec.ts b/client/src/app/shared/pipes/limit-to.pipe.spec.ts new file mode 100644 index 0000000..7a1ac72 --- /dev/null +++ b/client/src/app/shared/pipes/limit-to.pipe.spec.ts @@ -0,0 +1,44 @@ +import { LimitToPipe } from './limit-to.pipe'; + +describe('LimitToPipe', () => { + it('create an instance', () => { + const pipe = new LimitToPipe(); + expect(pipe).toBeTruthy(); + }); + + it('returns same value when length is shorter than specified', () => { + const pipe = new LimitToPipe(); + const result = pipe.transform('some text', '20'); + expect(result).toBe('some text'); + }); + + it('returns limited value when length is longer than specified', () => { + const pipe = new LimitToPipe(); + const result = pipe.transform('some text', '3'); + expect(result).toBe('som..'); + }); + + it('returns empty string when value is empty', () => { + const pipe = new LimitToPipe(); + const result = pipe.transform('', '3'); + expect(result).toBe(''); + }); + + it('returns empty string when value is null', () => { + const pipe = new LimitToPipe(); + const result = pipe.transform(null, '3'); + expect(result).toBe(''); + }); + + it('returns empty string when value is undefined', () => { + const pipe = new LimitToPipe(); + const result = pipe.transform(undefined, '3'); + expect(result).toBe(''); + }); + + it('returns empty string when limit to is 0', () => { + const pipe = new LimitToPipe(); + const result = pipe.transform(undefined, '0'); + expect(result).toBe(''); + }); +}); diff --git a/client/src/app/shared/pipes/limit-to.pipe.ts b/client/src/app/shared/pipes/limit-to.pipe.ts new file mode 100644 index 0000000..11396ff --- /dev/null +++ b/client/src/app/shared/pipes/limit-to.pipe.ts @@ -0,0 +1,20 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'limitTo' +}) +export class LimitToPipe implements PipeTransform { + + transform(value: string, limitTo: string): string { + + if (value === undefined || value === null) { + return ''; + } + + const limit = limitTo ? parseInt(limitTo, 10) : 10; + const trail = '..'; + + return value.length > limit ? value.substring(0, limit) + trail : value; + } + +} diff --git a/client/src/app/shared/pipes/local-date.pipe.spec.ts b/client/src/app/shared/pipes/local-date.pipe.spec.ts new file mode 100644 index 0000000..dd70930 --- /dev/null +++ b/client/src/app/shared/pipes/local-date.pipe.spec.ts @@ -0,0 +1,33 @@ +import { LocalDatePipe } from './local-date.pipe'; + +describe('LocalDatePipe', () => { + it('create an instance', () => { + const pipe = new LocalDatePipe(); + expect(pipe).toBeTruthy(); + }); + + it('returns valid date given utc', () => { + const date = new Date('2018-05-04T08:17:57.8979116Z'); + + const pipe = new LocalDatePipe(); + const result = pipe.transform(date, 'DD MMM YYYY HH:mm'); + expect(result).toBe('04 May 2018 09:17'); + }); + + it('returns empty string when date is null', () => { + const date = null; + + const pipe = new LocalDatePipe(); + const result = pipe.transform(date, 'DD MMM YYYY HH:mm'); + expect(result).toBe(''); + }); + + it('returns empty string when format is null', () => { + const date = new Date('2018-05-04T08:17:57.8979116Z'); + + const pipe = new LocalDatePipe(); + const result = pipe.transform(date, null); + expect(result).toBe(''); + }); + +}); diff --git a/client/src/app/shared/pipes/local-date.pipe.ts b/client/src/app/shared/pipes/local-date.pipe.ts new file mode 100644 index 0000000..c26fddb --- /dev/null +++ b/client/src/app/shared/pipes/local-date.pipe.ts @@ -0,0 +1,16 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import * as moment from 'moment'; + +@Pipe({ + name: 'localDate' +}) +export class LocalDatePipe implements PipeTransform { + + transform(value: Date, args: string): string { + if (!value || !args) { + return ''; + } + return moment.utc(value).local().format(args); + } + +} diff --git a/client/src/app/shared/pipes/yes-no.pipe.spec.ts b/client/src/app/shared/pipes/yes-no.pipe.spec.ts new file mode 100644 index 0000000..fb3858c --- /dev/null +++ b/client/src/app/shared/pipes/yes-no.pipe.spec.ts @@ -0,0 +1,24 @@ +import { YesNoPipe } from './yes-no.pipe'; + +describe('YesNoPipe', () => { + it('create an instance', () => { + const pipe = new YesNoPipe(); + expect(pipe).toBeTruthy(); + }); + + it('returns Yes given true', () => { + const pipe = new YesNoPipe(); + + const result = pipe.transform(true); + + expect(result).toBe('Yes'); + }); + + it('returns No given false', () => { + const pipe = new YesNoPipe(); + + const result = pipe.transform(false); + + expect(result).toBe('No'); + }); +}); diff --git a/client/src/app/shared/pipes/yes-no.pipe.ts b/client/src/app/shared/pipes/yes-no.pipe.ts new file mode 100644 index 0000000..d61b564 --- /dev/null +++ b/client/src/app/shared/pipes/yes-no.pipe.ts @@ -0,0 +1,12 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'yesNo' +}) +export class YesNoPipe implements PipeTransform { + + transform(value: boolean): string { + return value ? 'Yes' : 'No'; + } + +} diff --git a/client/src/app/shared/shared.module.ts b/client/src/app/shared/shared.module.ts new file mode 100644 index 0000000..ca973cf --- /dev/null +++ b/client/src/app/shared/shared.module.ts @@ -0,0 +1,42 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; + +import { CustomMaterialModule } from '../custom-material/custom-material.module'; +import { LimitToPipe } from './pipes/limit-to.pipe'; +import { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component'; +import { ContentPlaceholderAnimationComponent } from './content-placeholder-animation/content-placeholder-animation.component'; +import { LocalDatePipe } from './pipes/local-date.pipe'; +import { YesNoPipe } from './pipes/yes-no.pipe'; +import { LayoutComponent } from './layout/layout.component'; + +@NgModule({ + imports: [ + RouterModule, + CustomMaterialModule, + FormsModule, + ReactiveFormsModule, + FlexLayoutModule, + ], + declarations: [ + ConfirmDialogComponent, + ContentPlaceholderAnimationComponent, + LimitToPipe, + LocalDatePipe, + YesNoPipe, + LayoutComponent + ], + exports: [ + FormsModule, + ReactiveFormsModule, + FlexLayoutModule, + CustomMaterialModule, + LimitToPipe, + ConfirmDialogComponent, + ContentPlaceholderAnimationComponent, + LocalDatePipe, + YesNoPipe + ] +}) +export class SharedModule { } diff --git a/client/src/app/shared/validators/autocompleteSelectionValidator.ts b/client/src/app/shared/validators/autocompleteSelectionValidator.ts new file mode 100644 index 0000000..6fd2d7d --- /dev/null +++ b/client/src/app/shared/validators/autocompleteSelectionValidator.ts @@ -0,0 +1,11 @@ +import { AbstractControl } from '@angular/forms'; + +export function AutocompleteSelectionValidator(control: AbstractControl) { + const selection = control.value; + + if (selection && typeof selection === 'string') { + return { incorrect: true }; + } + + return null; +} diff --git a/client/src/assets/.gitkeep b/client/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/client/src/assets/favicon/android-icon-144x144.png b/client/src/assets/favicon/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bdb1471b5ca38fe566cf10660be4df4eec4264 GIT binary patch literal 17055 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/android-icon-192x192.png b/client/src/assets/favicon/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c382cd7f80fc34bd94d45df33943e0f0e586da8c GIT binary patch literal 23334 zcmV)=K!m@EP)b>9bm?!9mOt+{7bWi4GxS9Nz)?`WU_kN~lf0>ot~iK1kMs0kY(E5aH}^M}LX znUQ7LGuDhHd%~fStQb0|8B?N$<|2|ZNPr-Tg#ZXP(EC!|UHe|SZ@=wr_ul#AzF%&Y zS(RH=W;Xg8@j9!2+q>_*bMD#C5qyY;hO4JOfk6gYZcfZJ;{QXg&6fc@DSovcs(&d3 z?>+w9a4f#^)!km|j|{xsUciq6E*yOkZ7f6eAi6ZxI@Rdpe>v0U1#PTnEqIZ7E(pCZ zRU$RV|8eA+o&3B7i+Jf9yS?-eJj8A<;De6KCq79e5$()Gtt@}Mo$8;CQ~h@`Z4PT= z@s(t-9@^o0bgo|V{)cik_=ZUHTae{YLcH|#-M)kmG(MC74*~7WM7c3%nsNR&qnlsrF{X@d~ZQwkXAi5TrG6Z#6f4)u4Tp}l~7`w#Qz|NARx{f#$GIIpm&gbZgO zFaMhXsr%a6_>d{?#)lGM^XLN(0|$W-V7Pk-?67AU9LST(h>ojyu16?{KTwK+YRG|} z626l6C4K+}C1rWCPuTxrRO;3{#f>bw9E30rc@ab zfm6kC0!R3FQLzM$=$N1FOmez0OQq8WKuJMQ+2_P?joxyAlAF8b-B15e2mD@M;cI!B zJ9b?r(l|!A3|uIVi@;T!r04)`pamqr3Nf@oFC)5H&sLIrSEWmsBVvmPxS zvS8O-hQg_6XK{@CSsbA^aT4J@;8ox?;5?2Qex&guApzFd@g;7DKaShgk1sop0i!sA zzb`Cc5&T#(%TF~YIMkfS&vUGlM4seeUztPwB}%@B6sxw}O+a9owTj=@Wqv!W@aH;2 zu&D=_0Jm|{;L5V&a`ATpFw4JiFNt9Pr-NVw%)4!0qTY zoB?|p_-JuFUcA1kxQNBwz&?|4DsFPJy?{0v4FpoqTM6i|1e61B@$*}Upeih%Q5~)t zkN1pE(@HcOW`d95zFV*+P^|;u!uZoCN$CoQm`g@NMAxz$NZY%!fhz1eTw} z@;!w3HyAm^KFeSFz(g2F&wiQO@blD$pI`oRKky9jMc`+Fp9DS*JXX9{!TIpFqzWnl z2lIr_G$%RSX@YhdL=-5O>d;dn@^|hQ3)}-M2@68-t_hg4a;ti*D6YMNGwcuIHig4D zDRBrVHQPAjnRexq==3_DeN-w;@)@wd1bhla8N?h`Ui(KsT}}S$-*4^MH9u&4ASA#l zQ61rSw?5ns_i5nsxSg)FQ|Gk6u*o=;wHRo(2(pX}fe=uOJO*nafhQ3HHsJE#@HqjF zh@2N?%(rF4td-1foe7ph;fVea@JXC)@F&2Z0&fAcI#&z-_2=g_no+QyDDG_;coHjq z26z);+V)pZWa4jK-l<#tK=FZKfK}J?C{E4!98R|%!ZE~#jM|N$ONeLFCZFp}QPml_ z1tGy#lAdzl@_eM+G2&m1VWIgcuT8@W{!B-U-l82s1f0Y<3ci4|6}}-n{U`5DR%RdT zZ+uZW+o@EXb`W?DVP60-2i$rvSH1Jtw+ygq*DvE9*o(kNfTw{ca8h7LVSxb4h|M^j zG#PHUu*P5jUkdsv0lj6Pz?+1Znf(RJ0aL`zB;6NpQ z?4Q4Sa{j;iv3EZ)ROvj95#5XQfJ0dE(+KWxXX=*ye~o}Kh`&GiK<~qLvF{jQ8R2(> zSA960{wILHjPve959<5|LCNMklQuY#v@mJr79)g<_|_t-(aspY>!Hhp$3)JvGUZK~ z^12CGuwuuJI_u1hzN(*pa#`VBayoGK9G3>|X*tgHw0<*g;iiEf^svYt1w5S&k-4#-6Vv)ySi#>=W*w z;d?)vl__8FI$TbD=I~HE?1eN4Dqhax0}X!ik@4~uj!l&M!c?wt8i{i({2azcz;ENp zw{fW&dlvhG0amFy0ZzU72+pJPB2MowKa92X*_=o6n1Q%Mm}QIk1m#fCR|yC`g%n~# z$!^<0_ty_d%`-OTkj$CXYDavK+6ttw^n@8Fds{p`G|w}`^E^E~Cr%$c#e|IF|e5GT!}ntp@)>>AwOL~6~iZ0%yr{&a~oDbcim_D7x<~8clhYw zG>2;)YLUhhW+TME8pnZOz}in@`8U9?;WAVAOt5UvGQhH(zm6mLFW>@M&*R*h4-FPj zSn5_Yly>OpbTGzZ08a?&WuI#3p_F)-oBtw8!t$(2c~z&pWCCIX9Tq`k z4X1RQk+g%!x*M3lQ?9_h9D2L*Y`Y$z!y@OD$~dBPu34WBV#@{JGfBY3`5FhJ4o9mk zD!xYM7Nx*<*?&moq~E=ec*yR{H4 zplWhH9?x?kYcKAuLO|e2ddohgV0Uk&08WXVPpE_`t7ut|&B}o;Jzt!yG8+fHG1bQgQ29Jonhh`LAz;ri zz_Q&xz~$xt6i)4ViU$zT+6;Uwb(3+R)1;myWX0=|uc()NB4458gZKQbhwfRA%ZwLQ z!gqDV=-t5u?zd7P{_srwn)7KX8M z#6Q&u`MnFH{MxxA+-{ahv;xOZ60LAfXm!GxZ7)k zqT0*CGsyxkwr2>k3~Mby2qI50R1X=fhA8O>rCXu(AXq_c;ON2t*Nw*o<0Hg28KBtR zW38A?LW~tWH8@Xyn7Z={@Rg;R`F!*G5MR4;fVU=l&{lTO-Ob{z<6PHu9Pv*A@or0j zU9ka{>H9v8_&s=SUS1ldb7;yQ+@OXDUVcJCv-a&R}=CRP449Jd8_X``f^?IO5-ZT>>x`s-EDw@PbI(#2~uFUacM>fwCwtI?)5vC2*E)c zaySdP*~&Add>LVQmV1&VUyqoichSpdby?Guk-pMDbCQwPsmH{C)A zcXNktH#zeDI1}&Rq?5&{9pC^dEQyg^S*Y;lbT7{i&T_KWyzkdiKlt!_uq4{#t>9W9RJue9D3misy+4M z4U4A)vU(Vs-sYAP=0u2E_4*Z8WAOD_&wHDv^7#Z%Tr(RtOeo29pV$oID zC1|nizbk)e2N$)0O}u-$k>Oq*J#mOA3@|$wpXe^((tMSPcEs;rIYcw_m`i+ev!&9^ zkK)v#Ch#p>XNrf0hteLs*!?9gp!FHxZ{Uc3PpLi25rzTvT7^orjPEHh28=;ki-$#6 z+`d($23U*xjI~RinVohCnc_s2^$+8Y{@w~l4-ZqVlnT{rXVK0)ZnsLjH(TR&t3+zH zoPSis(Zb)r(MBI2H`0xJC-6Wez^dx4UYxh*FX2SruKM`zhk^b&M~{pUhQW#ls|0w` zUC><*TnI#=gDiK{>=+MhLXR((eFg`67#`~7`ppUAINj0vBZa-6uD=;{)u9eBi}Mc6 zj-LIpg$Jt+J*)v4u5$qVCpbUE<46@Hef6C<-`v;vmCAy^F8yVfZ-O_)l=O@=yw#9tHyhxXP_x!c}kWT2k9) zFmhmkQ>TtN9oj58AEj{dfxGD6fCvM;V@C-_hVZ1orYTvwL)`3;#i`38)tfl-+{G69 z`w%0;h`wI%HfGEk17YZM^28`3!+k}b(%$9(9BsUaqm_^2Xy<|AfvG@+`V-+QgMJQI zu-@~aFK8zqgrK*l%J9elp6@Ltxk&+1h_y8l>lna4c9hDqXX*LaGbGIp))-{qVf)J1 z&_ixUAGZd=5HWfX@%U-z?R8t$1|>ik2An)T%J6U>JKCV=!D0YMD{WlA(hH+!zZ^d( zHRwTmfrf$qJx;&tVGpD?+z&zseBYx~E>S8)2q}y72T)3&?j3^yC8&StbCf^!9Huae zrF3-zQf}5NcFl%F;6uH(j^VM+H!XyL&#^}iFf!DOk`k@;#=g9}P&iuo3%IE_{|vbP zpiZ{q46w}bJ%aP`e-@VrwdaZ7T1y!EjE)Y`-(N?{CC`Qcyk%B$8`zVa;p-%%=7o4VT>gV15Q19n33WBmH9V-lww0!pEd^*FC8`po8aP} zTRHAI`Rm@0QqbF5Wn{Py&);(uiT6T?qn)3}(NYNzJMA8Q5Jqr>>(TQC90za9*Dpko zpZ)+Ax*FD6!ocU~k%J5l^sX=*7uT`pH_yA#Q?GDfq#u8oJ+n_x#nI3ga5S~!iINY( z1{lE^F`r?JMz6KtDNC)C@%*FH92#u%!}Eh&pQzAI9-P_Ijs6}yI6!Z2b#X0SnwLcj zl&xYhHF?=zcaoKA(oWN8Z%=i zK^Wwmd1Q{i@~LY)d2EhaIpdFB9p(Hjmy`1#Hezcno~Ib-uT!b6Y$V+!{!Q4SZk@}B zJlB>y*RG>Paez}(x`*c}yk#P9yYy-;^z>9Xc%Tp8yZ>m`J&GrAH1#&n8a?~vN!S^C zV5hg!9|Qgtu6x6lY1CLjUp3{YKX#KBPE9dTOZnLsZ!kF@aq)HyV;-DNB$cF6D-%Wm zS}${d-Xr*RKUnMRi-m;_)3a@w?Sxi4B~Dy-i751_lmn{ekb%B3J@t~aH@10=U0Uz$ zS*`*-nEUpC(H(H|w{TX`@9xwOZ<_&%-9IQ6_(@#4!9y_L6RGrGS3l0-A#h`D)Zj&m2r zdH2FNx5wsbw$l}96>C9CLA4w(dZ33VPK|Kp)Ch+U_R>>}2>h+JzKtS}-kvJeY6;)p z?HZ^pquU+uMcnw;-^G`;pUxrUVHl{ufBbg@yP~p zl9Oe+ApU!evalEft#-=Q8#9beEO74p7|%a>nCG56%&{Z=TT+XJa6z$=pGL6Q* zo{st~uH*C%aBUX1r3P#{IJK;u$q8K4?q_kG95xIKSR=@_q#Wj)JlN#(&)wmRFWlnn zu{k`ol30A-P!2RoTBLwh;?atIGA)t9ZdqsU8iprM9O5G%d7R@X4iQD+;_JS2L+_+q zn{=IeVwst1^ZGlt`N3<~c=O%cT)R0-qnV(MS(I*~NTpc&aPJulnbx%18I5K_qm?jU zs7~dQPZat^RC!~N5}K`q^A~P0Ha@f886d;LK_})rmQ7rQS-L)hOd9In5Zt?DgalZ3|%Ur!NL#v&-^2F7XViv2~*SMXc zdp=j-E0KG8VsM~Nty)?t;@Q9Uz#xw1 z?f^G&DHB_g1lwT%AD8a%A}(`pQw^*vP>FI*jW+oFv$y%!V^f?MZO~gu34OEfmz1>h zR5CvO)HshFUf}I3z5MZOqkQk&Ff)yiTyNcbQYwYi>lKtIvCHmfcZXgLA-crhxeb(HGGcI47VtS^<)J&64y?BD*fhzt6qq|B;>h&_E zQn>QG`x6x$&Ako0g6lQ3rGkeoF+kz@sp5*-KaT75vLRRtfoB-1Cw%h6B%gU~j5CkS zadfmvsV{XtM|PlJa)r5K}qqmYW*c)^FK$EY&Jj#`^8cDV_%`S=ps@1Z~*j!fX z==wR_O)OGEtDW)cTQ_;_om<=sfOkB_;KGh4MpW0BbFtQdH`$wk1t7k~H7R zVB8rT4Sp9l;Xd2!4{VhIhHz~RA7hif`h~EhT5@}~%$^#}7k)FQOEJ=i!9`Vd&#|p8M@`33_W-ZK&j$Y`#JB(skO`Zchp!ZNzbAR^l)H|rP>qm$&Wsc5ODRz1edQ)(C#EVB?)Rc8hj4d zZt?bJe_&J8vMlA{G|ulo#3nsS0x(9<==gl&y#r`1c;?V7PaT|Nq^Aw3aIViBR}|;l zyHob01tXZA4|(%SA8%al=hce?+?pz*_115!RLT*h5KEojR_XsjfYz2)JLUZ4N!~bj zn?^HU^zs01JZLE-JUWVZ_yBUS4@wcr^YE1<^gVpfTWqN7T6n6(B6?K{5uU=URp{It zqjPHv9jAywGFc0aX3QJsZZp_l;lNOxN;z0}K!;O-B=uT_QuM%!tQJu!1sp#*!e9K! z=jp9ic=fHz{QAH9F0FRV4%r_HM}wcm1;%c}=29d!yIo408|o=sYm+T^ZqAM1rOShy zAFK1J$0nF+kMYqX(+pQ)%6^W@?UEW4EGgv12wE+l@!5#Cul4fPA0FnF3xnLAE^Wk? zTo(eTCMcy?9`jw@TT=)~)0`_erg`t;1UK)@VJ$0mG!X{)gZ+e0oJ922G1el5AW)Jh z2=J6#VzOme^v-x5(ZM17o*I6wf^K(6CTFpQE-j@X%M3T~%<{LyQpeE;1crWZn5v0KKrh~HC4C0A_s-5TKK5&$+7vynMU0O0P_6oF zrb}4sa-6EQ5~Y$;@$MIq-X2^7;b)#a&X>OMJUxXCaPUAMpa1mJG+QyRym6_xj%`bV zt~c^Y9BrNl;*EZJ!}S1#`cnZujhn(U@ z#!^9ug*2C3pQ!NFmk;qLuOH<6tvWM}kSyQ2>(g3`@)Ui2H7b?6(<@fzz~#ARp&4`a z<_y!b?G@RcLP}Jvj2iAo4E19@53ndD3*uLsd*D*wRZ3Kj9VR+Bgbe(Z3@TuHw$0U> zGb}V?@_c=w7PvNzrBX<_6t1Xt+bLKJS*}q^^62pcJpc3w9)I)@Vc<5Xo_d*2ec}n8 zdGZ+5A|9djwg<)t94$VLqs_`@ie@%b5aZ!;{eJ>Cmv=|tR1Zt&8Je-rAHF@xH_sp7 z#(ae=myY;j0R|>!O1yl2kng@T!i~uap0p^r^$0L@gG3%fgMHL%cWZQFS+5^(ZqLc- zCi4q1X|{aWp+)!}{_p^@zXuz5AVCRGFIdYRKFNBP1}Jj1h39ivt&EvkoM;B)%qAzu8* zX+HYwNe&+xpj-}%ySHsTilfaDHlf*UMg{7@$}3tkEP-)5UWOAxN{F8@J~;IO2@qdm#*bDy5KF zDahC%QxuDml3KOI$DTjMPk!bZKK{aK4vzG#bt!!M6K6Ou+{-t<^A_Lw-rKzM-i@7* z1id)gd;*syF};y5-IoEDiIZcvsPE85zPA-PgVS<(vdW)b9^xlXjniL^Q7JTMeJ)7mT?#(*y-{@hs>2|nnsXaK| zuY#dJk9ji7d5)NaVr58mtyo-~@5>+ zfU1JPtK+gz(lx+Zrs}vPI(KXrDpYut64Lh;;{jcC(~lE zE8MY)WRp|Qx;lTg5^?D82uF?`Mk}A$wk7hR8bILPzm6gdeU2U)0T)Z;Y zy?a}^O(h(S9>>w_eZ4^&VSsLXisLvt;DKjQNnuGd$%U~xUwQKouUzlv)vNtXHll5v z+_l#c95N|qvL;V-<~iAzVbHG;l|ods%16G22+-QN-2T-J;QNR$EEr%}3}L5IE~P;F z9@6(+bJAsQOk*usrZ=WXD@oOtoKYD{rPL*SQ%AgSd}gg=qsm&>4Vz_}3m2~Q(o1ji z)YFgB-`9i91=?65&l359;2uM@$0p`@``zpO*$>|1`mL!Ao_+nhgrm{pIGVkP^CPZ{ zdosW>*XIkky#I%mK4^hV3tqj}4_CLJx@&PEgQRPyh7P$o{un=Jz4IZeyuK3_doPYJ9V@3a*ZJ>wSinCj2o1<*j3Kj?HF~7Flk2KZo4$;RqB_Nf>P*jsNUBqh4Fkhu&+qG z9Tb`$Q!yO`cdVjqyiK`mwKg=H9p>j-wAvjy?U+2vdFHvtIdbFxt;}g{C22{LoR?p_ z#Bcp?-{;jgE;Bj3fH9`%g0W)^FoL7mLEHeob#=r0-LX23n~w01`n5kO9MlPClLbcF z4Z`Mh@qNCwHy+M%Ld*p!-`q}3#G`XRtr%|7Ou{285eFkOqxS(7GE~TqK$Ft z(Ka5i?!;vCO{~@|=SXW^q`6iLDMdc_bLW^s1?qBSxAFTCne%DU;SCeew1P3KHoWh+ z#=#P$By)33UVGyrt#(Whg&aIML|Z5#Pk_m}c71|x|Jgfy<4@lr%k|=ScNk?H%^nA? z0CVeo@P21L20YI;lHT?L6qYmb0-tV9QOPrql4|5}urH#g60 z3=6|w@mhRLB^&L+eiwug#Bs{`^EbJ2`6i9IdD2XiSs0sc@dtnM8n3^7rDzHBK${d* zaI|~uULRVQ0SW{75O9`<;QD+J$PtvR;p6E7&&2ceByFTIltYifT1YkYmx5I5)jh64 zUyn;X3qx-OAqpWdNlJ3*dlQVS2CNQfa&`;VGH&Nfq;yN{FzV?#b)2TrI73%o}fB*#g}K9++z;ZvPyjwekr?b4EaN&y4a z(6t~mPR&uqAnY2E;8mnjDftZbR~hK5Fge{K%en)x1vbk`Z;c~s6}*97L=>QfAj>tm z)<`Kg7ZVU*vYdEwhR*E?(&@Ryb9GUQdcQa8~{ESUjR z%07>s9Agl-os~VH zy3HjH4%d0?=8zafP}X^qS?*2*O5zI0M%e2xxp+HBc@EJa_gG)3a^Hry8VbzC!QT3r*4+V+2u%Iyj7| zmdUh6q$$=~0{m?(8ATr2xADEz2_+ zPiIKXx(pLxIU;giPziUe;!P7QU)rY7Xta6rt&3=FXm=8{Hak@gc|Qmo?T+ARd5krf zU_AziaFMi4HM-hMkibY5b1Z2htOhBFe8&Kla8=(QYf*WI)JvThx*u3gB*sD*c$|D> zklSMm+_*K%_1kmANw%oom^8!A&Lghg25sTsAfgnKdR>>O!1KEE#+G}L9O3IYA)9N^ zx_pD?<(uS6;ZqSU#!}&KaM# zOt58xSR2FaTyr-_po;@ITAsrV<6eRF7@(^^?TYVzJLu}NRjVmwDKbg1#uE98p0ZCl z^j!CbD0qr;o) z5?81|_o8SEM8fiz%s47?LM+Mt?IARRqvf~R1Os%ZJMKdU5R|OutZs8CUur871&Vsf z$5&!yDuECPV-RVI&?{Yx-3jpPxz-2!%RGK^nDdt>NK#jr(rs^uwb(SnCK*|lIp<5I z1ipt11M*shyi#^G$Z>*cw9uWHyxAt5T_Bm7#dP!jyFPpC{QkW?B~G6h;_;Ki4EAp_ zJfjUF%eh}Mi~{Pya8zoJ%bY95ql0*8gQa&6BRE=K(?xa{11uYFdJ>mky|18wlGQwu zE^s7|7dN`dS5(8o@Ll%soiS;VS%%2hwgBup91!@5;lV1;J$aZo$vJm^j5x`cQXh&a zvQ1KwD>t2_Q3_QnVS4LiwW@QK&NtB0bLe*L3g5fMF3aqM?r)YNpHs(&c<#x=3=dWb ze8r|}Nwjv7ZUfa|0yrvjo>3{|R?)Kik^zQrv>dJF30hAAlz>OrCv$z5!wNxQ3-le9b8-RgC5Qfmyl z(Lr}o#Dq&zacLCyZWv`Plp>Euj}P&&=Z^C1*-^@+U_*NUic2xZG5Q7=zye1_&NDLM zJ4BdG&&Syl=)uwQnz5|47$Cq+?5^|R=LqjOs#Y^-Qc6jT%yZWo+*3rp!dL6GcP?yz z)e_)-=(a=Yt(SQ6^Z^3j7yJYHsU2Kk0TYcsN?_$I*7W`pwm- z;s#uAtL4dVVc2FI*D+q6lWT+W6qU#$^zYf*92v*X5MG7FX3qDp0j-4t!!`PP+*Fs| zdWl!xQcTV?X|>ZL>@QXg$6Gt{Y?uAV^AweGz)*jc=bt*v3(p+k@PQt}P;Gfy3|d2) zvC#~@5{6NsIU;hd36FWZ50xNC%fmR@UXdNT76a6Z5AUnpzq?}{(g|nMCXv+`1fCRB zLyyQ`fA6T zfj-bz=FI5>eB$|IJaV{?Y9-uoH|TYLKg$qFjMzxfpg<%nr)9=P<1<$l6CvyUY}&EyQ~6u(d(WD)%h)?)x65P6Q8oJ2MncfH+BXTIMf?-FGgD59`TDe?(? z#nI6|ZjCRS5!Osd64xZQn?~XLiZJj9L!WvzT$&L!(!=p1{hWAYz(snyUa2iIfCY$S zM6(InY)AqCcvyyorbleMbHi?-D*^86V*Y_+0N)rQlP@|tWf1@i)=Rl{P5x1{v&dF! z#ak9<=x&DIx&&H^e4c##04I+PGBela#_c(7jm{>c}0uy?cEn^!Dx-`#E5ohMPTjT5Q{F+X#W|&U2KX0df105(BcId zO{g`}I+v&bJSp!VEXs2i2e1aj60?|X?6}~f#=`?udg~F7og5;|4aOLZwu^PeQV67S z-6MQY68MV1_jWE%UO2-$ZL|nF@us;+0X@P}-l1MhyMV3=)U(zbtFf;ofU*|PXt)0t zDYr_x?gaNGWTTyt*p2AgjoScgp=)RQz9a|&mW2jZB+zvY-)_ud^|4(D90O#H7I|mG zZ8Mkdsj&12LwVypXZIR5B?0!O5!{6^2B|gL7IU^Ft|g(kKL^-cW77-~Eo)=YjfQOl zJ4MJ_zbRm~CZBJhx55BGuh1U^32@gei?w8I4OdIKFC_rRI0MgGqy(?4&TQn_Wf?Y( zoqxVt*uJ9w!aj!9=!FGrr?cs=dRTfelnM#35ATPMqv?Ayz_K)mDw}JZyXz2uXF(W? zF)r0t34y0J-Z|Q)DYV-wBEq}Ad+*fE(FPg~*rWvLcG0UAHo*3qJnjl4j;5p4)nSW7 zUc4c2-16|oi0l9sACff$)-0w6C@Eb({*7jM#xb(lbQM#}ipG~*q5Bj9FdDD1fQ&aU z0bKuaO9@Np`bq3Z1Qe4dmNUWXUEX79MBToEhoz555z$S3I)OhZQsy zC{0Zuvus7z1iMXd(5^#((m9p6S;BS^>(~Mlfl=hSIH@$ShqU0}X}ie4jpf3y3TynwiFLZLK;>105@9Az9g( zXkWp@(fFDS&>eucZzVv2#7K!$vatKCV}K13u9}?0zj_6cBrEQWwV*d4N%k77ajhH0 z)HI^m+SGU5<^oMCX(Q14^(Hv@I2vDkx~nC?zGVO?3|1js!MP9^Ysrl*2EuKi03?o) z3k~NEUG{Nf?Y@5SX(y#KJCAL(H=XhgPP#5wN!#xHT(O4?k5#kn){+4GP6b*4DHmHD zx*QsdHXHQfxT$Tfvs<>(6>3Zo+1>5y+XB-07M<}aOt$Gk>VT5~vsTi!`|;{m;Dapz z0JIe3o?J9yEsz<5-bnt75Lm6T^YbeLM#i$~%BwwrqP4Y|UqFvfV6%Kn#;>+8horSH z*?$G@DFM3JkB@p0nN%dwqq|vIYss|TSlz4uk!Q&1DP(hHYP7L-Qy!(g1aDy;e|#K~ zXIu3C2<8eE=!1skS7dRMc{ke*a!(SJ|(f4R; z0kCnan6q-f%YY0=)AoX5+N7bCXj%mmY-9&hb94A(cM!`A$Hm;D{lEkQ zWRenGy^5Ng+{)Jxz)j=vx(=ANvS^I8uW?Ta(EY#)D|x>`SxX`%=c6iP{?c6Gc9JvO zN}UwgfF2x--Jx{;ePj}^NR2l8BrU=UkV#DS$`zui$qi4ySq=kSvK}v+kPZ^H=db$S zw*z$PF+EOhC5#gkinw9A@?#y|`9X9ctX zG6WMMU^a-zg8-x;%MI-$r=7Zvaox|l!`^kM#ypkrF;_scOy|+olI#06i`#Xi%?`=< zB;o7~GKtr`#?>>Bm*2z03N9F*%f@Hk?&}OtaJ1aQ(e{c4xhwL1Zol&@jGp~+3z)@C z+1s~Pj{)ZVknvK5fh@-}8EI~4bTUf5q8xgp2oftu5M;QBrzzU0=oIp{CZ2ENbyC7& zrj;>}7xndf*)2Xdxxn<5J50AUk@1nnL*XXNc-SH-#u5tS%A{6&+tNnziVnH5$(g}> z6dFgJ%Z3@%t$U8pUc)~%y`UM zNuzN4&1IT$qsr&5&G7Vrd4@*@fF(P?SoUOnY*)>{F+R&5pP%Ht`3gE2qDKpA!cfD~ zD+~u@&IyrmQf3^K`mP$-rj@*GLatbU&t2mdkl|>0Vf7p9F~9`-G#&s;L^&=4-U})` zUanD7g;zs`ylX2=XBEbb;*M2JT90|-lD%RCu@$terP4H%-@HWsp%D%o9Ksg)K;1NJ zDaB$7p}hhj+%7*hImas(Zgai^xs51m*W)w7Qo+(A4MQU5pwJwU+Wi%p5uxb-Z|abD zjlbyo-{;71G`(R4m}DOt!de2Wo~#i&Zu2n zk_JnF2ULaOn9O-hI*HJ*lDBohZL7#}eS!8lavV+nXh?uA6qbfid^70d`+g6?S~4MN zOGRuYhV@k#Aq07@nVg*E*3EGy$EO(@8Nl~_ES6kbaw%AEC(+X|Y6Z>Z}T+lw~N7Ll__ z1{mi9AOXNVK!rtZf%>`w?=D=t!Np5A@dFHQ-A{fm({8HlXbB$@`+d;H(QLc1X;9_7J$w*Z37E3K>4aDt+W_z zisJe%dx&CCo?PL+baM&Z=fU+hYHP!L+UJ7tNs7Y%53wdJO9t>5>$vsTV}Ne{^muU` zW}gksco>ja+CuS`U!&eD>F@8QR*LXEmpzjU!CY^RyuSx8^j*(VEK;l`8wAEm>?&PK z2!jw7B?PTF<-+Z0zCWjVSNp^toK%Gefo|}tyNR!f`}F}G!-zq=q=b#wjw-ka>n@ay*kG^9)kG;^@AwbiVj`(i9V?kY@R3^z_uIRcrWuh?IiBmqdYF9I)4g zluoT#uMk%$H`lleV<;xdyFC9e^f`9yAfuy0L{U)K6dz&@SRBp1gQMYfalbp*&7(fY zuDV25k51nkylAZ@iXt9=;!zGB8bJs_5J)^>s=uR!*hrs2Bei=d_ghWaY>3K-c zcYmdakX@JI?&-kB7@|_hnX{)D9X)^$P>K|uC(*h~2TSXd6688_i=`Aqp(F_8VhbPN za}4EXeJ>H!p+m!*Idhz-6fCAb?*?4DxIoC_8L8qqspZdSS8y3ev#opS|FE%XFfHI^ z;1j?nAKE1dfs!7|^H8d|sa-$1$uUNwwZ`N*)|wSN?Zbk#7T@z38XBTjt0JYKR8n}J zAW8IHf=UWe=5Vh=6$&v-7UVg80%rJK^cSfmsBEw#TZSVXXq@$*djjrfOewZ-X0DeK0u{h zL3tjYvV@^RNrBdPcaM{D{mJ!0I2EW`@$fu>G2r`>D0FJkayswrt#ahZ2tz}COij&^ zZ=~_>)*g~uo0NEdfKnbp78SzQz3vAAp6?Fj`HOamF&d+_`)drg_twrk$nI>e!7^7WriqSi|Q!eeq!#w`@NrEs$U?>S;M+TL|e zDczda)7pf9C{jexz01&pz^A{z&hg`;jE~PSF)_1a*S544flwY2x6^xJL=Z$MFL3G& z0wD!{5aRn?Ch(UwsulOkV6-OBb99yxcUpAX4bo1VJkJ)HWe1*7ilfmhIGVjLHZu^f zt5+Rj8w?<&!Vf}%sN#0~q6*boizzCnTv5};ZibT>X4$SP@coD&C>O=+DM`D5&a)j? z7Y-gA;jzaaC5l3PCB3ewb&YwlKomKnj@S&A{1C<-}q<~TQQj59ty?XG->B%Kff z<@toA8lG2dN(h8>>P{F%1YwBh`v{>BQY>ynYyX}^c><{vHV6nyWvV^>Gg*QUs6Gj!RF=(SnlQu@{Z4rwQ0?$*_d+PM{_aTIb?@P)h z4=Gu6TP~+@*Fr_0)b@=-V=Sdo$YYNkTJQ<;n@Mxy5EJSWdGjMgYA@O_uXk>^h5%(J9Wvo^mCTWj%spW&f?dU|_M zDnLjGg2H3deQ2wmT{i}xcA%4%TZ6};L&J=Y4pXmJXf)dBEi$$c5~&297Z8=IDCHOT z#wF;vXICMNN+@p`$*e99-Pq!nGC+h_WP(bqmn7-XUYJ7&LDFfX^`@kD2S=N);b?V3 z*z8Q;N#NVK+@NRfbEOEO2!aSdEa7Z z#e3AfxrHRqIw#LF@+>DyVyrQgtG#4tOd7WeBW!aI&=^CdQsTMi&+^F8Lm(_spa=rB z=)?CsK^Q2SA_vT3d?4_pQ-O9sQxQVo`yQjCLp=KE5zd{vLaWu@Gy@1B@ce)vD&zZZ zf~e8jNrR|FR4NmMC8Vd257@041QDutfG{f4n46|CKSP$r8+}ISakROqVF(*;`qh|x zjoR?@8kb{n40w`t%{hzbhlG(cZk6YvmR+@kLd9`6J|Zet+zwMJ6GRcdA3E`?3O8FJ z85UKbwT|L5N=hd^3V*axg)7zb3(*}ccD|8PVlhq%c>zE7!Kp;W07L?w66#Dnhu<|L7F9wpz$^IQ+6u919?XJmnI0KW-b zz5ULwY`CS*W+gxecpaBx@p)j7RZJv=C=8`CL0EPph3v9kH3flso{t|!gi(YahNxBU zkxi>7#pjoQ%NcWy0fI2X7)=@{&L~qJd7cor6|re<$X9KxCGb6JwJQAs1C+~U+z#)& z99iZFUrIp~DU>J3GK00wyW?#_{c%I<4Y@YhwI^PdU|0|b-5ou z%i^8{VFe*&;eE4sen39rE85L@be^w87aEwt(d6qm z8r?89%K)}G!P~%}0iOeU7T>fMrF<&2UX=1((Z{m&3c&OI#ogX{5xU|32Ol+*QaK3| z2AI4;+-W1FD^!VF4UArYl6v>X4-F4;;>06Fk#mG;t(l!k=(H7;a!9!x5QZK~34Bj3 z68&aX6RiykjhMOl4so2JbK_>*6%s%S@H|BrD$3;=M~)n1e!j`<>^%4EW@9bV^N7lI zJU;*g)>x#J_X$6TUhiJlqx#TFXL8K=#*hpB8Upk?y5x(5mHKoP*|m$%H(+{ z-v!o^PRlU?OOaP=EkO{_(^Kc*!4Zz1ILf1s9;Z|)IZuxjWSPKNi`JSrNf9DN2tyD^ zs+E9pIVgT>y)_B6HZ)r)opwr=Tcq@elblY+l4Sy|i~0f4Whghl&mxGTI?p}-97Dqg zxN~Qm8`p0#IWquD_lq+Qp931BKV~_IOb5C*R>|-1pJ%HzV%hU~p zwURt{g)NO{N~4*OX3mwTlw8!~SHl=fmT6k;jJdg(nb{8W^C?Lx$aB}&Q7I3vYr}Zn z;vtp7T7gtPLqmfcJ~GPi@E}46j4|lE8;R{c3m0?@q6z}(Vlcvac}mqPrAn<(MfVoE zUO^!xM(4|&7hP@S{{y^#`<-90jmg(G_1jyz+S>5*T^U=q)($J>9W0e=i(Z7~#2=Gt&Z>Sy%b(Ypo%am73~kxB7|?KR4Y9B)DwK-<1g_1^UpAHV3=~bbl+=mc7OsD ztyW62854ybzONRUK;R}$#!1fPWQ+0f7I`i~Eag3IW|Qc;k;~;02M-=#WMr6fsl>uU zgH9&~1YuOc4&oRclErj?A@Eu@&v&0Wu zX8>?T#tWVw9`S?dY!H@|C~|qa3l74Na>p=d{ z7@$yt@;pl>YP~}zJumo(kSd}`k`qD@L=mNOl~TEi=lkrH9R7RW49`b-9y(7sefk8S z`1lJPKYo--rLq)V-t2D{?%Phsc`%$&Y-zPp=H^nGO^q=U&)+$t(^`w?DSCS996EFm zAq2DYP2wa+=T1$QN>Q#!-v`G?ho6P0ORlfYpk{Bj4}UCO8L6y`wL;IL{zRgwP$~9{C6SOmg%`B zV`I}~+4d6Wmc#RulPGvtJs!r$*y)7@U>#<5rlX!SQcar1xHc|H;P+bTX-;3Mr zKh$|PZT3#Pf-S*Vh|`RznR%McO{JIY3CzsQbK}Mx;&$u|-^J8pSJAbfV2rgo&!*!} z>kpd?^DmdnwMKv6$d2qvJ8GpGW8M@(5O>a`c$ij zTnWM+XX~!yy>)wnciz2BCr%c#WusCFKiGdAF7q@=lB9D%2=N=nm^XLww|9gAE`9%> z0&wOt|Da{9IG3gAuljx{jMkrCEMD1X5JHe^&D3;*X0x**pJuN^2xvB2Oij&@bBn$kOyzL7bCHw%+^JKi;uZ?5G4d_pSdMm81Xh!hu5vezR1n4C_2Q zErM`R?C^OW7L2hZX-1N{)QJ6H*I4Uvi{dyTO;eZR9QgR5D>B-R1jH?03*swi#{<_7^KD0ab0AMYoX-2z~?4d4f zYoj~eetLS2Mx#{_x=SnegUEHL-t9$h0v0=)<>{|?;?}ns3+-0x`Y-SJ@^@Sw_MZB? z^bhn}t>c#G`)vUygpdQ$rAq88h@!l!S}jqpmZ{asgrQ65Q%V+Dp508(2j2;;oABn6 z?d0M*y8re(MI5JGzH*Z*S8g&pGY3Ezx!8>IynWJ6U7+)PE=%KA(=_?jR&(LaAP74q zdXjkNhdX+v9al}}F8mATF2GY?_-|%)lD^(avp=9(F9|6=Dy4E282bXKNynWs=eY?gPV&`f{v-7l?9XfGB61zBs@+46dV2ovAe1wsTsz`CTTQUbUF#GR)@K{d0MRwNs^Lg z8Cm9}L019^AxP7VEYrmtG6+qx52MPL{IGOf?vX92+qO?@P26eHYRuDaERZE} zQ7FG2k%(oj%U91x6$E}jPhT%jJ$;6!o_d^my-KxOp;U_2RYk0YBuQwuJ2aaeE?vIP zh4WXKnwl+)@NOT?ONU!-rKpJ$(alBb?}tT3ckHoUbKvNYrJF?nTDN zrf4);B&plw?G`;y0@pxH=Q*8bgSgp1c^>6zeX%jY?m}RUHc8x?(|Pt=I?w;55b~kT zr+z3=k+F+^!lBbYX{tT_^Ksms7ZxpqI4K0x-3ZIO+EPtxVU~rtX_^bOblMH_bos7d zv;!%+AS>m13VB|D7ZkmV`~c+@uXzDV`9)EUk5V3>ihAFeR=Y#H)uG*vQA!eqAz>II zr6i6M?%bK+t+(Fi+_{TfyMCLgsX01}yFNvKuRWfJa+1~&GdDPJuZYCmP(byLzKhTTC~pT zv>VJ$-k~`^LlU=LQ`TjrjNRcJN-9U>euy7Lu8EW%76jj&U7!|wXf7T_L#}S?aBE?D zdX9;SsiISyD{$`;|G9G)dHI#MxpjM-tSF|JJFTKDyFT45E;rhh85Wgm4-?iJo2Thi zn#AAIY4-mVO1|-fKmI*#zO}Q#u6touBD87Ryy}VQ|1OoBL-0#}5Juubl|?OswHBRc z%+E|RKQl>|xFV6Y;2Od@LYK;OE!nqGt1E*?66bmPJ6YELmw6gr4ZQk8yY?;~YGQ~{oHUh+HO5BN=pKmfbIm^W442?#6@iPw-i)xWxt`0rO=iqve>MR@AdH(BKXTSc# z@BY)5|JpD9Uiv$~{Ao;b<)L2xu4G2tTsY6@(NEZOU;p0q1E(InX3?Vv(J!PZi3h|5 zS(eah%rQGTM%-@R_5M=8C?p7-%W$bd@6JI8muZ^inpV3*tKA{b^}2n79ykgYu+B5` zJi{wmNj@l>z!;t7d3q<$l5dz?|BtW!``>^0)W<$=-gxU@(-?c_p{e%fMaEJ-@&^E4?*rK(bSH6cW}T@O)`beNgAO}n+Q#uSx8?FmAH zpp2AD9n*efQM6SwM(;@dfVI{bqvz7N{bsv4_rGO%`YWFAUm7;A^38w$-!VV?%C27S zp32kD^K8oVf`1jao0qiC|58-0{gmf(x{ZMnUTwT3*;=i_$c>sb>2j)gKZ zCybu{f|XJ>TMM((N~$U8`3-@n2^ijNz)T21yD`uF^dxEAzN?_cjcsznAzaYvLoA2O zd(tRR;cvknFgi!)`8!#b{!Y?r{BCPu_WMCp8k17m*S_`-xN!dU-M&O%kESM{{mlOb zotx0}y_5Cc!T-Py!e3OLe^^La+Nerov}StzCe!1$?izj}i{MrmRrh7{u7`r6Ay}=q zk9yz0h70MfwbmNb(Rp?=OOxMNn49|lu;xOEVL9(%rtC^{^)?VDjpBc;xI~M0vhG+kDG zFd&4GYuN_wp`|R$Own#Gpmo0DJ*9lSFe(N_>`4K*cOaHp-3MW`PWyC$wFa&8JWJEJ zb)J6J82!H{S@OpR%Ohh8oq1iVR5N^?uI}A6m$Nzrz}X09R7E+E%g_ zV|8YXp33v=?M`#yE3M}IuSKQG*AcYeUAVyIKly(!dF?y9eHrUwUn#&k&)?NLA5Y@W z*HRJx6;JuU5Jr{5%2P`@y+tbxH$Y)|Ur$jCe-2O|690y=dkmS*_KJ zQmMy1&m+%slDJ){K1;*mWOwqpQv0$`(Qd*ROP=K@Pa}mO*EvS(_l(vrWm)=qlC;13 z=GXt>t3UQv{+ZEP#-IJWzqi{<-Z1vnRyc9x+lcZ>hEIIPMy2xYc5~s4H0j(BQVJnN zO$e#txb3$V=2YBnu5f*No{t|yNVRW@!}kOPxS}7|eIgY?%;Z^mF^N0B-hWf8FhsZW$jKYIyF8|1ClY8dq-kStOn? z!v1Zm%}1;?!&0igAS~DXu)Ny^u=@ZOYe|3wteG}OU(iN>S8Ds4gRjR|lb<|ntu?&% zwSTbN3*8ayYZYiM4F5+zlimEaubfBlPmI(xiF{NF^;bcB(inYI$`A7%?ge8^ZjHHQ zjs7N*-xbKKSlckUo@xBTF&oTpYb4j6!v{tJbaDEr|CCf|jIj9a3faIyT_xeiloyxrKc8)&A0fSR0Mh&@-!e`O-hx z?d9$$K5z`M9R8O+%7Mw}@JxX6LUNtd{zkggcPb@e85A*));N9p0U=vE8v?#sP9>8?*Q}Gnnsp(7W^HUy|rKP zftCQPar}k9hY%7eJv=X<(`l4EPn{A%J|Tn}6;h4}Ar4#1<3ex*#DEY|?bo=0i{Kg! zcG_BQ2*G>S+MCvxaclK$Yt6fPt}m2IwN9R=7?WeI;mXVZY`2&G(6B$B><-}37yq;3 zU#{Jtl#)g~*XyhBaV5P^E2*BAQXLi2>lKKqfU<=W5CT4~ww>L-g^S&%4UhqefR2T> z#WtxexvCVvcTK7zGpKpaQN5g|lPN*U}f6WF4KyGgCJ4Xhaldj%oRA>=DUs`o9# z){1V|cs8y@y}Ny@_Y8J>``S|&eg5y@Ngq$T-Z)Z7%F<^pZ4F2v9uZcIBIKZu zvMz*(q?Dl$qG~M%fDtT%Krc{1*Z}ZBDBL!yTrrQ3EH*lHa2t3r&IN0%%RJM70jq%w zD^j2Z%psTp#)V+aTH7?nB-Yy48nb{kQ&!m9#@cJWL1nsaGK_UKzPZWCO~&n4|KGcP ztM?2(WPp3%@Mr!JD$h`PjIb7Aar9fXElh5mQ?mciFkbMCKs_add`t>?6zmX!I*14e zgb+UNP{RFy6bRX^ZnM@}i#4u+i#1rQu{N{TWW5NIz#dp;&v*tZa7NOm4sW;Kii^E^^2iIAm1i0s*Or~A6E*M07Nz3%Jx`u@J>obUVl`JVGSf1GpDU7YMB#gxPV z0Fbmlj(6jGt)C_$#Q%>2g@t@4K(TVP0)W~a@tq(+ejmhev$F;szE+;$chrc--5ddc ztpfmw7Xe_4Ka@BP0I>)Fm<|lon_I`f1n=7vJM?|BK`!E0i zeEO$>;``2b1Av&mJ>JU0yQ8|08sXO;%T4$)^7vJk`U^$3Jl%Io8ZQ+LeM%<_?-yXx z$!3w@7gEx9qxX4)y4O?R8O0_EeJcj2z576e^|4|THp}X*+Pa!D~-4wox5EBd526LUi5!aSfI*2D*S=|Fn{@zSFaOYcZisyvU;d_~Y`v-l0MF zb1b{5Ub?j7S6=Fm{xe;BBzph6Fi7rl&gJXIc6}r8S1t5FRu$uR6-Fj2&~ha=hTH0- z7;n{K8mN%=%dgv0d+<`BT%+G18;C_<@m6Yv`^@MypKywukc_V4`2O7wi)L0&?*>A# zVmr~Lvpe-W&qg1MG>D@vcv(roXwxsBN@*xWLl%9;WNvHQPD|;V6N*YJdTr#OU@B6% z{?doQiOJVo&(`zj#sbxS;=gyl-~vM76D;_PYgoC~Oxl)r(tv=i_SCRjA`c7A!R^HS)ZU@0NPU`6=5!=Y1!?1HFx zdDOF{iX?90$zG`D>W2Q=;JC~dYq9>?qXKwDVg^x6Hb!f?&<1>7q2o}bxNPSjd$#;$ zV~^@n#^T~;J059zls+|)FIuh6*uN+__U)zUL9pud=xa^Ycxl#`(^COv!hL$@q+MT< z7FEp>(Z3hCmlyWKVWoJep>~mhHWqV}C*0vHmYe${-R-jk;@aUkAG@x>#O~&{0C0S* z489vT8LmCNH4TnnpH+Rks;m#up?h7E261S|jx5oczA5v|<{#d8@2Vi1u(`sXb)n9@ zqy$0iNbI&%anWy$DaN1xfvwD>$W8f>0)IVBmI##iXNdbM?JM5ywsEA!UVg>BQ}NQz z9k6NhYBIy;!r_&9c9kAhO5;ru@ofvBR*CK!aUUL2U}H@v{L@Fmc+Rcgx!#sgmn6R^yK%bk?Ef4$i+AG5+933I4-64GgShZTrOs1nI zSc!A+An8Y$A}+p&))FQWnS3&T)G|7yq?MA_au5P7azdLIz35CCqCHCr*jTh^SDWx1 zJ@S0T#$8VQW}Ynd^^K=(s{;m)M~3a+F|h18BO(v2d+HZCZi?acp*IBA%8j%%Ar6>( zo$V%xqVY&%Z8E&owr8oMrWUeW9q>Jqkb|k+8sIs zTUML>C9=L0`ks~{KQYx^DaB`6V=ZycH=M@h2VF#TgrXQKf88~;#HD`LQR#VZDj%%? z5j1bwqp56-`FED~d}I*Kx62Bymkv2MPu&cY-2%eJ0uI2NMtpJ}qgJ=bEiQ-3EGbC} zgh!(HHZSHYk=)Xb*1J9T2w&UFLtIYVWJKNS5uTUe8e6h|V2^wfoC=wW8=szO7#tkd zMOHjW`F$Y}Y*cV?>_?aKdbw3Zsn}d|T`I)6sbfyRrj)hN_O`gOL^79^+|2s^9<7r- z(|=0ESia@kkb!~RW>xDh<-FQm&y{}JE4CjFA8Qs{j~0Zg9ZFqwEz_o!d3vUm6@GiD z?0j~$nJEV;+#PR4Zw@<$!r{xEyoK^-`l;!X_X&bv@Y55v5@{}a`AfTj{!^G}v&#*M zQh_h?MMWER$At9T-${j?10Ap()7@gl_V#^jH`8PQ!vnoe6!inBgk{)Io_?l1-QvIV0MOPEC8y`Qk>$}Dws)TeZvckF5X1=<-4_8*xu%z82=5f86M@ig| ztrEaXyQYcIm5C>tzR}()Ewq6YRG^7BvfR!ua0lSZ$97+>dvY`T)=rehe)5+~F2oYf z&@7@AV3_`nHv2JJwV|>}I!~M4EHL;eotG9?j&FQ|AM;A*6&m^)Graa9pKtB_>p85qBaQha+@(pZH|N4vZF@2yx>;b-4Vl(HrmqnLJqn>Xz2n5HYM^d) zaX$4IFANk@smG|z4@c8PvJ2FTx)y&3k8oS!S>xL&C$zOhh#{141Bgu+W_sj9)>pRQ z4cNQlh0aIwlE-+ziAHdDXS$YmN(Qohm5%IYv8jKuzQ5TU>$qCv_qE`_U#p$+WQs&~ zL8k+`Hd4I&qT0pAI8{qTn#c)JLbzUE8q?vc{9iyJR%QLl41BcdYdj?C3Aw*qs}O2| zcL;)C)r{Kzc*@Kd|Grt{Aj^s<(HEo0MR`t}FCZ4Q-2>|C*V5O}*8Z8|=&KLpAhq>> zIA~4J&rgk; zW!v(Hkt>wx&Dp-onG2B5l{nh)sQvx4?*>Md>u{%`nH^koQq0O5_VE2^k92X)XSQg} ze4N1$^+8TS8Di%d;@)mDXRcDSXJ-(%w{YJVlJX<@^+8p?!!-t~^kKYX-kePC1pkbg zbju~(7p$(fy?H;NMRjZ&bOIAu@cq(xpxlV2k&ayQg9;=x8CmY03ZyOymz?p^H8Hr$ zi&DA6`U1CYAWU9#o9#nLn808EI>%9VHn}uJFiMXUk;z12xGPert{bFszpaNnogH3J zd=PKaPjE=s;!;4b7P|6#41Gq1>tJ~wFRAwK1;%0$Q2*m36e>4v3NPBCD_1s##ho`1 z+FQ;r@$VO|dVQ$m4)LX7o`blkD?2rfeH{M{+$cDpr{QGdY=ID(awK-k5I@`KWdG`1 zKBNcX_QWi$MFsTsCxG)aWR|;FDlqu zjm4oc`uqk0fjaw(-hU-TMvC6oyuO;P)Sm}EW!`J2wa880e{ z8Tu3HeV{JFM-=~tI8r0Y%(!SW@UL0HqiGb&N1jgqqvPnorvM}djX`2e_@*!+QpHF1 z|4ql8$|eH{YwNr_7IXZN=ifr7-0Xo6Y6O|Te0U^{84*Q+hXkFb5~FAg_u1cgE)$fnp36p?5ej7FKDLxPRb$Y2;h1IC}9t5g#I2?7B2$DHsFtpm^h6Y>D9 AHvj+t literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/android-icon-48x48.png b/client/src/assets/favicon/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..571794ab17c7db840c0b35852d7c25ea450bc530 GIT binary patch literal 4494 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/android-icon-72x72.png b/client/src/assets/favicon/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9cda5a77b819a709836a6a76a35efa850dc15a GIT binary patch literal 7088 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 U8SwrK0}PCeq@qN%m|@`m0zVbR=l}o! literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/apple-icon-120x120.png b/client/src/assets/favicon/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..17a78d9acde496cd1a33cc2a48cafacba883f286 GIT binary patch literal 13392 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/apple-icon-144x144.png b/client/src/assets/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bdb1471b5ca38fe566cf10660be4df4eec4264 GIT binary patch literal 17055 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/apple-icon-152x152.png b/client/src/assets/favicon/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..88c69f6ed84b554f2f3bdac44d0da2c42b6bfb3a GIT binary patch literal 18212 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

(zVi0ZZt6jPzHjgzG2Wg(-`k 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 TX~GE;O90SP(^sv6TSxpCC~L!! literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/apple-icon-60x60.png b/client/src/assets/favicon/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..d1cac1f952d7e94c6168900fa67244f612bee460 GIT binary patch literal 5722 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%0AQztTSYf>L!j zCQ+S}Z3->Wac|1|rY!4n-GJTuj!*Q_7SRLC6eKV@jSe>EN%zP3|vX8Ak4@X6XL2DFdPp@>GSWUSaixnIEk}EJ;}piA-*3;)k~ap^ z>Z-LkAa=h@3?M^v03uc9I;sLX^lAhh$l4{jF1N)W)Wa=Q)5eFo+;hAKt18pD$;RKh zmti(XyIdFB3M-4kQSw8=<^8P|u0ws=6`oz3$-Bq}6S#c|q+ghUS8J0;E1CAZ{BK%r z^~l;Oiw!Ki7I-CkL~m1}(Ff6D5s!BWA>~a)*h+deFvZ1-X_uuq*S#ot@fN{OI&xl4 zIB+GA`Q~QniAC^6lid(~ZZ2Z34ag3mq`9>s!Hv|;&Ar~lm);z4s~;*?`p;!Rze<)j*>~wV!SxxW7MI@8Rbh2ltwwI+&fl7842co{?G4pto9evZfe3I z?KN&FXBrbUNieXAE)Ll^mk)jgey+q9?H~yZM}c#RZ^+J}xLNvd({5FUQGch$mn(jh z(N+;t^z|O!wFl>^If5aAk7Y9&U-T>XB|MMGPJCWvJ=iSR=CRsq8PJn_Q0V@Qt;8?^ zzlOde{mr(Sy?P>9{324DqR>rI{3uHk**NUT9N+sQK3=^S()%0n-YQoKs;p>0-nJ`L z6Y4{ppYcAPGizT@NQXxGJKGTompwHoCftbPH{b)e74&n9r>@vB(#IR-YT2D6+{-yo z#`=3&Fcd#@|G3Y6a9bzd7=A5PM#sZ-M5NtBhv0kuK3SfTPsmaz6>D@vlr(dfH>tWu z%-O@k4m+c54@C_=0x2zEe&4mvHEZ0f8AXud`zR&ukLG~K9r?dlghqrv*YAAo#}2*| z?{2`W{?cxYo6An|T`pGkyLiLvENzp3M-8`0<|veV3EW!JQr@7-`B!XYsBD>` zF$Aqpb#L6q`Lm;>pJR$bu~tRZogvHR!7ggTskU*=zAHng!_88siwJdx=9^plFH9z} zny>nC8NpwUJD(#c=P?lDo=!RiYNcnXO;vXklNoa{R5n$CR=nB~w~|8EV6Ie+_4g~) ze&00yBDu~#WDJf!^G@x>1Z-J|HgMz$SX6X$i3)RCe>0Qu|DDqv%$rT5Q}Ce75JWG@ z+p(C3qY|C2hzryN-HJ&Tq2b|5Ma$LrOcGSnhpp@IJ)qiEl0IHDkYM; z`uuEGXeWP=MEL9EA~PNLqwadq*2l?b>?p>n8vW|K=X58u8K5BIah8{_WI$?_Q>UlC zU#F)(we9DjTt>$Fks6=+`#CFhi<~??Ut_aXhZz#Q^u3$37?oq9bnWLEH>dwTy{8ak|IJE`26Z&((mp*N(6@_5nXbg~YiqtNDFMq;~r?$-?4{0ojO~JM`KM>mOmQ z(ZSiuQwx#ujaoY5DrtO{L7cUYd@3{vajKJFFGKeFbo^NmWCK2@DtcooFqG$@>C9Ko znKPE+;;aPL%$DFSAIW@kb@rq8+mPVm{SVTIb7BV+4G_r_b2$GEVw^XE;Ef-8wsQV{Z?#K@pEA zMbEDKSgpREm{=56*1ChiW+Mjac9()!N&fOBz8F_pm?by^OJOacNu2@t!kE=GlG*F+ zAQiSAXtg}?%?y1n_W70f&(ihM>>hXXv2U1pyN%~m-OZR^eIy-ow|4Noa36=z^In=E z&HLZXoMP#^6#5l?Lw#SwHzCW!j_#tguup%YjY+h5DMWR?19YWQV$s#RWuB5X!zChdZ}loHNV#%ywJMst(b0H~OICP98I^OiP$nbI;n#Oi|Mx)e3m#bYzti9W`rJe|3*E>*%u%p38eyf$Ko*z z|KaEVVN6i=zRv$brfS(q@ero}fM}!K9DIX39RUBGm9VF~lU%d0&j0eGZHPw!L|~#Y z5tulh=r>4f@DQs1@MC}qb^t&W6f#O=_wXv?|4T&rkoKDE#Fq P0HCg{qg1b8^X$I>bV>W_ literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/apple-icon-precomposed.png b/client/src/assets/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..f63f71c1af1e08012389f32a3e805b23c3309079 GIT binary patch literal 23908 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 +#ffffff \ No newline at end of file diff --git a/client/src/assets/favicon/favicon-16x16.png b/client/src/assets/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb09f1fd0e2568d16f77c1389ddd31b45930e21 GIT binary patch literal 1641 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/manifest.json b/client/src/assets/favicon/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/client/src/assets/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/client/src/assets/favicon/ms-icon-144x144.png b/client/src/assets/favicon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bdb1471b5ca38fe566cf10660be4df4eec4264 GIT binary patch literal 17055 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/ms-icon-150x150.png b/client/src/assets/favicon/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..5ffcf196e1d016b9309bc37f486d2ead5fa86c2a GIT binary patch literal 18042 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/ms-icon-310x310.png b/client/src/assets/favicon/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..71094c7a279b052a03c2d0bf8b8640e1e48c9a26 GIT binary patch literal 50250 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 z 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 V-51E$=m@ld!PC{xWt~$(69B7n!$AN5 literal 0 HcmV?d00001 diff --git a/client/src/assets/favicon/ms-icon-70x70.png b/client/src/assets/favicon/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..11157b49a00fec0ddd72888f3126c92f30159e8d GIT binary patch literal 6823 zcmZ{p1yCH%m&X@h+$}(Gx5Z&ea9b>}!GgmES=I=_002M;QB#6GdX;|+i2ZnW7g&pY zbeMMXTJiuuLo)uY71m=J%@eAs0H__O-+3%B!PKBy0DwOS01)~JUq4obZUX?`AOPTx zB>(`<0RX7o-nQ#Ldu+hA)=*UfJp6MMca)_+*5JCSz48PAFnsDE2}DU= z@6E!mw|*I>hCy4h7oAP!{ASZt{<{jt(p=efg=#iM{Tax+dvZ0=8_iDn0 zxKD*?IpjD}=n>U8MCqg9ob(`i40BL3vpJiqvD183P3dR$rV{hY_Nw-*mZht8{lj>F zQjlHn){lw<|HEH5H$jK4pSy0V!Yx?L7OrhGp!D#imWPJXLc2oeogja&i=VzvU6)>* zHUA9Gt!55>Mc&nXJmw^OL7{4Leppm~Wl>MK-(0i5Q!eEkV$oZKP%0A>{W_(3|A2#p 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/images/user.png b/client/src/assets/images/user.png new file mode 100644 index 0000000000000000000000000000000000000000..00941399d34f0f2d85d323f61daa67c2c00c494d GIT binary patch literal 2933 zcmV-*3ySoKP)>+Y_1buC zheF*1yf*GR)m>@otnGcw%sqGZe)vfU+q>t^|F^R<_ujcTYIJlo%4jV9WAaR39I1IcZ1yCpS zIY0`~LOAsCXaEv{=cNF_2S1lxgn0!F-rv{6d0@U2VDjK!2d)?(^zpb(O#~{z<1L%h zz`>Ihfp_q;fNbDV1ck2z&vq|HoB+`1Xdnp~jL_hfe8nynpNI$nprH$ZHW~ak_zd`^ zVFiH3O##fnhzxsNhFJ&KlZFxi8uS9|F_R$&2KI2yF@ylnkj21V8EVk<1HThm0M?5q z!wen#x-@Ay#-LU3Q-KpQK-IVm#0Vh(6gr)CbjaY;1?MwNCoKRJI2)*zVQI!~;5m{4 zKw;knT4hL@Q-{ZzlmKWYD~#$v`_Iw@bH~becUG-S%q-brIc!hQ%CTE>@`@1rH~t^~ z41WiI7ypKEd+>ucn}h)DJO4JN0|WtfTGFky((<~-_O71$J^cftp@4sjuYs?HuSraT zYBjD2!VN!$U7T<~AWPy*p3UYD9S&zzZK#1y2EI1F2fi1fQN^iT1YmRXE_461$D3Uj zt`?WMJ^jO41wR&iFMLmYZvqmW;3a^GcjNIpyUo>oPp{y|g71wr5Rf26R{^k#lJlU> z;E|J`7V-*yELaPHq3y-G2*4(4_H+EMA1JSBYNZms53C7m<0t@*x4fXK060v^Myhx< z^3f-GCAX-B?*nV&Ji7@;T&HL$KpM}}+_t|Sw^I$@2iC~>tH7*@061HPO<3U4u(#Ll zsCIk$ywnB28nIT+BZv!B6#(a}u_;U3%(j=$=Do z#TDQ{E@c6dl>%I)Smctph;09_P|%>BeJ>}(((xfktJ z7s0;&KLKzvB#H$t|I_wH(ZlzFZ6PYb%qX@a7P;cyPd?-@iU8Oaq5{l|V%wsTEAFGy z*NTiH0Jepw04t){-gxASJA0|%rcngIwottjh+=#5NC6^K0BaQ6B~uCznF16>v8__2 z0Ffy`B??e41&CMy8c~2ADL}*u(1`*(ASuA*0;d!}b9zyLhw=;%u>#yj0luVI+|iR) z3XLLwHTR!XJA#H#02jsLHvDC;VR{11e>-6#D!>C2powB}vGJxJqX>XY&=VEFjRI6q zowRWAT5*}^;a|S)yiN7^;*#@GRF-=mZ=;7B#TC_}hF@9V(it0Xb`w6nHnOvU6tjZv zQCu5%GVtsb8)v#heEXR*D8MP|`{X294%5Wjv`g+KzVLjis&La`#O6b=`CF3!uv2g`gE;3*M` z#;x4QFBQM@Sb;#{W9HL+)51GMDB4+3-$eJ~&*NPZXX+P7fL8JkhK%LUCb~0)Po2vz z6DWM-oDh$Ojp1QkbGw`1CJ`gcS6NyF6W{}-0KXTd@WgEg$(;rE9XVelSop{vlmbkn zIxoQA5N1tN8<~EArgql=;phJ*x&WLxc7cc+qBP*Wtyu+B1lX9gzgWOezti6eA)5ti zfVZT)u7UgBK&6$ng5CG~*y2xspNrIpH&+Myu$D9>mOOMdV9Tq;UhoxC%|Js zpGXZc?K;kFCGqsE9J`?5w@)Hw&vy)6A®tx`|Cc!K{R~B2jc1N|ng#YPY z01+^g*}>)+v;a(kg*ZQ7)0sYS5YJw62)S4!2N7^)@}f|(3`qbcL4r0*!k9bJT`jgp}PPI5fXrZ%isracGF5;IdBtzN$?_Y z46k-0FnAp9&IZ2EGXt&yC`6b8>;=AxfZ)FdvVb2@IQAq2P>3)S*uhSVMm*K;1fHjK z%t;BL5Mc(81b7S(JhovA@HE9^O;P}b2rkn{6#(u#g!>KLW&ICB?B8ANXZSm~9Q{dlI$z1o fINvtfu|oa}IMcn@FFyTa00000NkvXXu0mjfV5=n> literal 0 HcmV?d00001 diff --git a/client/src/environments/environment.prod.ts b/client/src/environments/environment.prod.ts new file mode 100644 index 0000000..b7b67b4 --- /dev/null +++ b/client/src/environments/environment.prod.ts @@ -0,0 +1,7 @@ +import { NgxLoggerLevel } from 'ngx-logger'; + +export const environment = { + production: true, + logLevel: NgxLoggerLevel.OFF, + serverLogLevel: NgxLoggerLevel.ERROR +}; diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts new file mode 100644 index 0000000..e01b397 --- /dev/null +++ b/client/src/environments/environment.ts @@ -0,0 +1,12 @@ +import { NgxLoggerLevel } from 'ngx-logger'; + +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `.angular-cli.json`. + +export const environment = { + production: false, + logLevel: NgxLoggerLevel.TRACE, + serverLogLevel: NgxLoggerLevel.OFF +}; diff --git a/client/src/index.html b/client/src/index.html new file mode 100644 index 0000000..eb4c49b --- /dev/null +++ b/client/src/index.html @@ -0,0 +1,37 @@ + + + + + + Jucundus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/client/src/main.ts b/client/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/client/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts new file mode 100644 index 0000000..429bb9e --- /dev/null +++ b/client/src/polyfills.ts @@ -0,0 +1,53 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/client/src/styles.css b/client/src/styles.css new file mode 100644 index 0000000..b8ff878 --- /dev/null +++ b/client/src/styles.css @@ -0,0 +1,148 @@ +@import "~@angular/material/prebuilt-themes/indigo-pink.css"; + +body { + margin: 0; + font-family: Roboto, "Helvetica Neue", sans-serif; + font-size: 14px; +} + +.full-width { + width: 100%; +} + +.container { + margin-top: 10px; + margin-bottom: 10px; +} + +.spinner { + left: 49%; + position: fixed !important; + top: 15%; + z-index: 9999; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.login-container { + height: 80vh; +} + +.login-actions { + margin-left: unset !important; +} + +.mat-list-item, +.mat-menu-item { + font-size: 14px !important; +} + +.command-wrapper button { + margin-left: 10px; + margin-bottom: 5px; +} + +.mat-dialog-title { + margin: 0 !important; +} + +.mat-column-actions { + flex: 0 0 60px; +} + +.mat-table .mat-row:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.mat-table td.mat-cell a:hover { + text-decoration: underline; +} + +.mat-table td.mat-cell:first-child, +.mat-table td.mat-footer-cell:first-child, +.mat-table th.mat-header-cell:first-child { + padding-left: 20px !important; +} + +.mat-table td.mat-cell:last-child, +.mat-table td.mat-footer-cell:last-child, +.mat-table th.mat-header-cell:last-child { + padding-right: 10px !important; +} + +.mat-table .mat-cell a { + color: inherit; + text-decoration: none; +} + +.no-records { + padding-top: 20px; + padding-bottom: 20px; +} + +.refresh-button { + margin-top: 8px !important; +} + +.no-records .mat-icon { + width: 130px; + height: 130px; + font-size: 130px; + color: #c7c7c7; +} + +p .mat-icon { + vertical-align: middle; +} + +.mat-slide-toggle.full-width { + margin-top: 15px; + margin-bottom: 15px; +} + +.mat-tooltip { + font-size: 14px; +} + +.fixed-fab { + position: fixed !important; + right: 2%; + bottom: 3%; +} + +/* Highlight on hover */ +.submitted-timesheet-day:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected), +/* Highlight */ +.submitted-timesheet-day>div:not(.mat-calendar-body-selected) { + border-radius: 999px; + background-color: rgba(14, 152, 5, 0.25); +} + +.table-wrapper { + overflow: auto; + height: calc(100vh - 270px); + max-height: 450px; + /* padding: 10px 5px; */ +} + +.animate { + animation-name: show; + animation-duration: 1s; + animation-fill-mode: forwards; +} + +@keyframes show { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} diff --git a/client/src/test.ts b/client/src/test.ts new file mode 100644 index 0000000..51bb020 --- /dev/null +++ b/client/src/test.ts @@ -0,0 +1,14 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); diff --git a/client/tsconfig.app.json b/client/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/client/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/client/tsconfig.json b/client/tsconfig.json new file mode 100644 index 0000000..1407cb6 --- /dev/null +++ b/client/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "es2020", + "lib": [ + "es2020", + "dom" + ], + "useDefineForClassFields": false + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/client/tsconfig.spec.json b/client/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/client/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml new file mode 100644 index 0000000..13dd6e8 --- /dev/null +++ b/docker-compose-dev.yml @@ -0,0 +1,21 @@ +version: '3.1' + +services: + + db: + image: mongo + ports: + - "27017:27017" + volumes: + - ./data:/data/db + + backend: + image: node:20 + working_dir: /backend + volumes: + - ./backend:/backend + ports: + - "3000:3000" + command: ["npm", "run", "dev"] + depends_on: + - db \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a94d62e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +version: '3.1' + +services: + + scrapper: + build: . + restart: always + hostname: auctionagent.saucisse.ninja + ports: + - 3000 + + labels: + - "traefik.enable=true" + - "traefik.http.middlewares.redirecthttps.redirectscheme.scheme=https" + - "traefik.http.middlewares.redirecthttps.redirectscheme.permanent=true" + + - "traefik.http.routers.auctionagent-http.rule=Host(`auctionagent.saucisse.ninja`)" + - "traefik.http.routers.auctionagent-http.middlewares=redirecthttps" + + - "traefik.http.routers.auctionagent.rule=Host(`auctionagent.saucisse.ninja`)" + - "traefik.http.routers.auctionagent.tls=true" + - "traefik.http.routers.auctionagent.tls.certresolver=myresolver" + - "traefik.http.routers.auctionagent.tls.domains[0].main=auctionagent.saucisse.ninja" + - "traefik.http.services.scrapper.loadbalancer.server.port=3000" \ No newline at end of file