diff --git a/.github/workflows/cron_nightly_build.yml b/.github/workflows/cron_nightly_build.yml index bb8449a9010f4..ff114474439bf 100644 --- a/.github/workflows/cron_nightly_build.yml +++ b/.github/workflows/cron_nightly_build.yml @@ -46,6 +46,8 @@ jobs: GH_BRANCH: ${{ matrix.BRANCH }} GC_PROJECT_ID: ${{ secrets.GC_PROJECT_ID }} GC_SERVICE_KEY: ${{ secrets.GC_SERVICE_KEY }} + XML_FILE: ${{ matrix.BRANCH == 'develop' && 'nightly.xml' || format('nightly_{0}.xml', matrix.BRANCH)}} + ZIP_FILE: ${{ matrix.BRANCH == 'develop' && 'nightly.zip' || format('nightly_{0}.zip', matrix.BRANCH)}} steps: - uses: actions/checkout@v4 @@ -76,11 +78,11 @@ jobs: run: today=`date +%Y-%m-%d`; for i in *; do mv $i $today-$GH_BRANCH-$i; done working-directory: ${{ env.RELEASE_DIR }} - - name: Create nightly.zip for develop - if: env.GH_BRANCH == 'develop' + - name: Create nightly.(zip & xml) for each branch run: | today=`date +%Y-%m-%d` - cp $today-$GH_BRANCH*.zip nightly.zip + cp $today-$GH_BRANCH*.zip ${{ env.ZIP_FILE }} + cp $today-$GH_BRANCH*.xml ${{ env.XML_FILE }} working-directory: ${{ env.RELEASE_DIR }} - name: Auth Cloud Sdk @@ -92,9 +94,11 @@ jobs: - name: Setup Cloud Sdk uses: google-github-actions/setup-gcloud@v1 - - name: Delete last Nightly zip from develop - if: env.GH_BRANCH == 'develop' - run: gsutil rm -rf gs://prestashop-core-nightly/nightly.zip + - name: Delete last Nightly zip for each branch + run: gsutil rm -rf gs://prestashop-core-nightly/${{ env.ZIP_FILE }} + + - name: Delete last Nightly xml for each branch + run: gsutil rm -rf gs://prestashop-core-nightly/${{ env.XML_FILE }} - name: Upload to Google Cloud Storage (GCS) if: always() diff --git a/admin-dev/filemanager/config/config.php b/admin-dev/filemanager/config/config.php index 741ce9b00c116..a98291472c562 100644 --- a/admin-dev/filemanager/config/config.php +++ b/admin-dev/filemanager/config/config.php @@ -41,7 +41,7 @@ $cms_accesses = Profile::getProfileAccess(Context::getContext()->employee->id_profile, Tab::getIdFromClassName('AdminCmsContent')); if (!$products_accesses['edit'] && !$cms_accesses['edit']) { - die(Tools::displayError('Access forbidden.')); + throw new PrestaShopException('Access forbidden.'); } //------------------------------------------------------------------------------ // DON'T COPY THIS VARIABLES IN FOLDERS config.php FILES diff --git a/classes/CMSCategory.php b/classes/CMSCategory.php index e775808498840..5e49d4f8e8894 100644 --- a/classes/CMSCategory.php +++ b/classes/CMSCategory.php @@ -241,7 +241,7 @@ public static function recurseCMSCategory($categories, $current, $id_cms_categor protected function recursiveDelete(array &$to_delete, $id_cms_category) { if (!$id_cms_category) { - die(Tools::displayError('Parameter "id_cms_category" is invalid.')); + throw new PrestaShopException('Parameter "id_cms_category" is invalid.'); } $result = Db::getInstance()->executeS(' diff --git a/classes/Carrier.php b/classes/Carrier.php index cabf54a273b76..5834ff86439b0 100644 --- a/classes/Carrier.php +++ b/classes/Carrier.php @@ -1245,7 +1245,7 @@ public static function getIdTaxRulesGroupByIdCarrier($id_carrier, ?Context $cont public function setTaxRulesGroup($id_tax_rules_group, $all_shops = false) { if (!Validate::isUnsignedId($id_tax_rules_group)) { - die(Tools::displayError('Parameter "id_tax_rules_group" is invalid.')); + throw new PrestaShopException('Parameter "id_tax_rules_group" is invalid.'); } if (!$all_shops) { diff --git a/classes/Cart.php b/classes/Cart.php index aebb62b389790..b5458ec93d075 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -1476,7 +1476,7 @@ public function updateQty( } if (!Validate::isLoadedObject($product)) { - die(Tools::displayError(sprintf('Product with ID "%s" could not be loaded.', $id_product))); + throw new PrestaShopException(sprintf('Product with ID "%s" could not be loaded.', $id_product)); } if (isset(self::$_nbProducts[$this->id])) { @@ -1929,7 +1929,7 @@ public static function getTotalCart($id_cart, $use_tax_display = false, $type = { $cart = new Cart($id_cart); if (!Validate::isLoadedObject($cart)) { - die(Tools::displayError(sprintf('Cart with ID "%s" could not be loaded.', $id_cart))); + throw new PrestaShopException(sprintf('Cart with ID "%s" could not be loaded.', $id_cart)); } $with_taxes = $use_tax_display ? $cart->_taxCalculationMethod != PS_TAX_EXC : true; diff --git a/classes/CartRule.php b/classes/CartRule.php index 3ee8bfadc3c88..1d455b2c14ce5 100644 --- a/classes/CartRule.php +++ b/classes/CartRule.php @@ -787,7 +787,7 @@ public function checkValidity(Context $context, $alreadyInCart = false, $display FROM `' . _DB_PREFIX_ . 'cart_cart_rule` ccr INNER JOIN `' . _DB_PREFIX_ . 'cart` c ON c.id_cart = ccr.id_cart LEFT JOIN `' . _DB_PREFIX_ . 'orders` o ON o.id_cart = c.id_cart - WHERE c.id_customer = ' . $cart->id_customer . ' AND c.id_cart = ' . $cart->id . ' AND ccr.id_cart_rule = ' . (int) $this->id . ' AND o.id_order IS NULL + WHERE c.id_customer = ' . $cart->id_customer . ' AND c.id_cart = ' . (int) $cart->id . ' AND ccr.id_cart_rule = ' . (int) $this->id . ' AND o.id_order IS NULL '); } else { // When checking the cart rules present in that cart the request result is accurate diff --git a/classes/Category.php b/classes/Category.php index e64fe627ffbcf..059a2366a3543 100644 --- a/classes/Category.php +++ b/classes/Category.php @@ -362,7 +362,7 @@ public function recurseLiteCategTree($maxDepth = 3, $currentDepth = 0, $idLang = protected function recursiveDelete(array &$toDelete, $idCategory) { if (!$idCategory) { - die(Tools::displayError('Parameter "idCategory" is invalid.')); + throw new PrestaShopException('Parameter "idCategory" is invalid.'); } $sql = new DbQuery(); @@ -692,7 +692,7 @@ public static function getAllCategoriesName( $limit = '' ) { if (isset($idRootCategory) && !Validate::isInt($idRootCategory)) { - die(Tools::displayError('Parameter "idRootCategory" was provided, but it\'s not a valid integer.')); + throw new PrestaShopException('Parameter "idRootCategory" was provided, but it\'s not a valid integer.'); } if (isset($groups) && Group::isFeatureActive() && !is_array($groups)) { @@ -763,7 +763,7 @@ public static function getNestedCategories( $limit = '' ) { if (isset($idRootCategory) && !Validate::isInt($idRootCategory)) { - die(Tools::displayError('Parameter "idRootCategory" was provided, but it\'s not a valid integer.')); + throw new PrestaShopException('Parameter "idRootCategory" was provided, but it\'s not a valid integer.'); } if (isset($groups) && Group::isFeatureActive() && !is_array($groups)) { diff --git a/classes/Configuration.php b/classes/Configuration.php index 7399cf58de1d4..b7dcb1278a614 100644 --- a/classes/Configuration.php +++ b/classes/Configuration.php @@ -378,7 +378,7 @@ public static function hasKey($key, $idLang = null, $idShopGroup = null, $idShop public static function set($key, $values, $idShopGroup = null, $idShop = null) { if (!Validate::isConfigName($key)) { - die(Tools::displayError(Context::getContext()->getTranslator()->trans('[%s] is not a valid configuration key', [Tools::htmlentitiesUTF8($key)], 'Admin.Notifications.Error'))); + throw new PrestaShopException(Context::getContext()->getTranslator()->trans('[%s] is not a valid configuration key', [Tools::htmlentitiesUTF8($key)], 'Admin.Notifications.Error')); } if ($idShop === null) { @@ -439,7 +439,7 @@ public static function updateGlobalValue($key, $values, $html = false) public static function updateValue($key, $values, $html = false, $idShopGroup = null, $idShop = null) { if (!Validate::isConfigName($key)) { - die(Tools::displayError(Context::getContext()->getTranslator()->trans('[%s] is not a valid configuration key', [Tools::htmlentitiesUTF8($key)], 'Admin.Notifications.Error'))); + throw new PrestaShopException(Context::getContext()->getTranslator()->trans('[%s] is not a valid configuration key', [Tools::htmlentitiesUTF8($key)], 'Admin.Notifications.Error')); } if ($idShop === null || !Shop::isFeatureActive()) { diff --git a/classes/Cookie.php b/classes/Cookie.php index e74a76d38b744..548d09e801045 100644 --- a/classes/Cookie.php +++ b/classes/Cookie.php @@ -228,10 +228,10 @@ public function __isset($key) public function __set($key, $value) { if (is_array($value)) { - die(Tools::displayError('Cookie value can\'t be an array.')); + throw new PrestaShopException('Cookie value can\'t be an array.'); } if (preg_match('/ยค|\|/', $key . $value)) { - throw new Exception('Forbidden chars in cookie'); + throw new PrestaShopException('Forbidden chars in cookie'); } if (!$this->_modified && (!array_key_exists($key, $this->_content) || $this->_content[$key] != $value)) { $this->_modified = true; diff --git a/classes/Country.php b/classes/Country.php index def33fce19eda..baebb6469a349 100644 --- a/classes/Country.php +++ b/classes/Country.php @@ -184,7 +184,7 @@ public static function getCountriesByIdShop($idShop, $idLang) public static function getByIso($isoCode, $active = false) { if (!Validate::isLanguageIsoCode($isoCode)) { - die(Tools::displayError('Given iso code (' . $isoCode . ') is not valid.')); + throw new PrestaShopException('Given iso code (' . $isoCode . ') is not valid.'); } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow( ' @@ -211,7 +211,7 @@ public static function getByIso($isoCode, $active = false) public static function getIdZone($idCountry) { if (!Validate::isUnsignedId($idCountry)) { - die(Tools::displayError('Country ID is invalid.')); + throw new PrestaShopException('Country ID is invalid.'); } if (isset(self::$_idZones[$idCountry])) { @@ -363,10 +363,10 @@ public static function getZipCodeFormat($idCountry) public static function getCountriesByZoneId($idZone, $idLang) { if (empty($idZone)) { - die(Tools::displayError('Zone ID is invalid.')); + throw new PrestaShopException('Zone ID is invalid.'); } if (empty($idLang)) { - die(Tools::displayError('Lang ID is invalid.')); + throw new PrestaShopException('Lang ID is invalid.'); } $sql = ' SELECT DISTINCT c.*, cl.* diff --git a/classes/Customer.php b/classes/Customer.php index 9bb643bfce8f0..6f71f80425972 100644 --- a/classes/Customer.php +++ b/classes/Customer.php @@ -829,7 +829,7 @@ public static function getAddressesTotalById($idCustomer) public static function checkPassword($idCustomer, $passwordHash) { if (!Validate::isUnsignedId($idCustomer)) { - die(Tools::displayError('Customer ID is invalid.')); + throw new PrestaShopException('Customer ID is invalid.'); } // Check that customers password hasn't changed since last login diff --git a/classes/Employee.php b/classes/Employee.php index b797367fd56e1..ae389033a2d2a 100644 --- a/classes/Employee.php +++ b/classes/Employee.php @@ -305,7 +305,7 @@ public static function getEmployees($activeOnly = true) public function getByEmail($email, $plaintextPassword = null, $activeOnly = true) { if (!Validate::isEmail($email)) { - die(Tools::displayError('Email address is invalid.')); + throw new PrestaShopException('Email address is invalid.'); } $sql = new DbQuery(); @@ -358,7 +358,7 @@ public function getByEmail($email, $plaintextPassword = null, $activeOnly = true public static function employeeExists($email) { if (!Validate::isEmail($email)) { - die(Tools::displayError('Email address is invalid.')); + throw new PrestaShopException('Email address is invalid.'); } return (bool) Db::getInstance()->getValue(' @@ -378,7 +378,7 @@ public static function employeeExists($email) public static function checkPassword($idEmployee, $passwordHash) { if (!Validate::isUnsignedId($idEmployee)) { - die(Tools::displayError('Employee ID is invalid.')); + throw new PrestaShopException('Employee ID is invalid.'); } $sql = new DbQuery(); diff --git a/classes/Feature.php b/classes/Feature.php index 585de39a6ef5a..0b2811bab8c1f 100644 --- a/classes/Feature.php +++ b/classes/Feature.php @@ -155,7 +155,7 @@ public function update($nullValues = false) foreach ($fields as $field) { foreach (array_keys($field) as $key) { if (!Validate::isTableOrIdentifier($key)) { - die(Tools::displayError('Invalid column name in feature_lang table.')); + throw new PrestaShopException('Invalid column name in feature_lang table.'); } } diff --git a/classes/Image.php b/classes/Image.php index c9efe6c7ef2b7..1d791d61fd054 100644 --- a/classes/Image.php +++ b/classes/Image.php @@ -362,7 +362,7 @@ public static function getHighestPosition($idProduct) public static function deleteCover($idProduct) { if (!Validate::isUnsignedId($idProduct)) { - die(Tools::displayError('Product ID is invalid.')); + throw new PrestaShopException('Product ID is invalid.'); } if (file_exists(_PS_TMP_IMG_DIR_ . 'product_' . $idProduct . '.jpg')) { diff --git a/classes/ImageType.php b/classes/ImageType.php index d67afcd949a4e..49ff70180cf71 100644 --- a/classes/ImageType.php +++ b/classes/ImageType.php @@ -136,7 +136,7 @@ public static function getImageTypeById(int $id): array public static function typeAlreadyExists($typeName) { if (!Validate::isImageTypeName($typeName)) { - die(Tools::displayError(sprintf('"%s" is not valid image type name.', $typeName))); + throw new PrestaShopException(sprintf('"%s" is not valid image type name.', $typeName)); } Db::getInstance()->executeS(' diff --git a/classes/Manufacturer.php b/classes/Manufacturer.php index bf8617700200e..f81b9cd8679bb 100644 --- a/classes/Manufacturer.php +++ b/classes/Manufacturer.php @@ -398,7 +398,7 @@ public static function getProducts( } if (!Validate::isOrderBy($orderBy) || !Validate::isOrderWay($orderWay)) { - die(Tools::displayError('Invalid sorting parameters provided.')); + throw new PrestaShopException('Invalid sorting parameters provided.'); } $groups = FrontController::getCurrentCustomerGroups(); diff --git a/classes/Message.php b/classes/Message.php index fe29604312cde..f653a257cbbe0 100644 --- a/classes/Message.php +++ b/classes/Message.php @@ -175,10 +175,10 @@ public static function getMessagesByCartId($idCart, bool $private = false, ?Cont public static function markAsReaded($idMessage, $idEmployee) { if (!Validate::isUnsignedId($idMessage)) { - die(Tools::displayError('Message ID is invalid.')); + throw new PrestaShopException('Message ID is invalid.'); } if (!Validate::isUnsignedId($idEmployee)) { - die(Tools::displayError('Employee ID is invalid.')); + throw new PrestaShopException('Employee ID is invalid.'); } $result = Db::getInstance()->execute(' diff --git a/classes/Meta.php b/classes/Meta.php index 8288ddb799e93..9194fbb12abbc 100644 --- a/classes/Meta.php +++ b/classes/Meta.php @@ -68,14 +68,14 @@ public static function getPages($excludeFilled = false, $addPage = false) { $selectedPages = []; if (!$files = Tools::scandir(_PS_CORE_DIR_ . DIRECTORY_SEPARATOR . 'controllers' . DIRECTORY_SEPARATOR . 'front' . DIRECTORY_SEPARATOR, 'php', '', true)) { - die(Tools::displayError(Context::getContext()->getTranslator()->trans('Cannot scan root directory', [], 'Admin.Notifications.Error'))); + throw new PrestaShopException(Context::getContext()->getTranslator()->trans('Cannot scan root directory', [], 'Admin.Notifications.Error')); } $overrideDir = _PS_CORE_DIR_ . DIRECTORY_SEPARATOR . 'override' . DIRECTORY_SEPARATOR . 'controllers' . DIRECTORY_SEPARATOR . 'front' . DIRECTORY_SEPARATOR; if (!is_dir($overrideDir)) { $overrideFiles = []; } elseif (!$overrideFiles = Tools::scandir($overrideDir, 'php', '', true)) { - die(Tools::displayError(Context::getContext()->getTranslator()->trans('Cannot scan "override" directory', [], 'Admin.Notifications.Error'))); + throw new PrestaShopException(Context::getContext()->getTranslator()->trans('Cannot scan "override" directory', [], 'Admin.Notifications.Error')); } $files = array_values(array_unique(array_merge($files, $overrideFiles))); diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index cc8f1f8206bfc..444778551762b 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -252,7 +252,7 @@ public function validateOrder( if (!$this->active) { PrestaShopLogger::addLog('PaymentModule::validateOrder - Module is not active', 3, null, 'Cart', (int) $id_cart, true); - die(Tools::displayError('Error processing order. Payment module is not active.')); + throw new PrestaShopException('Error processing order. Payment module is not active.'); } // Make sure cart is loaded and not related to an existing order @@ -260,12 +260,12 @@ public function validateOrder( if (!$cart_is_loaded || $this->context->cart->OrderExists()) { $error = $this->trans('Cart cannot be loaded or an order has already been placed using this cart', [], 'Admin.Payment.Notification'); PrestaShopLogger::addLog($error, 4, 1, 'Cart', (int) $this->context->cart->id); - die(Tools::displayError($error)); + throw new PrestaShopException($error); } if ($secure_key !== false && $secure_key != $this->context->cart->secure_key) { PrestaShopLogger::addLog('PaymentModule::validateOrder - Secure key does not match', 3, null, 'Cart', (int) $id_cart, true); - die(Tools::displayError('Error processing order. Secure key does not match.')); + throw new PrestaShopException('Error processing order. Secure key does not match.'); } // For each package, generate an order @@ -417,7 +417,7 @@ public function validateOrder( if (!isset($order->id)) { $error = $this->trans('Order creation failed', [], 'Admin.Payment.Notification'); PrestaShopLogger::addLog($error, 4, 2, 'Cart', (int) $order->id_cart); - die(Tools::displayError($error)); + throw new PrestaShopException($error); } if (!$secure_key) { $message .= '
' . $this->trans('Warning: the secure key is empty, check your payment account before validation', [], 'Admin.Payment.Notification'); diff --git a/classes/PrestaShopBackup.php b/classes/PrestaShopBackup.php index be967cc8381e6..fdc72f89341d1 100644 --- a/classes/PrestaShopBackup.php +++ b/classes/PrestaShopBackup.php @@ -121,7 +121,7 @@ public static function getBackupPath($filename = '') $backupdir = realpath(_PS_ADMIN_DIR_ . self::$backupDir); if ($backupdir === false) { - die(Tools::displayError(Context::getContext()->getTranslator()->trans('"Backup" directory does not exist.', [], 'Admin.Advparameters.Notification'))); + throw new PrestaShopException(Context::getContext()->getTranslator()->trans('"Backup" directory does not exist.', [], 'Admin.Advparameters.Notification')); } // Check the realpath so we can validate the backup file is under the backup directory @@ -132,7 +132,7 @@ public static function getBackupPath($filename = '') } if ($backupfile === false || strncmp($backupdir, $backupfile, strlen($backupdir)) != 0) { - die(Tools::displayError('Invalid backup file.')); + throw new PrestaShopException('Invalid backup file.'); } return $backupfile; @@ -150,7 +150,7 @@ public static function backupExist($filename) $backupdir = realpath(_PS_ADMIN_DIR_ . self::$backupDir); if ($backupdir === false) { - die(Tools::displayError(Context::getContext()->getTranslator()->trans('"Backup" directory does not exist.', [], 'Admin.Advparameters.Notification'))); + throw new PrestaShopException(Context::getContext()->getTranslator()->trans('"Backup" directory does not exist.', [], 'Admin.Advparameters.Notification')); } return @filemtime($backupdir . DIRECTORY_SEPARATOR . $filename); diff --git a/classes/Product.php b/classes/Product.php index fab51905e3c7e..368c2eed9993f 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -884,7 +884,7 @@ public static function initPricesComputation($id_customer = null) if ((int) $id_customer > 0) { $customer = new Customer((int) $id_customer); if (!Validate::isLoadedObject($customer)) { - die(Tools::displayError(sprintf('Customer with ID "%s" could not be loaded.', $id_customer))); + throw new PrestaShopException(sprintf('Customer with ID "%s" could not be loaded.', $id_customer)); } self::$_taxCalculationMethod = Group::getPriceDisplayMethod((int) $customer->id_default_group); $cur_cart = Context::getContext()->cart; @@ -1589,7 +1589,7 @@ public static function getProducts( } if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) { - die(Tools::displayError('Invalid sorting parameters provided.')); + throw new PrestaShopException('Invalid sorting parameters provided.'); } if ($order_by == 'id_product' || $order_by == 'price' || $order_by == 'date_add' || $order_by == 'date_upd') { $order_by_prefix = 'p'; @@ -2750,7 +2750,7 @@ public static function getNewProducts($id_lang, $page_number = 0, $nb_products = $order_by_prefix = 'pl'; } if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) { - die(Tools::displayError('Invalid sorting parameters provided.')); + throw new PrestaShopException('Invalid sorting parameters provided.'); } $sql_groups = ''; @@ -3022,7 +3022,7 @@ public static function getPricesDrop( $order_by_prefix = 'pl'; } if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) { - die(Tools::displayError('Invalid sorting parameters provided.')); + throw new PrestaShopException('Invalid sorting parameters provided.'); } $current_date = date('Y-m-d H:i:00'); $ids_product = Product::_getProductIdByDate(!$beginning ? $current_date : $beginning, !$ending ? $current_date : $ending, $context); @@ -3357,7 +3357,7 @@ public static function getPriceStatic( } if (!Validate::isUnsignedId($id_product)) { - die(Tools::displayError('Product ID is invalid.')); + throw new PrestaShopException('Product ID is invalid.'); } // Initializations @@ -3377,7 +3377,7 @@ public static function getPriceStatic( * When called from the back office, cart ID can be inexistant */ if (!$id_cart && !isset($context->employee)) { - die(Tools::displayError('If no employee is assigned in the context, cart ID must be provided to this method.')); + throw new PrestaShopException('If no employee is assigned in the context, cart ID must be provided to this method.'); } $cur_cart = new Cart($id_cart); // Store cart in context to avoid multiple instantiations in BO diff --git a/classes/State.php b/classes/State.php index 8b95f0928c9e1..a100a6f856fa8 100644 --- a/classes/State.php +++ b/classes/State.php @@ -210,7 +210,7 @@ public function countUsed() public static function getStatesByIdCountry($idCountry, $active = false, $orderBy = null, $sort = 'ASC') { if (empty($idCountry)) { - die(Tools::displayError('Country ID is invalid.')); + throw new PrestaShopException('Country ID is invalid.'); } $available_sort = ['DESC', 'ASC', 'asc', 'desc']; @@ -241,7 +241,7 @@ public static function getStatesByIdCountry($idCountry, $active = false, $orderB public static function getIdZone($idState) { if (!Validate::isUnsignedId($idState)) { - die(Tools::displayError('State ID is invalid.')); + throw new PrestaShopException('State ID is invalid.'); } return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( diff --git a/classes/Supplier.php b/classes/Supplier.php index 3647981c25534..fec75a43402c7 100644 --- a/classes/Supplier.php +++ b/classes/Supplier.php @@ -299,7 +299,7 @@ public static function getProducts( } if (!Validate::isOrderBy($orderBy) || !Validate::isOrderWay($orderWay)) { - die(Tools::displayError('Invalid sorting parameters provided.')); + throw new PrestaShopException('Invalid sorting parameters provided.'); } $sqlGroups = ''; diff --git a/classes/Tools.php b/classes/Tools.php index 91bf20cfe6cf5..605d8238e0a71 100644 --- a/classes/Tools.php +++ b/classes/Tools.php @@ -1001,6 +1001,9 @@ public static function clearXMLCache() * @return string * * @throws PrestaShopException If _PS_MODE_DEV_ is enabled + * + * @deprecated since 9.0.0 - Please throw an exception directly. It will be handled better and logged + * in all enviroments, to both PHP and our logs. This method will be eventually removed */ public static function displayError($errorMessage = null, $htmlentities = null, ?Context $context = null) { diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index f2871c32c16bb..eec52ffc1abb2 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -1626,7 +1626,7 @@ public function initPageHeaderToolbar() $back = self::$currentIndex . '&token=' . $this->token; } if (!Validate::isCleanHtml($back)) { - die(Tools::displayError('Provided "back" parameter is invalid.')); + throw new PrestaShopException('Provided "back" parameter is invalid.'); } if (!$this->lite_display) { $this->page_header_toolbar_btn['back'] = [ @@ -1699,7 +1699,7 @@ public function initToolbar() $back = self::$currentIndex . '&token=' . $this->token; } if (!Validate::isCleanHtml($back)) { - die(Tools::displayError('Provided "back" parameter is invalid.')); + throw new PrestaShopException('Provided "back" parameter is invalid.'); } if (!$this->lite_display) { $this->toolbar_btn['cancel'] = [ @@ -1716,7 +1716,7 @@ public function initToolbar() $back = self::$currentIndex . '&token=' . $this->token; } if (!Validate::isCleanHtml($back)) { - die(Tools::displayError('Provided "back" parameter is invalid.')); + throw new PrestaShopException('Provided "back" parameter is invalid.'); } if (!$this->lite_display) { $this->toolbar_btn['back'] = [ @@ -2515,7 +2515,7 @@ public function renderForm() $back = self::$currentIndex . '&token=' . $this->token; } if (!Validate::isCleanHtml($back)) { - die(Tools::displayError('Provided "back" parameter is invalid.')); + throw new PrestaShopException('Provided "back" parameter is invalid.'); } $helper->back_url = $back; diff --git a/classes/db/DbMySQLi.php b/classes/db/DbMySQLi.php index b25d5d7b21a36..ab8450e8257de 100644 --- a/classes/db/DbMySQLi.php +++ b/classes/db/DbMySQLi.php @@ -71,12 +71,23 @@ public function connect() // Do not use object way for error because this work bad before PHP 5.2.9 if (mysqli_connect_error()) { - throw new PrestaShopDatabaseException(sprintf(Tools::displayError('Link to database cannot be established: %s'), mysqli_connect_error())); + throw new PrestaShopDatabaseException(sprintf( + Context::getContext()->getTranslator()->trans( + 'Link to database cannot be established: %s', + [], + 'Admin.Notifications.Error' + ), + mysqli_connect_error() + )); } // UTF-8 support if (!$this->link->query('SET NAMES utf8mb4')) { - throw new PrestaShopDatabaseException(Tools::displayError('PrestaShop Fatal error: no utf-8 support. Please check your server configuration.')); + throw new PrestaShopDatabaseException(Context::getContext()->getTranslator()->trans( + 'PrestaShop Fatal error: no utf-8 support. Please check your server configuration.', + [], + 'Admin.Notifications.Error' + )); } $this->link->query('SET SESSION sql_mode = \'\''); diff --git a/classes/log/FileLogger.php b/classes/log/FileLogger.php index d66e447d7397e..18a2e3f33553c 100644 --- a/classes/log/FileLogger.php +++ b/classes/log/FileLogger.php @@ -72,7 +72,7 @@ public function setFilename($filename) public function getFilename() { if (empty($this->filename)) { - die(Tools::displayError('Filename is empty.')); + throw new PrestaShopException('Filename is empty.'); } return $this->filename; diff --git a/classes/module/Module.php b/classes/module/Module.php index a2c1d18149f61..f86740d2dce63 100755 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -468,11 +468,11 @@ public function install() Db::getInstance()->execute(' INSERT INTO `' . _DB_PREFIX_ . 'module_access` (`id_profile`, `id_authorization_role`) ( - SELECT id_profile, "' . Db::getInstance()->Insert_ID() . '" - FROM ' . _DB_PREFIX_ . 'access a + SELECT `id_profile`, "' . Db::getInstance()->Insert_ID() . '" + FROM `' . _DB_PREFIX_ . 'access` a LEFT JOIN `' . _DB_PREFIX_ . 'authorization_role` r - ON r.id_authorization_role = a.id_authorization_role - WHERE r.slug = "ROLE_MOD_TAB_ADMINMODULESSF_' . $action . '" + ON r.`id_authorization_role` = a.`id_authorization_role` + WHERE r.`slug` = "ROLE_MOD_TAB_ADMINMODULESSF_' . $action . '" )'); } @@ -656,8 +656,8 @@ public static function upgradeModuleVersion($name, $version) { return Db::getInstance()->execute(' UPDATE `' . _DB_PREFIX_ . 'module` m - SET m.version = \'' . pSQL($version) . '\' - WHERE m.name = \'' . pSQL($name) . '\''); + SET m.`version` = \'' . pSQL($version) . '\' + WHERE m.`name` = \'' . pSQL($name) . '\''); } /** @@ -826,10 +826,10 @@ public function uninstall() // Remove all configured meta data (titles, URLs etc.) for this module's front controllers foreach ($this->controllers as $controller) { $page_name = 'module-' . $this->name . '-' . $controller; - $meta = Db::getInstance()->getValue('SELECT id_meta FROM `' . _DB_PREFIX_ . 'meta` WHERE page="' . pSQL($page_name) . '"'); + $meta = Db::getInstance()->getValue('SELECT `id_meta` FROM `' . _DB_PREFIX_ . 'meta` WHERE `page`="' . pSQL($page_name) . '"'); if ((int) $meta > 0) { - Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'meta_lang` WHERE id_meta=' . (int) $meta); - Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'meta` WHERE id_meta=' . (int) $meta); + Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'meta_lang` WHERE `id_meta`=' . (int) $meta); + Db::getInstance()->execute('DELETE FROM `' . _DB_PREFIX_ . 'meta` WHERE `id_meta`=' . (int) $meta); } } @@ -1083,7 +1083,7 @@ public function disable($force_all = false) public function hasShopAssociations(): bool { - $sql = "SELECT m.id_module FROM %smodule m INNER JOIN %smodule_shop ms ON ms.id_module = m.id_module WHERE m.id_module = '%s'"; + $sql = "SELECT m.`id_module` FROM %smodule m INNER JOIN %smodule_shop ms ON ms.`id_module` = m.`id_module` WHERE m.`id_module` = '%s'"; $result = Db::getInstance()->getRow(sprintf($sql, _DB_PREFIX_, _DB_PREFIX_, (int) $this->id)); return isset($result['id_module']); @@ -1240,11 +1240,11 @@ public static function getInstanceByName($module_name) return false; } - die(Tools::displayError(Context::getContext()->getTranslator()->trans( + throw new PrestaShopException(Context::getContext()->getTranslator()->trans( '%1$s is not a valid module name.', [Tools::safeOutput($module_name)], 'Admin.Modules.Notification' - ))); + )); } if (!isset(static::$_INSTANCE[$module_name])) { @@ -1429,7 +1429,7 @@ public static function getModulesOnDisk($use_config = false, $id_employee = fals $modules_installed = []; $result = Db::getInstance()->executeS(' - SELECT m.name, m.version, mp.interest + SELECT m.`name`, m.`version`, mp.`interest` FROM `' . _DB_PREFIX_ . 'module` m ' . Shop::addSqlAssociation('module', 'm', false) . ' LEFT JOIN `' . _DB_PREFIX_ . 'module_preference` mp ON (mp.`module` = m.`name` AND mp.`id_employee` = ' . (int) $id_employee . ')'); @@ -1611,11 +1611,11 @@ public static function getModulesOnDisk($use_config = false, $id_employee = fals // Get modules information from database if (!empty($module_name_list)) { $list = Shop::getContextListShopID(); - $sql = 'SELECT m.id_module, m.name, ( - SELECT COUNT(*) FROM ' . _DB_PREFIX_ . 'module_shop ms WHERE m.id_module = ms.id_module AND ms.id_shop IN (' . implode(',', $list) . ') + $sql = 'SELECT m.`id_module`, m.`name`, ( + SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'module_shop` ms WHERE m.`id_module` = ms.`id_module` AND ms.`id_shop` IN (' . implode(',', $list) . ') ) as total - FROM ' . _DB_PREFIX_ . 'module m - WHERE LOWER(m.name) IN (' . Tools::strtolower(implode(',', $module_name_list)) . ')'; + FROM `' . _DB_PREFIX_ . 'module` m + WHERE LOWER(m.`name`) IN (' . Tools::strtolower(implode(',', $module_name_list)) . ')'; $results = Db::getInstance()->executeS($sql); foreach ($results as $result) { @@ -1730,7 +1730,7 @@ public static function getModulesInstalled($position = 0) $sql .= 'LEFT JOIN `' . _DB_PREFIX_ . 'hook_module` hm ON m.`id_module` = hm.`id_module` LEFT JOIN `' . _DB_PREFIX_ . 'hook` k ON hm.`id_hook` = k.`id_hook` WHERE k.`position` = 1 - GROUP BY m.id_module'; + GROUP BY m.`id_module`'; } return Db::getInstance()->executeS($sql); @@ -1875,8 +1875,8 @@ public function updatePosition($id_hook, $way, $position = null) $maxPosition = max((int) $from['position'], (int) $to['position']); $shiftHookPositionsSql = 'UPDATE `' . _DB_PREFIX_ . 'hook_module` - SET position = position ' . ($way ? '- 1' : '+ 1') . ' - WHERE position BETWEEN ' . $minPosition . ' AND ' . $maxPosition . ' + SET `position` = `position` ' . ($way ? '- 1' : '+ 1') . ' + WHERE `position` BETWEEN ' . $minPosition . ' AND ' . $maxPosition . ' AND `id_hook` = ' . (int) $from['id_hook'] . ' AND `id_shop` = ' . $shop_id; if (!Db::getInstance()->execute($shiftHookPositionsSql)) { @@ -2133,10 +2133,10 @@ public static function isInstalled($module_name) public function isEnabledForShopContext() { return (bool) Db::getInstance()->getValue( - 'SELECT id_module + 'SELECT `id_module` FROM `' . _DB_PREFIX_ . 'module_shop` - WHERE id_module=' . (int) $this->id . ' AND id_shop IN (' . implode(',', array_map('intval', Shop::getContextListShopID())) . ') - GROUP BY id_module + WHERE `id_module`=' . (int) $this->id . ' AND `id_shop` IN (' . implode(',', array_map('intval', Shop::getContextListShopID())) . ') + GROUP BY `id_module` HAVING COUNT(*)=' . (int) count(Shop::getContextListShopID()) ); } @@ -2538,10 +2538,10 @@ public static function getModulesAccessesByIdProfile($idProfile) `slug` LIKE "%UPDATE" as "configure", `slug` LIKE "%DELETE" as "uninstall" FROM `' . _DB_PREFIX_ . 'authorization_role` a - LEFT JOIN `' . _DB_PREFIX_ . 'module_access` j ON j.id_authorization_role = a.id_authorization_role + LEFT JOIN `' . _DB_PREFIX_ . 'module_access` j ON j.`id_authorization_role` = a.`id_authorization_role` WHERE `slug` LIKE "' . Permission::PREFIX_MODULE . '%" - AND j.id_profile = "' . (int) $idProfile . '" - ORDER BY a.slug + AND j.`id_profile` = "' . (int) $idProfile . '" + ORDER BY a.`slug` '); foreach ($profileRoles as $role) { @@ -2790,7 +2790,7 @@ protected function installControllers() { foreach ($this->controllers as $controller) { $page = 'module-' . $this->name . '-' . $controller; - $result = Db::getInstance()->getValue('SELECT * FROM ' . _DB_PREFIX_ . 'meta WHERE page="' . pSQL($page) . '"'); + $result = Db::getInstance()->getValue('SELECT * FROM `' . _DB_PREFIX_ . 'meta` WHERE `page`="' . pSQL($page) . '"'); if ((int) $result > 0) { continue; } diff --git a/classes/module/ModuleGraph.php b/classes/module/ModuleGraph.php index 0a151c77ae823..5c41c05dadfa2 100644 --- a/classes/module/ModuleGraph.php +++ b/classes/module/ModuleGraph.php @@ -261,10 +261,10 @@ protected function _displayCsv() public function create($render, $type, $width, $height, $layers) { if (!Validate::isModuleName($render)) { - die(Tools::displayError('Invalid graph module name.')); + throw new PrestaShopException('Invalid graph module name.'); } if (!Tools::file_exists_cache($file = _PS_ROOT_DIR_ . '/modules/' . $render . '/' . $render . '.php')) { - die(Tools::displayError('Main graph module file does not exist.')); + throw new PrestaShopException('Main graph module file does not exist.'); } require_once $file; $this->_render = new $render($type); @@ -295,7 +295,7 @@ public function engine($params) return Context::getContext()->getTranslator()->trans('No graph engine selected', [], 'Admin.Modules.Notification'); } if (!Validate::isModuleName($render)) { - die(Tools::displayError('Invalid graph module name.')); + throw new PrestaShopException('Invalid graph module name.'); } if (!file_exists(_PS_ROOT_DIR_ . '/modules/' . $render . '/' . $render . '.php')) { return Context::getContext()->getTranslator()->trans('Graph engine selected is unavailable.', [], 'Admin.Modules.Notification'); diff --git a/classes/module/ModuleGrid.php b/classes/module/ModuleGrid.php index 3fbe7e8a09f5e..9594b8abfbe2c 100644 --- a/classes/module/ModuleGrid.php +++ b/classes/module/ModuleGrid.php @@ -72,10 +72,10 @@ public function setLang($id_lang) public function create($render, $type, $width, $height, $start, $limit, $sort, $dir) { if (!Validate::isModuleName($render)) { - die(Tools::displayError('Invalid grid module name.')); + throw new PrestaShopException('Invalid grid module name.'); } if (!Tools::file_exists_cache($file = _PS_ROOT_DIR_ . '/modules/' . $render . '/' . $render . '.php')) { - die(Tools::displayError('Main grid module file does not exist.')); + throw new PrestaShopException('Main grid module file does not exist.'); } require_once $file; $this->_render = new $render($type); @@ -105,7 +105,7 @@ public function engine($params) return Context::getContext()->getTranslator()->trans('No grid engine selected', [], 'Admin.Modules.Notification'); } if (!Validate::isModuleName($render)) { - die(Tools::displayError('Invalid grid module name.')); + throw new PrestaShopException('Invalid grid module name.'); } if (!file_exists(_PS_ROOT_DIR_ . '/modules/' . $render . '/' . $render . '.php')) { return Context::getContext()->getTranslator()->trans('Grid engine selected is unavailable.', [], 'Admin.Modules.Notification'); diff --git a/classes/order/OrderReturn.php b/classes/order/OrderReturn.php index d884f855a5dcf..4e195f7e86719 100644 --- a/classes/order/OrderReturn.php +++ b/classes/order/OrderReturn.php @@ -95,7 +95,7 @@ public function checkEnoughProduct($order_detail_list, $product_qty_list) { $order = new Order((int) $this->id_order); if (!Validate::isLoadedObject($order)) { - die(Tools::displayError(sprintf('Order with ID "%s" could not be loaded.', $this->id_order))); + throw new PrestaShopException(sprintf('Order with ID "%s" could not be loaded.', $this->id_order)); } $products = $order->getProducts(); /* Products already returned */ @@ -200,7 +200,7 @@ public static function getReturnedCustomizedProducts($id_order) $returns = Customization::getReturnedCustomizations($id_order); $order = new Order((int) $id_order); if (!Validate::isLoadedObject($order)) { - die(Tools::displayError(sprintf('Order with ID "%s" could not be loaded.', $id_order))); + throw new PrestaShopException(sprintf('Order with ID "%s" could not be loaded.', $id_order)); } $products = $order->getProducts(); diff --git a/classes/tax/TaxRule.php b/classes/tax/TaxRule.php index 9b202545c2cf8..1f496606c4db4 100644 --- a/classes/tax/TaxRule.php +++ b/classes/tax/TaxRule.php @@ -63,7 +63,7 @@ class TaxRuleCore extends ObjectModel public static function deleteByGroupId($id_group) { if (empty($id_group)) { - die(Tools::displayError('Parameter "id_group" (id_tax_rules_group you want to delete) is invalid.')); + throw new PrestaShopException('Parameter "id_group" (id_tax_rules_group you want to delete) is invalid.'); } return Db::getInstance()->execute( diff --git a/composer.lock b/composer.lock index 5dc6b3a284b55..7367c0f33342a 100644 --- a/composer.lock +++ b/composer.lock @@ -5100,16 +5100,16 @@ }, { "name": "prestashop/contactform", - "version": "v4.4.2", + "version": "v4.4.3", "source": { "type": "git", "url": "https://github.com/PrestaShop/contactform.git", - "reference": "98886a82afc2953cb166081e9eaf2872fc457d4d" + "reference": "95346c18ca65f859efdd749e596779cdca459b10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShop/contactform/zipball/98886a82afc2953cb166081e9eaf2872fc457d4d", - "reference": "98886a82afc2953cb166081e9eaf2872fc457d4d", + "url": "https://api.github.com/repos/PrestaShop/contactform/zipball/95346c18ca65f859efdd749e596779cdca459b10", + "reference": "95346c18ca65f859efdd749e596779cdca459b10", "shasum": "" }, "require": { @@ -5139,9 +5139,9 @@ "description": "PrestaShop module contactform", "homepage": "https://github.com/PrestaShop/contactform", "support": { - "source": "https://github.com/PrestaShop/contactform/tree/v4.4.2" + "source": "https://github.com/PrestaShop/contactform/tree/v4.4.3" }, - "time": "2024-01-12T10:15:52+00:00" + "time": "2024-11-28T14:37:15+00:00" }, { "name": "prestashop/dashactivity", @@ -6375,23 +6375,24 @@ }, { "name": "prestashop/ps_emailalerts", - "version": "v3.0.0", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/PrestaShop/ps_emailalerts.git", - "reference": "62fd97e7c9dcc21b5a9c547dc484ac1d3c191bfd" + "reference": "19088593fc1fcb11ac06b36923558d6e47a0d324" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShop/ps_emailalerts/zipball/62fd97e7c9dcc21b5a9c547dc484ac1d3c191bfd", - "reference": "62fd97e7c9dcc21b5a9c547dc484ac1d3c191bfd", + "url": "https://api.github.com/repos/PrestaShop/ps_emailalerts/zipball/19088593fc1fcb11ac06b36923558d6e47a0d324", + "reference": "19088593fc1fcb11ac06b36923558d6e47a0d324", "shasum": "" }, "require": { "php": ">=7.1.3" }, "require-dev": { - "prestashop/php-dev-tools": "^4.3" + "friendsofphp/php-cs-fixer": "^v3", + "prestashop/php-dev-tools": "^5" }, "type": "prestashop-module", "notification-url": "https://packagist.org/downloads/", @@ -6407,9 +6408,9 @@ "description": "PrestaShop module ps_emailalerts", "homepage": "https://github.com/PrestaShop/ps_emailalerts", "support": { - "source": "https://github.com/PrestaShop/ps_emailalerts/tree/v3.0.0" + "source": "https://github.com/PrestaShop/ps_emailalerts/tree/v3.0.1" }, - "time": "2024-01-10T11:22:50+00:00" + "time": "2024-12-02T18:40:09+00:00" }, { "name": "prestashop/ps_emailsubscription", @@ -6727,16 +6728,16 @@ }, { "name": "prestashop/ps_linklist", - "version": "v7.0.0", + "version": "v7.0.1", "source": { "type": "git", "url": "https://github.com/PrestaShop/ps_linklist.git", - "reference": "d75fb386d1ee204fb0f5bf1fcbe64afd45cbbbdf" + "reference": "d68106a05a27d48ed64f178e093aca75f5cf9318" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PrestaShop/ps_linklist/zipball/d75fb386d1ee204fb0f5bf1fcbe64afd45cbbbdf", - "reference": "d75fb386d1ee204fb0f5bf1fcbe64afd45cbbbdf", + "url": "https://api.github.com/repos/PrestaShop/ps_linklist/zipball/d68106a05a27d48ed64f178e093aca75f5cf9318", + "reference": "d68106a05a27d48ed64f178e093aca75f5cf9318", "shasum": "" }, "require": { @@ -6769,9 +6770,9 @@ "description": "PrestaShop - Link list", "homepage": "https://github.com/PrestaShop/ps_linklist", "support": { - "source": "https://github.com/PrestaShop/ps_linklist/tree/v7.0.0" + "source": "https://github.com/PrestaShop/ps_linklist/tree/v7.0.1" }, - "time": "2024-09-09T14:00:31+00:00" + "time": "2024-11-29T15:31:17+00:00" }, { "name": "prestashop/ps_mainmenu", diff --git a/controllers/admin/AdminCustomerThreadsController.php b/controllers/admin/AdminCustomerThreadsController.php index 4e036b50cef31..5c77d267ee817 100644 --- a/controllers/admin/AdminCustomerThreadsController.php +++ b/controllers/admin/AdminCustomerThreadsController.php @@ -555,11 +555,11 @@ protected function openUploadedFile(bool $forceDownload = true) } if (!$extension) { - die(Tools::displayError('Invalid file extension.')); + throw new PrestaShopException('Invalid file extension.'); } if (!Validate::isFileName($filename)) { - die(Tools::displayError('Invalid filename.')); + throw new PrestaShopException('Invalid filename.'); } if (ob_get_level() && ob_get_length() > 0) { diff --git a/controllers/admin/AdminReturnController.php b/controllers/admin/AdminReturnController.php index 91db89e1bc90e..4078c4f69496f 100644 --- a/controllers/admin/AdminReturnController.php +++ b/controllers/admin/AdminReturnController.php @@ -232,7 +232,7 @@ public function postProcess() if (($id_order_return = (int) Tools::getValue('id_order_return')) && Validate::isUnsignedId($id_order_return)) { $orderReturn = new OrderReturn($id_order_return); if (!Validate::isLoadedObject($orderReturn)) { - die(Tools::displayError(sprintf('Order return with ID "%s" could not be loaded.', $id_order_return))); + throw new PrestaShopException(sprintf('Order return with ID "%s" could not be loaded.', $id_order_return)); } if ((int) $orderReturn->countProduct() > 1) { if (OrderReturn::deleteOrderReturnDetail($id_order_return, $id_order_detail, (int) Tools::getValue('id_customization', 0))) { diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index a2ca021b02855..601fae8ea75c3 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -1000,7 +1000,11 @@ public function displayAjaxGraphDraw() /** @var ModuleGraph|false $graph */ $graph = Module::getInstanceByName($module); if (false === $graph) { - $this->ajaxRender(Tools::displayError('Graph module could not be loaded.')); + $this->ajaxRender($this->trans( + 'Graph module could not be loaded.', + [], + 'Admin.Notifications.Error' + )); return; } @@ -1040,7 +1044,11 @@ public function displayAjaxGraphGrid() /** @var ModuleGrid|false $grid */ $grid = Module::getInstanceByName($module); if (false === $grid) { - $this->ajaxRender(Tools::displayError('Grid module could not be loaded.')); + $this->ajaxRender($this->trans( + 'Grid module could not be loaded.', + [], + 'Admin.Notifications.Error' + )); return; } diff --git a/controllers/front/AddressesController.php b/controllers/front/AddressesController.php index 419b85b877c0f..4eb95c2b37f68 100644 --- a/controllers/front/AddressesController.php +++ b/controllers/front/AddressesController.php @@ -44,7 +44,7 @@ public function init(): void parent::init(); if (!Validate::isLoadedObject($this->context->customer)) { - die(Tools::displayError($this->trans('The customer could not be found.', [], 'Shop.Notifications.Error'))); + throw new PrestaShopException($this->trans('The customer could not be found.', [], 'Shop.Notifications.Error')); } } diff --git a/controllers/front/GetFileController.php b/controllers/front/GetFileController.php index baadd8bbe1697..2a718b004d0dc 100644 --- a/controllers/front/GetFileController.php +++ b/controllers/front/GetFileController.php @@ -171,7 +171,7 @@ public function init(): void // Admin can directly access to file $filename = Tools::getValue('file'); if (!Validate::isSha1($filename)) { - die(Tools::displayError('Filename is not a valid SHA1 checksum.')); + throw new PrestaShopException('Filename is not a valid SHA1 checksum.'); } $file = _PS_DOWNLOAD_DIR_ . (string) preg_replace('/\.{2,}/', '.', $filename); $filename = ProductDownload::getFilenameFromFilename(Tools::getValue('file')); diff --git a/tests/Integration/Utility/CartOld.php b/tests/Integration/Utility/CartOld.php index 7384ee63438ba..3080afdbe3975 100644 --- a/tests/Integration/Utility/CartOld.php +++ b/tests/Integration/Utility/CartOld.php @@ -32,6 +32,7 @@ use Context; use Order; use PrestaShop\PrestaShop\Adapter\ServiceLocator; +use PrestaShopException; use Shop; use Tools; @@ -94,7 +95,7 @@ public function getOrderTotalV1( $virtual_context->cart = $this; if (!in_array($type, $array_type)) { - die(Tools::displayError()); + throw new PrestaShopException(); } $with_shipping = in_array($type, [Cart::BOTH, Cart::ONLY_SHIPPING]); diff --git a/tests/UI/campaigns/functional/FO/classic/02_headerAndFooter/03_changeCurrency.ts b/tests/UI/campaigns/functional/FO/classic/02_headerAndFooter/03_changeCurrency.ts index e6746c9f2fc66..c87c0306e755e 100644 --- a/tests/UI/campaigns/functional/FO/classic/02_headerAndFooter/03_changeCurrency.ts +++ b/tests/UI/campaigns/functional/FO/classic/02_headerAndFooter/03_changeCurrency.ts @@ -16,7 +16,6 @@ import { foClassicHomePage, foClassicSearchResultsPage, type Page, - utilsFile, utilsPlaywright, } from '@prestashop-core/ui-testing'; @@ -40,7 +39,6 @@ Post-condition: describe('FO - Header and Footer : Change currency', async () => { let browserContext: BrowserContext; let page: Page; - let filePath: string; let exchangeRateValue: number = 0; before(async function () { @@ -49,7 +47,6 @@ describe('FO - Header and Footer : Change currency', async () => { }); after(async () => { - await utilsFile.deleteFile(filePath); await utilsPlaywright.closeBrowserContext(browserContext); }); diff --git a/tests/UI/package-lock.json b/tests/UI/package-lock.json index 578fe37272e29..e1350166095c8 100644 --- a/tests/UI/package-lock.json +++ b/tests/UI/package-lock.json @@ -9,33 +9,33 @@ "version": "1.0.0", "license": "OSL-3.0", "dependencies": { - "@faker-js/faker": "^9.0.3", + "@faker-js/faker": "^9.2.0", "@prestashop-core/ui-testing": "https://github.com/PrestaShop/ui-testing-library#main", "chai": "^4.5.0", "chai-string": "^1.5.0", "dotenv": "^16.4.5", - "mocha": "^10.7.3", + "mocha": "^10.8.2", "mochawesome": "^7.1.3", - "mysql2": "^3.11.3" + "mysql2": "^3.11.5" }, "devDependencies": { "@types/chai": "^4.3.11", "@types/chai-string": "^1.4.5", - "@types/mocha": "^10.0.9", + "@types/mocha": "^10.0.10", "@types/mochawesome": "^6.2.4", - "@typescript-eslint/eslint-plugin": "^8.8.1", - "@typescript-eslint/parser": "^8.8.1", + "@typescript-eslint/eslint-plugin": "^8.16.0", + "@typescript-eslint/parser": "^8.16.0", "babel-eslint": "^10.1.0", "eslint": "^8.57.1", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-deprecation": "^3.0.0", "eslint-plugin-html": "^8.1.2", "eslint-plugin-import": "^2.31.0", - "jsdoc-to-markdown": "^9.0.2", + "jsdoc-to-markdown": "^9.0.5", "mochawesome-merge": "^4.3.0", "ts-mocha": "^10.0.0", "tsconfig-paths": "^4.2.0", - "typescript": "^5.6.3" + "typescript": "^5.7.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -286,9 +286,9 @@ } }, "node_modules/@faker-js/faker": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.3.tgz", - "integrity": "sha512-lWrrK4QNlFSU+13PL9jMbMKLJYXDFu3tQfayBsMXX7KL/GiQeqfB1CzHkqD5UHBUtPAuPo6XwGbMFNdVMZObRA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.2.0.tgz", + "integrity": "sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==", "funding": [ { "type": "opencollective", @@ -433,7 +433,6 @@ "node_modules/@prestashop-core/ui-testing": { "version": "0.0.12", "resolved": "git+ssh://git@github.com/PrestaShop/ui-testing-library.git#49a1a110e5b399f24225a3e8ccaf59161d2a9c05", - "license": "MIT", "dependencies": { "@faker-js/faker": "^9.0.3", "@playwright/test": "^1.48.1", @@ -536,9 +535,9 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", - "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true }, "node_modules/@types/mochawesome": { @@ -556,16 +555,16 @@ "integrity": "sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz", - "integrity": "sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz", + "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/type-utils": "8.8.1", - "@typescript-eslint/utils": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/type-utils": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -589,13 +588,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", - "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1" + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -606,9 +605,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", - "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -619,13 +618,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", - "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -647,15 +646,15 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", - "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz", + "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1" + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -666,16 +665,21 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", - "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -695,12 +699,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -722,15 +726,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.1.tgz", - "integrity": "sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz", + "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4" }, "engines": { @@ -750,13 +754,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", - "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1" + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -767,9 +771,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", - "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -780,13 +784,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", - "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -808,13 +812,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", - "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -834,12 +838,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -878,13 +882,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz", - "integrity": "sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz", + "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.8.1", - "@typescript-eslint/utils": "8.8.1", + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/utils": "8.16.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -895,6 +899,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -902,13 +909,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", - "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1" + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -919,9 +926,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", - "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -932,13 +939,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", - "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -960,15 +967,15 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", - "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz", + "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1" + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -979,16 +986,21 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", - "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.8.1", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1008,12 +1020,12 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1997,18 +2009,26 @@ } }, "node_modules/command-line-args": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.0.tgz", - "integrity": "sha512-zDdHxHzlCp/gA1gy0VtPK3YL0Aob3ijJdwZ7H3HSl55hh8EziLtRlyj/od8EGRJfX8IjussC/mQkScl2Ms5Suw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", + "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", "dev": true, "dependencies": { "array-back": "^6.2.2", - "find-replace": "^5.0.1", + "find-replace": "^5.0.2", "lodash.camelcase": "^4.3.0", - "typical": "^7.1.1" + "typical": "^7.2.0" }, "engines": { "node": ">=12.20" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } } }, "node_modules/command-line-usage": { @@ -3624,15 +3644,20 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-replace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.1.tgz", - "integrity": "sha512-o5/Y8HrCNRuFF5rdNTkX8Vhv6kTFTV0t1zIoigwlCdbkA9qaapRzxvWPND2VvlFa9LBI05Q1i8ml/saMqkOJUQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", + "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", "dev": true, - "dependencies": { - "array-back": "^6.2.2" - }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } } }, "node_modules/find-up": { @@ -4628,9 +4653,9 @@ } }, "node_modules/jsdoc": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.3.tgz", - "integrity": "sha512-Nu7Sf35kXJ1MWDZIMAuATRQTg1iIPdzh7tqJ6jjvaU/GfDf+qi5UV8zJR3Mo+/pYFvm8mzay4+6O5EWigaQBQw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", + "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", "dev": true, "dependencies": { "@babel/parser": "^7.20.15", @@ -4657,16 +4682,16 @@ } }, "node_modules/jsdoc-api": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-9.3.1.tgz", - "integrity": "sha512-pgZ5nrLnzF8Swxbv5OV8RYAoM/S3Cbf1UHncNYMRCQwU4KlCfg5bz5/VZlg0a1EATSHclIBf9Hm55GkXz0VItA==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-9.3.4.tgz", + "integrity": "sha512-di8lggLACEttpyAZ6WjKKafUP4wC4prAGjt40nMl7quDpp2nD7GmLt6/WxhRu9Q6IYoAAySsNeidBXYVAMwlqg==", "dev": true, "dependencies": { "array-back": "^6.2.2", "cache-point": "^3.0.0", "current-module-paths": "^1.1.2", - "file-set": "^5.2.0", - "jsdoc": "^4.0.3", + "file-set": "^5.2.2", + "jsdoc": "^4.0.4", "object-to-spawn-args": "^2.0.1", "walk-back": "^5.1.1" }, @@ -4698,17 +4723,17 @@ } }, "node_modules/jsdoc-to-markdown": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-9.0.2.tgz", - "integrity": "sha512-4T/7sCxq5RDXT37inCpVLetXOyjaFCMtVYH4Yvyfk/0v2aksMn74FqYdtSOc/+wceu+5ItJop6krCtGZjpJTxA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-9.0.5.tgz", + "integrity": "sha512-lqvKgSva+wGUusRz6xtImdM92lrjHNmyi7LyWdLMQBijCnoFwTZjNF3zUqm6uahsSaRALQNyzGXmjaef6IUE4g==", "dev": true, "dependencies": { "array-back": "^6.2.2", - "command-line-args": "^6.0.0", + "command-line-args": "^6.0.1", "command-line-usage": "^7.0.3", "config-master": "^3.1.0", "dmd": "^7.0.7", - "jsdoc-api": "^9.3.1", + "jsdoc-api": "^9.3.4", "jsdoc-parse": "^6.2.4", "walk-back": "^5.1.1" }, @@ -5335,9 +5360,9 @@ } }, "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -5875,9 +5900,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mysql2": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.3.tgz", - "integrity": "sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==", + "version": "3.11.5", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.5.tgz", + "integrity": "sha512-0XFu8rUmFN9vC0ME36iBvCUObftiMHItrYFhlCRvFWbLgpNqtC4Br/NmZX1HNCszxT0GGy5QtP+k3Q3eCJPaYA==", "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", @@ -7565,9 +7590,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -7578,9 +7603,9 @@ } }, "node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.2.0.tgz", + "integrity": "sha512-W1+HdVRUl8fS3MZ9ogD51GOb46xMmhAZzR0WPw5jcgIZQJVvkddYzAl4YTU6g5w33Y1iRQLdIi2/1jhi2RNL0g==", "dev": true, "engines": { "node": ">=12.17" @@ -8321,9 +8346,9 @@ "dev": true }, "@faker-js/faker": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.3.tgz", - "integrity": "sha512-lWrrK4QNlFSU+13PL9jMbMKLJYXDFu3tQfayBsMXX7KL/GiQeqfB1CzHkqD5UHBUtPAuPo6XwGbMFNdVMZObRA==" + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.2.0.tgz", + "integrity": "sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==" }, "@humanwhocodes/config-array": { "version": "0.13.0", @@ -8520,9 +8545,9 @@ "dev": true }, "@types/mocha": { - "version": "10.0.9", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", - "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", "dev": true }, "@types/mochawesome": { @@ -8540,16 +8565,16 @@ "integrity": "sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==" }, "@typescript-eslint/eslint-plugin": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz", - "integrity": "sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz", + "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/type-utils": "8.8.1", - "@typescript-eslint/utils": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/type-utils": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -8557,29 +8582,29 @@ }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", - "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1" + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" } }, "@typescript-eslint/types": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", - "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", - "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -8589,25 +8614,25 @@ } }, "@typescript-eslint/utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", - "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz", + "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1" + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0" } }, "@typescript-eslint/visitor-keys": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", - "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" } }, "brace-expansion": { @@ -8620,9 +8645,9 @@ } }, "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true }, "minimatch": { @@ -8637,42 +8662,42 @@ } }, "@typescript-eslint/parser": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.1.tgz", - "integrity": "sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz", + "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", - "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1" + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" } }, "@typescript-eslint/types": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", - "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", - "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -8682,13 +8707,13 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", - "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" } }, "brace-expansion": { @@ -8701,9 +8726,9 @@ } }, "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true }, "minimatch": { @@ -8728,41 +8753,41 @@ } }, "@typescript-eslint/type-utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz", - "integrity": "sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz", + "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.8.1", - "@typescript-eslint/utils": "8.8.1", + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/utils": "8.16.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz", - "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1" + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" } }, "@typescript-eslint/types": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz", - "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz", - "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/visitor-keys": "8.8.1", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -8772,25 +8797,25 @@ } }, "@typescript-eslint/utils": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz", - "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz", + "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.8.1", - "@typescript-eslint/types": "8.8.1", - "@typescript-eslint/typescript-estree": "8.8.1" + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0" } }, "@typescript-eslint/visitor-keys": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz", - "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", "dev": true, "requires": { - "@typescript-eslint/types": "8.8.1", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" } }, "brace-expansion": { @@ -8803,9 +8828,9 @@ } }, "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true }, "minimatch": { @@ -9513,15 +9538,15 @@ } }, "command-line-args": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.0.tgz", - "integrity": "sha512-zDdHxHzlCp/gA1gy0VtPK3YL0Aob3ijJdwZ7H3HSl55hh8EziLtRlyj/od8EGRJfX8IjussC/mQkScl2Ms5Suw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", + "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", "dev": true, "requires": { "array-back": "^6.2.2", - "find-replace": "^5.0.1", + "find-replace": "^5.0.2", "lodash.camelcase": "^4.3.0", - "typical": "^7.1.1" + "typical": "^7.2.0" } }, "command-line-usage": { @@ -10732,13 +10757,11 @@ } }, "find-replace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.1.tgz", - "integrity": "sha512-o5/Y8HrCNRuFF5rdNTkX8Vhv6kTFTV0t1zIoigwlCdbkA9qaapRzxvWPND2VvlFa9LBI05Q1i8ml/saMqkOJUQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", + "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", "dev": true, - "requires": { - "array-back": "^6.2.2" - } + "requires": {} }, "find-up": { "version": "5.0.0", @@ -11438,9 +11461,9 @@ } }, "jsdoc": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.3.tgz", - "integrity": "sha512-Nu7Sf35kXJ1MWDZIMAuATRQTg1iIPdzh7tqJ6jjvaU/GfDf+qi5UV8zJR3Mo+/pYFvm8mzay4+6O5EWigaQBQw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", + "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", "dev": true, "requires": { "@babel/parser": "^7.20.15", @@ -11475,16 +11498,16 @@ } }, "jsdoc-api": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-9.3.1.tgz", - "integrity": "sha512-pgZ5nrLnzF8Swxbv5OV8RYAoM/S3Cbf1UHncNYMRCQwU4KlCfg5bz5/VZlg0a1EATSHclIBf9Hm55GkXz0VItA==", + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-9.3.4.tgz", + "integrity": "sha512-di8lggLACEttpyAZ6WjKKafUP4wC4prAGjt40nMl7quDpp2nD7GmLt6/WxhRu9Q6IYoAAySsNeidBXYVAMwlqg==", "dev": true, "requires": { "array-back": "^6.2.2", "cache-point": "^3.0.0", "current-module-paths": "^1.1.2", - "file-set": "^5.2.0", - "jsdoc": "^4.0.3", + "file-set": "^5.2.2", + "jsdoc": "^4.0.4", "object-to-spawn-args": "^2.0.1", "walk-back": "^5.1.1" } @@ -11502,17 +11525,17 @@ } }, "jsdoc-to-markdown": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-9.0.2.tgz", - "integrity": "sha512-4T/7sCxq5RDXT37inCpVLetXOyjaFCMtVYH4Yvyfk/0v2aksMn74FqYdtSOc/+wceu+5ItJop6krCtGZjpJTxA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-9.0.5.tgz", + "integrity": "sha512-lqvKgSva+wGUusRz6xtImdM92lrjHNmyi7LyWdLMQBijCnoFwTZjNF3zUqm6uahsSaRALQNyzGXmjaef6IUE4g==", "dev": true, "requires": { "array-back": "^6.2.2", - "command-line-args": "^6.0.0", + "command-line-args": "^6.0.1", "command-line-usage": "^7.0.3", "config-master": "^3.1.0", "dmd": "^7.0.7", - "jsdoc-api": "^9.3.1", + "jsdoc-api": "^9.3.4", "jsdoc-parse": "^6.2.4", "walk-back": "^5.1.1" } @@ -11960,9 +11983,9 @@ } }, "mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "requires": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -12364,9 +12387,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql2": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.3.tgz", - "integrity": "sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==", + "version": "3.11.5", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.5.tgz", + "integrity": "sha512-0XFu8rUmFN9vC0ME36iBvCUObftiMHItrYFhlCRvFWbLgpNqtC4Br/NmZX1HNCszxT0GGy5QtP+k3Q3eCJPaYA==", "requires": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", @@ -13581,15 +13604,15 @@ } }, "typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true }, "typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.2.0.tgz", + "integrity": "sha512-W1+HdVRUl8fS3MZ9ogD51GOb46xMmhAZzR0WPw5jcgIZQJVvkddYzAl4YTU6g5w33Y1iRQLdIi2/1jhi2RNL0g==", "dev": true }, "uc.micro": { diff --git a/tests/UI/package.json b/tests/UI/package.json index 96a346b82ba6d..eb43cd0bd8835 100644 --- a/tests/UI/package.json +++ b/tests/UI/package.json @@ -110,32 +110,32 @@ }, "homepage": "https://github.com/PrestaShop/PrestaShop/tree/develop/tests/UI#readme", "dependencies": { - "@faker-js/faker": "^9.0.3", + "@faker-js/faker": "^9.2.0", "@prestashop-core/ui-testing": "https://github.com/PrestaShop/ui-testing-library#main", "chai": "^4.5.0", "chai-string": "^1.5.0", "dotenv": "^16.4.5", - "mocha": "^10.7.3", + "mocha": "^10.8.2", "mochawesome": "^7.1.3", - "mysql2": "^3.11.3" + "mysql2": "^3.11.5" }, "devDependencies": { "@types/chai": "^4.3.11", "@types/chai-string": "^1.4.5", - "@types/mocha": "^10.0.9", + "@types/mocha": "^10.0.10", "@types/mochawesome": "^6.2.4", - "@typescript-eslint/eslint-plugin": "^8.8.1", - "@typescript-eslint/parser": "^8.8.1", + "@typescript-eslint/eslint-plugin": "^8.16.0", + "@typescript-eslint/parser": "^8.16.0", "babel-eslint": "^10.1.0", "eslint": "^8.57.1", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-deprecation": "^3.0.0", "eslint-plugin-html": "^8.1.2", "eslint-plugin-import": "^2.31.0", - "jsdoc-to-markdown": "^9.0.2", + "jsdoc-to-markdown": "^9.0.5", "mochawesome-merge": "^4.3.0", "ts-mocha": "^10.0.0", "tsconfig-paths": "^4.2.0", - "typescript": "^5.6.3" + "typescript": "^5.7.2" } }