From f99e259bd55a70f875ccbf62bd77de204a12da2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 16 Nov 2022 12:47:41 +0100 Subject: [PATCH] Tons of fixes Refonte SYNC 1 - Authentification System OK --- app/Auth/CrmUserProvider.php | 127 + app/Enums/UserRole.php | 38 + app/Enums/WeightUnit.php | 104 + app/Events/LogVerifiedUser.php | 24 + app/Events/PasswordHasReset.php | 24 + app/Exceptions/Handler.php | 37 - app/Http/Controllers/Auth/LoginController.php | 70 - .../Controllers/Auth/RegisterController.php | 56 - .../Auth/ResetPasswordController.php | 23 - .../Controllers/Bo/Auth/LoginController.php | 51 + .../Bo/Auth/ResetPasswordController.php | 31 + .../Controllers/Bo/DownloadController.php | 2 +- app/Http/Controllers/Bo/OrderController.php | 4 +- app/Http/Controllers/Bo/ProductController.php | 11 +- app/Http/Controllers/CustomerController.php | 628 ----- .../Fo/Auth/ConfirmPasswordController.php | 35 + .../Fo/Auth/ForgotPasswordController.php | 82 + .../Controllers/Fo/Auth/LoginController.php | 96 + .../Fo/Auth/RegisterController.php | 174 ++ .../Fo/Auth/ResetPasswordController.php | 121 + .../Fo/Auth/VerificationController.php | 47 + .../Controllers/{ => Fo}/BasketController.php | 23 +- .../Controllers/Fo/CustomerController.php | 279 +++ .../{ => Fo}/ProductController.php | 20 +- .../{ => Fo}/QuickOrderController.php | 3 +- ...ontroller.php => StaticPageController.php} | 4 +- app/Http/Kernel.php | 2 - app/Http/Middleware/Authenticate.php | 21 +- app/Http/Middleware/IsAdmin.php | 26 - app/Http/Middleware/TrustProxies.php | 5 +- app/Http/Middleware/VerifyCsrfToken.php | 3 +- .../DeleteTimeslotExceptionsRequest.php | 2 +- .../SaveTimeslotExceptionsRequest.php | 2 +- app/Http/Requests/Bo/ChangeOrderRequest.php | 2 +- .../Bo/Discounts/StoreDiscountRequest.php | 2 +- .../Bo/Products/CreateProductRequest.php | 2 +- .../Bo/Products/StoreProductRequest.php | 2 + .../Requests/Bo/Ranges/FilterRangeRequest.php | 2 +- .../Requests/Bo/Ranges/StoreRangeRequest.php | 2 +- .../Requests/Bo/Shops/StoreShopRequest.php | 2 +- .../Bo/Sliders/StoreSliderRequest.php | 2 +- .../Requests/Bo/Slides/StoreSlideRequest.php | 2 +- .../StaticPages/UpdateStaticPageRequest.php | 2 +- app/Http/Requests/Bo/Tags/StoreTagRequest.php | 2 +- .../Bo/Timeslots/UpdateTimeslotRequest.php | 2 +- .../Requests/Bo/UpdateMiniCrudRequest.php | 2 +- .../Requests/Bo/XmlIncos/SearchXmlInco.php | 2 +- .../Requests/Fo/CustomerRegisterRequest.php | 82 - .../Fo/Customers/ConfirmDeleteRequest.php | 42 + .../Fo/Customers/CreateAccountRequest.php | 109 + .../Fo/Customers/UpdateEmailRequest.php | 48 + .../Fo/Customers/UpdateInfosRequest.php | 31 + .../Fo/Customers/UpdatePasswordRequest.php | 54 + app/Http/Requests/Fo/LoginRequest.php | 35 - app/Http/Requests/Fo/UpdateInfosRequest.php | 58 - app/Http/Resources/CustomerCrmResource.php | 8 +- app/Jobs/XmlIncoReader.php | 1 + app/Lib/Helpers/ToolboxHelper.php | 46 + app/Mail/PasswordResetMail.php | 25 +- app/Mail/RegisterConfirmMail.php | 31 +- app/Models/Customer.php | 223 ++ app/Models/Customers.php | 116 - app/Models/Order.php | 2 +- app/Models/Product.php | 128 +- app/Models/Slider.php | 4 +- app/Models/User.php | 12 + app/Notifications/Customer/ResetPassword.php | 23 + app/Notifications/Customer/VerifyEmail.php | 27 + app/Policies/ProductPolicy.php | 4 +- app/Providers/AppServiceProvider.php | 13 +- app/Providers/AuthServiceProvider.php | 5 + app/Providers/EventServiceProvider.php | 10 + app/Providers/RouteServiceProvider.php | 19 +- app/Rules/CrmCustomerPassword.php | 64 + bootstrap/cache/.gitignore | 0 composer.json | 3 +- composer.lock | 75 +- config/auth.php | 25 +- config/ldcweb-cookies.php | 10 + ...56_migrate_settings_to_general_configs.php | 33 +- .../2022_10_10_154513_rework_products.php | 7 +- ...15_101227_add_date_fileds_on_customers.php | 34 + ..._create_customer_password_resets_table.php | 32 + package-lock.json | 2107 ++++++++--------- package.json | 2 +- resources/sass/_bootstrapOverload.scss | 4 + resources/sass/_dashboard.scss | 98 +- resources/sass/_variables.scss | 52 +- resources/sass/app.scss | 5 +- .../ts/components/CkEditorBoComponent.vue | 19 +- resources/ts/fontawesome.ts | 2 + resources/views/back/auth/login.blade.php | 73 + .../back/auth/passwords/confirm.blade.php | 49 + .../views/back/auth/passwords/email.blade.php | 47 + .../views/back/auth/passwords/reset.blade.php | 65 + resources/views/back/layout/header.blade.php | 68 + .../views/back/layout/sidemenu.blade.php | 21 +- .../modules/minicrud-form-inputs.blade.php | 2 +- .../products/form-xml-attribute.blade.php | 2 +- resources/views/back/products/form.blade.php | 8 +- .../emails/order-confirm-admin.blade.php | 4 +- resources/views/layouts/bo-layout.blade.php | 35 +- routes/web-bo.php | 300 +-- routes/web-fo.php | 83 + routes/web-shop.php | 9 +- routes/web.php | 112 - storage/.gitignore | 0 storage/app/.gitignore | 0 storage/app/public/.gitignore | 0 storage/framework/.gitignore | 0 storage/framework/cache/.gitignore | 0 storage/framework/cache/data/.gitignore | 0 storage/framework/sessions/.gitignore | 0 storage/framework/testing/.gitignore | 0 storage/framework/views/.gitignore | 0 storage/inco/.gitkeep | 0 storage/inco/archives/.gitkeep | 0 storage/inco/images/.gitkeep | 0 storage/inco/invalid/.gitkeep | 0 storage/logs/.gitignore | 0 storage/orders/.gitkeep | 0 storage/salaries/.gitkeep | 0 122 files changed, 3902 insertions(+), 2907 deletions(-) create mode 100644 app/Auth/CrmUserProvider.php create mode 100644 app/Enums/UserRole.php create mode 100644 app/Enums/WeightUnit.php create mode 100644 app/Events/LogVerifiedUser.php create mode 100644 app/Events/PasswordHasReset.php delete mode 100644 app/Http/Controllers/Auth/LoginController.php delete mode 100644 app/Http/Controllers/Auth/RegisterController.php delete mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/Bo/Auth/LoginController.php create mode 100644 app/Http/Controllers/Bo/Auth/ResetPasswordController.php delete mode 100644 app/Http/Controllers/CustomerController.php create mode 100644 app/Http/Controllers/Fo/Auth/ConfirmPasswordController.php create mode 100644 app/Http/Controllers/Fo/Auth/ForgotPasswordController.php create mode 100644 app/Http/Controllers/Fo/Auth/LoginController.php create mode 100644 app/Http/Controllers/Fo/Auth/RegisterController.php create mode 100644 app/Http/Controllers/Fo/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/Fo/Auth/VerificationController.php rename app/Http/Controllers/{ => Fo}/BasketController.php (90%) create mode 100644 app/Http/Controllers/Fo/CustomerController.php rename app/Http/Controllers/{ => Fo}/ProductController.php (82%) rename app/Http/Controllers/{ => Fo}/QuickOrderController.php (91%) rename app/Http/Controllers/Fo/{StaticPagesController.php => StaticPageController.php} (96%) delete mode 100644 app/Http/Middleware/IsAdmin.php delete mode 100644 app/Http/Requests/Fo/CustomerRegisterRequest.php create mode 100644 app/Http/Requests/Fo/Customers/ConfirmDeleteRequest.php create mode 100644 app/Http/Requests/Fo/Customers/CreateAccountRequest.php create mode 100644 app/Http/Requests/Fo/Customers/UpdateEmailRequest.php create mode 100644 app/Http/Requests/Fo/Customers/UpdateInfosRequest.php create mode 100644 app/Http/Requests/Fo/Customers/UpdatePasswordRequest.php delete mode 100644 app/Http/Requests/Fo/LoginRequest.php delete mode 100644 app/Http/Requests/Fo/UpdateInfosRequest.php create mode 100644 app/Models/Customer.php delete mode 100644 app/Models/Customers.php create mode 100644 app/Notifications/Customer/ResetPassword.php create mode 100644 app/Notifications/Customer/VerifyEmail.php create mode 100644 app/Rules/CrmCustomerPassword.php mode change 100644 => 100755 bootstrap/cache/.gitignore create mode 100644 config/ldcweb-cookies.php create mode 100644 database/migrations/2022_11_15_101227_add_date_fileds_on_customers.php create mode 100644 database/migrations/2022_11_15_600000_create_customer_password_resets_table.php create mode 100644 resources/sass/_bootstrapOverload.scss create mode 100644 resources/views/back/auth/login.blade.php create mode 100644 resources/views/back/auth/passwords/confirm.blade.php create mode 100644 resources/views/back/auth/passwords/email.blade.php create mode 100644 resources/views/back/auth/passwords/reset.blade.php create mode 100644 resources/views/back/layout/header.blade.php create mode 100644 routes/web-fo.php delete mode 100644 routes/web.php mode change 100644 => 100755 storage/.gitignore mode change 100644 => 100755 storage/app/.gitignore mode change 100644 => 100755 storage/app/public/.gitignore mode change 100644 => 100755 storage/framework/.gitignore mode change 100644 => 100755 storage/framework/cache/.gitignore mode change 100644 => 100755 storage/framework/cache/data/.gitignore mode change 100644 => 100755 storage/framework/sessions/.gitignore mode change 100644 => 100755 storage/framework/testing/.gitignore mode change 100644 => 100755 storage/framework/views/.gitignore mode change 100644 => 100755 storage/inco/.gitkeep mode change 100644 => 100755 storage/inco/archives/.gitkeep mode change 100644 => 100755 storage/inco/images/.gitkeep mode change 100644 => 100755 storage/inco/invalid/.gitkeep mode change 100644 => 100755 storage/logs/.gitignore mode change 100644 => 100755 storage/orders/.gitkeep mode change 100644 => 100755 storage/salaries/.gitkeep diff --git a/app/Auth/CrmUserProvider.php b/app/Auth/CrmUserProvider.php new file mode 100644 index 0000000..2be2ab0 --- /dev/null +++ b/app/Auth/CrmUserProvider.php @@ -0,0 +1,127 @@ +getCustomer($credentials['email']); + + if (!$crmCustomer) { + // * Customer is not found on CRM. + return null; + } + $model = $this->createLocalCustomer($crmCustomer); + } + + return $model; + } catch (ApiErrorException $e) { + // * Customer is not found. + if ($e->getApiError()->equals(ApiError::modelNotFound())) { + return null; + } + report($e); + Log::error('Unhandled response ', $e->getApiError()->label); + } catch (CrmException | \Exception $e) { + report($e); + // Une erreur critique est survenue avec la CRM. + return null; + } //end try + Log::error(__CLASS__ . '::retrieveByCredentials reached end of possibilities.'); + return null; + } + + /** + * Validate a user against the given credentials. + * + * @param UserContract $model + * @param array $credentials + * @return boolean + * @throws \RuntimeException If model provided is not a Customer or connection to server fails. + * @throws \LDC\LDCCRM\Exceptions\CrmException On CRM call error. + * @throws \Exception On CRM call error. + */ + public function validateCredentials(UserContract $model, array $credentials) + { + // FIXME: handle customerNotActivated + /** @var \Illuminate\Database\Eloquent\Model $model */ + if (\get_class($model) !== $this->usedModel) { + throw new \RuntimeException('Cannot authenticate any thing else than ' . $this->usedModel); + } + + try { + /** @var \LDC\LDCCRM\CrmApiV2 */ + $crm = app('crmAPI'); + + // * Ne devrait pas survenir, $crm->login throws ApiError::authFailed() + return $crm->login($credentials['email'], $credentials['password']); + } catch (ApiErrorException $e) { + if ($e->getApiError()->equals(ApiError::authFailed())) { + return false; + } + } catch (CrmException | \Exception $e) { + report($e); + if (config('app.debug')) { + throw $e; + } + return false; + } //end try + + Log::error(__CLASS__ . '::validateCredentials reached end of possibilities.'); + return null; + } + + /** + * Create a local customer + * + * @param \LDC\LDCCRM\Models\Customer $crmCustomer + * @return \Illuminate\Database\Eloquent\Model + * @throws \Throwable If saving to DB failed. + */ + private function createLocalCustomer(\LDC\LDCCRM\Models\Customer $crmCustomer): Model + { + /** @var \Illuminate\Database\Eloquent\Model $model */ + $model = $this->usedModel::firstOrNew([ + 'email' => $crmCustomer->email + ]); + $model->hashcode = $crmCustomer->hashcode; + $model->saveOrFail(); + + return $model; + } +} diff --git a/app/Enums/UserRole.php b/app/Enums/UserRole.php new file mode 100644 index 0000000..47505ee --- /dev/null +++ b/app/Enums/UserRole.php @@ -0,0 +1,38 @@ + 1, + 'user' => 0, + ]; + } + + /** + * Enum labels + * + * @return array + */ + protected static function labels(): array + { + return [ + 'admin' => trans('Administrateur'), + 'user' => trans('Utilisateur'), + ]; + } +} diff --git a/app/Enums/WeightUnit.php b/app/Enums/WeightUnit.php new file mode 100644 index 0000000..0868318 --- /dev/null +++ b/app/Enums/WeightUnit.php @@ -0,0 +1,104 @@ + 'G', + 'kg' => 'KG', + 'ton' => 'T', + ]; + } + + /** + * Enum labels + * + * @return array + */ + protected static function labels(): array + { + return [ + 'g' => __('g'), + 'kg' => __('kg'), + 'ton' => __('t'), + ]; + } + + /** + * Enum conversions a partir de gramme + * + * @return array + */ + protected static function conversions(): array + { + return [ + 'g' => 1, + 'kg' => 1000, + 'ton' => 1000000, + ]; + } + + /** + * @param string $attribute + * @return integer|string + */ + public function __get(string $attribute) + { + if ($attribute === 'conversion') { + return $this->conversions()[$this->getDefinition()] ?? null; + } + return parent::__get($attribute); + } + + /** + * Format weight into a displayable unit. + * @param integer $weightG The weight in grams. + * @param \App\Enums\WeightUnit|null $forceUnit To force specific unit display. + * @return string + */ + public static function getDisplayableWeight(int $weightG, self $forceUnit = null): string + { + if ($forceUnit) { + number_format(round($weightG / $forceUnit->conversion, 2), 2, ',', '') . $forceUnit->label; + } + $displayable = self::convertWeightToAdequatUnit($weightG); + return \number_format($displayable->value, 2, ',', '') . ' ' . $displayable->enum->label; + } + + /** + * Convert value to the adequat unit + * @param integer $weightG The weight in grams. + * @return object<'enum'|'value',self> + */ + private function convertWeightToAdequatUnit(int $weightG): object + { + foreach (self::conversions() as $key => $conversionRate) { + $convertedTest = round($weightG / $conversionRate, 2); + if ($convertedTest > 0.001 and $convertedTest <= 1000) { + return (object)[ + 'enum' => self::make($key), + 'value' => $convertedTest + ]; + } + } + return (object)[ + 'enum' => \collect(self::toArray())->last(), + 'value' => $weightG + ]; + } +} diff --git a/app/Events/LogVerifiedUser.php b/app/Events/LogVerifiedUser.php new file mode 100644 index 0000000..ee564aa --- /dev/null +++ b/app/Events/LogVerifiedUser.php @@ -0,0 +1,24 @@ +user; + Auth::guard('frontend')->login($customer); + Session::flash('success', trans('Votre compte à bien été validé, vous êtes à présent connecté.')); + } +} diff --git a/app/Events/PasswordHasReset.php b/app/Events/PasswordHasReset.php new file mode 100644 index 0000000..5881835 --- /dev/null +++ b/app/Events/PasswordHasReset.php @@ -0,0 +1,24 @@ +user; + Auth::guard('frontend')->login($customer); + Session::flash('success', trans('Votre mot de passe à bien été réinitialisé, vous êtes à présent connecté.')); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 5827c1e..ed2469d 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,7 +3,6 @@ namespace App\Exceptions; use Kwaadpepper\ExceptionHandler\Exceptions\ExceptionHandler; -use Illuminate\Auth\AuthenticationException; class Handler extends ExceptionHandler { @@ -23,40 +22,4 @@ class Handler extends ExceptionHandler 'password', 'password_confirmation', ]; - - /** - * Register the exception handling callbacks for the application. - * - * @return void - */ - public function register() - { - } - - /** - * Handle unauthenticated as exception - * - * @param mixed $request - * @param AuthenticationException $exception - * @return \Illuminate\Http\RedirectResponse - */ - protected function unauthenticated($request, AuthenticationException $exception) - { - if ($request->expectsJson()) { - return response()->json(['error' => 'Unauthenticated.'], 401); - } - $guard = $exception->guards()[0]; - switch ($guard) { - case 'customer': - $login = 'auth.connexion'; - break; - default: - $login = 'auth.login'; - break; - } - // Cf. issue : - // Https://stackoverflow.com/questions/52417438/laravel-unauthenticated-redirect-issue-with-multiple-authentication. - // Session::forget('url.intented'); . - return redirect()->guest(route($login)); - } } diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php deleted file mode 100644 index 343e7e9..0000000 --- a/app/Http/Controllers/Auth/LoginController.php +++ /dev/null @@ -1,70 +0,0 @@ -validate([ - 'email' => 'required', - 'password' => 'required' - ]); - - $credentials = $request->only(['email', 'password']); - - if (Auth::attempt($credentials)) { - $user = Auth::user(); - if ($user->role === 1 || $user->role === 2) { - return redirect()->route('bo.dashboard'); - } else { - if ($user->email_verified_at === null) { - Auth::logout(); - return view('auth.login')->withErrors('Compte non activé.'); - } - return redirect()->intended('/'); - } - } - return view('auth.login')->withErrors('Informations incorrectes.'); - } - - /** - * logout - * - * @param Request $request - * @return \Illuminate\Contracts\View\View - * - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function logout(Request $request) - { - // @phpcs:enable - Auth::logout(); - return redirect()->route('home'); - } -} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php deleted file mode 100644 index 91aed33..0000000 --- a/app/Http/Controllers/Auth/RegisterController.php +++ /dev/null @@ -1,56 +0,0 @@ -validate([ - 'lastname' => 'required|string|max:255', - 'firstname' => 'required|string|max:255', - 'date_of_birth' => 'required|date|before_or_equal:' . Carbon::now()->subYears(18)->toDateString(), - 'email' => 'required|string|email|max:255|unique:users|confirmed', - 'password' => 'required|string|min:8', - ]); - - User::create([ - 'firstname' => $request->firstname, - 'lastname' => $request->lastname, - 'date_of_birth' => $request->date_of_birth, - 'email' => $request->email, - 'password' => Hash::make($request->password), - 'role' => 3 - ]); - - // Envoi mail activation. - return redirect()->route('auth.register')->with('success', 'Mail envoyé pour confirmation'); - } -} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php deleted file mode 100644 index c5f387b..0000000 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ /dev/null @@ -1,23 +0,0 @@ -middleware('guest')->except('logout'); + } + + /** + * Get the guard to be used during authentication. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard() + { + return Auth::guard('backend'); + } + + /** + * Show the application's login form. + * + * @return \Illuminate\View\View + */ + public function showLoginForm() + { + return view('back.auth.login'); + } + + /** + * Where to redirect users after login. + * @return string + */ + protected function redirectTo(): string + { + return \route('bo.dashboard'); + } +} diff --git a/app/Http/Controllers/Bo/Auth/ResetPasswordController.php b/app/Http/Controllers/Bo/Auth/ResetPasswordController.php new file mode 100644 index 0000000..64d86df --- /dev/null +++ b/app/Http/Controllers/Bo/Auth/ResetPasswordController.php @@ -0,0 +1,31 @@ +check()) { + if (!\auth('backend')->check()) { abort(404); } /** @var \Illuminate\Filesystem\FilesystemAdapter */ diff --git a/app/Http/Controllers/Bo/OrderController.php b/app/Http/Controllers/Bo/OrderController.php index 9bb0020..024cf04 100644 --- a/app/Http/Controllers/Bo/OrderController.php +++ b/app/Http/Controllers/Bo/OrderController.php @@ -16,7 +16,7 @@ use App\Mail\OrderStatusMail; use App\Mail\OrderConfirmMail; use App\Mail\OrderConfirmAdminMail; use App\Jobs\CsvOrderWrite; -use App\Models\Customers; +use App\Models\Customer; use App\Models\Setting; use Carbon\Carbon; use Carbon\CarbonImmutable; @@ -583,7 +583,7 @@ class OrderController extends Controller */ public function getCustomerInfo(int $id, string $mode = null) { - $cust = Customers::findOrFail($id); + $cust = Customer::findOrFail($id); if (!is_null($mode)) { if ($mode == "tippy") { return view('back.customer.tippy-card', compact('cust')); diff --git a/app/Http/Controllers/Bo/ProductController.php b/app/Http/Controllers/Bo/ProductController.php index a880a0c..9778dbe 100644 --- a/app/Http/Controllers/Bo/ProductController.php +++ b/app/Http/Controllers/Bo/ProductController.php @@ -44,18 +44,9 @@ class ProductController extends Controller $this->searchQuery( $products, $request->search, - // * Search in ranges - function ($q) use ($request) { - $q->orWhereHas('ranges', function ($q) use ($request) { - $q->whereRaw( - 'UPPER(CONCAT(`ranges`.`name`)) LIKE UPPER(?)', - ['%' . filter_var($request->range, FILTER_SANITIZE_STRING) . '%'] - ); - }); - }, + null, 'name', 'description', - 'gamme', 'reference' ); } //end if diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php deleted file mode 100644 index 5cf0d68..0000000 --- a/app/Http/Controllers/CustomerController.php +++ /dev/null @@ -1,628 +0,0 @@ -check()) { - return redirect()->route('home'); - } - - return view('auth.register'); - } - - /** - * Enregistre le customer dans la base de données - * et CRM - * - * @param \App\Http\Requests\Fo\CustomerRegisterRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function register(CustomerRegisterRequest $request) - { - try { - return DB::transaction(function () use ($request) { - $crmCustomer = new CrmCustomer(\array_intersect_key( - $request->validated(), - [ - 'firstname' => '', - 'lastname' => '', - 'birth_date' => '', - 'address' => '', - 'postcode' => '', - 'country' => '', - 'city' => '', - 'phone' => '', - 'email' => '', - 'password' => '', - 'opt_in' => '', - ] - )); - - $crmCustomer->city = $request->town; - $crmCustomer->postcode = $request->postal_code; - $crmCustomer->opt_in = $request->optin ? true : false; - - // * Country Is forced to france - $crmCustomer->country = Country::france(); - $crmCustomer->save(); - - // * Enrregistrement du Hashcode - /** @var \App\Models\Customers $customer */ - $customer = new Customers($request->all()); - $customer->hashcode = $crmCustomer->hashcode; - $customer->saveOrFail(); - - Mail::to($request->email)->send(new RegisterConfirmMail($customer, $request->firstname)); - - return view('auth.register-success', ['mail' => $request->email]); - }); - } catch (ApiErrorException $e) { - if ($e->getApiError()->equals(ApiError::customerExists())) { - return back()->withInput()->withErrors('Un compte est déjà associé à cette adresse email.'); - } - if ($e->getApiError()->equals(ApiError::validationFailed())) { - return back()->withInput()->withErrors($e->getMessage()); - } - report($e); - return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.'); - } catch (ModelNotFoundException $e) { - return back()->withErrors("Salarié $request->matricule, $request->code introuvable."); - } catch (ValidationException $e) { - return back()->withErrors($e->getMessage()); - } catch (\Exception | \TypeError | CrmException $e) { - report($e); - // * Une erreur critique est survenue avec la CRM - return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.'); - } //end try - return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.'); - } - - /** - * Retourne la page de connexion - * - * @param Request $request - * @return \Illuminate\Http\Response - */ - public function authenticateForm(Request $request) - { - if (Auth::guard('customer')->check()) { - return redirect()->route('account.dashboard'); - } - if ($request->get('url')) { - Session::put('url.intended', $request->get('url')); - Session::save(); - } - return view('auth.login'); - } - - /** - * Gère l'authentification des customers - * - * @param \App\Http\Requests\Fo\LoginRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function authenticate(LoginRequest $request) - { - /** @var Customers|null */ - $customer = Customers::where('email', $request->email)->first(); - - try { - /** @var \LDC\LDCCRM\CrmApiV2 */ - $crm = app('crmAPI'); - - // * Ne devrait pas survenir, $crm->login throws ApiError::authFailed() - if (!$crm->login($request->email, $request->password)) { - // * mauvais identifiants - return back()->withErrors('Email ou mot de passe incorrect.'); - } - - // Dans tout les cas : récupérer le crm user. - $crmCustomer = $crm->getCustomer($request->email); - - // Si pas de compte local mais existe en CRM. - if (!$customer) { - $customer = $this->createLocalCustomer($crmCustomer); - } - - return $this->processLogin($customer, $request->remember); - } catch (ApiErrorException $e) { - return $this->handleLoginApiErrorException($e, $request); - } catch (CrmException | \Exception $e) { - report($e); - // Une erreur critique est survenue avec la CRM. - return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.'); - } //end try - } - - /** - * Active le compte d'un customer - * - * @param mixed $hashcode - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - */ - public function activate($hashcode) - { - $hashcode = filter_var($hashcode, FILTER_SANITIZE_STRING); - if (!($customer = Customers::select('hashcode')->where('hashcode', $hashcode)->first())) { - return view('auth.activate')->with('message', 'Ce lien d\'activation n\'est pas valide.'); - } - try { - /** @var \LDC\LDCCRM\Models\Customer $crmCustomer */ - $crmCustomer = $customer->apiData; - if ($crmCustomer->activate()) { - return view('auth.activate') - ->with('message', 'Votre compte a bien été activé, vous pouvez désormais vous connecter.'); - } - } catch (ApiErrorException $e) { - if ($e->getApiError()->equals(ApiError::customerAlreadyActive())) { - // phpcs:disable Generic.Files.LineLength.TooLong - return view('auth.activate') - ->with('message', 'Votre compte est déjà activé, vous pouvez dès à présent vous connecter avec celui-ci.'); - } - report($e); - // Une erreur critique est survenue avec la CRM. - return view('auth.activate') - ->with('message', 'Une erreur est survenue, merci de réessayer ultérieurement.'); - } catch (CrmException $e) { - report($e); - // Une erreur critique est survenue avec la CRM. - return view('auth.activate') - ->with('message', 'Une erreur est survenue, merci de réessayer ultérieurement.'); - } //end try - return view('auth.activate')->with('message', 'Ce lien d\'activation n\'est pas valide.'); - } - - /** - * deconnexion customer - * - * @return \Illuminate\Http\RedirectResponse - */ - public function logout() - { - if (Auth::guard('customer')->check()) { - Auth::guard('customer')->logout(); - return redirect()->route('home'); - } - } - - /** - * page d'accès à la procédure mdp oublié - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Contracts\View\View - * - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function forgotPasswordForm(Request $request) - { - // @phpcs:enable - return view('auth.passwords.forgot'); - } - - /** - * initialisation de la procédure de mdp oublié - * - * @param Request $request - * @return \Illuminate\Http\RedirectResponse - */ - public function passwordReset(Request $request) - { - $request->validate([ - 'email' => 'required|email:rfc|max:255', - ]); - - $email = filter_var($request->email, FILTER_SANITIZE_EMAIL); - - $customerExist = Customers::where('email', $email)->count() === 0 ? false : true; - - if ($customerExist) { - // Suppression des anciens tokens. - PasswordReset::where('email', $email)->delete(); - - $token = Str::random(80); - - $passwordReset = new PasswordReset(); - $passwordReset->email = $email; - $passwordReset->token = $token; - $passwordReset->created_at = now(); - $passwordReset->save(); - - Mail::to($email)->send(new PasswordResetMail($token)); - return back()->with( - 'success', - __("La procédure pour changer votre mot de passe a été envoyé sur votre email.") - ); - } else { - return back()->withErrors(__("Cette adresse email n'est pas enregistrée dans nos services.")); - } - } - - /** - * Print the view used to change the password of a user when he required it - * @param string $token Token used to identificate the user to change the password. - * @return \Illuminate\Contracts\View\View The view to print - */ - public function viewChangePassword(string $token) - { - $pwdReset = PasswordReset::where('token', $token)->first(); - if (!$pwdReset) { - abort(419); - } - $customer = Customers::where('email', $pwdReset->email)->first(); - if (!$customer) { - abort(404); - } - - return view('auth.passwords.reset', compact('customer'))->with('token', $token); - } - - /** - * changement de mot de passe (depuis la procédure de mdp oublié) - * - * @param Request $request - * @param mixed $token - * @return \Illuminate\Http\RedirectResponse|\Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - */ - public function changePassword(Request $request, $token) - { - $request->validate([ - 'password' => 'required|confirmed|min:8|max:255' - ]); - - /** @var \App\Models\PasswordReset $passwordReset */ - $passwordReset = PasswordReset::where('token', $token)->first(); - /** @var \App\Models\Customers $customer */ - $customer = Customers::where('email', optional($passwordReset)->email)->firstOrFail(); - - /** @var \LDC\LDCCRM\CrmApiV2 */ - $crm = app('crmAPI'); - - try { - if ($crm->login($customer->email, $request->password)) { - return back()->withErrors('Vous ne pouvez pas utiliser un de vos anciens mot de passe.'); - } - // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch - } catch (ApiErrorException $e) { - // * continue - } - - try { - if (!($crmCustomer = $crm->getCustomer($customer->hashcode))) { - return back() - ->withErrors('Changement impossible, compte inexistant.'); - } - $crmCustomer->password = $request->password; - $crmCustomer->save(); - } catch (\TypeError | CrmException | ApiErrorException $e) { - report($e); - // Une erreur critique est survenue avec la CRM. - return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.'); - } catch (ValidationException $e) { - return back()->withErrors(sprintf('Nouveau mot de passe : %s', $e->getMessage())); - } - - $passwordReset->deleteOrFail(); - - return view('auth.passwords.reset-ok', compact('customer')); - } - - /** - * profil client (mon compte) - * - * @param Request $request - * @return \Illuminate\Contracts\View\View - * - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function dashboard(Request $request) - { - // @phpcs:enable - // Show Profile. - /** @var \App\Models\Customers|null $customer */ - $customer = Auth::guard('customer')->user(); - if (!$customer) { - abort(404); - } - - /** @var \LDC\LDCCRM\Models\Customer $crmCustomer */ - $crmCustomer = $customer->apiData; - - /** @var object $crmInfos */ - $crmInfos = \json_decode(\json_encode($crmCustomer)); - $birthDate = explode('-', $crmCustomer->birth_date); - - return view('customer.dashboard', compact('customer', 'crmInfos', 'birthDate')); - } - - - /** - * Send a request to the CRM to change the given customer's informations - * @param \App\Http\Requests\Fo\UpdateInfosRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function updateInfos(UpdateInfosRequest $request) - { - if (($result = $this->updateUserInfo($request)) === true) { - return back()->with('success', trans( - 'Vos informations ont bien été enregistrées.' - )); - } - return back()->withInput()->withErrors( - $result !== false ? $result : trans( - 'Une erreur est survenue, merci de réessayer ultérieurement.' - ) - ); - } - - /** - * changement de mot de passe depuis le profil - * - * @param Request $request - * @return \Illuminate\Http\RedirectResponse - */ - public function changePasswordWhenAuthenticated(Request $request) - { - $request->validate([ - 'password' => 'required|min:8|confirmed|max:255' - ]); - - $crm = app('crmApi'); - $customer = $crm->changePwdCustomer(Auth::guard('customer')->user()->crm_id, $request->password); - - if ($customer->status === "OK") { - return back()->with('success', __("Modifications enregistrés !")); - } else { - return back()->withErrors(__("Une erreur est survenue, merci de réessayer ultérieurement.")); - } - } - - /** - * affichage des commandes du customer connecté - * - * @param Request $request - * @return \Illuminate\Contracts\View\View - * - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function myOrders(Request $request) - { - // @phpcs:enable - $orders = Order::where('customer_id', Auth::guard('customer')->user()->id)->orderBy('date', 'DESC')->get(); - return view('customer.my-orders', compact('orders')); - } - - /** - * Show detail commande - * - * @param string $reference - * @return \Illuminate\Contracts\View\View - */ - public function orderDetail(string $reference) - { - $order = Order::where('reference', '=', $reference) - ->where('customer_id', Auth::guard('customer')->user()->id) - ->firstOrFail(); - - if ($order->status_id == 1) { - $shop = null; - } else { - $shop = Shop::find($order->timeslot->shop->id); - } - - return view('customer.order-detail', compact('order', 'shop')); - } - - /** - * delete customers - * - * @param integer $id - * @return void - */ - public function delete(int $id) - { - dump('deleting' . $id); - die('Not implemented yet'); - } - - /** - * Create a local customer - * - * @param CrmCustomer $crmCustomer - * @return \app\Models\Customers - * @throws \Throwable If saving to DB failed. - */ - private function createLocalCustomer(CrmCustomer $crmCustomer): Customers - { - /** @var \App\Models\Customers $customer */ - $customer = Customers::firstOrNew([ - 'email' => $crmCustomer->email - ]); - $customer->hashcode = $crmCustomer->hashcode; - $customer->saveOrFail(); - - return $customer; - } - - /** - * Handle Api error exception - * - * @param ApiErrorException $e - * @param LoginRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - private function handleLoginApiErrorException(ApiErrorException $e, LoginRequest $request) - { - /** @var Customers|null */ - $customer = Customers::where('email', $request->email)->first(); - /** @var \LDC\LDCCRM\CrmApiV2 */ - $crm = app('crmAPI'); - - switch ($e->getApiError()) { - case ApiError::authFailed(): - // * mauvais identifiants - return back()->withErrors('Email ou mot de passe incorrect.'); - case ApiError::customerNotActivated(): - // * le compte n'est pas activé - if (!$customer) { - try { - if (!($crmCustomer = $crm->getCustomer($request->email))) { - Log::critical(sprintf('Customer %s coulnd not be retrieved from crm', $request->email)); - return back()->withErrors( - trans('Une erreur est survenue, merci de réessayer ultérieurement.') - ); - } - $customer = $this->createLocalCustomer($crmCustomer); - } catch (CrmException | ApiErrorException $e) { - report($e); - // Une erreur critique est survenue avec la CRM. - return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.'); - } - } - Mail::to($request->email)->send(new RegisterConfirmMail($customer, null)); - return back() - ->withErrors( - trans('Votre compte n\'est pas activé, vérifiez dans vos emails pour y trouver - le mail de confirmation. Un lien d\'activation vous a été renvoyé.') - ); - default: - report($e); - // * une erreur non gérée - return back()->withErrors('Une erreur est survenue, merci de réessayer ultérieurement.'); - } //end switch - } - - /** - * Login a customer - * - * @param Customers $customer - * @param boolean $remember - * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse - */ - private function processLogin(Customers $customer, bool $remember) - { - /** @var \Illuminate\Auth\SessionGuard */ - $guard = auth('customer'); - $guard->login($customer, $remember); - $url = Session::pull('url.intended'); - Session::forget('url.intended'); - Session::save(); - return !empty($url) ? redirect()->to($url) : redirect()->route('account.dashboard'); - } - - /** - * Updates user info - * - * @param \App\Http\Requests\Fo\UpdateInfosRequest $request - * @return boolean|string return strictly true if success, - * false il failed, could be a string with message error if failed - */ - private function updateUserInfo(UpdateInfosRequest $request) - { - /** @var \App\Models\Customers */ - $customer = auth('customer')->user(); - if (!$customer) { - return \redirect()->back(); - } - - /** @var \LDC\LDCCRM\Models\Customer */ - $crmCustomer = $customer->apiData; - - $data = [ - 'firstname' => $request->firstname, - 'lastname' => $request->lastname, - 'birth_date' => $request->year . '-' . $request->month . '-' . $request->day, - 'address' => $request->address, - 'postcode' => $request->postcode, - 'city' => $request->city, - 'phone' => \strval($request->phone), - 'opt_in' => \boolval($request->optin), - ]; - - // * remove phone if empty - if (isset($data['phone']) and !strlen($data['phone'])) { - unset($data['phone']); - } - - try { - $crmCustomer->fill($data); - $crmCustomer->save(); - } catch (ValidationException $e) { - return $e->getMessage(); - } catch (ApiErrorException $e) { - if ($e->getApiError()->equals(ApiError::validationFailed())) { - return $e->getMessage(); - } - report($e); - return false; - } catch (CrmException | \TypeError $e) { - report($e); - return false; - } - return true; - } - - /** - * Call the CRM to add a single optin - * - * @param Request $request - * @return \Illuminate\Contracts\View\View - * - */ - public function addOptIn(Request $request) - { - $validator = Validator::make($request->all(), ['email' => 'required|email']); - if ($validator->fails()) { - return __('L\'adresse email est incorrecte'); - } - - try { - SingleOptin::setStatus($request->email, true); - return trans('Votre inscription à la newsletter a été prise en compte'); - } catch (ApiErrorException $e) { - // * Il y a deja un customerInfo avec optin a true pour ce customer - if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists())) { - return trans('Vous êtes déjà inscrit avec cette adresse email'); - } - report($e); - return trans('Une erreur est survenue, merci de réessayer ultérieurement'); - } catch (CrmException $e) { - report($e); - return trans('Une erreur est survenue, merci de réessayer ultérieurement'); - } - return trans('Une erreur est survenue, merci de réessayer ultérieurement '); - } -} diff --git a/app/Http/Controllers/Fo/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Fo/Auth/ConfirmPasswordController.php new file mode 100644 index 0000000..ae9cee4 --- /dev/null +++ b/app/Http/Controllers/Fo/Auth/ConfirmPasswordController.php @@ -0,0 +1,35 @@ +check()) { + return \response()->redirectToRoute('home'); + } + return view('front.auth.passwords.confirm'); + } + + /** + * Get the post register / login redirect path. + * + * @return string + */ + public function redirectPath() + { + return response()->redirectToRoute('home')->getTargetUrl(); + } +} diff --git a/app/Http/Controllers/Fo/Auth/ForgotPasswordController.php b/app/Http/Controllers/Fo/Auth/ForgotPasswordController.php new file mode 100644 index 0000000..c5f964a --- /dev/null +++ b/app/Http/Controllers/Fo/Auth/ForgotPasswordController.php @@ -0,0 +1,82 @@ +middleware('guest:frontend'); + } + + /** + * Display the form to request a password reset link. + * + * @return \Illuminate\View\View + */ + public function showLinkRequestForm() + { + return view('auth.passwords.email'); + } + + /** + * Get the broker to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\PasswordBroker + */ + public function broker() + { + return Password::broker('customers'); + } + + /** + * Get the response for a successful password reset link. + * ! Dans les deux cas on ne divulgue pas si un user existe. + * + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetLinkResponse() + { + return back()->with('info', trans($this->message)); + } + + /** + * Get the response for a failed password reset link. + * ! Dans les deux cas on ne divulgue pas si un user existe. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetLinkFailedResponse(Request $request, string $response) + { + // ! Ne pas notifier que l'utilisateur n'existe pas. + if ($response === 'passwords.user') { + return back()->with('info', trans($this->message)); + } + // * Renvoyer les autres message d'erreur style throttle. + return back() + ->withInput($request->only('email')) + ->withErrors(['email' => trans($response)]); + } +} diff --git a/app/Http/Controllers/Fo/Auth/LoginController.php b/app/Http/Controllers/Fo/Auth/LoginController.php new file mode 100644 index 0000000..5995035 --- /dev/null +++ b/app/Http/Controllers/Fo/Auth/LoginController.php @@ -0,0 +1,96 @@ +middleware('guest:frontend')->except('logout'); + } + + /** + * Get the guard to be used during authentication. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard() + { + return Auth::guard('frontend'); + } + + /** + * Show the application's login form. + * + * @return \Illuminate\View\View + */ + public function showLoginForm() + { + return view('auth.login'); + } + + /** + * The user has been authenticated. + * + * @param \Illuminate\Http\Request $request + * @param null $user + * @return mixed + * @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing, Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + */ + protected function authenticated(Request $request, $user) + { + /** @var \App\Models\Customer|null */ + $user = Auth::guard('frontend')->user(); + if ($user) { + $user->saveOrFail(); + Session::flash('info', trans('Vous êtes à présent connecté')); + } + // FIXME: Read destroy basket here. + // OrderController::detroyCurrentBasket(); + } + + /** + * The user has logged out of the application. + * + * @param \Illuminate\Http\Request $request + * @return mixed + * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass + */ + protected function loggedOut(Request $request) + { + Session::flash('info', trans('Vous êtes à présent déconnecté')); + } + + /** + * Get the post register / login redirect path. + * + * @return string + */ + public function redirectPath() + { + return response()->redirectToRoute('home')->getTargetUrl(); + } +} diff --git a/app/Http/Controllers/Fo/Auth/RegisterController.php b/app/Http/Controllers/Fo/Auth/RegisterController.php new file mode 100644 index 0000000..87fe928 --- /dev/null +++ b/app/Http/Controllers/Fo/Auth/RegisterController.php @@ -0,0 +1,174 @@ +middleware('guest:frontend'); + } + + /** + * Get the guard to be used during authentication. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard() + { + return Auth::guard('frontend'); + } + + /** + * Show the application registration form. + * + * @return \Illuminate\View\View + */ + public function showRegistrationForm() + { + return view('auth.register'); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + * @throws \Illuminate\Validation\ValidationException If local client cannot validate data. + */ + protected function validator(array $data) + { + $data['optin'] = \request()->boolean('optin'); + $data['ok_cgv'] = \request()->boolean('ok_cgv'); + + // * Let Crm client validate data + try { + (new CrmCustomer())->fill($this->getOnlyCrmData($data)); + } catch (CrmValidationException $e) { + throw ValidationException::withMessages([ + 'error' => $e->getMessage() + ]); + } + $request = new CreateAccountRequest(); + + $data['phone'] = $data['phone'] ?? null; + $data['opt_in'] = ($data['opt_in'] ?? false) ? true : false; + return Validator::make( + $data, + $request->rules(), + $request->messages(), + $request->attributes() + ); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return \App\Models\Customer + * @throws \Illuminate\Validation\ValidationException If there are validation errors. + * @throws \RuntimeException On unhandled api Error. + */ + protected function create(array $data) + { + $data['country'] = Country::france(); + + try { + return DB::transaction(function () use ($data) { + $crmCustomer = new CrmCustomer($this->getOnlyCrmData($data)); + + // * Country Is forced to france + $crmCustomer->country = Country::france(); + $crmCustomer->save(); + + // * Enregistrement du Hashcode + /** @var \App\Models\Customer $customer */ + $customer = new Customer($data); + $customer->hashcode = $crmCustomer->hashcode; + // * Customer will be logged in. + $customer->last_connection = \now(); + $customer->saveOrFail(); + + if ($customer->saveOrFail()) { + // phpcs:ignore Generic.Files.LineLength.TooLong + Session::flash('success', trans('Votre compte à bien été crée, vous devez valider votre adresse email, un email de confirmation vous à été envoyé.')); + } + + return $customer; + }); + } catch (ApiErrorException $e) { + if ($e->getApiError()->equals(ApiError::customerExists())) { + throw ValidationException::withMessages([ + 'error' => 'Un compte est déjà associé à cette adresse email.' + ]); + } + if ($e->getApiError()->equals(ApiError::validationFailed())) { + throw ValidationException::withMessages([ + 'error' => $e->getMessage() + ]); + } + report($e); + Log::error(__CLASS__ . '::create reached end of possibilities.'); + throw new \RuntimeException(__CLASS__ . '::create reached end of possibilities.'); + } //end try + } + + /** + * Get the post register / login redirect path. + * + * @return string + */ + public function redirectPath() + { + return response()->redirectToRoute('account.dashboard')->getTargetUrl(); + } + + /** + * Get only data used in crm + * + * @param array $data + * @return array + */ + private function getOnlyCrmData(array $data): array + { + return \array_intersect_key( + $data, + [ + 'firstname' => '', + 'lastname' => '', + 'birth_date' => '', + 'address' => '', + 'postcode' => '', + 'country' => '', + 'city' => '', + 'phone' => '', + 'email' => '', + 'password' => '', + 'opt_in' => '', + ] + ); + } +} diff --git a/app/Http/Controllers/Fo/Auth/ResetPasswordController.php b/app/Http/Controllers/Fo/Auth/ResetPasswordController.php new file mode 100644 index 0000000..ce53826 --- /dev/null +++ b/app/Http/Controllers/Fo/Auth/ResetPasswordController.php @@ -0,0 +1,121 @@ +middleware('guest:frontend'); + } + + /** + * Get the guard to be used during authentication. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard() + { + return Auth::guard('frontend'); + } + + /** + * Display the password reset view for the given token. + * + * If no token is present, display the link request form. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function showResetForm(Request $request) + { + $token = $request->route()->parameter('token'); + + return view('auth.passwords.reset')->with( + ['token' => $token, 'email' => $request->email] + ); + } + + /** + * Reset the given user's password. + * + * @param mixed $customer + * @param mixed $password + * @return void + * @throws \Illuminate\Validation\ValidationException If something goes wrong. + */ + protected function resetPassword($customer, $password) + { + /** @var \App\Models\Customer $user */ + /** @var string $password */ + + /** @var \LDC\LDCCRM\CrmApiV2 */ + $crm = app('crmAPI'); + + try { + if (!($crmCustomer = $crm->getCustomer($customer->hashcode))) { + throw ValidationException::withMessages([ + 'error' => 'Changement impossible, compte inexistant.' + ]); + } + $crmCustomer->password = $password; + $crmCustomer->save(); + } catch (\TypeError | CrmException | ApiErrorException $e) { + report($e); + throw ValidationException::withMessages([ + 'error' => 'Une erreur est survenue, merci de réessayer ultérieurement.' + ]); + } catch (ExceptionsValidationException $e) { + throw ValidationException::withMessages([ + 'error' => $e->getMessage() + ]); + } + + $customer->setRememberToken(Str::random(60)); + + $customer->save(); + + event(new PasswordReset($customer)); + + $this->guard()->login($customer); + } + + /** + * Get the post register / login redirect path. + * + * @return string + */ + public function redirectPath() + { + return response()->redirectToRoute('home')->getTargetUrl(); + } + + /** + * Get the broker to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\PasswordBroker + */ + public function broker() + { + return Password::broker('customers'); + } +} diff --git a/app/Http/Controllers/Fo/Auth/VerificationController.php b/app/Http/Controllers/Fo/Auth/VerificationController.php new file mode 100644 index 0000000..02099e1 --- /dev/null +++ b/app/Http/Controllers/Fo/Auth/VerificationController.php @@ -0,0 +1,47 @@ +middleware('auth:frontend'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } + + /** + * Show the email verification notice. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View + */ + public function show(Request $request) + { + return $request->user()->hasVerifiedEmail() + ? redirect($this->redirectPath()) + : view('auth.verify'); + } + + /** + * Get the post register / login redirect path. + * + * @return string + */ + public function redirectPath() + { + return response()->redirectToRoute('home')->getTargetUrl(); + } +} diff --git a/app/Http/Controllers/BasketController.php b/app/Http/Controllers/Fo/BasketController.php similarity index 90% rename from app/Http/Controllers/BasketController.php rename to app/Http/Controllers/Fo/BasketController.php index 3afe5da..20d3b84 100644 --- a/app/Http/Controllers/BasketController.php +++ b/app/Http/Controllers/Fo/BasketController.php @@ -1,8 +1,9 @@ setDiscountRate($product->discountRate); $cartextendedItem = array( - 'cartItem' => $row, - 'product' => $product + 'cartItem' => $row, + 'product' => $product ); $dbpanier->add($cartextendedItem); } @@ -149,21 +150,19 @@ class BasketController extends Controller 'countItems' => Cart::count(), ); - $cartReturn = array($dbpanier,$cartInfosNoPrice); + $cartReturn = array($dbpanier, $cartInfosNoPrice); /** @var \App\Models\GeneralConfig */ $config = Cache::get('GeneralConfigGlobal')->where('type', GeneralConfigType::global())->first(); - if ( - $config->data['orders_display_prices_for_auth']['value'] and - Auth::guard('customer')->check() - ) { + // ? Don't show prices only for auth customers ? + if (!$config->data['orders_display_prices_for_auth']['value']) { + return $cartReturn; + } + // ? Customer is auth ? + if (Auth::guard('frontend')->check()) { $cartReturn = array($dbpanier, $cartInfos); } - if ($config->data['orders_display_prices_for_public']['value']) { - $cartReturn = array($dbpanier,$cartInfos); - } - return $cartReturn; } } diff --git a/app/Http/Controllers/Fo/CustomerController.php b/app/Http/Controllers/Fo/CustomerController.php new file mode 100644 index 0000000..a5d3e5c --- /dev/null +++ b/app/Http/Controllers/Fo/CustomerController.php @@ -0,0 +1,279 @@ +user(); + if (!$customer) { + abort(404); + } + + /** @var \LDC\LDCCRM\Models\Customer $crmCustomer */ + $crmCustomer = $customer->apiData; + + /** @var object $crmInfos */ + $crmInfos = \json_decode(\json_encode($crmCustomer)); + + return view('customer.dashboard', compact('customer', 'crmInfos')); + } + + /** + * Show update customer informations form + * + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + */ + public function email() + { + return view('auth.change-email'); + } + + /** + * Uupdate customer email + * + * @param \App\Http\Requests\Fo\Customers\UpdateEmailRequest $request + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + */ + public function emailSubmit(UpdateEmailRequest $request) + { + /** @var \App\Models\Customer */ + $customer = \auth('frontend')->user(); + + // FIXME:Add warning email to customer !!! + + return $this->updateCrmCustomerInfo($customer, ['email' => $request->get('email')]) ? + back()->with('success', trans('Vos informations ont bien été enregistrées.')) : + back()->withInput()->withErrors(trans('Une erreur est survenue, merci de réessayer ultérieurement.')); + } + + /** + * Show update customer password form + * + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + */ + public function password() + { + return view('auth.passwords.change'); + } + + /** + * Update customer password + * + * @param UpdatePasswordRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function passwordSubmit(UpdatePasswordRequest $request) + { + /** @var \App\Models\Customer */ + $customer = \auth('frontend')->user(); + + // FIXME:Add warning email to customer !!! + + return $this->updateCrmCustomerInfo($customer, ['password' => $request->get('password')]) ? + back()->with('success', trans('Vos informations ont bien été enregistrées.')) : + back()->withInput()->withErrors(trans('Une erreur est survenue, merci de réessayer ultérieurement.')); + } + + /** + * Send a request to the CRM to change the given customer's informations + * @param \App\Http\Requests\Fo\UpdateInfosRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function updateInfos(UpdateInfosRequest $request) + { + /** @var \App\Models\Customer */ + $customer = auth('frontend')->user(); + + return $this->updateCrmCustomerInfo($customer, $request->validated()) ? + back()->with('success', trans('Vos informations ont bien été enregistrées.')) : + back()->withInput()->withErrors(trans('Une erreur est survenue, merci de réessayer ultérieurement.')); + } + + /** + * Show customer delete account page + * + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + */ + public function destroy() + { + return view('customer.destroy'); + } + + /** + * Show customer delete account page + * + * @param \App\Http\Requests\Fo\Customers\ConfirmDeleteRequest $request + * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + */ + public function destroySubmit(ConfirmDeleteRequest $request) + { + if ($request->confirm) { + try { + return DB::transaction(function () { + + // FIXME:Add warning email to customer !!! + + /** @var \App\Models\Customer */ + $customer = auth('frontend')->user(); + + /** @var \Ldc\LDCCRM\Models\Customer */ + $crmCustomer = $customer->api_data; + + $customer->deleteOrFail(); + $crmCustomer->delete(); + + // * Force logout + auth('frontend')->logout(); + + return response()->redirectToRoute('home') + ->with('info', trans( + // phpcs:ignore Generic.Files.LineLength.TooLong + 'Votre compte à bien été supprimé, si vous avez des commandes en cours vous pouvez utiliser le formulaire de contact en cas de besoin.' + )); + }); + } catch (\Exception $e) { + report($e); + Session::flash('error', trans('Une erreur est survenue veuillez réssayer plus tard.')); + } //end try + } //end if + return back(); + } + + /** + * Updates user info + * + * @param \App\Models\Customer $customer + * @param array $data + * @return boolean + * @throws \Illuminate\Validation\ValidationException If something failed. + */ + private function updateCrmCustomerInfo(Customer $customer, array $data) + { + + return DB::transaction(function () use ($customer, $data) { + try { + /** @var \LDC\LDCCRM\Models\Customer */ + $crmCustomer = $customer->apiData; + if (\array_key_exists('email', $data)) { + $customer->email = $data['email']; + $customer->saveOrFail(); + } + $crmCustomer->fill($data); + return $crmCustomer->save(); + } catch (CrmValidationException $e) { + throw ValidationException::withMessages([ + 'error' => $e->getMessage() + ]); + } catch (ApiErrorException $e) { + if ($e->getApiError()->equals(ApiError::validationFailed())) { + throw ValidationException::withMessages([ + 'error' => $e->getMessage() + ]); + } + report($e); + return false; + } //end try + }); + } + + // * --- END Backoffice --- + + + /** + * affichage des commandes du customer connecté + * + * @param Request $request + * @return \Illuminate\Contracts\View\View + * + * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass + */ + public function myOrders(Request $request) + { + // @phpcs:enable + $orders = Order::where('customer_id', Auth::guard('frontend')->user()->id)->orderBy('date', 'DESC')->get(); + return view('customer.my-orders', compact('orders')); + } + + /** + * Show detail commande + * + * @param string $reference + * @return \Illuminate\Contracts\View\View + */ + public function orderDetail(string $reference) + { + $order = Order::where('reference', '=', $reference) + ->where('customer_id', Auth::guard('frontend')->user()->id) + ->firstOrFail(); + + if ($order->status_id == 1) { + $shop = null; + } else { + $shop = Shop::find($order->timeslot->shop->id); + } + + return view('customer.order-detail', compact('order', 'shop')); + } + + /** + * Call the CRM to add a single optin + * + * @param Request $request + * @return \Illuminate\Contracts\View\View + * + */ + public function addOptIn(Request $request) + { + $validator = Validator::make($request->all(), ['email' => 'required|email']); + if ($validator->fails()) { + return __('L\'adresse email est incorrecte'); + } + + try { + SingleOptin::setStatus($request->email, true); + return trans('Votre inscription à la newsletter a été prise en compte'); + } catch (ApiErrorException $e) { + // * Il y a deja un customerInfo avec optin a true pour ce customer + if ($e->getApiError()->equals(ApiError::singleOptinCustomerExists())) { + return trans('Vous êtes déjà inscrit avec cette adresse email'); + } + report($e); + return trans('Une erreur est survenue, merci de réessayer ultérieurement'); + } catch (CrmException $e) { + report($e); + return trans('Une erreur est survenue, merci de réessayer ultérieurement'); + } + return trans('Une erreur est survenue, merci de réessayer ultérieurement '); + } +} diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/Fo/ProductController.php similarity index 82% rename from app/Http/Controllers/ProductController.php rename to app/Http/Controllers/Fo/ProductController.php index a8297cb..bd66e60 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/Fo/ProductController.php @@ -1,7 +1,8 @@ id)->where('status', 1)->paginate(9); // Find promo within range. $offres = Product::where('range_id', $range->id) - ->where('status', 1) - ->has('discounts') - ->with('discounts')->get(); + ->where('status', 1) + ->has('discounts') + ->with('discounts')->get(); return view('range', compact('range', 'products', 'offres')); } @@ -65,17 +66,8 @@ class ProductController extends Controller if (!$product || !$product->status) { abort(404); } - $product->additionnalProductInfo = $product->additionnalProductInfo($product->product_type); - if ($product->additionnalProductInfo === null && !empty($product_type)) { - // N'existe pas on renseigne un vide. - $product_type = $product->product_type; - $modelClass = 'App\Models\\' . ucfirst($product_type); - $product->$product_type = new $modelClass(); - } - $associated = $product->products; - - return view('product', compact('product', 'associated')); + return view('product', ['productModel' => $product]); } /** diff --git a/app/Http/Controllers/QuickOrderController.php b/app/Http/Controllers/Fo/QuickOrderController.php similarity index 91% rename from app/Http/Controllers/QuickOrderController.php rename to app/Http/Controllers/Fo/QuickOrderController.php index 874d4a4..003e14d 100644 --- a/app/Http/Controllers/QuickOrderController.php +++ b/app/Http/Controllers/Fo/QuickOrderController.php @@ -1,7 +1,8 @@ where('star', 1)->get(); $slider = Slider::where('slug', 'home')->first(); - $slides = $slider->showableSlides; + $slides = $slider->showable_slides; $quickorder_ranges = Range::with('products')->get(); foreach ($quickorder_ranges as $range) { diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index aab392e..def3501 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -2,7 +2,6 @@ namespace App\Http; -use App\Http\Middleware\IsAdmin; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel @@ -64,7 +63,6 @@ class Kernel extends HttpKernel 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, - 'is-admin' => IsAdmin::class, 'htmlsanitize' => \App\Http\Middleware\HtmlSanitizer::class, ]; } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 67e01e7..d2fa768 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -3,6 +3,7 @@ namespace App\Http\Middleware; use Illuminate\Auth\Middleware\Authenticate as Middleware; +use Illuminate\Support\Facades\Session; class Authenticate extends Middleware { @@ -14,8 +15,24 @@ class Authenticate extends Middleware */ protected function redirectTo($request) { - if (! $request->expectsJson()) { - return route('auth.login'); + $logins = [ + 'frontend' => route('login'), + 'backend' => route('bo.login') + ]; + if (!$request->expectsJson()) { + // * Notify must login + Session::flash('warning', trans('Veuillez vous connecter pour continuer')); + + foreach ($request->route()->gatherMiddleware() as $middleware) { + if (\is_string($middleware) and strpos($middleware, 'auth:') !== false) { + $route = $logins[str_replace('auth:', '', $middleware)] ?? null; + if ($route) { + return $route; + } + } + } + return route('login'); } + abort(401); } } diff --git a/app/Http/Middleware/IsAdmin.php b/app/Http/Middleware/IsAdmin.php deleted file mode 100644 index 8bece33..0000000 --- a/app/Http/Middleware/IsAdmin.php +++ /dev/null @@ -1,26 +0,0 @@ -role; - if ($role === 1 || $role === 2) { - return $next($request); - } - abort(404, "Cette page n'existe pas."); - } -} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 03b7890..66f44a9 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -19,5 +19,8 @@ class TrustProxies extends Middleware * * @var integer */ - protected $headers = Request::HEADER_X_FORWARDED_ALL; + protected $headers = Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO; } diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index ed591f2..9d55408 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -11,6 +11,5 @@ class VerifyCsrfToken extends Middleware * * @var array */ - protected $except = [ - ]; + protected $except = []; } diff --git a/app/Http/Requests/Bo/Ajax/TimeslotExceptions/DeleteTimeslotExceptionsRequest.php b/app/Http/Requests/Bo/Ajax/TimeslotExceptions/DeleteTimeslotExceptionsRequest.php index c01cc0e..5b50b27 100644 --- a/app/Http/Requests/Bo/Ajax/TimeslotExceptions/DeleteTimeslotExceptionsRequest.php +++ b/app/Http/Requests/Bo/Ajax/TimeslotExceptions/DeleteTimeslotExceptionsRequest.php @@ -13,7 +13,7 @@ class DeleteTimeslotExceptionsRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Ajax/TimeslotExceptions/SaveTimeslotExceptionsRequest.php b/app/Http/Requests/Bo/Ajax/TimeslotExceptions/SaveTimeslotExceptionsRequest.php index f105d34..96165d9 100644 --- a/app/Http/Requests/Bo/Ajax/TimeslotExceptions/SaveTimeslotExceptionsRequest.php +++ b/app/Http/Requests/Bo/Ajax/TimeslotExceptions/SaveTimeslotExceptionsRequest.php @@ -13,7 +13,7 @@ class SaveTimeslotExceptionsRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/ChangeOrderRequest.php b/app/Http/Requests/Bo/ChangeOrderRequest.php index 7e0fbb9..db70a4c 100644 --- a/app/Http/Requests/Bo/ChangeOrderRequest.php +++ b/app/Http/Requests/Bo/ChangeOrderRequest.php @@ -13,7 +13,7 @@ class ChangeOrderRequest extends FormRequest */ public function authorize() { - return auth()->check(); + return auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Discounts/StoreDiscountRequest.php b/app/Http/Requests/Bo/Discounts/StoreDiscountRequest.php index 479ac43..5b4d9d0 100644 --- a/app/Http/Requests/Bo/Discounts/StoreDiscountRequest.php +++ b/app/Http/Requests/Bo/Discounts/StoreDiscountRequest.php @@ -15,7 +15,7 @@ class StoreDiscountRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Products/CreateProductRequest.php b/app/Http/Requests/Bo/Products/CreateProductRequest.php index 1399a8c..8588182 100644 --- a/app/Http/Requests/Bo/Products/CreateProductRequest.php +++ b/app/Http/Requests/Bo/Products/CreateProductRequest.php @@ -15,7 +15,7 @@ class CreateProductRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Products/StoreProductRequest.php b/app/Http/Requests/Bo/Products/StoreProductRequest.php index b3db013..2e58efe 100644 --- a/app/Http/Requests/Bo/Products/StoreProductRequest.php +++ b/app/Http/Requests/Bo/Products/StoreProductRequest.php @@ -3,6 +3,7 @@ namespace App\Http\Requests\Bo\Products; use App\Enums\TaxRate; +use App\Enums\WeightUnit; use App\Http\Requests\Bo\UpdateMiniCrudRequest; use App\Models\Product; use App\Traits\Requests\HasPicture; @@ -68,6 +69,7 @@ class StoreProductRequest extends UpdateMiniCrudRequest public function prepareForValidation(): void { $this->merge([ + 'weight' => \floatval($this->weight) * WeightUnit::kg()->conversion, 'star' => $this->star ? true : false, 'status' => $this->status ? true : false, 'orderable' => $this->orderable ? true : false, diff --git a/app/Http/Requests/Bo/Ranges/FilterRangeRequest.php b/app/Http/Requests/Bo/Ranges/FilterRangeRequest.php index 3389db3..986b3f8 100644 --- a/app/Http/Requests/Bo/Ranges/FilterRangeRequest.php +++ b/app/Http/Requests/Bo/Ranges/FilterRangeRequest.php @@ -13,7 +13,7 @@ class FilterRangeRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Ranges/StoreRangeRequest.php b/app/Http/Requests/Bo/Ranges/StoreRangeRequest.php index 6794d53..b7e368c 100644 --- a/app/Http/Requests/Bo/Ranges/StoreRangeRequest.php +++ b/app/Http/Requests/Bo/Ranges/StoreRangeRequest.php @@ -30,7 +30,7 @@ class StoreRangeRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Shops/StoreShopRequest.php b/app/Http/Requests/Bo/Shops/StoreShopRequest.php index f8bc8e8..20b8129 100644 --- a/app/Http/Requests/Bo/Shops/StoreShopRequest.php +++ b/app/Http/Requests/Bo/Shops/StoreShopRequest.php @@ -15,7 +15,7 @@ class StoreShopRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Sliders/StoreSliderRequest.php b/app/Http/Requests/Bo/Sliders/StoreSliderRequest.php index 2a8ff38..33fd166 100644 --- a/app/Http/Requests/Bo/Sliders/StoreSliderRequest.php +++ b/app/Http/Requests/Bo/Sliders/StoreSliderRequest.php @@ -13,7 +13,7 @@ class StoreSliderRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php index 10237f1..8f523c9 100644 --- a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php +++ b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php @@ -30,7 +30,7 @@ class StoreSlideRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php b/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php index 49b404c..a6f366c 100644 --- a/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php +++ b/app/Http/Requests/Bo/StaticPages/UpdateStaticPageRequest.php @@ -30,7 +30,7 @@ class UpdateStaticPageRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Tags/StoreTagRequest.php b/app/Http/Requests/Bo/Tags/StoreTagRequest.php index e5083c6..406aa34 100644 --- a/app/Http/Requests/Bo/Tags/StoreTagRequest.php +++ b/app/Http/Requests/Bo/Tags/StoreTagRequest.php @@ -14,7 +14,7 @@ class StoreTagRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/Timeslots/UpdateTimeslotRequest.php b/app/Http/Requests/Bo/Timeslots/UpdateTimeslotRequest.php index b4fee7e..6379c0c 100644 --- a/app/Http/Requests/Bo/Timeslots/UpdateTimeslotRequest.php +++ b/app/Http/Requests/Bo/Timeslots/UpdateTimeslotRequest.php @@ -14,7 +14,7 @@ class UpdateTimeslotRequest extends FormRequest */ public function authorize() { - return \auth()->check(); + return \auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/UpdateMiniCrudRequest.php b/app/Http/Requests/Bo/UpdateMiniCrudRequest.php index cfd2067..ce75ca6 100644 --- a/app/Http/Requests/Bo/UpdateMiniCrudRequest.php +++ b/app/Http/Requests/Bo/UpdateMiniCrudRequest.php @@ -25,7 +25,7 @@ abstract class UpdateMiniCrudRequest extends FormRequest */ public function authorize(): bool { - return auth()->check(); + return auth('backend')->check(); } /** diff --git a/app/Http/Requests/Bo/XmlIncos/SearchXmlInco.php b/app/Http/Requests/Bo/XmlIncos/SearchXmlInco.php index d5f2fe5..68d200a 100644 --- a/app/Http/Requests/Bo/XmlIncos/SearchXmlInco.php +++ b/app/Http/Requests/Bo/XmlIncos/SearchXmlInco.php @@ -13,7 +13,7 @@ class SearchXmlInco extends FormRequest */ public function authorize() { - return auth()->check() and $this->ajax(); + return auth('backend')->check() and $this->ajax(); } /** diff --git a/app/Http/Requests/Fo/CustomerRegisterRequest.php b/app/Http/Requests/Fo/CustomerRegisterRequest.php deleted file mode 100644 index 547fc9b..0000000 --- a/app/Http/Requests/Fo/CustomerRegisterRequest.php +++ /dev/null @@ -1,82 +0,0 @@ -where('type', GeneralConfigType::global())->first(); - - /** - * specify rules for various cases of registration - * cf enum for register modes - * si register autorisé pour salarié et tout public - */ - // FIXME: REmove stuff from salaries here. - if ( - config('bosettings.register_salaries') && - $config->data['customer_register_public_mode']['value'] - ) { - $matriculeRule = 'nullable|exists:salaries,matricule'; - $codeRule = [ - 'nullable', - Rule::exists('salaries', 'code') - ->where('matricule', data_get($this->all(), 'matricule')) - ]; - } elseif ( - config('bosettings.register_salaries') && - !$config->data['customer_register_public_mode']['value'] - ) { - // * si register autorisé pour salarié seulement - $matriculeRule = 'required|exists:salaries,matricule'; - $codeRule = [ - 'required', - Rule::exists('salaries', 'code') - ->where('matricule', data_get($this->all(), 'matricule')) - ]; - } else { - // * rien de précisé ou public seulement alors - $matriculeRule = 'sometimes'; - $codeRule = 'sometimes'; - }//end if - - return [ - 'matricule' => $matriculeRule, - 'code' => $codeRule, - 'lastname' => 'required|string|max:255', - 'firstname' => 'required|string|max:255', - 'phone' => 'sometimes|max:255', - 'address' => 'sometimes|max:255', - 'postal_code' => 'required', - 'town' => 'required|string|max:255', - 'email' => 'required|email:rfc,dns,spoof|max:255', - 'password' => 'required|confirmed|min:8|max:255', - 'ok_cgv' => 'accepted', - 'optin' => 'sometimes', - 'birth_date' => ['required', new Adult()], - ]; - } -} diff --git a/app/Http/Requests/Fo/Customers/ConfirmDeleteRequest.php b/app/Http/Requests/Fo/Customers/ConfirmDeleteRequest.php new file mode 100644 index 0000000..cf3f02e --- /dev/null +++ b/app/Http/Requests/Fo/Customers/ConfirmDeleteRequest.php @@ -0,0 +1,42 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'confirm' => 'accepted' + ]; + } + + /** + * Get custom messages for validator errors. + * + * @return array + */ + public function messages() + { + return [ + 'confirm.accepted' => trans('Pour supprimer votre compte vous devez cocher la case de confirmation.') + ]; + } +} diff --git a/app/Http/Requests/Fo/Customers/CreateAccountRequest.php b/app/Http/Requests/Fo/Customers/CreateAccountRequest.php new file mode 100644 index 0000000..b886734 --- /dev/null +++ b/app/Http/Requests/Fo/Customers/CreateAccountRequest.php @@ -0,0 +1,109 @@ +check(); + } + + /** + * Prepare the data for validation. + * + * @return void + */ + public function prepareForValidation() + { + $this->merge([ + 'phone' => $this->phone, + 'opt_in' => $this->opt_in ? true : false + ]); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + 'lastname' => 'required|string|max:255', + 'firstname' => 'required|string|max:255', + 'phone' => 'nullable|max:255|phone:FR', + 'address' => 'required|string|min:1|max:255', + 'postcode' => 'required|string|min:1|postal_code:FR', + 'city' => 'required|string|min:1|max:255', + 'birth_date' => ['required', new Adult()], + 'email' => [ + 'required', 'email:rfc,dns,spoof', 'max:255', + // * Does email already exists in CRM ? + // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + function (string $attribute, $value, \Closure $fail) { + if (CrmCustomer::findWithEmail(\strval($value))) { + $fail('Un compte existe déjà avec cette adresse.'); + } + }, + 'unique:customers,email', + ], + 'password' => 'required|confirmed|min:8|max:255', + 'ok_cgv' => 'accepted', + 'opt_in' => 'required|boolean', + ]; + } + + /** + * Get custom attributes for validator errors. + * @return array + */ + public function attributes() + { + return [ + 'lastname' => trans('nom'), + 'firstname' => trans('prénom'), + 'phone' => trans('téléphone'), + 'address' => trans('adresse'), + 'postcode' => trans('code postal'), + 'city' => trans('ville'), + 'birth_date' => trans('date de naissance'), + 'email' => trans('email'), + 'password' => trans('mot de passe'), + 'ok_cgv' => trans('conditions d\'utilisation'), + 'opt_in' => trans('newsletter'), + ]; + } + + /** + * Get custom messages for validator errors. + * + * @return array + */ + public function messages() + { + return [ + // phpcs:ignore Generic.Files.LineLength.TooLong + 'phone.phone' => trans('Le champ :attribute est invalide, il accepte les numéros des pays suivants :countries.', [ + 'countries' => Country::france()->label + ]), + // phpcs:ignore Generic.Files.LineLength.TooLong + 'country.in' => trans('Le champ :attribute est invalide, il accepte les pays suivants :countries.', [ + 'countries' => Country::france()->label + ]), + 'email.unique' => trans('Un compte existe déjà avec cette adresse.'), + 'ok_cgv.accepted' => trans('Vous devez accepter les conditions d\'utilisation du site pour continuer.'), + ]; + } +} diff --git a/app/Http/Requests/Fo/Customers/UpdateEmailRequest.php b/app/Http/Requests/Fo/Customers/UpdateEmailRequest.php new file mode 100644 index 0000000..69210f8 --- /dev/null +++ b/app/Http/Requests/Fo/Customers/UpdateEmailRequest.php @@ -0,0 +1,48 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + /** @var \Ldc\LDCCRM\Models\Customer */ + $crmCustomer = \auth('frontend')->user()->api_data; + return [ + 'password' => [ + 'required', + new CrmCustomerPassword($crmCustomer) + ], + 'email' => [ + 'required', 'email:rfc,dns,spoof', 'max:255', 'unique:customers,email', + // * Does email already exists in CRM ? + // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed + function (string $attribute, $value, \Closure $fail) { + if (CrmCustomer::findWithEmail(\strval($value))) { + $fail('Un compte existe déjà avec cette adresse.'); + } + }, + 'unique:customers,email', + ], + ]; + } +} diff --git a/app/Http/Requests/Fo/Customers/UpdateInfosRequest.php b/app/Http/Requests/Fo/Customers/UpdateInfosRequest.php new file mode 100644 index 0000000..cbdad12 --- /dev/null +++ b/app/Http/Requests/Fo/Customers/UpdateInfosRequest.php @@ -0,0 +1,31 @@ +check(); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + /** @var \Ldc\LDCCRM\Models\Customer */ + $crmCustomer = \auth('frontend')->user()->api_data; + return [ + 'old_password' => [ + 'required', + new CrmCustomerPassword($crmCustomer) + ], + 'password' => [ + 'required', 'string', 'max:255', 'confirmed', + Password::min(8)->mixedCase()->letters()->numbers()->uncompromised() + ] + ]; + } + + /** + * Get custom attributes for validator errors. + * + * @return array + */ + public function attributes() + { + return [ + 'old_password' => trans('ancien mot de passe'), + 'password' => trans('mot de passe'), + ]; + } +} diff --git a/app/Http/Requests/Fo/LoginRequest.php b/app/Http/Requests/Fo/LoginRequest.php deleted file mode 100644 index cf75061..0000000 --- a/app/Http/Requests/Fo/LoginRequest.php +++ /dev/null @@ -1,35 +0,0 @@ -merge([ - 'remember' => $this->remember ? true : false - ]); - return true; - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'email' => 'required|email:rfc,filter', - 'password' => 'required', - 'remember' => 'required|boolean' - ]; - } -} diff --git a/app/Http/Requests/Fo/UpdateInfosRequest.php b/app/Http/Requests/Fo/UpdateInfosRequest.php deleted file mode 100644 index 44e55af..0000000 --- a/app/Http/Requests/Fo/UpdateInfosRequest.php +++ /dev/null @@ -1,58 +0,0 @@ -check(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'firstname' => 'required|string|max:255', - 'lastname' => 'required|string|max:255', - 'day' => 'required|numeric|gt:0|lt:32', - 'month' => 'required|numeric|gt:0|lt:13', - 'year' => [ - 'required', - 'numeric', - 'gt:' . (date('Y') - 101), 'lt:' . (date('Y') + 1), - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed - function ($attr, $value, $fail) { - $MJ = Carbon::now()->subYears(18); - $dateTest = Carbon::createFromDate($this->year, $this->month, $this->day); - if ( - $dateTest->format('dmY') !== $this->day . $this->month . $this->year || - $dateTest->getTimestamp() > time() - ) { - $fail(__('Veuillez entrer une date de naissance valide')); - } - if (!$dateTest->lessThanOrEqualTo($MJ)) { - $fail(__("Vous devez être majeur pour vous inscrire.")); - } - } - ], - 'address' => 'max:255', - 'phone' => 'max:255', - 'city' => 'required|string|max:255', - 'postcode' => 'required' - ]; - } -} diff --git a/app/Http/Resources/CustomerCrmResource.php b/app/Http/Resources/CustomerCrmResource.php index b49f5f6..db5b01c 100644 --- a/app/Http/Resources/CustomerCrmResource.php +++ b/app/Http/Resources/CustomerCrmResource.php @@ -3,19 +3,19 @@ namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; -use App\Models\Customers; +use App\Models\Customer; class CustomerCrmResource extends JsonResource { - /** @var \App\Models\Customers */ + /** @var \App\Models\Customer */ private $customer; /** * CustomerCrmResource * - * @param \App\Models\Customers $customer + * @param \App\Models\Customer $customer */ - public function __construct(Customers $customer) + public function __construct(Customer $customer) { $this->customer = $customer; } diff --git a/app/Jobs/XmlIncoReader.php b/app/Jobs/XmlIncoReader.php index 77b2172..197960e 100644 --- a/app/Jobs/XmlIncoReader.php +++ b/app/Jobs/XmlIncoReader.php @@ -468,6 +468,7 @@ class XmlIncoReader extends XmlJobs if (empty($imgName)) { $imgName = strval($xmlData->INCO->NO_ART); } + // FIXME: Comply with store image name only. // * Store only picture name. $imgNamePath = $imgName . "_" . $index; diff --git a/app/Lib/Helpers/ToolboxHelper.php b/app/Lib/Helpers/ToolboxHelper.php index 417235f..e5d3e4e 100644 --- a/app/Lib/Helpers/ToolboxHelper.php +++ b/app/Lib/Helpers/ToolboxHelper.php @@ -205,4 +205,50 @@ class ToolboxHelper } return $ref; } + + /** + * Convert deeply an object to array + * + * @param array|object $input + * @return array + * @throws \RuntimeException If $input var is a scalar value. + */ + public static function objectToArray($input): array + { + // Only process if it's an object or array being passed to the function. + if (is_object($input) or is_array($input)) { + $ret = (array)$input; + foreach ($ret as &$item) { + // Recursively process EACH element only if not scalar. + $item = (is_object($item) or is_array($item)) ? + self::objectToArray($item) : $item; + } + return $ret; + } else { + throw new \RuntimeException('cannot handle $input of type ' . \gettype($input)); + } + } + + /** + * Convert deeply an array to object + * + * @param array|object $input + * @return object + * @throws \RuntimeException If $input var is a scalar value. + */ + public static function arrayToObject($input): object + { + // Only process if it's an object or array being passed to the function. + if (is_object($input) or is_array($input)) { + $ret = (object)$input; + foreach ($ret as &$item) { + // Recursively process EACH element only if not scalar. + $item = (is_object($item) or is_array($item)) ? + self::arrayToObject($item) : $item; + } + return $ret; + } else { + throw new \RuntimeException('cannot handle $input of type ' . \gettype($input)); + } + } } diff --git a/app/Mail/PasswordResetMail.php b/app/Mail/PasswordResetMail.php index 586b61c..c4ac920 100644 --- a/app/Mail/PasswordResetMail.php +++ b/app/Mail/PasswordResetMail.php @@ -2,6 +2,7 @@ namespace App\Mail; +use App\Models\Customer; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; @@ -13,21 +14,30 @@ class PasswordResetMail extends Mailable implements ShouldQueue use SerializesModels; /** - * Reset token + * target Customer + * + * @var \App\Models\Customer + */ + private $customer; + + /** + * Reset url * * @var string */ - private $token; + private $resetUrl; /** * Create a new message instance. * - * @param string $token + * @param \App\Models\Customer $customer + * @param string $resetUrl * @return void */ - public function __construct(string $token) + public function __construct(Customer $customer, string $resetUrl) { - $this->token = $token; + $this->customer = $customer; + $this->resetUrl = $resetUrl; } /** @@ -37,9 +47,10 @@ class PasswordResetMail extends Mailable implements ShouldQueue */ public function build() { - $token = $this->token; + $resetUrl = $this->resetUrl; return $this->subject( "Réinitialiser votre accès - " . config('theme.site_name') - )->view('mails.password-reset', compact('token')); + )->to($this->customer->email) + ->view('mails.password-reset', compact('resetUrl')); } } diff --git a/app/Mail/RegisterConfirmMail.php b/app/Mail/RegisterConfirmMail.php index b2595e0..67c8a8d 100644 --- a/app/Mail/RegisterConfirmMail.php +++ b/app/Mail/RegisterConfirmMail.php @@ -2,7 +2,7 @@ namespace App\Mail; -use App\Models\Customers; +use App\Models\Customer; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; @@ -16,10 +16,17 @@ class RegisterConfirmMail extends Mailable implements ShouldQueue /** * target Customer * - * @var \App\Models\Customers + * @var \App\Models\Customer */ private $customer; + /** + * The confirmation Url + * + * @var string + */ + private $confirmUrl; + /** * Customer's firstname * @@ -30,14 +37,16 @@ class RegisterConfirmMail extends Mailable implements ShouldQueue /** * Create a new message instance. * - * @param \App\Models\Customers $customer - * @param string|null $firstname + * @param \App\Models\Customer $customer + * @param string $confirmUrl + * @param string $firstname * @return void */ - public function __construct(Customers $customer, string $firstname = null) + public function __construct(Customer $customer, string $confirmUrl, string $firstname) { - $this->firstname = $firstname; - $this->customer = $customer; + $this->confirmUrl = $confirmUrl; + $this->firstname = $firstname; + $this->customer = $customer; } /** @@ -47,9 +56,11 @@ class RegisterConfirmMail extends Mailable implements ShouldQueue */ public function build() { - $customer = $this->customer; - $firstname = $this->firstname; + $confirmUrl = $this->confirmUrl; + $customer = $this->customer; + $firstname = $this->firstname; return $this->subject("Confirmation d'inscription " . config('theme.site_name')) - ->view('mails.register-ok', compact('customer', 'firstname')); + ->to($customer->email, $firstname) + ->view('mails.register-ok', compact('customer', 'firstname', 'confirmUrl')); } } diff --git a/app/Models/Customer.php b/app/Models/Customer.php new file mode 100644 index 0000000..ee39094 --- /dev/null +++ b/app/Models/Customer.php @@ -0,0 +1,223 @@ + + */ + protected $casts = [ + 'last_connection' => 'datetime', + 'email_verified_at' => 'datetime', + ]; + + /** + * Perform any actions required after the model boots. + * + * @return void + */ + protected static function booted() + { + // * EVENT CLOSURES. + static::creating(function (self $model) { + static::assertEmailIsUnique($model->id, $model->email); + }); + static::updating(function (self $model) { + static::assertEmailIsUnique($model->id, $model->email); + }); + } + + // * RELATIONSHIPS + + + // * METHODS + + /** + * Asserts using validation that the email is unique + * + * @param mixed $id + * @param mixed $email + * @return void + * @throws \Illuminate\Validation\ValidationException If user email as already used. + */ + private static function assertEmailIsUnique($id, $email) + { + self::assertFieldIsUnique($id, 'email', $email); + } + + // * --- AUTH --- + + /** + * Send the email verification notification. + * + * @return void + */ + public function sendEmailVerificationNotification() + { + $this->notify(new NotificationVerifyEmail()); + } + + /** + * Mark the given user's email as verified. + * + * @return boolean + * @throws \LDC\LDCCRM\Exceptions\CrmException If an error occurs on server side or on getting response. + * @throws \LDC\LDCCRM\Exceptions\ApiErrorException If any error or \LDC\LDCCRM\Enums\ApiError occurs. + * @phpcs:ignore Squiz.Commenting.FunctionCommentThrowTag.WrongNumber + */ + public function markEmailAsVerified() + { + try { + return $this->api_data->activate() && parent::markEmailAsVerified(); + } catch (ApiErrorException $e) { + if ($e->getApiError()->equals(ApiError::customerAlreadyActive())) { + return true && parent::markEmailAsVerified(); + } + throw $e; + } + } + + /** + * Send the password reset notification. + * + * @param mixed $token + * @return void + */ + public function sendPasswordResetNotification($token) + { + /** @var string $token */ + $this->notify(new NotificationResetPassword($token)); + } + + // * --- END AUTH --- + + /** + * Asserts that the field is unique + * + * @param mixed $id + * @param string $field + * @param mixed $value + * @return void + * @throws \Illuminate\Validation\ValidationException If the field is not unique. + */ + private static function assertFieldIsUnique($id, string $field, $value) + { + Validator::make([$field => $value], [ + $field => Rule::unique('customers', $field)->ignore($id), + ], [ + $field . '.unique' => trans('La valeur :value pour le champ :attribute est déjà utilisé', [ + 'attribute' => $field, + 'value' => $value + ]) + ])->validate(); + } + + /** + * Get the crm Data of a customer + * + * @return \LDC\LDCCRM\Models\Customer + * @throws \LDC\LDCCRM\Exceptions\CrmException If cannot fetch data from crm. + * @author Jérémy Munsch + */ + public function getApiDataAttribute(): CrmCustomer + { + /** @var \LDC\LDCCRM\CrmApiV2 */ + $crm = app('crmAPI'); + $crmCustomer = $crm->getCustomer($this->hashcode); + if (!$crmCustomer) { + throw new CrmException('CRM get Customer returned null'); + } + return $crmCustomer; + } + + /** + * Set the crm Data of a customer + * @param CustomerCrmResource $resource + * + * @return CrmCustomer + * + * @throws \LDC\LDCCRM\Exceptions\CrmException If an error occurs on server side or on getting response. + * @throws \LDC\LDCCRM\Exceptions\ApiErrorException If any error or \LDC\LDCCRM\Enums\ApiError occurs. + * @author Jérémy Munsch + * @phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber + */ + public function updateApiData(CustomerCrmResource $resource): CrmCustomer + { + $data = $resource->toArray(null); + + /** @var \LDC\LDCCRM\CrmApiV2 */ + $crm = app('crmAPI'); + $crmCustomer = $crm->getCustomer($data['hashcode']); + if (!$crmCustomer) { + throw new CrmException('CRM get Customer returned null'); + } + + $crmCustomer->fill($data); + $crmCustomer->save(); + + return $crmCustomer; + } + + /** + * This mutate Customer attributes to array + * including only non critical properties and crm values + * (One that can be send to front office without security breach) + * + * @return array + */ + public function toArray() + { + if ($this->hashcode) { + return collect(array_merge( + parent::toArray(), + (array)$this->apiData + ))->intersectByKeys([ + 'email' => '', + 'firstname' => '', + 'lastname' => '', + 'address' => '', + 'address2' => '', + 'postcode' => '', + 'birth_date' => '', + 'city' => '', + 'country' => '', + 'opt_in' => '', + 'phone' => '' + ])->toArray(); + } else { + return parent::toArray(); + } + } +} diff --git a/app/Models/Customers.php b/app/Models/Customers.php deleted file mode 100644 index f317908..0000000 --- a/app/Models/Customers.php +++ /dev/null @@ -1,116 +0,0 @@ -hasOne(Salarie::class, 'customer_id'); - } - - /** - * Get the crm Data of a customer - * - * @return \LDC\LDCCRM\Models\Customer - * @throws \LDC\LDCCRM\Exceptions\CrmException If cannot fetch data from crm. - * @author Jérémy Munsch - */ - public function getApiDataAttribute(): CrmCustomer - { - /** @var \LDC\LDCCRM\CrmApiV2 */ - $crm = app('crmAPI'); - $crmCustomer = $crm->getCustomer($this->hashcode); - if (!$crmCustomer) { - throw new CrmException('CRM get Customer returned null'); - } - return $crmCustomer; - } - - /** - * Set the crm Data of a customer - * @param CustomerCrmResource $resource - * - * @return CrmCustomer - * - * @throws \LDC\LDCCRM\Exceptions\CrmException If an error occurs on server side or on getting response. - * @throws \LDC\LDCCRM\Exceptions\ApiErrorException If any error or \LDC\LDCCRM\Enums\ApiError occurs. - * @author Jérémy Munsch - * @phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber - */ - public function updateApiData(CustomerCrmResource $resource): CrmCustomer - { - $data = $resource->toArray(null); - - /** @var \LDC\LDCCRM\CrmApiV2 */ - $crm = app('crmAPI'); - $crmCustomer = $crm->getCustomer($data['hashcode']); - if (!$crmCustomer) { - throw new CrmException('CRM get Customer returned null'); - } - - $crmCustomer->fill($data); - $crmCustomer->save(); - - return $crmCustomer; - } - - /** - * This mutate Customer attributes to array - * including only non critical properties and crm values - * (One that can be send to front office without security breach) - * - * @return array - */ - public function toArray() - { - if ($this->hashcode) { - return collect(array_merge( - parent::toArray(), - (array)$this->apiData - ))->intersectByKeys([ - 'email' => '', - 'firstname' => '', - 'lastname' => '', - 'address' => '', - 'address2' => '', - 'postcode' => '', - 'birth_date' => '', - 'city' => '', - 'country' => '', - 'opt_in' => '', - 'phone' => '' - ])->toArray(); - } else { - return parent::toArray(); - } - } -} diff --git a/app/Models/Order.php b/app/Models/Order.php index d3637be..519c2ad 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -79,7 +79,7 @@ class Order extends Model */ public function customer() { - return $this->belongsTo(Customers::class); + return $this->belongsTo(Customer::class); } /** diff --git a/app/Models/Product.php b/app/Models/Product.php index 8fcf0d9..7deea56 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -33,6 +33,8 @@ use Kwaadpepper\Enum\Traits\CastsEnums; * @property float discountedPriceTtc|string Price after discount VAT included * @property float discountAmount Discount amount * @property float discountRate Discount rate + * @property array data The overlapped data like defined in template. + * @property array dataObject The overlapped data like defined in template as object. * * @package App\Models */ @@ -193,19 +195,7 @@ class Product extends Model implements Buyable */ public function discounts() { - return $this->belongsToMany(Discount::class) - ->whereDate('date_start', '<=', now()) - ->whereDate('date_end', '>=', now()); - } - - /** - * belongsTo tax relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function tax() - { - return $this->belongsTo(TaxRate::class); + return $this->belongsToMany(Discount::class, 'product_discount'); } /** @@ -295,15 +285,32 @@ class Product extends Model implements Buyable } /** - * Get inco nutritionnal values + * Getter data_object, the object overloaded attributes from theme * - * @return array + * @return object */ - public function getIncoNutritionalValues(): array + public function getDataObjectAttribute(): object { + return ToolboxHelper::arrayToObject($this->data); + } + + /** + * Get inco nutritionnal values, if product is inco. + * + * @return object|null + */ + public function getIncoNutritionalValues(): ?object + { + if (!$this->hasAndIsInco()) { + return null; + } $nutri_values = $this->xmlInco->nutritional_values; - return [ + if (empty($nutri_values)) { + return null; + } + + return (object)[ // Pour la ref. 'nv_ref_weight_g' => $nutri_values['taille_ref'], // Energie Kj. @@ -610,31 +617,6 @@ class Product extends Model implements Buyable return \intval($this->attributes['price']) / 100; } - /** - * Setter weight - * - * ! Stored as integer (grammes) - * - * @param float $value - * @return void - */ - public function setWeightAttribute(float $value) - { - $this->attributes['weight'] = \intval($value * 100); - } - - /** - * Getter weight - * - * ! Stored as (grammes) - * - * @return float - */ - public function getWeightAttribute(): float - { - return \intval($this->attributes['weight']) / 100; - } - // * Dynamic Minicrud inputs /** @@ -786,56 +768,42 @@ class Product extends Model implements Buyable /** * Getter for discounted price * - * @return float + * @return integer */ - public function getDiscountedPriceHtAttribute() + public function getDiscountedPriceHtAttribute(): int { - $discountedPriceHt = $this->priceHt - $this->discountAmount; - $roundingdiscountedPriceHt = round($discountedPriceHt * 1000) / 1000; - return \floatval($roundingdiscountedPriceHt); + return $this->priceHt - $this->discountAmount; } /** * Getter for net price * - * @return float + * @return integer */ - public function getPriceTtcAttribute() + public function getPriceTtcAttribute(): int { - $priceTtc = $this->priceHt * (1 + ($this->tax->rate / 100)); + $priceTtc = $this->priceHt * (1 + ($this->tax_rate->value / 100)); /** * On travaille avec des centimes puis on redivise par 100 pour avoir des unités monetaires * on augmente la précision à 3 digits, l'affichage formate les prix sur 2 décimales */ - return \floatval(round($priceTtc * 1000) / 1000); + return round($priceTtc); } /** * Getter for net discounted price * - * @return float|string + * @return integer */ public function getDiscountedPriceTtcAttribute() { - /** @var \App\Models\GeneralConfig */ - $config = Cache::get('GeneralConfigGlobal')->where('type', GeneralConfigType::global())->first(); - - $discountedPriceTtc = $this->discountedPriceHt * (1 + ($this->tax->rate / 100)); + $discountedPriceTtc = $this->discountedPriceHt * (1 + ($this->tax_rate->value / 100)); // On travaille avec des centimes puis on redivise par 100 pour avoir des unités monetaires. $roundingDiscountedPriceTTC = \floatval(round($discountedPriceTtc * 1000) / 1000); - // Prix transmis en fonction du setting show_prices. - if ( - $config->data['orders_display_prices_for_auth']['value'] and - Auth::guard('customer')->check() - ) { - return $roundingDiscountedPriceTTC; - } - if ($config->data['orders_display_prices_for_public']['value']) { - return $roundingDiscountedPriceTTC; - } - return '-.--'; + // * Show prices for anyone. + return $roundingDiscountedPriceTTC; } /** @@ -900,4 +868,30 @@ class Product extends Model implements Buyable // @phpcs:enable return \floatval($this->priceHt); } + + /** + * Config says to display prices ? + * @return boolean + */ + public static function displayPrices(): bool + { + /** @var \App\Models\GeneralConfig */ + $config = Cache::get('GeneralConfigGlobal')->where('type', GeneralConfigType::global())->first(); + if ($config->data['orders_display_prices_for_auth']['value']) { + return Auth::guard('frontend')->check(); + } + return true; + } + + /** + * Get displayable price value + * + * @param mixed $value + * @return string + */ + public static function fmtCurrency($value): string + { + return self::displayPrices() ? + sprintf('%s € TTC', number_format(\intval($value) / 100, 2, ',', ' ')) : '-.-- €'; + } } diff --git a/app/Models/Slider.php b/app/Models/Slider.php index 83588fd..5769c7c 100644 --- a/app/Models/Slider.php +++ b/app/Models/Slider.php @@ -81,11 +81,11 @@ class Slider extends Model } /** - * filtered slides relation by showable date + * Getter showable_slides filtered slides relation by showable date * * @return \Illuminate\Database\Eloquent\Relations\HasMany */ - public function showableSlides() + public function getShowableSlidesAttribute() { $now = Carbon::now(); return $this->hasMany(Slide::class, 'slider_id') diff --git a/app/Models/User.php b/app/Models/User.php index 8e9b657..ebbbe36 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,13 +2,16 @@ namespace App\Models; +use App\Enums\UserRole; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Facades\Hash; +use Kwaadpepper\Enum\Traits\CastsEnums; class User extends Authenticatable { + use CastsEnums; use HasFactory; use Notifiable; @@ -45,6 +48,15 @@ class User extends Authenticatable 'email_verified_at' => 'datetime', ]; + /** + * The attributes that should be cast to Enums. + * + * @var array + */ + protected $enumCasts = [ + 'role' => UserRole::class, + ]; + /** * Perform any actions required after the model boots. * diff --git a/app/Notifications/Customer/ResetPassword.php b/app/Notifications/Customer/ResetPassword.php new file mode 100644 index 0000000..1a7ef73 --- /dev/null +++ b/app/Notifications/Customer/ResetPassword.php @@ -0,0 +1,23 @@ +resetUrl($notifiable); + + return new PasswordResetMail($notifiable, $resetUrl); + } +} diff --git a/app/Notifications/Customer/VerifyEmail.php b/app/Notifications/Customer/VerifyEmail.php new file mode 100644 index 0000000..441492f --- /dev/null +++ b/app/Notifications/Customer/VerifyEmail.php @@ -0,0 +1,27 @@ +verificationUrl($notifiable); + + return new RegisterConfirmMail( + $notifiable, + $verificationUrl, + $notifiable->api_data->firstname + ); + } +} diff --git a/app/Policies/ProductPolicy.php b/app/Policies/ProductPolicy.php index 5601348..0ae8e39 100644 --- a/app/Policies/ProductPolicy.php +++ b/app/Policies/ProductPolicy.php @@ -21,8 +21,8 @@ class ProductPolicy } /** - * @param App\Models\User|App\Models\Customers $user - * @param \App\Models\Product $product + * @param App\Models\User|App\Models\Customer $user + * @param \App\Models\Product $product * * @return \Illuminate\Auth\Access\Response * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index c752467..0e24b0a 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -79,13 +79,12 @@ class AppServiceProvider extends ServiceProvider View::share('published_tags', $tags); } - Blade::directive('fmt_currency', function ($expression) { - return ""; + Blade::directive('fmt_sellunit', function ($expression) { + if (config('bosettings.sell_unit_management') == "strict") { + return "label); } ?>"; + } else { + return ""; + } }); Blade::directive('excerpt_product_title', function ($expression) { diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index a9dc7c3..e8bc759 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Auth\CrmUserProvider; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider @@ -13,6 +14,10 @@ class AuthServiceProvider extends ServiceProvider */ public function boot() { + $this->app->auth->provider('crm', function ($app, array $config) { + return new CrmUserProvider($app['hash'], $config['model']); + }); + $this->registerPolicies(); } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 89dff61..1887f4d 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,7 +2,11 @@ namespace App\Providers; +use App\Events\LogVerifiedUser; +use App\Events\PasswordHasReset; +use Illuminate\Auth\Events\PasswordReset; use Illuminate\Auth\Events\Registered; +use Illuminate\Auth\Events\Verified; use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; @@ -17,6 +21,12 @@ class EventServiceProvider extends ServiceProvider Registered::class => [ SendEmailVerificationNotification::class, ], + Verified::class => [ + LogVerifiedUser::class + ], + PasswordReset::class => [ + PasswordHasReset::class + ], ]; /** diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index a9e9ad8..a558070 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -43,10 +43,19 @@ class RouteServiceProvider extends ServiceProvider $this->routes(function () { Route::middleware('web') - ->namespace($this->namespace) - ->group(base_path('routes/web.php')); + ->namespace($this->namespace) + ->group(base_path('routes/web-bo.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web-fo.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web-shop.php')); }); + // * BINDERS Route::model('discount', Discount::class); Route::model('product', Product::class); Route::model('range', Range::class); @@ -85,9 +94,15 @@ class RouteServiceProvider extends ServiceProvider */ protected function configureRateLimiting() { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(150)->by(optional($request->user())->id ?: app('clientIp')); + }); RateLimiter::for('web', function (Request $request) { return Limit::perMinute(150)->by(optional($request->user())->id ?: app('clientIp')); }); + RateLimiter::for('credentials', function (Request $request) { + return Limit::perMinute(30)->by(optional($request->user())->id ?: $request->ip()); + }); } /** diff --git a/app/Rules/CrmCustomerPassword.php b/app/Rules/CrmCustomerPassword.php new file mode 100644 index 0000000..b3c9c30 --- /dev/null +++ b/app/Rules/CrmCustomerPassword.php @@ -0,0 +1,64 @@ +crmCustomer = $crmCustomer; + } + + /** + * Determine if the validation rule passes. + * + * @param mixed $attribute + * @param mixed $value + * @return boolean + * @throws \LDC\LDCCRM\Exceptions\ApiErrorException If any unhandled error occurs. + * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed + */ + public function passes($attribute, $value) + { + // phpcs:enable + try { + return Customer::login($this->crmCustomer->email, strval($value)); + } catch (ApiErrorException $e) { + if ($e->getApiError()->equals(ApiError::authFailed())) { + return false; + } + throw $e; + } + + // Pass. + return true; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return trans('Votre ancien mot de passe n\'as pu être vérifié'); + } +} diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore old mode 100644 new mode 100755 diff --git a/composer.json b/composer.json index 7c65592..2d6af16 100644 --- a/composer.json +++ b/composer.json @@ -22,9 +22,10 @@ "kwaadpepper/image-resizer": "^0.1.2", "laravel/framework": "^8.83", "laravel/tinker": "^2.5", + "laravel/ui": "^3.4", "ldc/ldccrmv2client": "^3.0", "mews/purifier": "^3.3", - "propaganistas/laravel-phone": "^4.3", + "propaganistas/laravel-phone": "^4.4", "spatie/laravel-sitemap": "^5.8" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 7d2996c..acdccec 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c943a3eea10496c9e31f2d7be2a3999c", + "content-hash": "889af30f60588d725b5c17d1cacb64eb", "packages": [ { "name": "alexusmai/laravel-file-manager", @@ -2078,6 +2078,67 @@ }, "time": "2022-03-23T12:38:24+00:00" }, + { + "name": "laravel/ui", + "version": "v3.4.6", + "source": { + "type": "git", + "url": "https://github.com/laravel/ui.git", + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/ui/zipball/65ec5c03f7fee2c8ecae785795b829a15be48c2c", + "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.42|^9.0", + "illuminate/filesystem": "^8.42|^9.0", + "illuminate/support": "^8.82|^9.0", + "illuminate/validation": "^8.42|^9.0", + "php": "^7.3|^8.0" + }, + "require-dev": { + "orchestra/testbench": "^6.23|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Ui\\UiServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel UI utilities and presets.", + "keywords": [ + "laravel", + "ui" + ], + "support": { + "source": "https://github.com/laravel/ui/tree/v3.4.6" + }, + "time": "2022-05-20T13:38:08+00:00" + }, { "name": "ldc/ldccrmv2client", "version": "3.0.5", @@ -3034,16 +3095,16 @@ }, { "name": "propaganistas/laravel-phone", - "version": "4.3.8", + "version": "4.4.0", "source": { "type": "git", "url": "https://github.com/Propaganistas/Laravel-Phone.git", - "reference": "5b0fef1d28e720c0a594fe0f22cb1d5b1d576474" + "reference": "ba5aa49226793faf4bd37b38bd627d49269611d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/5b0fef1d28e720c0a594fe0f22cb1d5b1d576474", - "reference": "5b0fef1d28e720c0a594fe0f22cb1d5b1d576474", + "url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/ba5aa49226793faf4bd37b38bd627d49269611d9", + "reference": "ba5aa49226793faf4bd37b38bd627d49269611d9", "shasum": "" }, "require": { @@ -3094,9 +3155,9 @@ ], "support": { "issues": "https://github.com/Propaganistas/Laravel-Phone/issues", - "source": "https://github.com/Propaganistas/Laravel-Phone/tree/4.3.8" + "source": "https://github.com/Propaganistas/Laravel-Phone/tree/4.4.0" }, - "time": "2022-09-04T18:30:31+00:00" + "time": "2022-11-10T09:52:44+00:00" }, { "name": "psr/container", diff --git a/config/auth.php b/config/auth.php index 2e77316..656bdba 100644 --- a/config/auth.php +++ b/config/auth.php @@ -14,7 +14,7 @@ return [ */ 'defaults' => [ - 'guard' => 'web', + 'guard' => 'backend', 'passwords' => 'users', ], @@ -36,21 +36,21 @@ return [ */ 'guards' => [ - 'web' => [ + 'backend' => [ 'driver' => 'session', 'provider' => 'users', ], + 'frontend' => [ + 'driver' => 'session', + 'provider' => 'customers', + ], + 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], - - 'customer' => [ - 'driver' => 'session', - 'provider' => 'customers', - ], ], /* @@ -70,6 +70,7 @@ return [ | */ + // * Added "crm" Provider (AuthServiceProvider) 'providers' => [ 'users' => [ 'driver' => 'eloquent', @@ -77,8 +78,8 @@ return [ ], 'customers' => [ - 'driver' => 'eloquent', - 'model' => App\Models\Customers::class, + 'driver' => 'crm', + 'model' => App\Models\Customer::class, ] ], @@ -98,9 +99,9 @@ return [ */ 'passwords' => [ - 'users' => [ - 'provider' => 'users', - 'table' => 'password_resets', + 'customers' => [ + 'provider' => 'customers', + 'table' => 'customer_password_resets', 'expire' => 60, 'throttle' => 60, ], diff --git a/config/ldcweb-cookies.php b/config/ldcweb-cookies.php new file mode 100644 index 0000000..b0d0322 --- /dev/null +++ b/config/ldcweb-cookies.php @@ -0,0 +1,10 @@ + env('ANALYTICS_GOOGLE_ID') +]; diff --git a/database/migrations/2022_10_07_165456_migrate_settings_to_general_configs.php b/database/migrations/2022_10_07_165456_migrate_settings_to_general_configs.php index 9776552..5dee68d 100644 --- a/database/migrations/2022_10_07_165456_migrate_settings_to_general_configs.php +++ b/database/migrations/2022_10_07_165456_migrate_settings_to_general_configs.php @@ -38,47 +38,22 @@ class MigrateSettingsToGeneralConfigs extends Migration 'tooltip' => 'Adresse email à laquelle seront envoyé les formulaires de contact.' ], 'confirmed_orders_destination_email' => [ - 'label' => 'Adresse de reception des messages "contactez nous"', + 'label' => 'Adresse de reception des messages "nouvelle commande"', 'inputType' => InputType::email(), 'value' => 'equipe.web@ldc.fr', 'validate' => 'required|email:strict,rfc,spoof,dns', 'helper' => 'Information lorsqu\'un client valide une commande', 'tooltip' => '' ], - 'customer_register_public_mode' => [ - 'label' => 'Public', - 'inputType' => InputType::boolean(), - 'value' => true, - 'validate' => 'boolean', - 'helper' => 'Mode d\'inscription', - 'tooltip' => sprintf( - '%s %s %s', - // phpcs:disable - 'La partie front office de votre boutique doit tenir compte de ce paramètre pour qu\'il prenne effet.', - '
Le thème doit indiquer quel modes sont pris en charge via la config de thème: register_mode', - '
Si aucun choix ne s\'affiche c\'est que votre boutique ne gère que l\'inscription tous publics.' - // phpcs:enable - ) - - ], 'orders_display_prices_for_auth' => [ - 'label' => 'Client Connecté ', + 'label' => 'Prix uniquement pour les clients connectés', 'inputType' => InputType::boolean(), 'value' => true, 'validate' => 'boolean', - 'helper' => 'Affichage des prix', + 'helper' => 'Afficher les prix uniquement pour les clients connectés', 'tooltip' => // phpcs:ignore Generic.Files.LineLength.TooLong - 'Affichage des prix sous certaines conditions :
  • Client Connecté
  • Public
' - ], - 'orders_display_prices_for_public' => [ - 'label' => 'Public', - 'inputType' => InputType::boolean(), - 'value' => true, - 'validate' => 'boolean', - 'helper' => '', - 'tooltip' => '' - + 'Affichage des prix sous certaines conditions :
  • Client Connecté
' ], ] ]); diff --git a/database/migrations/2022_10_10_154513_rework_products.php b/database/migrations/2022_10_10_154513_rework_products.php index 62ef1e5..e5274c5 100644 --- a/database/migrations/2022_10_10_154513_rework_products.php +++ b/database/migrations/2022_10_10_154513_rework_products.php @@ -1,6 +1,7 @@ each(function (object $product) { $weight = 0; if (Str::lower($product->weight_unit) === 'g') { - $weight = intval($product->weight); + $weight = round($product->weight); } if (Str::lower($product->weight_unit) === 'kg') { - $weight = intval($product->weight) * 1000; + $weight = round($product->weight * WeightUnit::kg()->conversion); } if (Str::lower($product->weight_unit) === 'ton') { - $weight = intval($product->weight) * 1000 * 1000; + $weight = round($product->weight * WeightUnit::ton()->conversion); } DB::table('products')->where('id', $product->id)->update([ 'weight' => $weight, diff --git a/database/migrations/2022_11_15_101227_add_date_fileds_on_customers.php b/database/migrations/2022_11_15_101227_add_date_fileds_on_customers.php new file mode 100644 index 0000000..a9ce459 --- /dev/null +++ b/database/migrations/2022_11_15_101227_add_date_fileds_on_customers.php @@ -0,0 +1,34 @@ +timestamp('email_verified_at')->nullable()->after('remember_token'); + $table->timestamp('last_connection')->nullable()->after('email_verified_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('customers', function (Blueprint $table) { + $table->dropColumn('email_verified_at'); + $table->dropColumn('last_connection'); + }); + } +} diff --git a/database/migrations/2022_11_15_600000_create_customer_password_resets_table.php b/database/migrations/2022_11_15_600000_create_customer_password_resets_table.php new file mode 100644 index 0000000..837284c --- /dev/null +++ b/database/migrations/2022_11_15_600000_create_customer_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('customer_password_resets'); + } +}; diff --git a/package-lock.json b/package-lock.json index 7ec86f9..568a8f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@voerro/vue-tagsinput": "^2.7.1", "@vue/eslint-config-typescript": "^11.0.1", "axios": "^0.21.1", - "bootstrap": "^5.1.3", + "bootstrap": "^5.2.2", "clean-webpack-plugin": "^4.0.0", "cropperjs": "^1.5.12", "eslint": "^8.23.1", @@ -88,30 +88,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", - "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", - "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.3", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -136,12 +136,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", "dev": true, "dependencies": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.20.2", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -189,12 +189,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.19.3", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -216,9 +216,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -226,7 +226,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -349,19 +349,19 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -380,9 +380,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -423,24 +423,24 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -459,9 +459,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -501,14 +501,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", "dev": true, "dependencies": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -600,9 +600,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -644,9 +644,9 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", - "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -791,16 +791,16 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.1" }, "engines": { "node": ">=6.9.0" @@ -956,12 +956,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1132,12 +1132,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1147,18 +1147,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-compilation-targets": "^7.20.0", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, @@ -1194,12 +1194,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", - "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1318,14 +1318,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1335,15 +1334,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -1353,16 +1351,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", - "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { "node": ">=6.9.0" @@ -1435,12 +1432,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1496,9 +1493,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", - "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.18.6", @@ -1632,18 +1629,18 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.3.tgz", - "integrity": "sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", @@ -1652,7 +1649,7 @@ "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.18.9", "@babel/plugin-proposal-private-methods": "^7.18.6", @@ -1663,7 +1660,7 @@ "@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.18.6", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@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", @@ -1676,10 +1673,10 @@ "@babel/plugin-transform-arrow-functions": "^7.18.6", "@babel/plugin-transform-async-to-generator": "^7.18.6", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.13", + "@babel/plugin-transform-destructuring": "^7.20.2", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", @@ -1687,14 +1684,14 @@ "@babel/plugin-transform-function-name": "^7.18.9", "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", "@babel/plugin-transform-modules-umd": "^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-parameters": "^7.20.1", "@babel/plugin-transform-property-literals": "^7.18.6", "@babel/plugin-transform-regenerator": "^7.18.6", "@babel/plugin-transform-reserved-words": "^7.18.6", @@ -1706,7 +1703,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.3", + "@babel/types": "^7.20.2", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -1746,12 +1743,12 @@ } }, "node_modules/@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.10" }, "engines": { "node": ">=6.9.0" @@ -1772,19 +1769,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.20.1", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1802,12 +1799,12 @@ } }, "node_modules/@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, @@ -1852,9 +1849,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1946,9 +1943,9 @@ } }, "node_modules/@fortawesome/vue-fontawesome": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.1.tgz", - "integrity": "sha512-CdXZJoCS+aEPec26ZP7hWWU3SaJlQPZSCGdgpQ2qGl2HUmtUUNrI3zC4XWdn1JUmh3t5OuDeRG1qB4eGRNSD4A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.2.tgz", + "integrity": "sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==", "dev": true, "peerDependencies": { "@fortawesome/fontawesome-svg-core": "~1 || ~6", @@ -1956,29 +1953,19 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -2060,13 +2047,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { @@ -2151,9 +2138,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2249,9 +2236,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", - "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2396,9 +2383,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.8.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz", - "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==", + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -2431,6 +2418,12 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -2487,9 +2480,9 @@ } }, "node_modules/@types/vue-select/node_modules/@vue/compiler-sfc": { - "version": "2.7.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.11.tgz", - "integrity": "sha512-Cf8zvrZWjROgd8yPL8Tc+O3q/Y8ZGM0Y+8blrAvj1RQsVouzUY0oHcx8BA7Hybhb90JRnzeApFrlQGZRUdYpRw==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", "dev": true, "dependencies": { "@babel/parser": "^7.18.4", @@ -2504,12 +2497,12 @@ "dev": true }, "node_modules/@types/vue-select/node_modules/vue": { - "version": "2.7.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.11.tgz", - "integrity": "sha512-VPAW5QelT7Tx6UoSw/cwx/jDROOKAK1y/Q0o7HkmVJ1WAypE7w1+UoFa+KsGxy1aYdHPU1oODB3vR6XwSfVhDg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", "dev": true, "dependencies": { - "@vue/compiler-sfc": "2.7.11", + "@vue/compiler-sfc": "2.7.14", "csstype": "^3.1.0" } }, @@ -2529,16 +2522,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", - "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", + "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/type-utils": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/type-utils": "5.42.1", + "@typescript-eslint/utils": "5.42.1", "debug": "^4.3.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -2561,14 +2555,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", - "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", + "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "debug": "^4.3.4" }, "engines": { @@ -2588,13 +2582,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", - "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", + "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0" + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2605,13 +2599,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", - "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", + "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/utils": "5.42.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2632,9 +2626,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", - "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", + "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2645,13 +2639,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", - "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", + "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2672,17 +2666,19 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", - "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", + "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2696,12 +2692,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", - "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", + "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/types": "5.42.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2719,39 +2715,39 @@ "dev": true }, "node_modules/@vue/compiler-core": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.40.tgz", - "integrity": "sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.43.tgz", + "integrity": "sha512-YLr9MXkKHFWVVahNWSwISzrcjNPbERDT9Zn0ZyIsHsDslGMV4Jv28X+pDhaVFYt8+Tgy4iNbQMe/5O0oNlhaeQ==", "dev": true, "dependencies": { "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.40", + "@vue/shared": "3.2.43", "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.40.tgz", - "integrity": "sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.43.tgz", + "integrity": "sha512-LIhLMArN4hkRyECQSUB56z/wsF2JdGMDsG06e3ZAJAaNcGaMQLLzhF667hklouTZeHbWVCe8c7qkDPVs21Zu9Q==", "dev": true, "dependencies": { - "@vue/compiler-core": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-core": "3.2.43", + "@vue/shared": "3.2.43" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.40.tgz", - "integrity": "sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.43.tgz", + "integrity": "sha512-YBv94ASxDxTuiE0PvvERs1+Zq9KWAMrZEHpvhVzEJsANJnqqveJ18d0tSvTU6jPlF2BWFQDO3JfiGm7biQd36g==", "dev": true, "dependencies": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.40", - "@vue/compiler-dom": "3.2.40", - "@vue/compiler-ssr": "3.2.40", - "@vue/reactivity-transform": "3.2.40", - "@vue/shared": "3.2.40", + "@vue/compiler-core": "3.2.43", + "@vue/compiler-dom": "3.2.43", + "@vue/compiler-ssr": "3.2.43", + "@vue/reactivity-transform": "3.2.43", + "@vue/shared": "3.2.43", "estree-walker": "^2.0.2", "magic-string": "^0.25.7", "postcss": "^8.1.10", @@ -2759,19 +2755,19 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.40.tgz", - "integrity": "sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.43.tgz", + "integrity": "sha512-IoYbnhaH0WbJ16pxArPTlqbnJ3Bqj5+seTg4AeBvS8HAb0b2EQQw8PpgcyrvzdIOIFq9FLfpWTbixdhVMYofyg==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-dom": "3.2.43", + "@vue/shared": "3.2.43" } }, "node_modules/@vue/devtools-api": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.3.tgz", - "integrity": "sha512-9WCRwdROJvWcHAdyrR7SZMM/qUvllDZnpndHXokThkUsjnJ2xe4/pvsH9FZrxFe22L+JmDKczL79HjLJ7DK9rg==", + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz", + "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==", "dev": true }, "node_modules/@vue/eslint-config-typescript": { @@ -2799,65 +2795,65 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.40.tgz", - "integrity": "sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.43.tgz", + "integrity": "sha512-LzOxeaTZPTpj9qHCArOJXNa73ky8M7g28prqsd7Kxjxvs7i0EmpHEFASoK7QpYyfmIOh/UjJA+0jaD/iMIiRFg==", "dev": true, "dependencies": { - "@vue/shared": "3.2.40" + "@vue/shared": "3.2.43" } }, "node_modules/@vue/reactivity-transform": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.40.tgz", - "integrity": "sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.43.tgz", + "integrity": "sha512-TGRvlD3Y8DTHGKg1VJYOMwC6CbrjNYh3wwUCKtwHSEv0uYdXjyn8r5KtklehP58G+opv6K2DhyBNPNhvSt9ttw==", "dev": true, "dependencies": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.40", - "@vue/shared": "3.2.40", + "@vue/compiler-core": "3.2.43", + "@vue/shared": "3.2.43", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "node_modules/@vue/runtime-core": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.40.tgz", - "integrity": "sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.43.tgz", + "integrity": "sha512-rLm4b0+mVENn7D42pXL3tNqb7vtQ3Hjy2WThMd9WGlPSJr/BxxbomzUf6V5MBf40Qx698FSJeORZ00hH+jvixw==", "dev": true, "dependencies": { - "@vue/reactivity": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/reactivity": "3.2.43", + "@vue/shared": "3.2.43" } }, "node_modules/@vue/runtime-dom": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.40.tgz", - "integrity": "sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.43.tgz", + "integrity": "sha512-hDxrqUzBrXbIItQ9n5pePVf4itRbNpYh3xt5K+fRYvBu4GXOULoS+DmO77DctvBLwdgBaLMc1aOmKIL1TzRA7g==", "dev": true, "dependencies": { - "@vue/runtime-core": "3.2.40", - "@vue/shared": "3.2.40", + "@vue/runtime-core": "3.2.43", + "@vue/shared": "3.2.43", "csstype": "^2.6.8" } }, "node_modules/@vue/server-renderer": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.40.tgz", - "integrity": "sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.43.tgz", + "integrity": "sha512-T6mXBRCOOu6zJiQxySp5sRzW1P9NhXQXssRJA/KI8N40etGO+rwZgahc8uQvruVQvK56BSru+1kGQeuQ9qliPg==", "dev": true, "dependencies": { - "@vue/compiler-ssr": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-ssr": "3.2.43", + "@vue/shared": "3.2.43" }, "peerDependencies": { - "vue": "3.2.40" + "vue": "3.2.43" } }, "node_modules/@vue/shared": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.40.tgz", - "integrity": "sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.43.tgz", + "integrity": "sha512-zPhXJ0evblbcI3qOwUxliOoH90ecp2J1171RFrHXNC58EzzxXGPJ/X0FyIvuC9SvZNe8wpX4OcWhblPDSwT8Rw==", "dev": true }, "node_modules/@webassemblyjs/ast": { @@ -3068,9 +3064,9 @@ } }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3315,9 +3311,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "funding": [ { @@ -3331,7 +3327,7 @@ ], "dependencies": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -3357,9 +3353,9 @@ } }, "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dev": true, "dependencies": { "find-cache-dir": "^3.3.1", @@ -3393,15 +3389,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -3507,9 +3494,9 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "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", @@ -3520,7 +3507,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -3697,26 +3684,6 @@ "node": ">= 6" } }, - "node_modules/browserify-sign/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/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", @@ -3863,9 +3830,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001416", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz", - "integrity": "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==", + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", "dev": true, "funding": [ { @@ -4139,6 +4106,12 @@ "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": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", @@ -4205,26 +4178,6 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/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/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -4235,13 +4188,10 @@ } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } + "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.5.0", @@ -4259,9 +4209,9 @@ "dev": true }, "node_modules/core-js": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", - "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", + "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==", "dev": true, "hasInstallScript": true, "funding": { @@ -4270,9 +4220,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", + "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", "dev": true, "dependencies": { "browserslist": "^4.21.4" @@ -4534,12 +4484,12 @@ } }, "node_modules/cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.2.12", + "cssnano-preset-default": "^5.2.13", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -4555,25 +4505,25 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", "dev": true, "dependencies": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -4581,11 +4531,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.1", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -4654,9 +4604,9 @@ } }, "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", @@ -4664,6 +4614,9 @@ }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { @@ -4702,22 +4655,6 @@ "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -5003,9 +4940,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.274", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.274.tgz", - "integrity": "sha512-Fgn7JZQzq85I81FpKUNxVLAzoghy8JZJ4NIue+YfUYBbu1AkpgzFvNwzF/ZNZH9ElkmJD0TSWu1F2gTpw/zZlg==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, "node_modules/elliptic": { @@ -5130,15 +5067,15 @@ } }, "node_modules/eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", - "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5154,14 +5091,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", + "glob-parent": "^6.0.2", "globals": "^13.15.0", - "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -5186,9 +5123,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.6.0.tgz", - "integrity": "sha512-zzySkJgVbFCylnG2+9MDF7N+2Rjze2y0bF8GyUNpFOnT8mCMfqqtLDJkHBuYu9N/psW1A6DVbQhPkP92E+qakA==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.7.0.tgz", + "integrity": "sha512-DrOO3WZCZEwcLsnd3ohFwqCoipGRSTKTBTnLwdhqAbYZtzWl0o7D+D8ZhlmiZvABKTEl8AFsqH1GHGdybyoQmw==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", @@ -5302,9 +5239,9 @@ } }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -5442,14 +5379,14 @@ } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "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.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -5468,7 +5405,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -5504,26 +5441,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/express/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/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6083,18 +6000,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "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", @@ -6135,26 +6040,6 @@ "node": ">= 6" } }, - "node_modules/hash-base/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/hash-sum": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", @@ -6561,9 +6446,9 @@ } }, "node_modules/img-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz", + "integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==", "dev": true, "dependencies": { "big.js": "^5.2.2", @@ -6707,9 +6592,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -6793,7 +6678,7 @@ "node": ">=6" } }, - "node_modules/is-path-inside": { + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", @@ -6805,6 +6690,15 @@ "node": ">=6" } }, + "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": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -7009,9 +6903,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", - "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, "node_modules/laravel-mix": { @@ -7177,9 +7071,9 @@ } }, "node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz", + "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==", "dev": true, "dependencies": { "big.js": "^5.2.2", @@ -7355,9 +7249,9 @@ } }, "node_modules/memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.10.tgz", + "integrity": "sha512-0bCUP+L79P4am30yP1msPzApwuMQG23TjwlwdHeEV5MxioDR1a0AgB0T9FfggU52eJuDCq8WVwb5ekznFyWiTQ==", "dev": true, "dependencies": { "fs-monkey": "^1.0.3" @@ -7581,10 +7475,13 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minimist-options": { "version": "4.1.0", @@ -7637,6 +7534,12 @@ "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/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -7815,33 +7718,6 @@ "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "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", @@ -8284,9 +8160,9 @@ } }, "node_modules/postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "funding": [ { @@ -8339,12 +8215,12 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "dependencies": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8460,13 +8336,13 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8476,12 +8352,12 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -8526,12 +8402,12 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" }, @@ -8704,12 +8580,12 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8767,12 +8643,12 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" }, "engines": { @@ -9024,9 +8900,9 @@ "dev": true }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "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" @@ -9282,6 +9158,12 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/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/readable-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -9347,9 +9229,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", "dev": true }, "node_modules/regenerator-transform": { @@ -9593,10 +9475,24 @@ } }, "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 + "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", @@ -9605,9 +9501,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz", - "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -10173,9 +10069,9 @@ } }, "node_modules/std-env": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.2.1.tgz", - "integrity": "sha512-D/uYFWkI/31OrnKmXZqGAGK5GbQRPp/BWA1nuITcc6ICblhhuQUPHS5E2GSCVS7Hwhf4ciq8qsATwBUxv+lI6w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", + "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==", "dev": true }, "node_modules/stream-browserify": { @@ -10210,26 +10106,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/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/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -10334,12 +10210,12 @@ "dev": true }, "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" }, "engines": { @@ -10350,9 +10226,9 @@ } }, "node_modules/stylelint": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.13.0.tgz", - "integrity": "sha512-NJSAdloiAB/jgVJKxMR90mWlctvmeBFGFVUvyKngi9+j/qPSJ5ZB+u8jOmGbLTnS7OHrII9NFGehPRyar8U5vg==", + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.14.1.tgz", + "integrity": "sha512-Jnftu+lSD8cSpcV/+Z2nfgfgFpTIS1FcujezXPngtoIQ6wtwutL22MsNE0dJuMiM1h1790g2qIjAyUZCMrX4sw==", "dev": true, "dependencies": { "@csstools/selector-specificity": "^2.0.2", @@ -10372,13 +10248,13 @@ "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.25.0", + "known-css-properties": "^0.26.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.16", + "postcss": "^8.4.18", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", @@ -10390,7 +10266,7 @@ "style-search": "^0.1.0", "supports-hyperlinks": "^2.3.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", + "table": "^6.8.1", "v8-compile-cache": "^2.3.0", "write-file-atomic": "^4.0.2" }, @@ -10617,13 +10493,13 @@ } }, "node_modules/sweetalert2": { - "version": "11.4.37", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.4.37.tgz", - "integrity": "sha512-8thABjykReRzpMlgEY0BP876ZqI6dD9WxMpFftHt4dmUKQzDv23Td6Q6cz6YybyiYWPCodBk57PeIobqaGNgqw==", + "version": "11.6.7", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.6.7.tgz", + "integrity": "sha512-nbsmUtfTodJvZ873sn61U0brrHtn8xi8wfn+bVVc9IV05fgOdDMhAhdQ2zQJBYsvggbbp46ZFHMr0/fZJnZPtQ==", "dev": true, "funding": { "type": "individual", - "url": "https://sweetalert2.github.io/#donations" + "url": "https://github.com/sponsors/limonte" } }, "node_modules/swiper": { @@ -10651,9 +10527,9 @@ } }, "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -10897,9 +10773,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "node_modules/tsutils": { @@ -11174,16 +11050,16 @@ "dev": true }, "node_modules/vue": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.40.tgz", - "integrity": "sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.43.tgz", + "integrity": "sha512-rGUDDftb7VF2vLp0LnzcZ6R2tG/4BvMd/qOisZAGSxzsW+FysWtmGIN5c4gduaMWRo+IBrjTRiZD4bLh2FF4lw==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.2.40", - "@vue/compiler-sfc": "3.2.40", - "@vue/runtime-dom": "3.2.40", - "@vue/server-renderer": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-dom": "3.2.43", + "@vue/compiler-sfc": "3.2.43", + "@vue/runtime-dom": "3.2.43", + "@vue/server-renderer": "3.2.43", + "@vue/shared": "3.2.43" } }, "node_modules/vue-eslint-parser": { @@ -11284,9 +11160,9 @@ } }, "node_modules/vue-style-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz", + "integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==", "dev": true, "dependencies": { "big.js": "^5.2.2", @@ -11322,15 +11198,15 @@ } }, "node_modules/vuex": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", - "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", "dev": true, "dependencies": { "@vue/devtools-api": "^6.0.0-beta.11" }, "peerDependencies": { - "vue": "^3.0.2" + "vue": "^3.2.0" } }, "node_modules/watchpack": { @@ -11356,9 +11232,9 @@ } }, "node_modules/webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -11724,9 +11600,9 @@ } }, "node_modules/ws": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "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" @@ -11787,9 +11663,9 @@ } }, "node_modules/yargs": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", - "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, "dependencies": { "cliui": "^8.0.1", @@ -11798,7 +11674,7 @@ "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" @@ -11856,27 +11732,27 @@ } }, "@babel/compat-data": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", - "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", "dev": true }, "@babel/core": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", - "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.3", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -11893,12 +11769,12 @@ } }, "@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", + "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", "dev": true, "requires": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.20.2", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -11936,12 +11812,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.19.3", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -11956,9 +11832,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", - "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", + "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -11966,7 +11842,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6" } }, @@ -12055,19 +11931,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" } }, "@babel/helper-optimise-call-expression": { @@ -12080,9 +11956,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { @@ -12111,21 +11987,21 @@ } }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" } }, "@babel/helper-split-export-declaration": { @@ -12138,9 +12014,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "dev": true }, "@babel/helper-validator-identifier": { @@ -12168,14 +12044,14 @@ } }, "@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", "dev": true, "requires": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" } }, "@babel/highlight": { @@ -12248,9 +12124,9 @@ } }, "@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -12274,9 +12150,9 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", - "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", + "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -12367,16 +12243,16 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", + "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.1" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -12478,12 +12354,12 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-syntax-json-strings": { @@ -12597,27 +12473,27 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", + "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-classes": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz", - "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", + "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-compilation-targets": "^7.20.0", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, @@ -12640,12 +12516,12 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", - "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", + "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-dotall-regex": { @@ -12716,39 +12592,36 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", + "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", + "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.19.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-simple-access": "^7.19.4" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz", - "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", + "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.6", "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-validator-identifier": "^7.19.1" } }, "@babel/plugin-transform-modules-umd": { @@ -12791,12 +12664,12 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", + "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-property-literals": { @@ -12828,9 +12701,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", - "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.18.6", @@ -12915,18 +12788,18 @@ } }, "@babel/preset-env": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.3.tgz", - "integrity": "sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", "dev": true, "requires": { - "@babel/compat-data": "^7.19.3", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.1", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", @@ -12935,7 +12808,7 @@ "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.18.9", "@babel/plugin-proposal-private-methods": "^7.18.6", @@ -12946,7 +12819,7 @@ "@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.18.6", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@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", @@ -12959,10 +12832,10 @@ "@babel/plugin-transform-arrow-functions": "^7.18.6", "@babel/plugin-transform-async-to-generator": "^7.18.6", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.19.0", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.13", + "@babel/plugin-transform-destructuring": "^7.20.2", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", @@ -12970,14 +12843,14 @@ "@babel/plugin-transform-function-name": "^7.18.9", "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.0", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", "@babel/plugin-transform-modules-umd": "^7.18.6", "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-parameters": "^7.20.1", "@babel/plugin-transform-property-literals": "^7.18.6", "@babel/plugin-transform-regenerator": "^7.18.6", "@babel/plugin-transform-reserved-words": "^7.18.6", @@ -12989,7 +12862,7 @@ "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.3", + "@babel/types": "^7.20.2", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -13019,12 +12892,12 @@ } }, "@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", + "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.10" } }, "@babel/template": { @@ -13039,19 +12912,19 @@ } }, "@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.20.1", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -13065,12 +12938,12 @@ } }, "@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } @@ -13096,9 +12969,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", - "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -13162,29 +13035,23 @@ } }, "@fortawesome/vue-fontawesome": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.1.tgz", - "integrity": "sha512-CdXZJoCS+aEPec26ZP7hWWU3SaJlQPZSCGdgpQ2qGl2HUmtUUNrI3zC4XWdn1JUmh3t5OuDeRG1qB4eGRNSD4A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.2.tgz", + "integrity": "sha512-xHVtVY8ASUeEvgcA/7vULUesENhD+pi/EirRHdMBqooHlXBqK+yrV6d8tUye1m5UKQKVgYAHMhUBfOnoiwvc8Q==", "dev": true, "requires": {} }, "@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -13249,13 +13116,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@leichtgewicht/ip-codec": { @@ -13320,9 +13187,9 @@ "dev": true }, "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "version": "7.1.20", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", + "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -13418,9 +13285,9 @@ } }, "@types/eslint": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", - "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", "dev": true, "requires": { "@types/estree": "*", @@ -13565,9 +13432,9 @@ "dev": true }, "@types/node": { - "version": "18.8.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.2.tgz", - "integrity": "sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==", + "version": "18.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", + "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", "dev": true }, "@types/normalize-package-data": { @@ -13600,6 +13467,12 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -13656,9 +13529,9 @@ }, "dependencies": { "@vue/compiler-sfc": { - "version": "2.7.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.11.tgz", - "integrity": "sha512-Cf8zvrZWjROgd8yPL8Tc+O3q/Y8ZGM0Y+8blrAvj1RQsVouzUY0oHcx8BA7Hybhb90JRnzeApFrlQGZRUdYpRw==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", "dev": true, "requires": { "@babel/parser": "^7.18.4", @@ -13673,12 +13546,12 @@ "dev": true }, "vue": { - "version": "2.7.11", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.11.tgz", - "integrity": "sha512-VPAW5QelT7Tx6UoSw/cwx/jDROOKAK1y/Q0o7HkmVJ1WAypE7w1+UoFa+KsGxy1aYdHPU1oODB3vR6XwSfVhDg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", "dev": true, "requires": { - "@vue/compiler-sfc": "2.7.11", + "@vue/compiler-sfc": "2.7.14", "csstype": "^3.1.0" } } @@ -13700,69 +13573,70 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", - "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.42.1.tgz", + "integrity": "sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/type-utils": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/type-utils": "5.42.1", + "@typescript-eslint/utils": "5.42.1", "debug": "^4.3.4", "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/parser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", - "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.1.tgz", + "integrity": "sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz", - "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.42.1.tgz", + "integrity": "sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0" + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1" } }, "@typescript-eslint/type-utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz", - "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.42.1.tgz", + "integrity": "sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/utils": "5.42.1", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", - "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.42.1.tgz", + "integrity": "sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz", - "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.42.1.tgz", + "integrity": "sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/visitor-keys": "5.39.0", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/visitor-keys": "5.42.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -13771,26 +13645,28 @@ } }, "@typescript-eslint/utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", - "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.42.1.tgz", + "integrity": "sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/types": "5.39.0", - "@typescript-eslint/typescript-estree": "5.39.0", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.42.1", + "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/typescript-estree": "5.42.1", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", - "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==", + "version": "5.42.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.42.1.tgz", + "integrity": "sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.39.0", + "@typescript-eslint/types": "5.42.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -13801,39 +13677,39 @@ "dev": true }, "@vue/compiler-core": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.40.tgz", - "integrity": "sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.43.tgz", + "integrity": "sha512-YLr9MXkKHFWVVahNWSwISzrcjNPbERDT9Zn0ZyIsHsDslGMV4Jv28X+pDhaVFYt8+Tgy4iNbQMe/5O0oNlhaeQ==", "dev": true, "requires": { "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.40", + "@vue/shared": "3.2.43", "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "@vue/compiler-dom": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.40.tgz", - "integrity": "sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.43.tgz", + "integrity": "sha512-LIhLMArN4hkRyECQSUB56z/wsF2JdGMDsG06e3ZAJAaNcGaMQLLzhF667hklouTZeHbWVCe8c7qkDPVs21Zu9Q==", "dev": true, "requires": { - "@vue/compiler-core": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-core": "3.2.43", + "@vue/shared": "3.2.43" } }, "@vue/compiler-sfc": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.40.tgz", - "integrity": "sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.43.tgz", + "integrity": "sha512-YBv94ASxDxTuiE0PvvERs1+Zq9KWAMrZEHpvhVzEJsANJnqqveJ18d0tSvTU6jPlF2BWFQDO3JfiGm7biQd36g==", "dev": true, "requires": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.40", - "@vue/compiler-dom": "3.2.40", - "@vue/compiler-ssr": "3.2.40", - "@vue/reactivity-transform": "3.2.40", - "@vue/shared": "3.2.40", + "@vue/compiler-core": "3.2.43", + "@vue/compiler-dom": "3.2.43", + "@vue/compiler-ssr": "3.2.43", + "@vue/reactivity-transform": "3.2.43", + "@vue/shared": "3.2.43", "estree-walker": "^2.0.2", "magic-string": "^0.25.7", "postcss": "^8.1.10", @@ -13841,19 +13717,19 @@ } }, "@vue/compiler-ssr": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.40.tgz", - "integrity": "sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.43.tgz", + "integrity": "sha512-IoYbnhaH0WbJ16pxArPTlqbnJ3Bqj5+seTg4AeBvS8HAb0b2EQQw8PpgcyrvzdIOIFq9FLfpWTbixdhVMYofyg==", "dev": true, "requires": { - "@vue/compiler-dom": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-dom": "3.2.43", + "@vue/shared": "3.2.43" } }, "@vue/devtools-api": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.3.tgz", - "integrity": "sha512-9WCRwdROJvWcHAdyrR7SZMM/qUvllDZnpndHXokThkUsjnJ2xe4/pvsH9FZrxFe22L+JmDKczL79HjLJ7DK9rg==", + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz", + "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==", "dev": true }, "@vue/eslint-config-typescript": { @@ -13868,62 +13744,62 @@ } }, "@vue/reactivity": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.40.tgz", - "integrity": "sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.43.tgz", + "integrity": "sha512-LzOxeaTZPTpj9qHCArOJXNa73ky8M7g28prqsd7Kxjxvs7i0EmpHEFASoK7QpYyfmIOh/UjJA+0jaD/iMIiRFg==", "dev": true, "requires": { - "@vue/shared": "3.2.40" + "@vue/shared": "3.2.43" } }, "@vue/reactivity-transform": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.40.tgz", - "integrity": "sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.43.tgz", + "integrity": "sha512-TGRvlD3Y8DTHGKg1VJYOMwC6CbrjNYh3wwUCKtwHSEv0uYdXjyn8r5KtklehP58G+opv6K2DhyBNPNhvSt9ttw==", "dev": true, "requires": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.40", - "@vue/shared": "3.2.40", + "@vue/compiler-core": "3.2.43", + "@vue/shared": "3.2.43", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "@vue/runtime-core": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.40.tgz", - "integrity": "sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.43.tgz", + "integrity": "sha512-rLm4b0+mVENn7D42pXL3tNqb7vtQ3Hjy2WThMd9WGlPSJr/BxxbomzUf6V5MBf40Qx698FSJeORZ00hH+jvixw==", "dev": true, "requires": { - "@vue/reactivity": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/reactivity": "3.2.43", + "@vue/shared": "3.2.43" } }, "@vue/runtime-dom": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.40.tgz", - "integrity": "sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.43.tgz", + "integrity": "sha512-hDxrqUzBrXbIItQ9n5pePVf4itRbNpYh3xt5K+fRYvBu4GXOULoS+DmO77DctvBLwdgBaLMc1aOmKIL1TzRA7g==", "dev": true, "requires": { - "@vue/runtime-core": "3.2.40", - "@vue/shared": "3.2.40", + "@vue/runtime-core": "3.2.43", + "@vue/shared": "3.2.43", "csstype": "^2.6.8" } }, "@vue/server-renderer": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.40.tgz", - "integrity": "sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.43.tgz", + "integrity": "sha512-T6mXBRCOOu6zJiQxySp5sRzW1P9NhXQXssRJA/KI8N40etGO+rwZgahc8uQvruVQvK56BSru+1kGQeuQ9qliPg==", "dev": true, "requires": { - "@vue/compiler-ssr": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-ssr": "3.2.43", + "@vue/shared": "3.2.43" } }, "@vue/shared": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.40.tgz", - "integrity": "sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.43.tgz", + "integrity": "sha512-zPhXJ0evblbcI3qOwUxliOoH90ecp2J1171RFrHXNC58EzzxXGPJ/X0FyIvuC9SvZNe8wpX4OcWhblPDSwT8Rw==", "dev": true }, "@webassemblyjs/ast": { @@ -14118,9 +13994,9 @@ } }, "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true }, "acorn-import-assertions": { @@ -14310,13 +14186,13 @@ "dev": true }, "autoprefixer": { - "version": "10.4.12", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz", - "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "requires": { "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001407", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -14333,9 +14209,9 @@ } }, "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dev": true, "requires": { "find-cache-dir": "^3.3.1", @@ -14357,15 +14233,6 @@ } } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, "babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", @@ -14441,9 +14308,9 @@ "dev": true }, "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "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, "requires": { "bytes": "3.1.2", @@ -14454,7 +14321,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -14607,12 +14474,6 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "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 } } }, @@ -14728,9 +14589,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001416", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz", - "integrity": "sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA==", + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", "dev": true }, "chalk": { @@ -14936,6 +14797,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true + }, + "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 } } }, @@ -14993,14 +14860,6 @@ "dev": true, "requires": { "safe-buffer": "5.2.1" - }, - "dependencies": { - "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 - } } }, "content-type": { @@ -15010,13 +14869,10 @@ "dev": true }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } + "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 }, "cookie": { "version": "0.5.0", @@ -15031,15 +14887,15 @@ "dev": true }, "core-js": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", - "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.0.tgz", + "integrity": "sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==", "dev": true }, "core-js-compat": { - "version": "3.25.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", - "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz", + "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", "dev": true, "requires": { "browserslist": "^4.21.4" @@ -15242,36 +15098,36 @@ "dev": true }, "cssnano": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", - "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", "dev": true, "requires": { - "cssnano-preset-default": "^5.2.12", + "cssnano-preset-default": "^5.2.13", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", - "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", "dev": true, "requires": { - "css-declaration-sorter": "^6.3.0", + "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.2", + "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.6", - "postcss-merge-rules": "^5.1.2", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.3", + "postcss-minify-params": "^5.1.4", "postcss-minify-selectors": "^5.2.1", "postcss-normalize-charset": "^5.1.0", "postcss-normalize-display-values": "^5.1.0", @@ -15279,11 +15135,11 @@ "postcss-normalize-repeat-style": "^5.1.1", "postcss-normalize-string": "^5.1.0", "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-initial": "^5.1.1", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -15327,9 +15183,9 @@ "dev": true }, "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "requires": { "decamelize": "^1.1.0", @@ -15365,16 +15221,6 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, "del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -15605,9 +15451,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.274", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.274.tgz", - "integrity": "sha512-Fgn7JZQzq85I81FpKUNxVLAzoghy8JZJ4NIue+YfUYBbu1AkpgzFvNwzF/ZNZH9ElkmJD0TSWu1F2gTpw/zZlg==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, "elliptic": { @@ -15707,15 +15553,15 @@ "dev": true }, "eslint": { - "version": "8.24.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz", - "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==", + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.2", - "@humanwhocodes/config-array": "^0.10.5", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -15731,14 +15577,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", + "glob-parent": "^6.0.2", "globals": "^13.15.0", - "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -15772,9 +15618,9 @@ } }, "eslint-plugin-vue": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.6.0.tgz", - "integrity": "sha512-zzySkJgVbFCylnG2+9MDF7N+2Rjze2y0bF8GyUNpFOnT8mCMfqqtLDJkHBuYu9N/psW1A6DVbQhPkP92E+qakA==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.7.0.tgz", + "integrity": "sha512-DrOO3WZCZEwcLsnd3ohFwqCoipGRSTKTBTnLwdhqAbYZtzWl0o7D+D8ZhlmiZvABKTEl8AFsqH1GHGdybyoQmw==", "dev": true, "requires": { "eslint-utils": "^3.0.0", @@ -15833,9 +15679,9 @@ } }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -15941,14 +15787,14 @@ } }, "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -15967,7 +15813,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -15999,12 +15845,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true - }, - "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 } } }, @@ -16424,15 +16264,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -16460,12 +16291,6 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "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 } } }, @@ -16772,9 +16597,9 @@ } }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz", + "integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -16884,9 +16709,9 @@ "dev": true }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, "requires": { "has": "^1.0.3" @@ -16938,16 +16763,24 @@ "dev": true, "requires": { "is-path-inside": "^2.1.0" + }, + "dependencies": { + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + } } }, "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } + "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 }, "is-plain-obj": { "version": "1.1.0", @@ -17102,9 +16935,9 @@ "dev": true }, "known-css-properties": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", - "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, "laravel-mix": { @@ -17231,9 +17064,9 @@ "dev": true }, "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz", + "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -17377,9 +17210,9 @@ "dev": true }, "memfs": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", - "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.10.tgz", + "integrity": "sha512-0bCUP+L79P4am30yP1msPzApwuMQG23TjwlwdHeEV5MxioDR1a0AgB0T9FfggU52eJuDCq8WVwb5ekznFyWiTQ==", "dev": true, "requires": { "fs-monkey": "^1.0.3" @@ -17544,9 +17377,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, "minimist-options": { @@ -17588,6 +17421,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "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 + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -17733,24 +17572,6 @@ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -18082,9 +17903,9 @@ "dev": true }, "postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "requires": { "nanoid": "^3.3.4", @@ -18115,12 +17936,12 @@ } }, "postcss-convert-values": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", - "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, "requires": { - "browserslist": "^4.20.3", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -18180,22 +18001,22 @@ "dev": true }, "postcss-merge-longhand": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", - "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^5.1.1" } }, "postcss-merge-rules": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", - "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" @@ -18222,12 +18043,12 @@ } }, "postcss-minify-params": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", - "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" } @@ -18330,12 +18151,12 @@ } }, "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" } }, @@ -18369,12 +18190,12 @@ } }, "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" } }, @@ -18547,9 +18368,9 @@ "dev": true }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -18739,6 +18560,12 @@ "util-deprecate": "~1.0.1" }, "dependencies": { + "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 + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -18794,9 +18621,9 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz", + "integrity": "sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==", "dev": true }, "regenerator-transform": { @@ -18975,9 +18802,9 @@ } }, "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==", + "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 }, "safer-buffer": { @@ -18987,9 +18814,9 @@ "dev": true }, "sass": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz", - "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.56.1.tgz", + "integrity": "sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -19447,9 +19274,9 @@ "dev": true }, "std-env": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.2.1.tgz", - "integrity": "sha512-D/uYFWkI/31OrnKmXZqGAGK5GbQRPp/BWA1nuITcc6ICblhhuQUPHS5E2GSCVS7Hwhf4ciq8qsATwBUxv+lI6w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.0.tgz", + "integrity": "sha512-cNNS+VYsXIs5gI6gJipO4qZ8YYT274JHvNnQ1/R/x8Q8mdP0qj0zoMchRXmBNPqp/0eOEhX+3g7g6Fgb7meLIQ==", "dev": true }, "stream-browserify": { @@ -19482,14 +19309,6 @@ "dev": true, "requires": { "safe-buffer": "~5.2.0" - }, - "dependencies": { - "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 - } } }, "string-width": { @@ -19563,19 +19382,19 @@ "dev": true }, "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" } }, "stylelint": { - "version": "14.13.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.13.0.tgz", - "integrity": "sha512-NJSAdloiAB/jgVJKxMR90mWlctvmeBFGFVUvyKngi9+j/qPSJ5ZB+u8jOmGbLTnS7OHrII9NFGehPRyar8U5vg==", + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.14.1.tgz", + "integrity": "sha512-Jnftu+lSD8cSpcV/+Z2nfgfgFpTIS1FcujezXPngtoIQ6wtwutL22MsNE0dJuMiM1h1790g2qIjAyUZCMrX4sw==", "dev": true, "requires": { "@csstools/selector-specificity": "^2.0.2", @@ -19595,13 +19414,13 @@ "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.25.0", + "known-css-properties": "^0.26.0", "mathml-tag-names": "^2.1.3", "meow": "^9.0.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.16", + "postcss": "^8.4.18", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", @@ -19613,7 +19432,7 @@ "style-search": "^0.1.0", "supports-hyperlinks": "^2.3.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", + "table": "^6.8.1", "v8-compile-cache": "^2.3.0", "write-file-atomic": "^4.0.2" }, @@ -19773,9 +19592,9 @@ } }, "sweetalert2": { - "version": "11.4.37", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.4.37.tgz", - "integrity": "sha512-8thABjykReRzpMlgEY0BP876ZqI6dD9WxMpFftHt4dmUKQzDv23Td6Q6cz6YybyiYWPCodBk57PeIobqaGNgqw==", + "version": "11.6.7", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.6.7.tgz", + "integrity": "sha512-nbsmUtfTodJvZ873sn61U0brrHtn8xi8wfn+bVVc9IV05fgOdDMhAhdQ2zQJBYsvggbbp46ZFHMr0/fZJnZPtQ==", "dev": true }, "swiper": { @@ -19789,9 +19608,9 @@ } }, "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -19966,9 +19785,9 @@ } }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "tsutils": { @@ -20180,16 +19999,16 @@ "dev": true }, "vue": { - "version": "3.2.40", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.40.tgz", - "integrity": "sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==", + "version": "3.2.43", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.43.tgz", + "integrity": "sha512-rGUDDftb7VF2vLp0LnzcZ6R2tG/4BvMd/qOisZAGSxzsW+FysWtmGIN5c4gduaMWRo+IBrjTRiZD4bLh2FF4lw==", "dev": true, "requires": { - "@vue/compiler-dom": "3.2.40", - "@vue/compiler-sfc": "3.2.40", - "@vue/runtime-dom": "3.2.40", - "@vue/server-renderer": "3.2.40", - "@vue/shared": "3.2.40" + "@vue/compiler-dom": "3.2.43", + "@vue/compiler-sfc": "3.2.43", + "@vue/runtime-dom": "3.2.43", + "@vue/server-renderer": "3.2.43", + "@vue/shared": "3.2.43" } }, "vue-eslint-parser": { @@ -20269,9 +20088,9 @@ } }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.1.tgz", + "integrity": "sha512-1Qo97Y2oKaU+Ro2xnDMR26g1BwMT29jNbem1EvcujW2jqt+j5COXyscjM7bLQkM9HaxI7pkWeW7gnI072yMI9Q==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -20300,9 +20119,9 @@ } }, "vuex": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", - "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", "dev": true, "requires": { "@vue/devtools-api": "^6.0.0-beta.11" @@ -20328,9 +20147,9 @@ } }, "webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", + "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -20573,9 +20392,9 @@ } }, "ws": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "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, "requires": {} }, @@ -20610,9 +20429,9 @@ "dev": true }, "yargs": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", - "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, "requires": { "cliui": "^8.0.1", @@ -20621,7 +20440,7 @@ "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "dependencies": { "yargs-parser": { diff --git a/package.json b/package.json index 28b48b0..e2df5f8 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@voerro/vue-tagsinput": "^2.7.1", "@vue/eslint-config-typescript": "^11.0.1", "axios": "^0.21.1", - "bootstrap": "^5.1.3", + "bootstrap": "^5.2.2", "clean-webpack-plugin": "^4.0.0", "cropperjs": "^1.5.12", "eslint": "^8.23.1", diff --git a/resources/sass/_bootstrapOverload.scss b/resources/sass/_bootstrapOverload.scss new file mode 100644 index 0000000..1d02e16 --- /dev/null +++ b/resources/sass/_bootstrapOverload.scss @@ -0,0 +1,4 @@ +.nav-link.active { + color: $primary; + font-weight: bold; +} diff --git a/resources/sass/_dashboard.scss b/resources/sass/_dashboard.scss index e83b800..dac2503 100644 --- a/resources/sass/_dashboard.scss +++ b/resources/sass/_dashboard.scss @@ -1,102 +1,22 @@ -body { - font-size: 0.875rem; -} - -.lni { - width: 16px; - height: 16px; - font-size: 20px !important; - font-weight: bold !important; - vertical-align: text-bottom; -} - -/* - * Sidebar - */ - .sidebar { position: fixed; - z-index: 100; /* Behind the navbar */ + z-index: 100; top: 0; - /* rtl:raw: - right: 0; - */ bottom: 0; - /* rtl:remove */ left: 0; - padding: 48px 0 0; /* Height of navbar */ - box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.1); + margin: 48px 0 0; } -@media (max-width: 767.98px) { - .sidebar { - top: 5rem; - } +#topNavBar { + height: $top-nav-bar-height; } -.sidebar-sticky { +#footer { position: relative; - top: 0; - height: calc(100vh - 48px); - padding-top: 0.5rem; - overflow-x: hidden; - overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */ + z-index: 100; + height: $footer-bar-height; } -.sidebar .nav-link { - color: #333; - font-weight: 500; -} - -.sidebar .nav-link .lni { - margin-right: 8px; - color: #727272; -} - -.sidebar .nav-link.active { - color: #2470dc; -} - -.sidebar .nav-link:hover .lni, -.sidebar .nav-link.active .lni { - color: inherit; -} - -.sidebar-heading { - font-size: 0.75rem; - text-transform: uppercase; -} - -/* - * Navbar - */ - -.navbar-brand { - padding-top: 0.75rem; - padding-bottom: 0.75rem; - background-color: rgba(0, 0, 0, 0.25); - box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25); - font-size: 1rem; -} - -.navbar .navbar-toggler { - top: 0.25rem; - right: 1rem; -} - -.navbar .form-control { - padding: 0.75rem 1rem; - border-width: 0; - border-radius: 0; -} - -.form-control-dark { - border-color: rgba(255, 255, 255, 0.1); - background-color: rgba(255, 255, 255, 0.1); - color: #fff; -} - -.form-control-dark:focus { - border-color: transparent; - box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.25); +#mainContainer { + min-height: calc(100vh - $top-nav-bar-height - $footer-bar-height); } diff --git a/resources/sass/_variables.scss b/resources/sass/_variables.scss index 2b8fcf8..f62f92c 100644 --- a/resources/sass/_variables.scss +++ b/resources/sass/_variables.scss @@ -9,17 +9,6 @@ $font-size-base: 1rem; $line-height-base: 1.6; // Colors -$blue: #0060df; -$indigo: #6574cd; -$purple: #9561e2; -$pink: #f66d9b; -$red: #e3342f; -$orange: #f6993f; -$yellow: #ffed4a; -$green: #38c172; -$teal: #4dc0b5; -$cyan: #6cb2eb; - $color1: #f3ebe4; $color2: #07386a; $color3: #0f437e; @@ -32,6 +21,39 @@ $color9: #c6bcb3; $color10: #999595; $color11: #ab9d8e; +// * Boostrap Colors +$white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #6c757d !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000 !default; + +$blue: #0d6efd !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #d63384 !default; +$red: #dc3545 !default; +$orange: #fd7e14 !default; +$yellow: #ffc107 !default; +$green: #198754 !default; +$teal: #20c997 !default; +$cyan: #0dcaf0 !default; + +$primary: $blue !default; +$secondary: $gray-600 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: $gray-900 !default; + .large-tooltip .tooltip-inner { width: max-content !important; //uses the content as a guide of default length max-width: 800px !important; //constrained to max width @@ -43,3 +65,11 @@ $color11: #ab9d8e; max-width: 100% !important; } } + +// * bootstrap overload +$nav-link-color: #000; +$nav-link-color-active: $color3; + +// * Layout settings +$top-nav-bar-height: 3.6rem; +$footer-bar-height: 2.6rem; diff --git a/resources/sass/app.scss b/resources/sass/app.scss index e9be027..d99854e 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -12,12 +12,13 @@ @import "icons"; // Bootstrap -@import "~bootstrap/scss/bootstrap"; +@import "~bootstrap"; +@import "bootstrapOverload"; + // Toastify @import "~toastify-js/src/toastify.css"; @import "dashboard"; - @import "smoothdnd"; @import "forms"; diff --git a/resources/ts/components/CkEditorBoComponent.vue b/resources/ts/components/CkEditorBoComponent.vue index 59f84c9..76acea5 100644 --- a/resources/ts/components/CkEditorBoComponent.vue +++ b/resources/ts/components/CkEditorBoComponent.vue @@ -83,9 +83,8 @@ export default defineComponent({ const self = this, ckeditor = this.$refs.ckeditor as HTMLElement, wordCounter = this.$refs.wordCounter as HTMLElement, - // * Specific to Calliope - verticalTopMenuOffset = document.querySelector( - "body > div> .navbar" + verticalTopMenuOffset = document.getElementById( + "topNavBar" ) as HTMLElement | null; if (!verticalTopMenuOffset) { @@ -224,13 +223,13 @@ export default defineComponent({ "fullScreen", "sourceEditing", ], - ui: { - viewportOffset: { - top: verticalTopMenuOffset.getBoundingClientRect().height, - right: 0, - bottom: 0, - left: 0, - }, + }, + ui: { + viewportOffset: { + top: verticalTopMenuOffset.getBoundingClientRect().height, + right: 0, + bottom: 0, + left: 0, }, }, table: { diff --git a/resources/ts/fontawesome.ts b/resources/ts/fontawesome.ts index cedfa00..9de01ac 100644 --- a/resources/ts/fontawesome.ts +++ b/resources/ts/fontawesome.ts @@ -73,6 +73,7 @@ import { faTrash, faPaste, faCalendarDays, + faEllipsisVertical, } from "@fortawesome/free-solid-svg-icons"; // import { faXm } from "@fortawesome/free-brands-svg-icons"; import { @@ -168,5 +169,6 @@ library.add(faCopy); library.add(faPaste); library.add(faArrowRight); library.add(faCalendarDays); +library.add(faEllipsisVertical); dom.watch(); diff --git a/resources/views/back/auth/login.blade.php b/resources/views/back/auth/login.blade.php new file mode 100644 index 0000000..b049a66 --- /dev/null +++ b/resources/views/back/auth/login.blade.php @@ -0,0 +1,73 @@ +@extends('layouts.bo-layout') + +@section('content') +
+
+
+
+
{{ __('Connexion Backoffice') }}
+ +
+
+ @csrf + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+
+ + + +
+
+
+ +
+
+ + + @if (Route::has('bo.password.request')) + + {{ __('Mode de passe oublié ?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/back/auth/passwords/confirm.blade.php b/resources/views/back/auth/passwords/confirm.blade.php new file mode 100644 index 0000000..9f40f13 --- /dev/null +++ b/resources/views/back/auth/passwords/confirm.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.back') + +@section('content') +
+
+
+
+
{{ __('Confirm Password') }}
+ +
+ {{ __('Please confirm your password before continuing.') }} + +
+ @csrf + +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+
+ + + @if (Route::has('bo.password.request')) + + {{ __('Forgot Your Password?') }} + + @endif +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/back/auth/passwords/email.blade.php b/resources/views/back/auth/passwords/email.blade.php new file mode 100644 index 0000000..c6f176d --- /dev/null +++ b/resources/views/back/auth/passwords/email.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.back') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+ @if (session('status')) + + @endif + +
+ @csrf + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/back/auth/passwords/reset.blade.php b/resources/views/back/auth/passwords/reset.blade.php new file mode 100644 index 0000000..9d2b209 --- /dev/null +++ b/resources/views/back/auth/passwords/reset.blade.php @@ -0,0 +1,65 @@ +@extends('layouts.back') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+
+ @csrf + + + +
+ + +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ + + @error('password') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/back/layout/header.blade.php b/resources/views/back/layout/header.blade.php new file mode 100644 index 0000000..c5105b5 --- /dev/null +++ b/resources/views/back/layout/header.blade.php @@ -0,0 +1,68 @@ + diff --git a/resources/views/back/layout/sidemenu.blade.php b/resources/views/back/layout/sidemenu.blade.php index a30183a..171dcfa 100644 --- a/resources/views/back/layout/sidemenu.blade.php +++ b/resources/views/back/layout/sidemenu.blade.php @@ -1,10 +1,6 @@ -