diff --git a/app/locales/en/translation.json b/app/locales/en/translation.json index 84004e5..0e58741 100644 --- a/app/locales/en/translation.json +++ b/app/locales/en/translation.json @@ -482,5 +482,57 @@ "login_required_title": "Please Login First", "login_required_subtitle": "Login to use cart features", "login_now": "Login Now" + }, + "order": { + "details": "Order Details", + "information": "Order Information", + "id": "Order ID", + "create_time": "Create Time", + "shipping_type": "Shipping Method", + "shipping": { + "sea": "Sea Shipping", + "air": "Air Shipping" + }, + "delivery_info": "Delivery Information", + "warehouse": "Warehouse Address", + "contact_after_payment": "Contact info visible after payment", + "recipient": "Recipient", + "product_info": "Product Information", + "price_details": "Price Details", + "platform_shipping": "Platform Shipping Fee", + "international_shipping": "International Shipping Fee", + "total": "Total", + "estimated_shipping": "Estimated Shipping Fee", + "cancel": "Cancel Order", + "pay": "Pay Now", + "contact_shipping": "Contact Shipping", + "check_logistics": "Check Logistics", + "confirm_receipt": "Confirm Receipt", + "pay_now": "Pay Now", + "add_to_cart": "Add to Cart", + "reorder": "Reorder", + "unable_to_load": "Unable to load order details", + "error": { + "phone_open": "Unable to open phone dialer", + "payment_update": "Payment update failed", + "invalid_phone": "Please enter a valid phone number" + }, + "payment": { + "online": "Online Payment", + "offline": "Offline Payment", + "cash": "Cash Payment", + "bank": "Bank Transfer", + "select_payment": "Select Payment Method", + "balance_remaining": "Balance Remaining" + }, + "select_currency": "Select Currency", + "converting": "Converting...", + "equivalent_amount": "Equivalent Amount", + "confirm_payment": "Confirm Payment", + "confirm_cancel": "Are you sure you want to cancel this order?", + "cancel_success": "Order cancelled successfully", + "cancel_failed": "Failed to cancel order", + "yes": "Yes", + "no": "No" } } \ No newline at end of file diff --git a/app/locales/fr/translation.json b/app/locales/fr/translation.json index 7e1de0e..3cbee26 100644 --- a/app/locales/fr/translation.json +++ b/app/locales/fr/translation.json @@ -530,5 +530,66 @@ "shorts": "Courts", "category": "Catégorie" } + }, + "order": { + "details": "Détails de la commande", + "status": { + "waiting_payment": "En attente de paiement", + "waiting_shipment": "En attente d'expédition", + "in_transit": "En transit", + "waiting_receipt": "En attente de réception", + "completed": "Terminée", + "cancelled": "Annulée", + "refunded": "Remboursée" + }, + "information": "Informations de commande", + "id": "Numéro de commande", + "create_time": "Date de création", + "shipping_type": "Mode d'expédition", + "shipping": { + "sea": "Transport maritime", + "air": "Transport aérien" + }, + "delivery_info": "Informations de livraison", + "warehouse": "Adresse de l'entrepôt", + "contact_after_payment": "Coordonnées visibles après paiement", + "recipient": "Destinataire", + "product_info": "Informations produit", + "price_details": "Détails des prix", + "platform_shipping": "Frais d'expédition plateforme", + "international_shipping": "Frais d'expédition internationaux", + "total": "Total", + "estimated_shipping": "Frais d'expédition estimés", + "cancel": "Annuler la commande", + "pay": "Payer maintenant", + "contact_shipping": "Contacter l'expédition", + "check_logistics": "Vérifier la logistique", + "confirm_receipt": "Confirmer la réception", + "pay_now": "Payer maintenant", + "add_to_cart": "Ajouter au panier", + "reorder": "Commander à nouveau", + "unable_to_load": "Impossible de charger les détails de la commande", + "error": { + "phone_open": "Impossible d'ouvrir le composeur téléphonique", + "payment_update": "Mise à jour du paiement échouée", + "invalid_phone": "Veuillez entrer un numéro de téléphone valide" + }, + "payment": { + "online": "Paiement en ligne", + "offline": "Paiement hors ligne", + "cash": "Paiement en espèces", + "bank": "Virement bancaire", + "select_payment": "Sélectionner le mode de paiement", + "balance_remaining": "Solde restant" + }, + "select_currency": "Sélectionner la devise", + "converting": "Conversion en cours...", + "equivalent_amount": "Montant équivalent", + "confirm_payment": "Confirmer le paiement", + "confirm_cancel": "Êtes-vous sûr de vouloir annuler cette commande ?", + "cancel_success": "Commande annulée avec succès", + "cancel_failed": "Échec de l'annulation de la commande", + "yes": "Oui", + "no": "Non" } } \ No newline at end of file diff --git a/app/locales/zh/translation.json b/app/locales/zh/translation.json index 89f05ef..b76ec82 100644 --- a/app/locales/zh/translation.json +++ b/app/locales/zh/translation.json @@ -7,6 +7,9 @@ "mainAppTitle": "欢迎使用 MainApp", "mainAppText": "这是主应用界面。", "resetCountry": "重置国家选择", + "ok": "确定", + "success": "成功", + "error": "错误", "loginTitle": "登录 Brainnel", "loginSubtitle": "登录开始您的业务", "continueWithGoogle": "使用 Google 继续", @@ -192,5 +195,64 @@ "login_required_title": "请先登录", "login_required_subtitle": "登录后即可使用购物车功能", "login_now": "立即登录" + }, + "order": { + "details": "订单详情", + "status": { + "waiting_payment": "待付款", + "waiting_shipment": "待发货", + "in_transit": "运输中", + "waiting_receipt": "待收货", + "completed": "已完成" + }, + "information": "订单信息", + "id": "订单编号", + "create_time": "创建时间", + "shipping_type": "配送方式", + "shipping": { + "sea": "海运", + "air": "空运" + }, + "delivery_info": "配送信息", + "warehouse": "仓库地址", + "contact_after_payment": "付款后可见联系方式", + "recipient": "收件人", + "product_info": "商品信息", + "price_details": "价格详情", + "platform_shipping": "平台运费", + "international_shipping": "国际运费", + "total": "总计", + "estimated_shipping": "预计运费", + "cancel": "取消订单", + "pay": "立即付款", + "contact_shipping": "联系物流", + "check_logistics": "查看物流", + "confirm_receipt": "确认收货", + "pay_now": "立即付款", + "add_to_cart": "加入购物车", + "reorder": "再次购买", + "unable_to_load": "无法加载订单详情", + "error": { + "phone_open": "无法打开拨号界面", + "payment_update": "支付更新失败", + "invalid_phone": "请输入有效的手机号码" + }, + "payment": { + "online": "在线支付", + "offline": "线下支付", + "cash": "现金支付", + "bank": "银行转账", + "select_payment": "选择支付方式", + "balance_remaining": "余额" + }, + "select_currency": "选择货币", + "converting": "正在转换...", + "equivalent_amount": "等值金额", + "confirm_payment": "确认支付", + "confirm_cancel": "确定要取消此订单吗?", + "cancel_success": "订单已成功取消", + "cancel_failed": "取消订单失败", + "yes": "是", + "no": "否" } } diff --git a/app/screens/BalanceScreen/RechargeScreen.tsx b/app/screens/BalanceScreen/RechargeScreen.tsx index 05b0060..2905e11 100644 --- a/app/screens/BalanceScreen/RechargeScreen.tsx +++ b/app/screens/BalanceScreen/RechargeScreen.tsx @@ -72,6 +72,8 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { const [showPhoneModal, setShowPhoneModal] = useState(false); // 添加PayPal展开视图的状态 const [isPaypalExpanded, setIsPaypalExpanded] = useState(false); + // 添加Wave展开视图的状态 + const [isWaveExpanded, setIsWaveExpanded] = useState(false); useEffect(() => { payApi.getRechargeRecommendAmount().then((res) => { @@ -95,8 +97,8 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { setShowCustomAmountInput(false); setCustomAmountDisplayText(""); - // 如果当前已选择了Paypal支付方式,则重新计算转换后的金额 - if (selectedOperator === "paypal") { + // 如果当前已选择了Paypal或Wave支付方式,则重新计算转换后的金额 + if (selectedOperator === "paypal" || selectedOperator === "wave") { handleCurrencyConversion(price, currentCurrency); } // 保留原有的逻辑 @@ -106,42 +108,67 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { }; const handleOperatorSelect = (operator: string) => { - // 如果选择的不是之前选中的支付方式,则重置PayPal展开状态 + // 如果选择的不是之前选中的支付方式,则重置展开状态 if (operator !== selectedOperator) { setIsPaypalExpanded(false); + setIsWaveExpanded(false); } setSelectedOperator(operator === selectedOperator ? null : operator); - // 查找是否选择了PayPal支付方式 - const isPaypal = paymentMethods.some( - (method) => method.key === operator && method.key === "paypal" + // 查找选中的支付方式 + const selectedMethod = paymentMethods.find( + (method) => method.key === operator ); - console.log(isPaypal); - - // 如果选择了PayPal支付方式,立即进行货币转换并设置展开状态 - if (isPaypal && operator !== selectedOperator) { - setIsPaypalExpanded(true); // 设置PayPal展开状态为true - - // 无条件触发货币转换,使用默认的USD - let amountToConvert = selectedPrice; - - // 如果用户还没有选择金额,使用推荐金额中的第一个 - if ( - !amountToConvert && - recommendedAmounts && - recommendedAmounts.amounts && - recommendedAmounts.amounts.length > 0 - ) { - amountToConvert = recommendedAmounts.amounts[0].toString(); - // 自动选择第一个推荐金额 - setSelectedPrice(amountToConvert); + + if (selectedMethod) { + // 如果是PayPal支付方式 + if (selectedMethod.key === "paypal" && operator !== selectedOperator) { + setIsPaypalExpanded(true); + + // 无条件触发货币转换,使用默认的USD + let amountToConvert = selectedPrice; + + // 如果用户还没有选择金额,使用推荐金额中的第一个 + if ( + !amountToConvert && + recommendedAmounts && + recommendedAmounts.amounts && + recommendedAmounts.amounts.length > 0 + ) { + amountToConvert = recommendedAmounts.amounts[0].toString(); + setSelectedPrice(amountToConvert); + } + + if (amountToConvert) { + setCurrentCurrency("USD"); + setIsConverting(true); + handleCurrencyConversion(amountToConvert, "USD"); + } } + // 如果是Wave支付方式 + else if (selectedMethod.key === "wave" && operator !== selectedOperator) { + setIsWaveExpanded(true); + + // 无条件触发货币转换,使用FCFA + let amountToConvert = selectedPrice; + + // 如果用户还没有选择金额,使用推荐金额中的第一个 + if ( + !amountToConvert && + recommendedAmounts && + recommendedAmounts.amounts && + recommendedAmounts.amounts.length > 0 + ) { + amountToConvert = recommendedAmounts.amounts[0].toString(); + setSelectedPrice(amountToConvert); + } - if (amountToConvert) { - setCurrentCurrency("USD"); - setIsConverting(true); - handleCurrencyConversion(amountToConvert, "USD"); + if (amountToConvert) { + setCurrentCurrency("FCFA"); + setIsConverting(true); + handleCurrencyConversion(amountToConvert, "FCFA"); + } } } else if (operator === "currency" && operator !== selectedOperator) { // 旧的逻辑保留作为备用 @@ -214,7 +241,7 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { (method) => method.key === selectedOperator ); if (selectedMethod) { - // 使用key作为支付方式标识,而不是不存在的name属性 + // 使用key作为支付方式标识 params.payment_method = selectedMethod.key; // 如果是paypal,设置货币转换相关参数 @@ -231,6 +258,24 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { } } } + // 如果是wave,固定使用FCFA + else if (selectedMethod.key === "wave") { + params.currency = "FCFA"; + // 使用转换后的FCFA金额,如果有 + if (convertedAmount.length > 0) { + const convertedTotal = convertedAmount.find( + (item) => item.item_key === "total_amount" + ); + if (convertedTotal) { + params.amount = convertedTotal.converted_amount; + } + } else { + // 如果没有转换结果,使用原始金额作为备用 + params.amount = parseFloat(selectedPrice.replace(/,/g, "")); + } + // 更新显示标签为FCFA + params.selectedPriceLabel = params.amount + " FCFA"; + } } else if (selectedOperator === "balance") { params.payment_method = "Balance"; } else if (selectedOperator === "currency") { @@ -269,7 +314,21 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { return; } - console.log(`Converting ${amount} FCFA to ${currency}...`); + // 如果源货币和目标货币相同,直接返回原金额 + if (user?.currency === currency) { + console.log(`Same currency (${currency}), no conversion needed`); + setConvertedAmount([ + { + converted_amount: amount, + item_key: "total_amount", + original_amount: amount, + }, + ]); + setIsConverting(false); + return; + } + + console.log(`Converting ${amount} ${user?.currency} to ${currency}...`); // 调用货币转换API const data = { @@ -452,6 +511,15 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { return true; } + // 如果选择了Wave支付方式,但还没有转换结果,禁用按钮 + if ( + selectedOperator === "wave" && + (convertedAmount.length === 0 || + !convertedAmount.find((item) => item.item_key === "total_amount")) + ) { + return true; + } + // 其他情况下,启用按钮 return false; }; @@ -809,6 +877,50 @@ const RechargeScreen = ({ onClose }: RechargeScreenProps) => { )} + + {/* Wave展开视图 */} + {method.key === "wave" && + selectedOperator === "wave" && + isWaveExpanded && ( + + + + {t("balance.recharge.currency_title")} + + + + + FCFA + + + + + {/* 显示转换后的金额 */} + {isConverting ? ( + + + + {t("balance.recharge.converting")} + + + ) : convertedAmount.length > 0 ? ( + + + {t("balance.recharge.equivalent_amount")} + + + {convertedAmount + .find( + (item) => item.item_key === "total_amount" + ) + ?.converted_amount.toFixed(2)}{" "} + FCFA + + + ) : null} + + + )} ))} diff --git a/app/screens/CartScreen.tsx b/app/screens/CartScreen.tsx index 86924db..c2151d4 100644 --- a/app/screens/CartScreen.tsx +++ b/app/screens/CartScreen.tsx @@ -32,6 +32,7 @@ import useCreateOrderStore from "../store/createOrder"; import useUserStore from "../store/user"; import { t } from "../i18n"; import { payApi } from "../services/api/payApi"; +import IconComponent from "../components/IconComponent"; export const CartScreen = () => { const [cartList, setCartList] = useState([]); @@ -59,6 +60,8 @@ export const CartScreen = () => { const [quantityInput, setQuantityInput] = useState(""); const navigation = useNavigation>(); const { setItems } = useCreateOrderStore(); + const [minQuantityModalVisible, setMinQuantityModalVisible] = useState(false); + const [minQuantityMessage, setMinQuantityMessage] = useState(""); // 货币转换函数 const convertCurrency = async () => { @@ -568,19 +571,28 @@ export const CartScreen = () => { } }; + // 统一的提示函数 + const showMinQuantityModal = (message: string) => { + setMinQuantityMessage(message); + setMinQuantityModalVisible(true); + }; + // 处理减少数量 const handleDecreaseQuantity = ( cartId: number, cartItemId: number, - currentQuantity: number + currentQuantity: number, + minOrderQuantity: number ) => { // 如果用户未登录,直接返回 if (!user_id) { return; } - if (currentQuantity > 1) { + if (currentQuantity > minOrderQuantity) { updateQuantity(cartId, cartItemId, currentQuantity - 1); + } else { + showMinQuantityModal(`${t("cart.notice")}:${t("cart.min_order")}${minOrderQuantity}${t("cart.pieces")}`); } }; @@ -607,14 +619,21 @@ export const CartScreen = () => { const newQuantity = parseInt(quantityInput); if (isNaN(newQuantity) || newQuantity < 1) { - Alert.alert(t("cart.notice"), t("cart.enter_valid_quantity")); + showMinQuantityModal(t("cart.enter_valid_quantity")); return; } - updateQuantity(editingItem.cartId, editingItem.cartItemId, newQuantity); - setQuantityInputVisible(false); - setEditingItem(null); - setQuantityInput(""); + const { cartId, cartItemId } = editingItem; + const minOrderQuantity = cartList.find(item => item.cart_id === cartId)?.min_order_quantity || 1; + + if (newQuantity < minOrderQuantity) { + showMinQuantityModal(`${t("cart.notice")}:${t("cart.min_order")}${minOrderQuantity}${t("cart.pieces")}`); + } else { + updateQuantity(cartId, cartItemId, newQuantity); + setQuantityInputVisible(false); + setEditingItem(null); + setQuantityInput(""); + } }; // 处理点击数量显示 @@ -656,243 +675,240 @@ export const CartScreen = () => { {/* Panier (5) */} - {cartList.map((item, index1) => ( - - + {/* Panier (5) */} + + {/* Panier (5) */} + + {cartList.map((item, index1) => ( + + + + + toggleSelection(String(item.cart_id), index1, null) + } + disabled={!user_id} + > + + {item.selected === 1 ? ( + + ) : ( + + )} + + + + + + + {item.subject} + + + {t("cart.min_order")}: {item.min_order_quantity} + {t("cart.pieces")} + + + + {item.skus.map((sku, index) => ( + ( + + handleDeleteSku( + item.cart_id, + sku.cart_item_id, + item.cart_id + ) + } + disabled={!user_id} + > + + {t("cart.delete")} + + + )} + > + { + if (user_id) { + navigation.navigate("ProductDetail", { + offer_id: item.offer_id, + searchKeyword: item.subject, + price: sku.price, + }); + } + }} + style={[ + styles.productCardContainer5, + styles.productCardContainer4, + ]} + > - toggleSelection(String(item.cart_id), index1, null) + user_id && toggleSelection( + String(sku.cart_item_id), + index1, + index + ) } disabled={!user_id} > - {item.selected === 1 ? ( + {sku.selected === 1 ? ( ) : ( )} + {/* */} - - - {item.subject} - - - {t("cart.min_order")}: {item.min_order_quantity} - {t("cart.pieces")} - - - - {item.skus.map((sku, index) => ( - ( - - handleDeleteSku( - item.cart_id, - sku.cart_item_id, - item.cart_id - ) - } - disabled={!user_id} - > + + {/* 1. SKU attributes at the top */} + {sku.attributes[0]?.value && ( + - {t("cart.delete")} + {sku.attributes[0]?.value}{" "} + {sku.attributes[1] ? "/" : ""}{" "} + {sku.attributes[1]?.value} - + )} - > - { - if (user_id) { - navigation.navigate("ProductDetail", { - offer_id: item.offer_id, - searchKeyword: item.subject, - price: sku.price, - }); - } - }} - style={[ - styles.productCardContainer5, - styles.productCardContainer4, - ]} - > - + + {/* 2. Price section - discount and actual price close together */} + + + {/* Discount price */} + + + + {sku.original_price} {sku.currency} + + + + + + {((1 - vip_discount) * 100).toFixed(0)}% + + + + + {/* Actual price - right below discount price */} + + + {sku.price} + + + FCFA + + + + + {/* 3. Quantity controls on the right */} + - user_id && toggleSelection( - String(sku.cart_item_id), - index1, - index + user_id && handleDecreaseQuantity( + item.cart_id, + sku.cart_item_id, + sku.quantity, + item.min_order_quantity ) } disabled={!user_id} > - - {sku.selected === 1 ? ( - - ) : ( - - )} - {/* */} - + + - + + + + user_id && handleQuantityPress( + item.cart_id, + sku.cart_item_id, + sku.quantity + ) + } + disabled={!user_id} + > + + {sku.quantity} + + + + user_id && handleIncreaseQuantity( + item.cart_id, + sku.cart_item_id, + sku.quantity + ) + } + disabled={!user_id} + > + + + + - - - {/* 1. SKU attributes at the top */} - {sku.attributes[0]?.value && ( - - - {sku.attributes[0]?.value}{" "} - {sku.attributes[1] ? "/" : ""}{" "} - {sku.attributes[1]?.value} - - - )} - - {/* 2. Price section - discount and actual price close together */} - - - {/* Discount price */} - - - - {sku.original_price} {sku.currency} - - - - - - {((1 - vip_discount) * 100).toFixed(0)}% - - - - - {/* Actual price - right below discount price */} - - - {sku.price} - - - FCFA - - - - - {/* 3. Quantity controls on the right */} - - - user_id && handleDecreaseQuantity( - item.cart_id, - sku.cart_item_id, - sku.quantity - ) - } - disabled={!user_id} - > - - - - - - - user_id && handleQuantityPress( - item.cart_id, - sku.cart_item_id, - sku.quantity - ) - } - disabled={!user_id} - > - - {sku.quantity} - - - - user_id && handleIncreaseQuantity( - item.cart_id, - sku.cart_item_id, - sku.quantity - ) - } - disabled={!user_id} - > - - + - - - - - - - - ))} - + + + + ))} - - {/* 商品 */} - - - {/* Divider */} - - {/* Coffee Cup Product */} + ))} - {/* More product sections... */} + {/* 商品 */} {/* Fixed Bottom Section */} @@ -1060,6 +1076,29 @@ export const CartScreen = () => { + + {/* 最小数量提示弹窗 */} + setMinQuantityModalVisible(false)} + > + + + + + + {minQuantityMessage} + setMinQuantityModalVisible(false)} + > + {t("cart.confirm")} + + + + ); }; @@ -1815,4 +1854,42 @@ const styles = StyleSheet.create({ fontWeight: '700', textAlign: 'center', }, + warningIconContainer: { + backgroundColor: "#FFF2E9", + borderRadius: 20, + padding: 12, + marginBottom: 16, + alignSelf: 'center', + width: 52, + height: 52, + justifyContent: 'center', + alignItems: 'center', + }, + warningIcon: { + width: 32, + height: 32, + }, + minQuantityPopup: { + width: '80%', + padding: 24, + }, + minQuantityText: { + fontSize: fontSize(16), + color: '#333', + marginVertical: 16, + textAlign: 'center', + lineHeight: fontSize(22), + fontWeight: '500', + }, + minQuantityButton: { + width: '100%', + height: 44, + borderRadius: 22, + backgroundColor: '#FF5100', + marginTop: 16, + }, + minQuantityButtonText: { + fontSize: fontSize(16), + fontWeight: '600', + }, }); diff --git a/app/screens/ProductCard.tsx b/app/screens/ProductCard.tsx index abef686..a26cc32 100644 --- a/app/screens/ProductCard.tsx +++ b/app/screens/ProductCard.tsx @@ -47,6 +47,11 @@ const ProductCard: React.FC = ({ }) => { const navigation = useNavigation>(); const [deleteModalVisible, setDeleteModalVisible] = useState(false); + const [alertModalVisible, setAlertModalVisible] = useState(false); + const [alertMessage, setAlertMessage] = useState<{title: string; message: string}>({ + title: '', + message: '' + }); const [images, setImages] = useState([]); const [currentImageIndex, setCurrentImageIndex] = useState(0); const [imageViewerVisible, setImageViewerVisible] = useState(false); @@ -89,18 +94,27 @@ const ProductCard: React.FC = ({ processProductData(); }, [localProduct, localGroupList]); + // 显示自定义警告 + const showCustomAlert = (title: string, message: string) => { + setAlertMessage({ title, message }); + setAlertModalVisible(true); + }; + // 加入购物车 const addCartHandel = () => { if (!user_id) { - Alert.alert("添加失败", "请先登录"); + showCustomAlert("添加失败", "请先登录"); return; } if (totalPrice === 0) { - Alert.alert("添加失败", "请选择商品"); + showCustomAlert("添加失败", "请选择商品"); return; } if (selectedSize < product.min_order_quantity) { - Alert.alert("添加失败", "小于最小购买数量"); + showCustomAlert( + "购买数量不足", + `该商品最小购买数量为 ${product.min_order_quantity} 件,请增加购买数量` + ); return; } if (groupList.length > 1) { @@ -803,6 +817,35 @@ const ProductCard: React.FC = ({ + + {/* 自定义警告模态框 */} + setAlertModalVisible(false)} + > + + + {alertMessage.title} + {alertMessage.message} + + setAlertModalVisible(false)} + > + 取消 + + setAlertModalVisible(false)} + > + 确定 + + + + + ); }; @@ -1274,6 +1317,14 @@ const styles = StyleSheet.create({ color: "#ffffff", fontFamily: "Source Han Sans CN", // 同上 }, + messageText: { + fontSize: fontSize(16), + color: "#666", + textAlign: "center", + marginTop: 10, + marginBottom: 20, + paddingHorizontal: 20, + }, }); export default ProductCard; diff --git a/app/screens/ProductDetailScreen.tsx b/app/screens/ProductDetailScreen.tsx index dacfc39..1efe373 100644 --- a/app/screens/ProductDetailScreen.tsx +++ b/app/screens/ProductDetailScreen.tsx @@ -376,7 +376,8 @@ export const ProductDetailScreen = () => { } }, [showBottomSheet]); const handleImageLoad = (src: string, event: any) => { - const { width: imageWidth, height: imageHeight } = event.nativeEvent.source; + // ExpoImage的onLoad事件直接返回尺寸信息 + const { width: imageWidth, height: imageHeight } = event; const aspectRatio = imageHeight / imageWidth; const calculatedHeight = width * aspectRatio; setImageHeights((prev) => ({ diff --git a/app/screens/productStatus/OrderDatails.tsx b/app/screens/productStatus/OrderDatails.tsx index 504648a..36e89e5 100644 --- a/app/screens/productStatus/OrderDatails.tsx +++ b/app/screens/productStatus/OrderDatails.tsx @@ -13,6 +13,10 @@ import { StatusBar, Platform, Modal, + ViewStyle, + TextStyle, + ImageStyle, + StyleProp, } from "react-native"; import { useTranslation } from "react-i18next"; import BackIcon from "../../components/BackIcon"; @@ -40,6 +44,7 @@ import CircleOutlineIcon from "../../components/CircleOutlineIcon"; import CheckIcon from "../../components/CheckIcon"; import payMap from "../../utils/payMap"; import PhoneNumberInputModal from "../../screens/BalanceScreen/PhoneNumberInputModal"; +import IconComponent from "../../components/IconComponent"; // 定义选项类型 interface PaymentOption { @@ -55,6 +60,119 @@ interface TabType { options: PaymentOption[]; } +type Styles = { + safeArea: ViewStyle; + safeAreaContent: ViewStyle; + container: ViewStyle; + header: ViewStyle; + title: TextStyle; + orderStatus: ViewStyle; + orderStatusContent: ViewStyle; + orderStatusTitle: ViewStyle; + orderStatusTitleText: TextStyle; + orderStatusContentPreview: ViewStyle; + productItem: ViewStyle; + productItemImage: ViewStyle; + productItemInfo: ViewStyle; + productItemNum: ViewStyle; + productItemNumText: TextStyle; + productItemInfoName: ViewStyle; + productItemInfoNameText: TextStyle; + productItemInfoSkuText: TextStyle; + productItemInfoSku: ViewStyle; + productItemInfoPrice: ViewStyle; + orderStatusContentPreviewInformation: ViewStyle; + loadingContainer: ViewStyle; + orderId: ViewStyle; + orderIdText: TextStyle; + orderIdText1: TextStyle; + TotalText: TextStyle; + TotalPrice: TextStyle; + warehouse: ViewStyle; + recipientTitle: ViewStyle; + recipientPhoneContainer: ViewStyle; + recipient: ViewStyle; + orderStatusContentPreviewInformationText: TextStyle; + warehousePhone: ViewStyle; + warehousePhoneText: TextStyle; + warehousePhoneTextContainer: ViewStyle; + recipientName: TextStyle; + recipientPhone: TextStyle; + dottedLine: ViewStyle; + orderRemakeText: TextStyle; + addCard: ViewStyle; + addCardBox: ViewStyle; + addCardText: TextStyle; + bottomButtons: ViewStyle; + bottomButton1: ViewStyle; + bottomButton: ViewStyle; + bottomButtonText: TextStyle; + bottomButtonText1: TextStyle; + modalOverlay: ViewStyle; + modalContent: ViewStyle; + modalHeader: ViewStyle; + modalTitle: TextStyle; + closeButtonContainer: ViewStyle; + closeButtonText: TextStyle; + tabContainer: ViewStyle; + tab: ViewStyle; + tabActive: ViewStyle; + tabText: TextStyle; + tabTextActive: TextStyle; + paymentOptions: ViewStyle; + cardContainer: ViewStyle; + iconRow: ViewStyle; + imageContainer: ViewStyle; + paymentIconContainer: ViewStyle; + paymentIcon: TextStyle; + checkboxContainer: ViewStyle; + checkmarkContainer: ViewStyle; + currencyTitle: TextStyle; + paypalExpandedContainer: ViewStyle; + paypalCurrencyContainer: ViewStyle; + currencyButtonsContainer: ViewStyle; + currencyButton: ViewStyle; + currencyButtonActive: ViewStyle; + currencyButtonText: TextStyle; + currencyButtonTextActive: TextStyle; + convertingContainer: ViewStyle; + convertingText: TextStyle; + convertedAmountContainer: ViewStyle; + convertedAmountLabel: TextStyle; + convertedAmountValue: TextStyle; + actionButtonsContainer: ViewStyle; + actionButtons: ViewStyle; + cancelButton: ViewStyle; + confirmButton: ViewStyle; + confirmButtonDisabled: ViewStyle; + buttonTextDark: TextStyle; + buttonTextWhite: TextStyle; + operatorImage: ImageStyle; + mobileMoneyTextContainer: ViewStyle; + mobileMoneyImgContainer: ViewStyle; + mobileMoneyImg: ImageStyle; + mobileMoneyText: TextStyle; + outerContainer: ViewStyle; + flexContainer: ViewStyle; + imageStyle: ImageStyle; + verticalAlignEndContent: ViewStyle; + svgContainer: ViewStyle; + leftInfo: ViewStyle; + blueBox: ViewStyle; + balanceText: TextStyle; + modalPopup: ViewStyle; + modalWarningIcon: ViewStyle; + modalPromptText: TextStyle; + modalCancelPopup: ViewStyle; + modalCancelText: TextStyle; + modalCancelButtonsContainer: ViewStyle; + modalCancelActionButton: ViewStyle; + modalCancelButtonOutline: ViewStyle; + modalCancelButtonFilled: ViewStyle; + modalCancelButtonOutlineText: TextStyle; + modalCancelButtonFilledText: TextStyle; +}; + export const OrderDetails = () => { const navigation = useNavigation>(); const { t } = useTranslation(); @@ -110,6 +228,8 @@ export const OrderDetails = () => { onCloses?: () => void; } | null>(null); const [showPhoneModal, setShowPhoneModal] = useState(false); + const [showCancelModal, setShowCancelModal] = useState(false); + const [isCancelling, setIsCancelling] = useState(false); const getOrderDetails = async () => { try { @@ -393,6 +513,24 @@ export const OrderDetails = () => { return false; }; + // 添加取消订单的处理函数 + const handleCancelOrder = async () => { + try { + setIsCancelling(true); + const response = await ordersApi.cancelOrder(route.params.orderId); + if (response) { + deleteOrder(route.params.orderId); + setShowCancelModal(false); + navigation.goBack(); + } + } catch (error) { + console.error("取消订单失败:", error); + Alert.alert(t("error"), t("order.cancel_failed")); + } finally { + setIsCancelling(false); + } + }; + return ( @@ -563,7 +701,7 @@ export const OrderDetails = () => { @@ -666,9 +804,7 @@ export const OrderDetails = () => { { - deleteOrder(route.params.orderId); - }} + onPress={() => setShowCancelModal(true)} > {t("order.cancel")} @@ -807,7 +943,7 @@ export const OrderDetails = () => { @@ -821,7 +957,7 @@ export const OrderDetails = () => { {option.key === "mobile_money" && ( @@ -831,7 +967,7 @@ export const OrderDetails = () => { )) @@ -942,14 +1078,12 @@ export const OrderDetails = () => { {option.id === "cash" ? ( ) : ( )} @@ -1023,11 +1157,49 @@ export const OrderDetails = () => { onSubmit={handlePhoneSubmit} onCloses={() => setShowPaymentModal(false)} /> + + {/* 取消订单确认弹窗 */} + setShowCancelModal(false)} + > + + + + + + + {t("order.confirm_cancel")} + + + setShowCancelModal(false)} + > + {t("order.no")} + + + {isCancelling ? ( + + ) : ( + {t("order.yes")} + )} + + + + + ); }; -const styles = StyleSheet.create({ +const styles = StyleSheet.create({ safeArea: { flex: 1, backgroundColor: '#fff', @@ -1290,7 +1462,8 @@ const styles = StyleSheet.create({ modalOverlay: { flex: 1, backgroundColor: 'rgba(0, 0, 0, 0.5)', - justifyContent: 'flex-end', + justifyContent: 'center', + alignItems: 'center', }, modalContent: { backgroundColor: '#fff', @@ -1563,4 +1736,66 @@ const styles = StyleSheet.create({ fontWeight: "500", color: "#333333", }, + modalPopup: { + backgroundColor: '#fff', + padding: 20, + borderRadius: 10, + width: '80%', + maxWidth: '80%', + }, + modalWarningIcon: { + alignItems: 'center', + marginBottom: 16, + }, + modalPromptText: { + fontSize: fontSize(16), + color: '#333', + marginBottom: 16, + textAlign: 'center', + lineHeight: fontSize(22), + fontWeight: '500', + }, + modalCancelPopup: { + width: '80%', + padding: 24, + alignItems: 'center', + }, + modalCancelText: { + fontSize: fontSize(16), + color: '#333', + marginVertical: 16, + textAlign: 'center', + lineHeight: fontSize(22), + fontWeight: '500', + }, + modalCancelButtonsContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + width: '100%', + marginTop: 24, + }, + modalCancelActionButton: { + flex: 1, + height: 44, + borderRadius: 22, + justifyContent: 'center', + alignItems: 'center', + marginHorizontal: 8, + }, + modalCancelButtonOutline: { + backgroundColor: '#F5F5F5', + }, + modalCancelButtonFilled: { + backgroundColor: '#FF5100', + }, + modalCancelButtonOutlineText: { + fontSize: fontSize(16), + color: '#666', + fontWeight: '600', + }, + modalCancelButtonFilledText: { + fontSize: fontSize(16), + color: '#FFF', + fontWeight: '600', + }, }); diff --git a/app/services/api/orders.ts b/app/services/api/orders.ts index 70b0f2b..ff66e94 100644 --- a/app/services/api/orders.ts +++ b/app/services/api/orders.ts @@ -349,6 +349,85 @@ export interface UpdateOrderPaymentMethod { shipping_fee: number; domestic_shipping_fee: number; } + +interface OrderItemCancel { + offer_id: string; + cart_item_id: number; + sku_id: string; + spec_id: string; + product_name: string; + product_name_en: string; + product_name_fr: string; + product_name_ar: string; + product_name_invoice: string; + product_image: string; + product_images: string; + material: string; + product_link: string; + source_data: string; + sku_attributes: Record[]; + sku_image: string; + sku_key_name: string; + sku_key_name_cn: string; + category_id: string; + category_name: string; + supplier_name: string; + is_live_stream_product: number; + quantity: number; + unit_price: number; + total_price: number; + unit_volume: number; + unit_weight: number; + order_item_id: string; + order_no: string; + create_time: string; + update_time: string; +} + +export interface OrderCancelResponse { + user_id: number; + total_amount: number; + actual_amount: number; + exchange_rate: number; + discount_amount: number; + shipping_fee: number; + domestic_shipping_fee: number; + currency: string; + payment_method: string; + transaction_id: string; + pay_status: number; + order_status: number; + shipping_status: number; + address_id: number; + receiver_name: string; + receiver_phone: string; + whatsapp_number: string; + receiver_address: string; + receiver_country: string; + shipping_no: string; + shipping_type: number; + shipping_company: string; + shipping_url: string; + total_weight: number; + total_volume: number; + total_packages: number; + buyer_message: string; + pay_time: string; + shipping_time: string; + complete_time: string; + coupon_id: number; + gold_coins_deducted: number; + vip_info: string; + verification_code: string; + verification_time: string; + sensitive_goods_flag: number; + update_time: string; + order_id: string; + order_no: string; + items: OrderItemCancel[]; + create_time: string; +} + export const ordersApi = { // 获得订单预览信息 getOrders: (data: OrderPreviewData) => @@ -401,4 +480,8 @@ export const ordersApi = { // 修改支付方式 updateOrderPaymentMethod: (data: UpdateOrderPaymentMethod) => apiService.put(`/api/orders/edit/`, data), + + // 取消订单 + cancelOrder: (order_id: string) => + apiService.post(`/api/orders/${order_id}/cancel/`), }; diff --git a/yarn.lock b/yarn.lock index 77d71b5..9389f38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31,6 +31,13 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.6.0" +"@babel/code-frame@7.10.4", "@babel/code-frame@~7.10.4": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.10.4.tgz" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz" @@ -40,20 +47,6 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/code-frame@~7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.10.4.tgz" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.10.4.tgz" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.27.2": version "7.27.2" resolved "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.27.2.tgz" @@ -1418,7 +1411,7 @@ json5 "^2.2.3" write-file-atomic "^2.3.0" -"@expo/metro-config@~0.19.12", "@expo/metro-config@0.19.12": +"@expo/metro-config@0.19.12", "@expo/metro-config@~0.19.12": version "0.19.12" resolved "https://registry.npmmirror.com/@expo/metro-config/-/metro-config-0.19.12.tgz" integrity sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg== @@ -1825,7 +1818,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2243,15 +2236,23 @@ hermes-parser "0.23.1" nullthrows "^1.1.1" +"@react-native/normalize-colors@0.76.9": + version "0.76.9" + resolved "https://registry.npmmirror.com/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz" + integrity sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw== + "@react-native/normalize-colors@^0.74.1": version "0.74.89" resolved "https://registry.npmmirror.com/@react-native/normalize-colors/-/normalize-colors-0.74.89.tgz" integrity sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg== -"@react-native/normalize-colors@0.76.9": +"@react-native/virtualized-lists@0.76.9": version "0.76.9" - resolved "https://registry.npmmirror.com/@react-native/normalize-colors/-/normalize-colors-0.76.9.tgz" - integrity sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw== + resolved "https://registry.npmmirror.com/@react-native/virtualized-lists/-/virtualized-lists-0.76.9.tgz" + integrity sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw== + dependencies: + invariant "^2.2.4" + nullthrows "^1.1.1" "@react-native/virtualized-lists@^0.72.4": version "0.72.8" @@ -2261,14 +2262,6 @@ invariant "^2.2.4" nullthrows "^1.1.1" -"@react-native/virtualized-lists@0.76.9": - version "0.76.9" - resolved "https://registry.npmmirror.com/@react-native/virtualized-lists/-/virtualized-lists-0.76.9.tgz" - integrity sha512-2neUfZKuqMK2LzfS8NyOWOyWUJOWgDym5fUph6fN9qF+LNPjAvnc4Zr9+o+59qjNu/yXwQgVMWNU4+8WJuPVWw== - dependencies: - invariant "^2.2.4" - nullthrows "^1.1.1" - "@react-navigation/bottom-tabs@^6.5.11": version "6.6.1" resolved "https://registry.npmmirror.com/@react-navigation/bottom-tabs/-/bottom-tabs-6.6.1.tgz" @@ -2591,14 +2584,7 @@ resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.14.tgz" integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== -"@types/ramda@^0.27.40": - version "0.27.66" - resolved "https://registry.npmmirror.com/@types/ramda/-/ramda-0.27.66.tgz" - integrity sha512-i2YW+E2U6NfMt3dp0RxNcejox+bxJUNDjB7BpYuRuoHIzv5juPHkJkNgcUOu+YSQEmaWu8cnAo/8r63C0NnuVA== - dependencies: - ts-toolbelt "^6.15.1" - -"@types/ramda@^0.27.44": +"@types/ramda@^0.27.40", "@types/ramda@^0.27.44": version "0.27.66" resolved "https://registry.npmmirror.com/@types/ramda/-/ramda-0.27.66.tgz" integrity sha512-i2YW+E2U6NfMt3dp0RxNcejox+bxJUNDjB7BpYuRuoHIzv5juPHkJkNgcUOu+YSQEmaWu8cnAo/8r63C0NnuVA== @@ -2909,14 +2895,7 @@ ansi-regex@^6.0.1: resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== -ansi-styles@^3.2.0: - version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^3.2.1: +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -3197,6 +3176,13 @@ babel-plugin-react-native-web@~0.19.13: resolved "https://registry.npmmirror.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz" integrity sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ== +babel-plugin-syntax-hermes-parser@0.25.1, babel-plugin-syntax-hermes-parser@^0.25.1: + version "0.25.1" + resolved "https://registry.npmmirror.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz" + integrity sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ== + dependencies: + hermes-parser "0.25.1" + babel-plugin-syntax-hermes-parser@^0.23.1: version "0.23.1" resolved "https://registry.npmmirror.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz" @@ -3204,13 +3190,6 @@ babel-plugin-syntax-hermes-parser@^0.23.1: dependencies: hermes-parser "0.23.1" -babel-plugin-syntax-hermes-parser@^0.25.1, babel-plugin-syntax-hermes-parser@0.25.1: - version "0.25.1" - resolved "https://registry.npmmirror.com/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz" - integrity sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ== - dependencies: - hermes-parser "0.25.1" - babel-plugin-transform-flow-enums@^0.0.2: version "0.0.2" resolved "https://registry.npmmirror.com/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz" @@ -3362,13 +3341,6 @@ bplist-creator@0.1.0: dependencies: stream-buffers "2.2.x" -bplist-parser@^0.3.1: - version "0.3.2" - resolved "https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.3.2.tgz" - integrity sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ== - dependencies: - big-integer "1.6.x" - bplist-parser@0.3.1: version "0.3.1" resolved "https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.3.1.tgz" @@ -3376,6 +3348,13 @@ bplist-parser@0.3.1: dependencies: big-integer "1.6.x" +bplist-parser@^0.3.1: + version "0.3.2" + resolved "https://registry.npmmirror.com/bplist-parser/-/bplist-parser-0.3.2.tgz" + integrity sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ== + dependencies: + big-integer "1.6.x" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -3526,12 +3505,7 @@ callsites@^3.0.0: resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^5.3.1: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -3551,16 +3525,7 @@ caniuse-lite@^1.0.30001716: resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz" integrity sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw== -chalk@^2.0.1: - version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.2: +chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3657,12 +3622,7 @@ ci-info@^2.0.0: resolved "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -ci-info@^3.3.0: +ci-info@^3.2.0, ci-info@^3.3.0: version "3.9.0" resolved "https://registry.npmmirror.com/ci-info/-/ci-info-3.9.0.tgz" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== @@ -3751,16 +3711,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-string@^1.6.0, color-string@^1.9.0: version "1.9.1" resolved "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz" @@ -3802,12 +3762,7 @@ command-exists@^1.2.8: resolved "https://registry.npmmirror.com/command-exists/-/command-exists-1.2.9.tgz" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== -commander@^12.0.0: - version "12.1.0" - resolved "https://registry.npmmirror.com/commander/-/commander-12.1.0.tgz" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - -commander@^12.1.0: +commander@^12.0.0, commander@^12.1.0: version "12.1.0" resolved "https://registry.npmmirror.com/commander/-/commander-12.1.0.tgz" integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== @@ -4097,47 +4052,26 @@ dayjs@^1.8.15: resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== -debug@^2.2.0: - version "2.6.9" - resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^2.6.9: +debug@2.6.9, debug@^2.2.0, debug@^2.6.9: version "2.6.9" resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: version "4.4.1" resolved "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.0.0" + ms "^2.1.1" decamelize@^1.2.0: version "1.2.0" @@ -4421,12 +4355,7 @@ entities@^3.0.1: resolved "https://registry.npmmirror.com/entities/-/entities-3.0.1.tgz" integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== -entities@^4.2.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -entities@^4.4.0: +entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -5100,7 +5029,7 @@ fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.2: merge2 "^1.3.0" micromatch "^4.0.8" -fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5288,26 +5217,17 @@ fresh@0.5.2: resolved "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.0, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.0.0.tgz" + integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" - universalify "^2.0.0" + universalify "^1.0.0" -fs-extra@~8.1.0: +fs-extra@^8.1.0, fs-extra@~8.1.0: version "8.1.0" resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -5316,15 +5236,15 @@ fs-extra@~8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@9.0.0: - version "9.0.0" - resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.0.0.tgz" - integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== +fs-extra@^9.0.0, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" - universalify "^1.0.0" + universalify "^2.0.0" fs-minipass@^2.0.0: version "2.1.0" @@ -5468,43 +5388,7 @@ glob@^10.2.2, glob@^10.3.10, glob@^10.4.2: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.1: - version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.4: - version "7.2.3" - resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.2.0: +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5791,7 +5675,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -5826,7 +5710,7 @@ internal-slot@^1.1.0: hasown "^2.0.2" side-channel "^1.1.0" -invariant@^2.2.4, invariant@2.2.4: +invariant@2.2.4, invariant@^2.2.4: version "2.2.4" resolved "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -6597,11 +6481,56 @@ lighthouse-logger@^1.0.0: debug "^2.6.9" marky "^1.2.2" +lightningcss-darwin-arm64@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz#565bd610533941cba648a70e105987578d82f996" + integrity sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ== + lightningcss-darwin-x64@1.27.0: version "1.27.0" resolved "https://registry.npmmirror.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz" integrity sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg== +lightningcss-freebsd-x64@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz#a7c3c4d6ee18dffeb8fa69f14f8f9267f7dc0c34" + integrity sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA== + +lightningcss-linux-arm-gnueabihf@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz#c7c16432a571ec877bf734fe500e4a43d48c2814" + integrity sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA== + +lightningcss-linux-arm64-gnu@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz#cfd9e18df1cd65131da286ddacfa3aee6862a752" + integrity sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A== + +lightningcss-linux-arm64-musl@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz#6682ff6b9165acef9a6796bd9127a8e1247bb0ed" + integrity sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg== + +lightningcss-linux-x64-gnu@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz#714221212ad184ddfe974bbb7dbe9300dfde4bc0" + integrity sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A== + +lightningcss-linux-x64-musl@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz#247958daf622a030a6dc2285afa16b7184bdf21e" + integrity sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA== + +lightningcss-win32-arm64-msvc@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz#64cfe473c264ef5dc275a4d57a516d77fcac6bc9" + integrity sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ== + +lightningcss-win32-x64-msvc@1.27.0: + version "1.27.0" + resolved "https://registry.npmmirror.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz#237d0dc87d9cdc9cf82536bcbc07426fa9f3f422" + integrity sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw== + lightningcss@~1.27.0: version "1.27.0" resolved "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.27.0.tgz" @@ -6836,7 +6765,7 @@ metro-cache@0.81.5: flow-enums-runtime "^0.0.6" metro-core "0.81.5" -metro-config@^0.81.0, metro-config@0.81.5: +metro-config@0.81.5, metro-config@^0.81.0: version "0.81.5" resolved "https://registry.npmmirror.com/metro-config/-/metro-config-0.81.5.tgz" integrity sha512-oDRAzUvj6RNRxratFdcVAqtAsg+T3qcKrGdqGZFUdwzlFJdHGR9Z413sW583uD2ynsuOjA2QB6US8FdwiBdNKg== @@ -6850,7 +6779,7 @@ metro-config@^0.81.0, metro-config@0.81.5: metro-core "0.81.5" metro-runtime "0.81.5" -metro-core@^0.81.0, metro-core@0.81.5: +metro-core@0.81.5, metro-core@^0.81.0: version "0.81.5" resolved "https://registry.npmmirror.com/metro-core/-/metro-core-0.81.5.tgz" integrity sha512-+2R0c8ByfV2N7CH5wpdIajCWa8escUFd8TukfoXyBq/vb6yTCsznoA25FhNXJ+MC/cz1L447Zj3vdUfCXIZBwg== @@ -6889,7 +6818,7 @@ metro-resolver@0.81.5: dependencies: flow-enums-runtime "^0.0.6" -metro-runtime@^0.81.0, metro-runtime@0.81.5: +metro-runtime@0.81.5, metro-runtime@^0.81.0: version "0.81.5" resolved "https://registry.npmmirror.com/metro-runtime/-/metro-runtime-0.81.5.tgz" integrity sha512-M/Gf71ictUKP9+77dV/y8XlAWg7xl76uhU7ggYFUwEdOHHWPG6gLBr1iiK0BmTjPFH8yRo/xyqMli4s3oGorPQ== @@ -6897,7 +6826,7 @@ metro-runtime@^0.81.0, metro-runtime@0.81.5: "@babel/runtime" "^7.25.0" flow-enums-runtime "^0.0.6" -metro-source-map@^0.81.0, metro-source-map@0.81.5: +metro-source-map@0.81.5, metro-source-map@^0.81.0: version "0.81.5" resolved "https://registry.npmmirror.com/metro-source-map/-/metro-source-map-0.81.5.tgz" integrity sha512-Jz+CjvCKLNbJZYJTBeN3Kq9kIJf6b61MoLBdaOQZJ5Ajhw6Pf95Nn21XwA8BwfUYgajsi6IXsp/dTZsYJbN00Q== @@ -6956,7 +6885,7 @@ metro-transform-worker@0.81.5: metro-transform-plugins "0.81.5" nullthrows "^1.1.1" -metro@^0.81.0, metro@0.81.5: +metro@0.81.5, metro@^0.81.0: version "0.81.5" resolved "https://registry.npmmirror.com/metro/-/metro-0.81.5.tgz" integrity sha512-YpFF0DDDpDVygeca2mAn7K0+us+XKmiGk4rIYMz/CRdjFoCGqAei/IQSpV0UrGfQbToSugpMQeQJveaWSH88Hg== @@ -7010,16 +6939,16 @@ micromatch@^4.0.4, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -"mime-db@>= 1.43.0 < 2": - version "1.54.0" - resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"mime-db@>= 1.43.0 < 2": + version "1.54.0" + resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz" @@ -7027,16 +6956,16 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.35, mime-types@~2.1.24, dependencies: mime-db "1.52.0" -mime@^2.4.1: - version "2.6.0" - resolved "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mime@1.6.0: version "1.6.0" resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^2.4.1: + version "2.6.0" + resolved "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz" @@ -7059,14 +6988,7 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.5: +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -7106,16 +7028,16 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + minizlib@^2.1.1: version "2.1.2" resolved "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz" @@ -7131,26 +7053,21 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" -mkdirp@^1.0.3: +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@^2.1.1, ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz" @@ -7170,16 +7087,16 @@ natural-compare@^1.4.0: resolved "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@~0.6.4: - version "0.6.4" - resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.2" resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz" @@ -7361,13 +7278,6 @@ object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: define-properties "^1.2.1" es-object-atoms "^1.0.0" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== - dependencies: - ee-first "1.1.1" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz" @@ -7375,6 +7285,13 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + on-headers@~1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz" @@ -7473,14 +7390,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^3.1.0: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -7594,12 +7504,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz" integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== -path-key@^3.0.0: - version "3.1.1" - resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -8417,7 +8322,7 @@ safe-array-concat@^1.1.3: has-symbols "^1.1.0" isarray "^2.0.5" -safe-buffer@~5.2.0, safe-buffer@5.2.1: +safe-buffer@5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8456,6 +8361,13 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" +scheduler@0.24.0-canary-efb381bbf-20230505: + version "0.24.0-canary-efb381bbf-20230505" + resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz" + integrity sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA== + dependencies: + loose-envify "^1.1.0" + scheduler@^0.23.2: version "0.23.2" resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.23.2.tgz" @@ -8468,13 +8380,6 @@ scheduler@^0.25.0: resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.25.0.tgz" integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== -scheduler@0.24.0-canary-efb381bbf-20230505: - version "0.24.0-canary-efb381bbf-20230505" - resolved "https://registry.npmmirror.com/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz" - integrity sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA== - dependencies: - loose-envify "^1.1.0" - selfsigned@^2.4.1: version "2.4.1" resolved "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz" @@ -8483,50 +8388,30 @@ selfsigned@^2.4.1: "@types/node-forge" "^1.3.0" node-forge "^1" -semver@^5.3.0: - version "5.7.2" - resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^5.5.0: - version "5.7.2" - resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +semver@7.x, semver@^7.1.3, semver@^7.3.5, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: + version "7.7.2" + resolved "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== -semver@^5.6.0: +semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.1.0: - version "6.3.1" - resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.0: - version "6.3.1" - resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^6.3.1: +semver@^6.1.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.1.3, semver@^7.3.5, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3, semver@7.x: - version "7.7.2" - resolved "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== - -send@^0.19.0: - version "0.19.1" - resolved "https://registry.npmmirror.com/send/-/send-0.19.1.tgz" - integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.npmmirror.com/send/-/send-0.19.0.tgz" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" destroy "1.2.0" - encodeurl "~2.0.0" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" @@ -8537,15 +8422,15 @@ send@^0.19.0: range-parser "~1.2.1" statuses "2.0.1" -send@0.19.0: - version "0.19.0" - resolved "https://registry.npmmirror.com/send/-/send-0.19.0.tgz" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== +send@^0.19.0: + version "0.19.1" + resolved "https://registry.npmmirror.com/send/-/send-0.19.1.tgz" + integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg== dependencies: debug "2.6.9" depd "2.0.0" destroy "1.2.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" @@ -8779,6 +8664,11 @@ source-map-support@^0.5.16, source-map-support@~0.5.20, source-map-support@~0.5. buffer-from "^1.0.0" source-map "^0.6.0" +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.6.tgz" + integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== + source-map@^0.5.6: version "0.5.7" resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz" @@ -8789,11 +8679,6 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.npmmirror.com/source-map/-/source-map-0.5.6.tgz" - integrity sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA== - split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz" @@ -8854,17 +8739,17 @@ stacktrace-parser@^0.1.10: dependencies: type-fest "^0.7.1" -statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - statuses@2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stream-buffers@~2.2.0, stream-buffers@2.2.x: +statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stream-buffers@2.2.x, stream-buffers@~2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/stream-buffers/-/stream-buffers-2.2.0.tgz" integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== @@ -8874,13 +8759,6 @@ strict-uri-encode@^2.0.0: resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmmirror.com/string-length/-/string-length-4.0.2.tgz" @@ -8983,6 +8861,13 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + stringify-entities@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-3.1.0.tgz" @@ -8999,14 +8884,7 @@ stringify-entities@^3.1.0: dependencies: ansi-regex "^5.0.1" -strip-ansi@^5.0.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -9494,7 +9372,7 @@ universalify@^2.0.0: resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -9579,7 +9457,7 @@ walker@^1.0.7, walker@^1.0.8: dependencies: makeerror "1.0.12" -warn-once@^0.1.0, warn-once@0.1.1: +warn-once@0.1.1, warn-once@^0.1.0: version "0.1.1" resolved "https://registry.npmmirror.com/warn-once/-/warn-once-0.1.1.tgz" integrity sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q== @@ -9800,22 +9678,12 @@ ws@^6.2.3: dependencies: async-limiter "~1.0.0" -ws@^7: - version "7.5.10" - resolved "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -ws@^7.5.10: +ws@^7, ws@^7.5.10: version "7.5.10" resolved "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^8.11.0: - version "8.18.2" - resolved "https://registry.npmmirror.com/ws/-/ws-8.18.2.tgz" - integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== - -ws@^8.12.1: +ws@^8.11.0, ws@^8.12.1: version "8.18.2" resolved "https://registry.npmmirror.com/ws/-/ws-8.18.2.tgz" integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==