-
+
diff --git a/app/utils/resolve-replacement-url.ts b/app/utils/resolve-replacement-url.ts
new file mode 100644
index 0000000000..e34a5d0b22
--- /dev/null
+++ b/app/utils/resolve-replacement-url.ts
@@ -0,0 +1,17 @@
+import type { KnownUrl } from 'module-replacements'
+
+export function resolveReplacementUrl(url?: KnownUrl): string | null {
+ if (!url) return null
+ if (typeof url === 'string') return url
+
+ switch (url.type) {
+ case 'mdn':
+ return `https://developer.mozilla.org/en-US/docs/${url.id}`
+ case 'node':
+ return `https://nodejs.org/${url.id}`
+ case 'e18e':
+ return `https://e18e.dev/docs/replacements/${url.id}`
+ default:
+ return null
+ }
+}
diff --git a/i18n/locales/ar.json b/i18n/locales/ar.json
index 0f564fc8b7..b68c14b9a9 100644
--- a/i18n/locales/ar.json
+++ b/i18n/locales/ar.json
@@ -76,6 +76,10 @@
"links": "روابط",
"tap_to_search": "اضغط للبحث"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "الإعدادات",
"tagline": "تخصيص تجربتك على npmx",
@@ -118,6 +122,7 @@
"edit_on_github": "تعديل على GitHub",
"view_guide": "دليل الترجمة"
},
+ "error": {},
"common": {
"loading": "جارٍ التحميل…",
"loading_more": "جارٍ تحميل المزيد…",
@@ -145,6 +150,9 @@
"github": "عرض على GitHub"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "لم يتم العثور على الحزمة",
"not_found_message": "تعذّر العثور على الحزمة.",
@@ -157,6 +165,7 @@
"version": "تم إهمال هذا الإصدار.",
"no_reason": "لم يتم تقديم سبب"
},
+ "size_increase": {},
"replacement": {
"title": "قد لا تحتاج إلى هذه التبعية.",
"native": "يمكن استبدالها بـ {replacement}، المتوفرة منذ Node {nodeVersion}.",
@@ -165,7 +174,6 @@
"none": "تم وضع علامة على هذه الحزمة بأنها لم تعد مطلوبة، ومن المرجح أن وظيفتها متاحة أصلًا في جميع المحركات.",
"learn_more": "اعرف المزيد",
"learn_more_above": "اعرف المزيد أعلاه.",
- "mdn": "MDN",
"community": "المجتمع",
"consider_no_dep": "+ هل تريد خيار «بدون تبعية»؟"
},
@@ -303,7 +311,8 @@
"filter_help": "مساعدة فلتر نطاق semver",
"filter_tooltip": "فلترة الإصدارات باستخدام {link}. مثلاً ^3.0.0 يعرض كل إصدارات 3.x.",
"filter_tooltip_link": "نطاق semver",
- "no_matches": "لا توجد إصدارات تطابق هذا النطاق"
+ "no_matches": "لا توجد إصدارات تطابق هذا النطاق",
+ "copy_alt": {}
},
"dependencies": {
"title": "التبعيات ({count})",
@@ -363,7 +372,8 @@
"downloads": "التنزيلات",
"likes": "الإعجابات",
"contributors": "المساهمون"
- }
+ },
+ "copy_alt": {}
},
"downloads": {
"title": "التنزيلات الأسبوعية",
@@ -810,6 +820,8 @@
"managers": "مديري"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {
"title": "الفريق",
"governance": "الحوكمة",
@@ -837,6 +849,7 @@
"description": "تحدث، اطرح الأسئلة، وشارك الأفكار.",
"cta": "انضم إلى Discord"
},
+ "builders": {},
"follow": {
"title": "ابقَ على اطلاع",
"description": "اكتشف آخر الأخبار عن npmx.",
@@ -1009,7 +1022,14 @@
"trends": {
"title": "مقارنة التوجهات"
}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"title": "سياسة الخصوصية",
diff --git a/i18n/locales/az-AZ.json b/i18n/locales/az-AZ.json
index aae98eeef1..72f5a73b99 100644
--- a/i18n/locales/az-AZ.json
+++ b/i18n/locales/az-AZ.json
@@ -239,7 +239,6 @@
"none": "Bu paket artıq lazımsız olaraq qeyd edilib və funksionallığı bütün mühərriklərdə yerli olaraq mövcuddur.",
"learn_more": "Ətraflı öyrən",
"learn_more_above": "Yuxarıda ətraflı öyrənin.",
- "mdn": "MDN",
"community": "icma",
"consider_no_dep": "+ Asılılıqsız düşünün?"
},
diff --git a/i18n/locales/bg-BG.json b/i18n/locales/bg-BG.json
index b633cc5d66..f0ac183c16 100644
--- a/i18n/locales/bg-BG.json
+++ b/i18n/locales/bg-BG.json
@@ -202,7 +202,6 @@
"none": "Този пакет е отбелязан като вече ненужен и функционалността му вероятно е налична нативно във всички двигатели.",
"learn_more": "Научете повече",
"learn_more_above": "Научете повече по-горе.",
- "mdn": "MDN",
"community": "общност",
"consider_no_dep": "+ Обмислете без зависимости?"
},
diff --git a/i18n/locales/bn-IN.json b/i18n/locales/bn-IN.json
index 9118c95d8e..da554b3978 100644
--- a/i18n/locales/bn-IN.json
+++ b/i18n/locales/bn-IN.json
@@ -53,6 +53,10 @@
"links": "লিংকগুলি",
"tap_to_search": "অনুসন্ধানের জন্য ট্যাপ করুন"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "সেটিংস",
"tagline": "আপনার npmx অভিজ্ঞতা কাস্টমাইজ করুন",
@@ -86,6 +90,7 @@
"edit_on_github": "GitHub এ সম্পাদনা করুন",
"view_guide": "অনুবাদ গাইড"
},
+ "error": {},
"common": {
"loading": "লোড হচ্ছে...",
"loading_more": "আরো লোড হচ্ছে...",
@@ -112,6 +117,9 @@
"github": "GitHub এ দেখুন"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "প্যাকেজ পাওয়া যায়নি",
"not_found_message": "প্যাকেজ পাওয়া যায়নি।",
@@ -124,6 +132,7 @@
"version": "এই ভার্সনটি নিষ্ক্রিয় করা হয়েছে।",
"no_reason": "কোনো কারণ দেওয়া হয়নি"
},
+ "size_increase": {},
"replacement": {
"title": "আপনার এই ডিপেনডেন্সির প্রয়োজন নাও হতে পারে।",
"native": "এটিকে {replacement} দিয়ে প্রতিস্থাপন করা যেতে পারে, যা Node {nodeVersion} থেকে উপলব্ধ।",
@@ -131,7 +140,6 @@
"documented": "{community} এই প্যাকেজটিকে আরো ভাল পারফরম্যান্স অপশন হিসাবে চিহ্নিত করেছে।",
"none": "এই প্যাকেজটি এখন অনাবশ্যক হিসাবে চিহ্নিত, এবং এর কার্যকরিতা সমস্ত ইঞ্জিনে নেটিভভাবে উপলব্ধ হওয়ার সম্ভাবনা আছে।",
"learn_more": "আরো জানুন",
- "mdn": "MDN",
"community": "কমিউনিটি"
},
"stats": {
@@ -219,7 +227,8 @@
"more_tagged": "{count}টি আরো ট্যাগ করা",
"all_covered": "সব ভার্সন উপরের ট্যাগ দ্বারা আবৃত",
"deprecated_title": "{version} (নিষ্ক্রিয়)",
- "view_all": "{count}টি ভার্সন দেখুন | সব {count}টি ভার্সন দেখুন"
+ "view_all": "{count}টি ভার্সন দেখুন | সব {count}টি ভার্সন দেখুন",
+ "copy_alt": {}
},
"dependencies": {
"title": "নির্ভরতা ({count})",
@@ -268,7 +277,8 @@
"date_range_multiline": "{start}\nথেকে {end}",
"download_file": "{fileType} ডাউনলোড করুন",
"toggle_annotator": "অ্যানোটেটর টগল করুন",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "সাপ্তাহিক ডাউনলোড"
@@ -697,6 +707,8 @@
"managers": "ম্যানেজার"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "অবদানকারী",
@@ -717,6 +729,7 @@
"description": "চ্যাট করুন, প্রশ্ন জিজ্ঞাসা করুন এবং ধারণা শেয়ার করুন।",
"cta": "Discord এ যোগ দিন"
},
+ "builders": {},
"follow": {
"title": "আপডেট পান",
"description": "npmx এর সর্বশেষ তথ্য পান।",
@@ -828,7 +841,14 @@
},
"values": {},
"trends": {}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json
index 83a47443ad..101ae2e298 100644
--- a/i18n/locales/cs-CZ.json
+++ b/i18n/locales/cs-CZ.json
@@ -249,7 +249,6 @@
"none": "Tento balíček byl označen jako již nepotřebný a jeho funkčnost je pravděpodobně dostupná nativně ve všech enginech.",
"learn_more": "Zjistit více",
"learn_more_above": "Zjistit více výše.",
- "mdn": "MDN",
"community": "komunita",
"consider_no_dep": "+ Zvážit žádnou závislost?"
},
diff --git a/i18n/locales/de-DE.json b/i18n/locales/de-DE.json
index dfe3e2588c..80c0c293a4 100644
--- a/i18n/locales/de-DE.json
+++ b/i18n/locales/de-DE.json
@@ -239,7 +239,6 @@
"none": "Dieses Paket wurde als nicht mehr nötig markiert, und seine Funktionalität ist wahrscheinlich in allen Engines nativ verfügbar.",
"learn_more": "Mehr erfahren",
"learn_more_above": "Erfahre oben mehr.",
- "mdn": "MDN",
"community": "Community",
"consider_no_dep": "+ Ohne Abhängigkeit lösen?"
},
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index 02082388c3..2566f52f08 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -245,13 +245,14 @@
},
"replacement": {
"title": "You might not need this dependency.",
+ "example": "Example:",
"native": "This can be replaced with {replacement}, available since Node {nodeVersion}.",
+ "native_no_version": "This can be replaced with {replacement}.",
"simple": "The {community} has flagged this package as redundant, with the advice: {replacement}.",
"documented": "The {community} has flagged this package as having more performant alternatives.",
"none": "This package has been flagged as no longer needed, and its functionality is likely available natively in all engines.",
"learn_more": "Learn more",
"learn_more_above": "Learn more above.",
- "mdn": "MDN",
"community": "community",
"consider_no_dep": "+ Consider no dep?"
},
diff --git a/i18n/locales/es.json b/i18n/locales/es.json
index 72995686a9..78e21bfe57 100644
--- a/i18n/locales/es.json
+++ b/i18n/locales/es.json
@@ -251,7 +251,6 @@
"none": "Este paquete se ha marcado como ya no necesario y es probable que su funcionalidad esté disponible de forma nativa en todos los motores.",
"learn_more": "Más información",
"learn_more_above": "Más información arriba.",
- "mdn": "MDN",
"community": "comunidad",
"consider_no_dep": "+ ¿Considerar sin dependencia?"
},
diff --git a/i18n/locales/fr-FR.json b/i18n/locales/fr-FR.json
index e8c3385e53..40ea5659db 100644
--- a/i18n/locales/fr-FR.json
+++ b/i18n/locales/fr-FR.json
@@ -239,7 +239,6 @@
"none": "Ce paquet a été signalé comme n'étant plus nécessaire, et sa fonctionnalité est probablement disponible nativement dans tous les moteurs.",
"learn_more": "En savoir plus",
"learn_more_above": "En savoir plus ci-dessus.",
- "mdn": "MDN",
"community": "communauté",
"consider_no_dep": "+ Envisager sans dépendance ?"
},
diff --git a/i18n/locales/hi-IN.json b/i18n/locales/hi-IN.json
index 6840614575..7cdac1e1e1 100644
--- a/i18n/locales/hi-IN.json
+++ b/i18n/locales/hi-IN.json
@@ -54,6 +54,10 @@
"links": "लिंक",
"tap_to_search": "खोजने के लिए टैप करें"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "सेटिंग्स",
"tagline": "अपने npmx अनुभव को अनुकूलित करें",
@@ -87,6 +91,7 @@
"edit_on_github": "GitHub पर संपादित करें",
"view_guide": "अनुवाद गाइड"
},
+ "error": {},
"common": {
"loading": "लोड हो रहा है...",
"loading_more": "और लोड हो रहा है...",
@@ -113,6 +118,9 @@
"github": "GitHub पर देखें"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "पैकेज नहीं मिला",
"not_found_message": "पैकेज नहीं मिल सका।",
@@ -125,6 +133,7 @@
"version": "यह संस्करण डेप्रीकेट कर दिया गया है।",
"no_reason": "कोई कारण प्रदान नहीं किया गया"
},
+ "size_increase": {},
"replacement": {
"title": "आपको इस निर्भरता की आवश्यकता नहीं हो सकती।",
"native": "इसे {replacement} से बदला जा सकता है, जो Node {nodeVersion} से उपलब्ध है।",
@@ -132,7 +141,6 @@
"documented": "{community} ने इस पैकेज को अधिक प्रदर्शनकारी विकल्पों के रूप में फ़्लैग किया है।",
"none": "यह पैकेज अब आवश्यक नहीं होने के रूप में फ़्लैग किया गया है, और इसकी कार्यक्षमता सभी इंजनों में नेटिवली उपलब्ध होने की संभावना है।",
"learn_more": "और जानें",
- "mdn": "MDN",
"community": "समुदाय"
},
"stats": {
@@ -220,7 +228,8 @@
"more_tagged": "{count} और टैग किए गए",
"all_covered": "सभी संस्करण ऊपर के टैग्स द्वारा कवर किए गए हैं",
"deprecated_title": "{version} (डेप्रीकेटेड)",
- "view_all": "{count} संस्करण देखें | सभी {count} संस्करण देखें"
+ "view_all": "{count} संस्करण देखें | सभी {count} संस्करण देखें",
+ "copy_alt": {}
},
"dependencies": {
"title": "निर्भरताएँ ({count})",
@@ -269,7 +278,8 @@
"date_range_multiline": "{start}\nसे {end}",
"download_file": "{fileType} डाउनलोड करें",
"toggle_annotator": "एनोटेटर टॉगल करें",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "साप्ताहिक डाउनलोड्स"
@@ -698,6 +708,8 @@
"managers": "मैनेजर"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "योगदानकर्ता",
@@ -718,6 +730,7 @@
"description": "चैट करें, प्रश्न पूछें, और विचार साझा करें।",
"cta": "Discord से जुड़ें"
},
+ "builders": {},
"follow": {
"title": "अद्यतन रहें",
"description": "npmx पर नवीनतम जानकारी प्राप्त करें।",
@@ -829,7 +842,14 @@
},
"values": {},
"trends": {}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
diff --git a/i18n/locales/hu-HU.json b/i18n/locales/hu-HU.json
index 8040f4d48d..4aade36445 100644
--- a/i18n/locales/hu-HU.json
+++ b/i18n/locales/hu-HU.json
@@ -202,7 +202,6 @@
"none": "Ez a csomag feleslegesnek lett jelölve, a funkció valószínűleg natívan elérhető.",
"learn_more": "Tudj meg többet",
"learn_more_above": "Tudj meg többet fentebb.",
- "mdn": "MDN",
"community": "közösség",
"consider_no_dep": "+ Fontold meg a függőség nélkülözést?"
},
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index 0f13dd00e5..ff813c0c27 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -251,7 +251,6 @@
"none": "Paket ini ditandai sudah tidak diperlukan, fungsinya kemungkinan sudah tersedia secara bawaan (native).",
"learn_more": "Pelajari lebih lanjut",
"learn_more_above": "Pelajari selengkapnya di atas.",
- "mdn": "MDN",
"community": "komunitas",
"consider_no_dep": "+ Pertimbangkan tanpa dependensi?"
},
diff --git a/i18n/locales/it-IT.json b/i18n/locales/it-IT.json
index 52c6f8d235..8b84b04aa4 100644
--- a/i18n/locales/it-IT.json
+++ b/i18n/locales/it-IT.json
@@ -76,6 +76,10 @@
"links": "Link",
"tap_to_search": "Tocca per cercare"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "impostazioni",
"tagline": "personalizza la tua esperienza npmx",
@@ -118,6 +122,7 @@
"edit_on_github": "Modifica su GitHub",
"view_guide": "Guida alla traduzione"
},
+ "error": {},
"common": {
"loading": "Caricando...",
"loading_more": "Caricando altri...",
@@ -145,6 +150,9 @@
"github": "Vedi su GitHub"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "Pacchetto Non Trovato",
"not_found_message": "Impossibile trovare il pacchetto.",
@@ -172,7 +180,6 @@
"none": "Questo pacchetto è stato segnalato come non più necessario, e la sua funzionalità è probabilmente disponibile nativamente in tutti i motori.",
"learn_more": "Scopri di più",
"learn_more_above": "Scopri di più sopra",
- "mdn": "MDN",
"community": "comunità",
"consider_no_dep": "Considera nessuna dipendenza?"
},
@@ -229,9 +236,9 @@
"title": "Inizia",
"pm_label": "Gestore di pacchetti",
"copy_command": "Copia comando di installazione",
- "view_types": "Vedi {package}",
"copy_dev_command": "Copia comando di installazione dev",
- "dev_dependency_hint": "Di solito installato come dev dependency"
+ "dev_dependency_hint": "Di solito installato come dev dependency",
+ "view_types": "Vedi {package}"
},
"create": {
"title": "Crea nuovo progetto",
@@ -297,7 +304,8 @@
"more_tagged": "{count} altri taggati",
"all_covered": "Tutte le versioni sono coperte dai tag sopra",
"deprecated_title": "{version} (deprecato)",
- "view_all": "Visualizza {count} versione | Visualizza tutte le {count} versioni"
+ "view_all": "Visualizza {count} versione | Visualizza tutte le {count} versioni",
+ "copy_alt": {}
},
"dependencies": {
"title": "Dipendenza ({count}) | Dipendenze ({count})",
@@ -351,7 +359,8 @@
"y_axis_label": "{granularity} {facet}",
"items": {
"downloads": "Download"
- }
+ },
+ "copy_alt": {}
},
"downloads": {
"title": "Download settimanali",
@@ -794,6 +803,8 @@
"managers": "gestori di pacchetti"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "{count} Collaboratore | {count} Collaboratori",
@@ -814,6 +825,7 @@
"description": "Chatta, fai domande e condividi idee.",
"cta": "Unisciti a Discord"
},
+ "builders": {},
"follow": {
"title": "Rimani aggiornato",
"description": "Scopri le ultime novità su npmx.",
@@ -984,7 +996,14 @@
"up_to_you": "A tua scelta!"
},
"trends": {}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"title": "Informativa sulla privacy",
diff --git a/i18n/locales/ja-JP.json b/i18n/locales/ja-JP.json
index a63e8f8343..5a5a4de8ec 100644
--- a/i18n/locales/ja-JP.json
+++ b/i18n/locales/ja-JP.json
@@ -249,7 +249,6 @@
"none": "このパッケージは不要になったとフラグが立てられています。その機能はすべてのエンジンでネイティブに利用できる可能性があります。",
"learn_more": "詳細はこちら",
"learn_more_above": "詳細は上記を確認してください。",
- "mdn": "MDN",
"community": "コミュニティ",
"consider_no_dep": "+ 依存関係なしを検討しますか?"
},
diff --git a/i18n/locales/kn-IN.json b/i18n/locales/kn-IN.json
index 51b8302df6..85e1dc8328 100644
--- a/i18n/locales/kn-IN.json
+++ b/i18n/locales/kn-IN.json
@@ -54,6 +54,10 @@
"links": "ಲಿಂಕ್ಗಳು",
"tap_to_search": "ಹುಡುಕಲು ಟ್ಯಾಪ್ ಮಾಡಿ"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "ಸೆಟ್ಟಿಂಗ್ಗಳು",
"tagline": "ನಿಮ್ಮ npmx ಅನುಭವವನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ",
@@ -87,6 +91,7 @@
"edit_on_github": "GitHub ನಲ್ಲಿ ಸಂಪಾದಿಸಿ",
"view_guide": "ಅನುವಾದ ಮಾರ್ಗದರ್ಶಿ"
},
+ "error": {},
"common": {
"loading": "ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
"loading_more": "ಇನ್ನಷ್ಟು ಲೋಡ್ ಆಗುತ್ತಿದೆ...",
@@ -113,6 +118,9 @@
"github": "GitHub ನಲ್ಲಿ ನೋಡಿ"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "ಪ್ಯಾಕೇಜ್ ಕಂಡುಬಂದಿಲ್ಲ",
"not_found_message": "ಪ್ಯಾಕೇಜ್ ಕಂಡುಬಂದಿಲ್ಲ.",
@@ -125,6 +133,7 @@
"version": "ಈ ಆವೃತ್ತಿ ಅಮಾನ್ಯಗೊಳಿಸಲಾಗಿದೆ.",
"no_reason": "ಕಾರಣ ನೀಡಲಾಗಿಲ್ಲ"
},
+ "size_increase": {},
"replacement": {
"title": "ನಿಮಗೆ ಈ ಅವಲಂಬನೆ ಅಗತ್ಯವಿಲ್ಲದಿರಬಹುದು.",
"native": "ಇದನ್ನು {replacement} ಮೂಲಕ ಬದಲಾಯಿಸಬಹುದು, ಇದು Node {nodeVersion} ರಿಂದ ಲಭ್ಯವಿದೆ.",
@@ -132,7 +141,6 @@
"documented": "{community} ಈ ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಯ ಆಯ್ಕೆಯೆಂದು ಗುರುತಿಸಿದೆ.",
"none": "ಈ ಪ್ಯಾಕೇಜ್ ಈಗ ಅನಾವಶ್ಯಕವೆಂದು ಗುರುತಿಸಲಾಗಿದೆ ಮತ್ತು ಇದರ ಕಾರ್ಯಕ್ಷಮತೆ ಎಲ್ಲಾ ಎಂಜಿನ್ಗಳಲ್ಲಿ ನೆಟಿವ್ ಆಗಿ ಲಭ್ಯವಿರಬಹುದು.",
"learn_more": "ಇನ್ನಷ್ಟು ತಿಳಿದುಕೊಳ್ಳಿ",
- "mdn": "MDN",
"community": "ಸಮುದಾಯ"
},
"stats": {
@@ -220,7 +228,8 @@
"more_tagged": "{count} ಇನ್ನಷ್ಟು ಟ್ಯಾಗ್ ಮಾಡಲಾಗಿದೆ",
"all_covered": "ಎಲ್ಲಾ ಆವೃತ್ತಿಗಳು ಮೇಲಿನ ಟ್ಯಾಗ್ಗಳಿಂದ ಒಳಗೊಂಡಿವೆ",
"deprecated_title": "{version} (ಅಮಾನ್ಯಗೊಳಿಸಲಾಗಿದೆ)",
- "view_all": "{count} ಆವೃತ್ತಿ ನೋಡಿ | ಎಲ್ಲಾ {count} ಆವೃತ್ತಿಗಳನ್ನು ನೋಡಿ"
+ "view_all": "{count} ಆವೃತ್ತಿ ನೋಡಿ | ಎಲ್ಲಾ {count} ಆವೃತ್ತಿಗಳನ್ನು ನೋಡಿ",
+ "copy_alt": {}
},
"dependencies": {
"title": "ಅವಲಂಬನೆಗಳು ({count})",
@@ -269,7 +278,8 @@
"date_range_multiline": "{start}\nರಿಂದ {end}",
"download_file": "{fileType} ಡೌನ್ಲೋಡ್ ಮಾಡಿ",
"toggle_annotator": "ಅನೋಟೇಟರ್ ಟಾಗಲ್ ಮಾಡಿ",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "ವಾರದ ಡೌನ್ಲೋಡ್ಗಳು"
@@ -698,6 +708,8 @@
"managers": "ನಿರ್ವಾಹಕರು"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "ಸಹಯೋಗಿಗಳು",
@@ -718,6 +730,7 @@
"description": "ಚಾಟ್ ಮಾಡಿ, ಪ್ರಶ್ನೆಗಳು ಕೇಳಿ ಮತ್ತು ಆಲೋಚನೆಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ.",
"cta": "Discord ನಲ್ಲಿ ಸೇರಿ"
},
+ "builders": {},
"follow": {
"title": "ನವೀಕರಣಗಳನ್ನು ಪಡೆಯಿರಿ",
"description": "npmx ಬಗ್ಗೆ ಇತ್ತೀಚಿನ ಮಾಹಿತಿ ಪಡೆಯಿರಿ.",
@@ -829,7 +842,14 @@
},
"values": {},
"trends": {}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
diff --git a/i18n/locales/mr-IN.json b/i18n/locales/mr-IN.json
index 5c1692f0d7..509f1a3d65 100644
--- a/i18n/locales/mr-IN.json
+++ b/i18n/locales/mr-IN.json
@@ -18,6 +18,9 @@
"social": "सोशल",
"chat": "चॅट"
},
+ "shortcuts": {
+ "section": {}
+ },
"search": {
"label": "npm पॅकेजेस शोधा",
"placeholder": "पॅकेजेस शोधा...",
@@ -52,6 +55,10 @@
"links": "लिंक",
"tap_to_search": "शोधण्यासाठी टॅप करा"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "सेटिंग्ज",
"tagline": "तुमचा npmx अनुभव सानुकूलित करा",
@@ -61,6 +68,7 @@
"display": "प्रदर्शन",
"language": "भाषा"
},
+ "data_source": {},
"relative_dates": "सापेक्ष तारखा",
"include_types": "स्थापनेत {'@'}types समाविष्ट करा",
"include_types_description": "अनटाइप केलेल्या पॅकेजसाठी स्थापना आदेशात {'@'}types पॅकेज जोडा",
@@ -85,6 +93,7 @@
"edit_on_github": "GitHub वर संपादित करा",
"view_guide": "भाषांतर मार्गदर्शक"
},
+ "error": {},
"common": {
"loading": "लोड करत आहे...",
"loading_more": "अधिक लोड करत आहे...",
@@ -110,6 +119,9 @@
"npm": "npm वर पहा"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "पॅकेज सापडले नाही",
"not_found_message": "पॅकेज सापडले नाही.",
@@ -122,6 +134,7 @@
"version": "ही आवृत्ती नापसंत केली गेली आहे.",
"no_reason": "कोणतेही कारण प्रदान केलेले नाही"
},
+ "size_increase": {},
"replacement": {
"title": "तुम्हाला या निर्भरतेची गरज नसू शकते.",
"native": "हे {replacement} सह बदलले जाऊ शकते, Node {nodeVersion} पासून उपलब्ध आहे.",
@@ -129,7 +142,6 @@
"documented": "{community} ने या पॅकेजला अधिक कार्यक्षम पर्याय असल्याने चिन्हांकित केले आहे.",
"none": "हे पॅकेज यापुढे आवश्यक नाही असे चिन्हांकित केले गेले आहे, आणि त्याची कार्यक्षमता सर्व इंजिनांमध्ये मूळतः उपलब्ध असू शकते.",
"learn_more": "अधिक जाणून घ्या",
- "mdn": "MDN",
"community": "समुदाय"
},
"stats": {
@@ -197,14 +209,21 @@
"callout": {}
},
"provenance_section": {},
+ "security_downgrade": {},
"keywords_title": "कीवर्ड",
"compatibility": "सुसंगतता",
"card": {},
- "versions": {},
+ "versions": {
+ "copy_alt": {}
+ },
"dependencies": {},
"peer_dependencies": {},
"optional_dependencies": {},
"maintainers": {},
+ "trends": {
+ "items": {},
+ "copy_alt": {}
+ },
"downloads": {},
"install_scripts": {},
"playgrounds": {},
@@ -219,7 +238,8 @@
},
"list": {},
"skeleton": {},
- "sort": {}
+ "sort": {},
+ "size": {}
},
"connector": {
"modal": {}
@@ -271,10 +291,14 @@
"what_we_are_not": {
"words": {}
},
+ "sponsors": {},
+ "oss_partners": {},
+ "team": {},
"contributors": {},
"get_involved": {
"contribute": {},
"community": {},
+ "builders": {},
"follow": {}
}
},
@@ -309,8 +333,16 @@
"license": {},
"vulnerabilities": {}
},
- "values": {}
- }
+ "values": {},
+ "trends": {}
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
@@ -325,5 +357,11 @@
"your_rights": {},
"contact": {},
"changes": {}
+ },
+ "a11y": {
+ "approach": {},
+ "measures": {},
+ "limitations": {},
+ "contact": {}
}
}
diff --git a/i18n/locales/nb-NO.json b/i18n/locales/nb-NO.json
index 63afe4dc61..cf9d04a849 100644
--- a/i18n/locales/nb-NO.json
+++ b/i18n/locales/nb-NO.json
@@ -76,6 +76,10 @@
"links": "Lenker",
"tap_to_search": "Trykk for å søke"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "innstillinger",
"tagline": "tilpass din npmx-opplevelse",
@@ -118,6 +122,7 @@
"edit_on_github": "Rediger på GitHub",
"view_guide": "Oversettelsesguide"
},
+ "error": {},
"common": {
"loading": "Laster...",
"loading_more": "Laster mer...",
@@ -144,6 +149,9 @@
"github": "Vis på GitHub"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "Pakke ikke funnet",
"not_found_message": "Pakken kunne ikke finnes.",
@@ -156,6 +164,7 @@
"version": "Denne versjonen er utfaset.",
"no_reason": "Ingen årsak oppgitt"
},
+ "size_increase": {},
"replacement": {
"title": "Du trenger kanskje ikke denne avhengigheten.",
"native": "Denne kan erstattes med {replacement}, tilgjengelig siden Node {nodeVersion}.",
@@ -164,7 +173,6 @@
"none": "Denne pakken er flagget som ikke lenger nødvendig, og funksjonaliteten er sannsynligvis tilgjengelig innebygd i alle motorer.",
"learn_more": "Lær mer",
"learn_more_above": "Lær mer ovenfor.",
- "mdn": "MDN",
"community": "fellesskapet",
"consider_no_dep": "+ Vurdere ingen avhengighet?"
},
@@ -268,7 +276,8 @@
"more_tagged": "{count} flere tagget",
"all_covered": "Alle versjoner dekkes av taggene over",
"deprecated_title": "{version} (utfaset)",
- "view_all": "Vis {count} versjon | Vis alle {count} versjoner"
+ "view_all": "Vis {count} versjon | Vis alle {count} versjoner",
+ "copy_alt": {}
},
"dependencies": {
"title": "Avhengighet ({count}) | Avhengigheter ({count})",
@@ -322,7 +331,8 @@
"y_axis_label": "{granularity} {facet}",
"items": {
"downloads": "Nedlastinger"
- }
+ },
+ "copy_alt": {}
},
"downloads": {
"title": "Ukentlige nedlastinger",
@@ -765,6 +775,8 @@
"managers": "pakkebehandlere"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "{count} Bidragsyter | {count} Bidragsytere",
@@ -785,6 +797,7 @@
"description": "Chat, still spørsmål og del ideer.",
"cta": "Bli med på Discord"
},
+ "builders": {},
"follow": {
"title": "Hold deg oppdatert",
"description": "Få med deg det siste om npmx.",
@@ -957,7 +970,14 @@
"trends": {
"title": "Ukentlige nedlastinger"
}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
diff --git a/i18n/locales/ne-NP.json b/i18n/locales/ne-NP.json
index 06755befb0..0ebe88fcc7 100644
--- a/i18n/locales/ne-NP.json
+++ b/i18n/locales/ne-NP.json
@@ -54,6 +54,10 @@
"links": "लिङ्कहरू",
"tap_to_search": "खोज्न ट्याप गर्नुहोस्"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "सेटिङ्स",
"tagline": "आफ्नो npmx अनुभव अनुकूल बनाउनुहोस्",
@@ -87,6 +91,7 @@
"edit_on_github": "GitHub मा सम्पादन गर्नुहोस्",
"view_guide": "अनुवाद मार्गदर्शन"
},
+ "error": {},
"common": {
"loading": "लोड हुँदैछ...",
"loading_more": "अझै लोड हुँदैछ...",
@@ -113,6 +118,9 @@
"github": "GitHub मा हेर्नुहोस्"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "प्याकेज फेला परेन",
"not_found_message": "प्याकेज फेला पार्न सकिएन।",
@@ -125,6 +133,7 @@
"version": "यो संस्करण अप्रचलित (deprecated) गरिएको छ।",
"no_reason": "कारण दिइएको छैन"
},
+ "size_increase": {},
"replacement": {
"title": "तपाईंलाई यो डिपेन्डेन्सी आवश्यक नपर्न सक्छ।",
"native": "Node {nodeVersion} देखि उपलब्ध {replacement} ले यसलाई प्रतिस्थापन गर्न सक्छ।",
@@ -132,7 +141,6 @@
"documented": "{community} ले यो प्याकेजका थप उच्च प्रदर्शन भएका विकल्पहरू छन् भनेर चिन्ह लगाएको छ।",
"none": "यो प्याकेज अब आवश्यक छैन भनेर चिन्ह लगाइएको छ, र यसको कार्यक्षमता सम्भवतः सबै इन्जिनहरूमा नै बिल्ट-इन रूपमा उपलब्ध छ।",
"learn_more": "थप जान्नुहोस्",
- "mdn": "MDN",
"community": "समुदाय"
},
"stats": {
@@ -206,7 +214,8 @@
"more_tagged": "{count} थप ट्याग गरिएको",
"all_covered": "माथिका ट्यागले सबै संस्करणहरू कभर गर्छन्",
"deprecated_title": "{version} (deprecated)",
- "view_all": "{count} संस्करण हेर्नुहोस् | सबै {count} संस्करणहरू हेर्नुहोस्"
+ "view_all": "{count} संस्करण हेर्नुहोस् | सबै {count} संस्करणहरू हेर्नुहोस्",
+ "copy_alt": {}
},
"dependencies": {
"title": "डिपेन्डेन्सीहरू ({count})",
@@ -255,7 +264,8 @@
"date_range_multiline": "{start}\nदेखि {end}",
"download_file": "{fileType} डाउनलोड गर्नुहोस्",
"toggle_annotator": "एनोटेटर टगल गर्नुहोस्",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "साप्ताहिक डाउनलोड"
@@ -683,6 +693,8 @@
"managers": "म्यानेजरहरू बनाइरहेका छन्"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "कन्ट्रिब्युटरहरू",
@@ -703,6 +715,7 @@
"description": "च्याट गर्नुहोस्, प्रश्न सोध्नुहोस्, र विचार साझा गर्नुहोस्।",
"cta": "Discord मा जोडिनुहोस्"
},
+ "builders": {},
"follow": {
"title": "अपडेट रहनुहोस्",
"description": "npmx का ताजा अपडेटहरू जान्नुहोस्।",
@@ -814,7 +827,14 @@
},
"values": {},
"trends": {}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
diff --git a/i18n/locales/pl-PL.json b/i18n/locales/pl-PL.json
index 8a63c9cb8d..051f67e2e2 100644
--- a/i18n/locales/pl-PL.json
+++ b/i18n/locales/pl-PL.json
@@ -249,7 +249,6 @@
"none": "Ten pakiet został oznaczony jako zbędny, a jego funkcjonalność jest prawdopodobnie dostępna natywnie we wszystkich środowiskach.",
"learn_more": "Dowiedz się więcej",
"learn_more_above": "Dowiedz się więcej powyżej",
- "mdn": "MDN",
"community": "Społeczność",
"consider_no_dep": "+ Rozważ brak zależności?"
},
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index 673c7aac96..cb6ed65608 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -87,6 +87,10 @@
"links": "Links",
"tap_to_search": "Toque para pesquisar"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "configurações",
"tagline": "personalize sua experiência npmx",
@@ -134,6 +138,7 @@
"edit_on_github": "Editar no GitHub",
"view_guide": "Guia de tradução"
},
+ "error": {},
"common": {
"loading": "Carregando...",
"loading_more": "Carregando mais...",
@@ -175,6 +180,9 @@
"or": "ou",
"save": "Salvar"
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "Pacote não encontrado",
"not_found_message": "O pacote não pôde ser encontrado.",
@@ -187,6 +195,7 @@
"version": "Esta versão foi descontinuada.",
"no_reason": "Nenhum motivo fornecido"
},
+ "size_increase": {},
"replacement": {
"title": "Você pode não precisar desta dependência.",
"native": "Isso pode ser substituído por {replacement}, disponível desde Node {nodeVersion}.",
@@ -194,7 +203,6 @@
"documented": "A {community} marcou este pacote como tendo alternativas mais performáticas.",
"none": "Este pacote foi marcado como não mais necessário, e sua funcionalidade provavelmente está disponível nativamente em todas as engines.",
"learn_more": "Saiba mais",
- "mdn": "MDN",
"community": "comunidade",
"consider_no_dep": "+ Considerar sem dependências?",
"learn_more_above": "Saiba mais acima."
@@ -928,6 +936,7 @@
"description": "Converse, faça perguntas e compartilhe ideias.",
"cta": "Junte-se ao Discord"
},
+ "builders": {},
"follow": {
"title": "Mantenha-se atualizado",
"description": "Descubra as novidades sobre npmx.",
diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json
index 0e2a77bf85..2972fa2834 100644
--- a/i18n/locales/ru-RU.json
+++ b/i18n/locales/ru-RU.json
@@ -239,7 +239,6 @@
"none": "Этот пакет был отмечен как ненужный, так как его функциональность, вероятно, доступна нативно во всех движках.",
"learn_more": "Подробнее",
"learn_more_above": "Узнайте больше выше.",
- "mdn": "MDN",
"community": "сообщество",
"consider_no_dep": "+ Рассмотреть вариант без зависимости?"
},
diff --git a/i18n/locales/ta-IN.json b/i18n/locales/ta-IN.json
index 5df18ccc04..4c73325231 100644
--- a/i18n/locales/ta-IN.json
+++ b/i18n/locales/ta-IN.json
@@ -76,6 +76,10 @@
"links": "இணைப்புகள்",
"tap_to_search": "தேட தட்டவும்"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "அமைப்புகள்",
"tagline": "உங்கள் npmx அனுபவத்தைத் தனிப்பயனாக்கு",
@@ -118,6 +122,7 @@
"edit_on_github": "GitHub-ல் திருத்து",
"view_guide": "மொழிபெயர்ப்பு வழிகாட்டி"
},
+ "error": {},
"common": {
"loading": "ஏற்றுகிறது...",
"loading_more": "மேலும் ஏற்றுகிறது...",
@@ -144,6 +149,9 @@
"github": "GitHub-ல் காண்க"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "தொகுப்பு கிடைக்கவில்லை",
"not_found_message": "தொகுப்பைக் கண்டுபிடிக்க இயலவில்லை.",
@@ -156,6 +164,7 @@
"version": "இந்தப் பதிப்பு நிறுத்தப்பட்டது.",
"no_reason": "காரணம் வழங்கப்படவில்லை"
},
+ "size_increase": {},
"replacement": {
"title": "இந்த சார்பு உங்களுக்குத் தேவைப்படாமல் இருக்கலாம்.",
"native": "இதை {replacement} மூலம் மாற்றலாம், Node {nodeVersion} முதல் கிடைக்கிறது.",
@@ -164,7 +173,6 @@
"none": "இந்த தொகுப்பு இனி தேவையில்லை என்று கொடியிடப்பட்டுள்ளது, அதன் செயல்பாடு அனைத்து இயந்திரங்களிலும் நேரடியாகக் கிடைக்கிறது.",
"learn_more": "மேலும் அறிக",
"learn_more_above": "மேலே மேலும் அறிக.",
- "mdn": "MDN",
"community": "சமூகம்",
"consider_no_dep": "+ சார்பு வேண்டாமா?"
},
@@ -287,7 +295,8 @@
"more_tagged": "{count} மேலும் குறியிடப்பட்டவை",
"all_covered": "அனைத்து பதிப்புகளும் மேலே உள்ள குறிச்சொற்களால் உள்ளடக்கப்பட்டுள்ளன",
"deprecated_title": "{version} (நிறுத்தப்பட்டது)",
- "view_all": "{count} பதிப்பைக் காண்க | அனைத்து {count} பதிப்புகளையும் காண்க"
+ "view_all": "{count} பதிப்பைக் காண்க | அனைத்து {count} பதிப்புகளையும் காண்க",
+ "copy_alt": {}
},
"dependencies": {
"title": "சார்பு ({count}) | சார்புகள் ({count})",
@@ -341,7 +350,8 @@
"y_axis_label": "{granularity} {facet}",
"items": {
"downloads": "பதிவிறக்கங்கள்"
- }
+ },
+ "copy_alt": {}
},
"downloads": {
"title": "வாராந்திர பதிவிறக்கங்கள்",
@@ -785,6 +795,8 @@
"managers": "மேலாளர்கள்"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "{count} பங்களிப்பாளர் | {count} பங்களிப்பாளர்கள்",
@@ -805,6 +817,7 @@
"description": "அரட்டையடிக்கவும், கேள்விகள் கேட்கவும், யோசனைகளைப் பகிரவும்.",
"cta": "Discord-ல் சேரவும்"
},
+ "builders": {},
"follow": {
"title": "புதுப்பிப்புகளைப் பெறுங்கள்",
"description": "npmx பற்றிய சமீபத்திய தகவல்களைக் கண்டறியுங்கள்.",
@@ -977,7 +990,14 @@
"trends": {
"title": "வாராந்திர பதிவிறக்கங்கள்"
}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"title": "தனியுரிமைக் கொள்கை",
diff --git a/i18n/locales/te-IN.json b/i18n/locales/te-IN.json
index 9ee690177e..2831913c20 100644
--- a/i18n/locales/te-IN.json
+++ b/i18n/locales/te-IN.json
@@ -54,6 +54,10 @@
"links": "లింక్లు",
"tap_to_search": "శోధించడానికి టాప్ చేయండి"
},
+ "blog": {
+ "author": {},
+ "atproto": {}
+ },
"settings": {
"title": "సెట్టింగ్లు",
"tagline": "మీ npmx అనుభవాన్ని అనుకూలీకరించండి",
@@ -87,6 +91,7 @@
"edit_on_github": "GitHub లో సవరించండి",
"view_guide": "అనువాద గైడ్"
},
+ "error": {},
"common": {
"loading": "లోడ్ అవుతున్నది...",
"loading_more": "మరిన్ని లోడ్ అవుతున్నది...",
@@ -113,6 +118,9 @@
"github": "GitHub లో వీక్షించండి"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "ప్యాకేజ్ కనుగొనబడలేదు",
"not_found_message": "ప్యాకేజ్ కనుగొనబడలేదు.",
@@ -125,6 +133,7 @@
"version": "ఈ వెర్షన్ డిప్రికేట్ చేయబడింది.",
"no_reason": "కారణం అందించబడలేదు"
},
+ "size_increase": {},
"replacement": {
"title": "మీకు ఈ డిపెండెన్సీ అవసరం లేకపోవచ్చు.",
"native": "దీనిని {replacement} తో భర్తీ చేయవచ్చు, ఇది Node {nodeVersion} నుండి అందుబాటులో ఉంది.",
@@ -132,7 +141,6 @@
"documented": "{community} ఈ ప్యాకేజ్ను మరింత పనితీరు ఎంపికలుగా ఫ్లాగ్ చేసింది.",
"none": "ఈ ప్యాకేజ్ ఇప్పుడు అవసరం లేనిదిగా ఫ్లాగ్ చేయబడింది, మరియు దీని కార్యాచరణ అన్ని ఇంజిన్లలో నేటివ్గా అందుబాటులో ఉండే అవకాశం ఉంది.",
"learn_more": "మరిన్ని తెలుసుకోండి",
- "mdn": "MDN",
"community": "కమ్యూనిటీ"
},
"stats": {
@@ -220,7 +228,8 @@
"more_tagged": "{count} మరిన్ని ట్యాగ్ చేయబడ్డాయి",
"all_covered": "అన్ని వెర్షన్లు పైన ఉన్న ట్యాగ్ల ద్వారా కవర్ చేయబడ్డాయి",
"deprecated_title": "{version} (డిప్రికేటెడ్)",
- "view_all": "{count} వెర్షన్లను వీక్షించండి | అన్ని {count} వెర్షన్లను వీక్షించండి"
+ "view_all": "{count} వెర్షన్లను వీక్షించండి | అన్ని {count} వెర్షన్లను వీక్షించండి",
+ "copy_alt": {}
},
"dependencies": {
"title": "డిపెండెన్సీలు ({count})",
@@ -269,7 +278,8 @@
"date_range_multiline": "{start}\nనుండి {end}",
"download_file": "{fileType} డౌన్లోడ్ చేయండి",
"toggle_annotator": "అనోటేటర్ను టాగుల్ చేయండి",
- "items": {}
+ "items": {},
+ "copy_alt": {}
},
"downloads": {
"title": "వారపు డౌన్లోడ్లు"
@@ -698,6 +708,8 @@
"managers": "మేనేజర్లు"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "కంట్రిబ్యూటర్లు",
@@ -718,6 +730,7 @@
"description": "చాట్ చేయండి, ప్రశ్నలు అడగండి, మరియు ఆలోచనలను పంచుకోండి.",
"cta": "Discord లో చేరండి"
},
+ "builders": {},
"follow": {
"title": "నవీకరణలతో ఉండండి",
"description": "npmx లో తాజా సమాచారాన్ని పొందండి.",
@@ -829,7 +842,14 @@
},
"values": {},
"trends": {}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
+ },
+ "pds": {
+ "join": {},
+ "server": {},
+ "community": {}
},
"privacy_policy": {
"cookies": {
diff --git a/i18n/locales/tr-TR.json b/i18n/locales/tr-TR.json
index ac6066ce08..d9f4cc82ea 100644
--- a/i18n/locales/tr-TR.json
+++ b/i18n/locales/tr-TR.json
@@ -239,7 +239,6 @@
"none": "Bu paket artık gereksiz olarak işaretlendi ve işlevselliği tüm motorlarda yerel olarak mevcuttur.",
"learn_more": "Daha fazla bilgi",
"learn_more_above": "Yukarıda daha fazla bilgi edinin.",
- "mdn": "MDN",
"community": "topluluk",
"consider_no_dep": "+ Bağımlılıksız düşünün?"
},
diff --git a/i18n/locales/uk-UA.json b/i18n/locales/uk-UA.json
index fac79a98cd..6d5c38096f 100644
--- a/i18n/locales/uk-UA.json
+++ b/i18n/locales/uk-UA.json
@@ -251,7 +251,6 @@
"none": "Цей пакет було позначено як більше не необхідний, і його функціональність, ймовірно, доступна в усіх системах.",
"learn_more": "Дізнатися більше",
"learn_more_above": "Дізнатися більше вище.",
- "mdn": "MDN",
"community": "спільнота",
"consider_no_dep": "+ Думаєте позбавитися пакету?"
},
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index e6cc3aa6f6..10d0e04e9a 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -239,7 +239,6 @@
"none": "此包已被标记为不再需要,其功能很可能已由所有引擎原生提供。",
"learn_more": "了解更多",
"learn_more_above": "在上方了解更多。",
- "mdn": "MDN",
"community": "社区",
"consider_no_dep": "+ 不使用依赖?"
},
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index 6765344baf..fd8ef3e6fa 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -202,7 +202,6 @@
"none": "此套件已被標記為不再需要,其功能很可能已由所有引擎原生提供。",
"learn_more": "了解更多",
"learn_more_above": "參閱上方說明",
- "mdn": "MDN",
"community": "社群",
"consider_no_dep": "+ 考慮不使用相依套件?"
},
diff --git a/i18n/schema.json b/i18n/schema.json
index 96922412cc..1f9be6d5b4 100644
--- a/i18n/schema.json
+++ b/i18n/schema.json
@@ -739,9 +739,15 @@
"title": {
"type": "string"
},
+ "example": {
+ "type": "string"
+ },
"native": {
"type": "string"
},
+ "native_no_version": {
+ "type": "string"
+ },
"simple": {
"type": "string"
},
@@ -757,9 +763,6 @@
"learn_more_above": {
"type": "string"
},
- "mdn": {
- "type": "string"
- },
"community": {
"type": "string"
},
diff --git a/package.json b/package.json
index a49549700e..a71cc7d086 100644
--- a/package.json
+++ b/package.json
@@ -97,7 +97,7 @@
"gray-matter": "4.0.3",
"ipaddr.js": "2.3.0",
"marked": "17.0.3",
- "module-replacements": "2.11.0",
+ "module-replacements": "3.0.0-beta.0",
"nuxt": "4.3.1",
"nuxt-og-image": "5.1.13",
"ofetch": "1.5.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9fde9c40a5..25c82c014c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -170,8 +170,8 @@ importers:
specifier: 17.0.3
version: 17.0.3
module-replacements:
- specifier: 2.11.0
- version: 2.11.0
+ specifier: 3.0.0-beta.0
+ version: 3.0.0-beta.0
nuxt:
specifier: 4.3.1
version: 4.3.1(@parcel/watcher@2.5.4)(@types/node@24.11.0)(@upstash/redis@1.36.3)(@vue/compiler-sfc@3.5.30)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(encoding@0.1.13)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(oxlint@1.56.0(oxlint-tsgolint@0.15.0))(rolldown@1.0.0-rc.5)(rollup@4.56.0)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.10(@types/node@24.11.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))(vue-tsc@3.2.5(typescript@5.9.3))(yaml@2.8.2)
@@ -8302,6 +8302,9 @@ packages:
module-replacements@2.11.0:
resolution: {integrity: sha512-j5sNQm3VCpQQ7nTqGeOZtoJtV3uKERgCBm9QRhmGRiXiqkf7iRFOkfxdJRZWLkqYY8PNf4cDQF/WfXUYLENrRA==}
+ module-replacements@3.0.0-beta.0:
+ resolution: {integrity: sha512-T/REIieQTHKscHccdxRd5A2mYIPPIVuKq652gyAZK1D2hmRCWUi7whDskKiA87knsoCWDDMzjcJHqsCXNWr0Qw==}
+
motion-dom@12.34.3:
resolution: {integrity: sha512-sYgFe+pR9aIM7o4fhs2aXtOI+oqlUd33N9Yoxcgo1Fv7M20sRkHtCmzE/VRNIcq7uNJ+qio+Xubt1FXH3pQ+eQ==}
@@ -20063,6 +20066,8 @@ snapshots:
module-replacements@2.11.0: {}
+ module-replacements@3.0.0-beta.0: {}
+
motion-dom@12.34.3:
dependencies:
motion-utils: 12.29.2
diff --git a/server/api/replacements/[...pkg].get.ts b/server/api/replacements/[...pkg].get.ts
index c2531fd645..147f332cc5 100644
--- a/server/api/replacements/[...pkg].get.ts
+++ b/server/api/replacements/[...pkg].get.ts
@@ -1,11 +1,15 @@
-import { all, type ModuleReplacement } from 'module-replacements'
+import { all, type ModuleReplacement, type ModuleReplacementMapping } from 'module-replacements'
-const replacementMap = new Map
(
- all.moduleReplacements.map(r => [r.moduleName, r]),
+export default defineEventHandler(
+ (event): { mapping: ModuleReplacementMapping; replacement: ModuleReplacement } | null => {
+ const pkg = getRouterParam(event, 'pkg')
+ if (!pkg) return null
+ const mapping = all.mappings[pkg]
+ if (!mapping) return null
+ const replacementId = mapping.replacements[0]
+ if (!replacementId) return null
+ const replacement = all.replacements[replacementId]
+ if (!replacement) return null
+ return { mapping, replacement }
+ },
)
-
-export default defineEventHandler((event): ModuleReplacement | null => {
- const pkg = getRouterParam(event, 'pkg')
- if (!pkg) return null
- return replacementMap.get(pkg) ?? null
-})
diff --git a/test/nuxt/a11y.spec.ts b/test/nuxt/a11y.spec.ts
index 8629dd33c0..aaa15d5690 100644
--- a/test/nuxt/a11y.spec.ts
+++ b/test/nuxt/a11y.spec.ts
@@ -2000,12 +2000,29 @@ describe('component accessibility audits', () => {
const component = await mountSuspended(CompareReplacementSuggestion, {
props: {
packageName: 'array-includes',
+ mapping: {
+ type: 'module',
+ moduleName: 'array-includes',
+ replacements: ['Array.prototype.includes'],
+ },
replacement: {
+ id: 'Array.prototype.includes',
type: 'native',
- moduleName: 'array-includes',
- nodeVersion: '6.0.0',
- replacement: 'Array.prototype.includes',
- mdnPath: 'Global_Objects/Array/includes',
+ url: {
+ type: 'mdn',
+ id: 'Web/JavaScript/Reference/Global_Objects/Array/includes',
+ },
+ webFeatureId: {
+ featureId: 'array-includes',
+ compatKey: 'javascript.builtins.Array.includes',
+ },
+ engines: [
+ { engine: 'chrome', minVersion: '47' },
+ { engine: 'edge', minVersion: '14' },
+ { engine: 'firefox', minVersion: '43' },
+ { engine: 'safari', minVersion: '9' },
+ { engine: 'nodejs', minVersion: '6.0.0' },
+ ],
},
variant: 'nodep',
},
@@ -2018,10 +2035,16 @@ describe('component accessibility audits', () => {
const component = await mountSuspended(CompareReplacementSuggestion, {
props: {
packageName: 'is-even',
+ mapping: {
+ type: 'module',
+ moduleName: 'is-even',
+ replacements: ['snippet::is-even'],
+ },
replacement: {
+ id: 'snippet::is-even',
type: 'simple',
- moduleName: 'is-even',
- replacement: 'Use (n % 2) === 0',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
},
variant: 'nodep',
},
@@ -2034,10 +2057,17 @@ describe('component accessibility audits', () => {
const component = await mountSuspended(CompareReplacementSuggestion, {
props: {
packageName: 'moment',
+ mapping: {
+ type: 'module',
+ moduleName: 'moment',
+ replacements: ['day.js', 'date-fns', 'luxon', 'Date'],
+ url: { type: 'e18e', id: 'moment' },
+ },
replacement: {
+ id: 'day.js',
type: 'documented',
- moduleName: 'moment',
- docPath: 'moment',
+ url: { type: 'e18e', id: 'moment' },
+ replacementModule: 'day.js',
},
variant: 'info',
},
@@ -2460,12 +2490,16 @@ describe('component accessibility audits', () => {
const component = await mountSuspended(PackageReplacement, {
props: {
replacement: {
+ id: 'Array.prototype.every',
type: 'native',
- moduleName: 'array-every',
- nodeVersion: '0.10.0',
- replacement: 'Array.prototype.every',
- mdnPath: 'Global_Objects/Array/every',
- category: 'native',
+ url: {
+ type: 'mdn',
+ id: 'Web/JavaScript/Reference/Global_Objects/Array/every',
+ },
+ engines: [
+ { engine: 'nodejs', minVersion: '0.10.0' },
+ { engine: 'chrome', minVersion: '1' },
+ ],
},
},
})
@@ -2477,23 +2511,10 @@ describe('component accessibility audits', () => {
const component = await mountSuspended(PackageReplacement, {
props: {
replacement: {
+ id: 'snippet::is-even',
type: 'simple',
- moduleName: 'underscore',
- replacement: 'lodash',
- },
- },
- })
- const results = await runAxe(component)
- expect(results.violations).toEqual([])
- })
-
- it('should have no accessibility violations for documented replacement', async () => {
- const component = await mountSuspended(PackageReplacement, {
- props: {
- replacement: {
- type: 'documented',
- moduleName: 'moment',
- docPath: 'moment',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
},
},
})
diff --git a/test/nuxt/composables/use-compare-replacements.spec.ts b/test/nuxt/composables/use-compare-replacements.spec.ts
index 4c9f98a917..fb1ce317fe 100644
--- a/test/nuxt/composables/use-compare-replacements.spec.ts
+++ b/test/nuxt/composables/use-compare-replacements.spec.ts
@@ -50,12 +50,17 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/array-includes')) {
return Promise.resolve({
+ id: 'Array.prototype.includes',
type: 'native',
- moduleName: 'array-includes',
- nodeVersion: '6.0.0',
- replacement: 'Array.prototype.includes',
- mdnPath: 'Global_Objects/Array/includes',
- category: 'native',
+ url: {
+ type: 'mdn',
+ id: 'Web/JavaScript/Reference/Global_Objects/Array/includes',
+ },
+ webFeatureId: {
+ featureId: 'array-includes',
+ compatKey: 'javascript.builtins.Array.includes',
+ },
+ engines: [{ engine: 'nodejs', minVersion: '6.0.0' }],
} satisfies ModuleReplacement)
}
return Promise.resolve(null)
@@ -81,19 +86,17 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/is-even')) {
return Promise.resolve({
+ id: 'snippet::is-even',
type: 'simple',
- moduleName: 'is-even',
- replacement: 'Use (n % 2) === 0',
- category: 'micro-utilities',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
} satisfies ModuleReplacement)
}
return Promise.resolve(null)
}),
)
- const { noDepSuggestions, infoSuggestions } = await useCompareReplacementsInComponent([
- 'is-even',
- ])
+ const { noDepSuggestions } = await useCompareReplacementsInComponent(['is-even'])
await vi.waitFor(() => {
expect(noDepSuggestions.value).toHaveLength(1)
@@ -101,7 +104,7 @@ describe('useCompareReplacements', () => {
expect(noDepSuggestions.value[0]?.forPackage).toBe('is-even')
expect(noDepSuggestions.value[0]?.replacement.type).toBe('simple')
- expect(infoSuggestions.value).toHaveLength(0)
+ expect(noDepSuggestions.value[0]?.replacement).toHaveProperty('example', '(n % 2) === 0')
})
it('categorizes documented replacements as info suggestions', async () => {
@@ -110,10 +113,10 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/moment')) {
return Promise.resolve({
+ id: 'date-fns',
type: 'documented',
- moduleName: 'moment',
- docPath: 'moment',
- category: 'preferred',
+ url: { type: 'e18e', id: 'moment' },
+ replacementModule: 'date-fns',
} satisfies ModuleReplacement)
}
return Promise.resolve(null)
@@ -139,28 +142,29 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/is-odd')) {
return Promise.resolve({
+ id: 'snippet::is-odd',
type: 'simple',
- moduleName: 'is-odd',
- replacement: 'Use (n % 2) !== 0',
- category: 'micro-utilities',
+ description: 'Check if odd',
+ example: '(n % 2) !== 0',
} satisfies ModuleReplacement)
}
if (url.includes('/api/replacements/lodash')) {
return Promise.resolve({
+ id: 'native',
type: 'documented',
- moduleName: 'lodash',
- docPath: 'lodash-underscore',
- category: 'preferred',
+ url: { type: 'e18e', id: 'lodash' },
+ replacementModule: 'native',
} satisfies ModuleReplacement)
}
if (url.includes('/api/replacements/array-map')) {
return Promise.resolve({
+ id: 'Array.prototype.map',
type: 'native',
- moduleName: 'array-map',
- nodeVersion: '0.10.0',
- replacement: 'Array.prototype.map',
- mdnPath: 'Global_Objects/Array/map',
- category: 'native',
+ url: {
+ type: 'mdn',
+ id: 'Web/JavaScript/Reference/Global_Objects/Array/map',
+ },
+ engines: [{ engine: 'nodejs', minVersion: '0.10.0' }],
} satisfies ModuleReplacement)
}
return Promise.resolve(null)
@@ -178,12 +182,9 @@ describe('useCompareReplacements', () => {
expect(infoSuggestions.value).toHaveLength(1)
})
- // no dep should have simple and native
const noDepTypes = noDepSuggestions.value.map(s => s.replacement.type)
expect(noDepTypes).toContain('simple')
expect(noDepTypes).toContain('native')
-
- // Info should have documented
expect(infoSuggestions.value[0]?.replacement.type).toBe('documented')
})
})
@@ -192,12 +193,7 @@ describe('useCompareReplacements', () => {
it('does not include packages with no replacement data', async () => {
vi.stubGlobal(
'$fetch',
- vi.fn().mockImplementation((url: string) => {
- if (url.includes('/api/replacements/react')) {
- return Promise.resolve(null) // No replacement for react
- }
- return Promise.resolve(null)
- }),
+ vi.fn().mockImplementation(() => Promise.resolve(null)),
)
const { noDepSuggestions, infoSuggestions, replacements } =
@@ -214,21 +210,16 @@ describe('useCompareReplacements', () => {
it('handles fetch errors gracefully', async () => {
vi.stubGlobal(
'$fetch',
- vi.fn().mockImplementation(() => {
- return Promise.reject(new Error('Network error'))
- }),
+ vi.fn().mockImplementation(() => Promise.reject(new Error('Network error'))),
)
- const { noDepSuggestions, infoSuggestions, replacements } =
- await useCompareReplacementsInComponent(['some-package'])
+ const { replacements } = await useCompareReplacementsInComponent(['some-package'])
await vi.waitFor(() => {
expect(replacements.value.has('some-package')).toBe(true)
})
expect(replacements.value.get('some-package')).toBeNull()
- expect(noDepSuggestions.value).toHaveLength(0)
- expect(infoSuggestions.value).toHaveLength(0)
})
})
@@ -237,10 +228,10 @@ describe('useCompareReplacements', () => {
const fetchMock = vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/is-even')) {
return Promise.resolve({
+ id: 'snippet::is-even',
type: 'simple',
- moduleName: 'is-even',
- replacement: 'Use (n % 2) === 0',
- category: 'micro-utilities',
+ description: 'Check even',
+ example: '(n % 2) === 0',
} satisfies ModuleReplacement)
}
return Promise.resolve(null)
diff --git a/test/nuxt/composables/use-replacement-dependencies.spec.ts b/test/nuxt/composables/use-replacement-dependencies.spec.ts
index ec5f89bfbe..8050f52cf8 100644
--- a/test/nuxt/composables/use-replacement-dependencies.spec.ts
+++ b/test/nuxt/composables/use-replacement-dependencies.spec.ts
@@ -3,19 +3,41 @@ import { mountSuspended, registerEndpoint } from '@nuxt/test-utils/runtime'
import type { ModuleReplacement } from 'module-replacements'
const SIMPLE_REPLACEMENT: ModuleReplacement = {
+ id: 'snippet::is-even',
type: 'simple',
- moduleName: 'is-even',
- replacement: 'Use (n % 2) === 0',
- category: 'micro-utilities',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
}
const NATIVE_REPLACEMENT: ModuleReplacement = {
+ id: 'Array.prototype.includes',
type: 'native',
- moduleName: 'array-includes',
- nodeVersion: '6.0.0',
- replacement: 'Array.prototype.includes',
- mdnPath: 'Global_Objects/Array/includes',
- category: 'native',
+ url: {
+ type: 'mdn',
+ id: 'Web/JavaScript/Reference/Global_Objects/Array/includes',
+ },
+ webFeatureId: {
+ featureId: 'array-includes',
+ compatKey: 'javascript.builtins.Array.includes',
+ },
+ engines: [
+ { engine: 'chrome', minVersion: '47' },
+ { engine: 'chrome_android', minVersion: '47' },
+ { engine: 'edge', minVersion: '14' },
+ { engine: 'firefox', minVersion: '43' },
+ { engine: 'firefox_android', minVersion: '43' },
+ { engine: 'safari', minVersion: '9' },
+ { engine: 'safari_ios', minVersion: '9' },
+ { engine: 'bun', minVersion: '1.0.0' },
+ { engine: 'deno', minVersion: '1.0' },
+ { engine: 'nodejs', minVersion: '6.0.0' },
+ { engine: 'oculus', minVersion: '5.0' },
+ { engine: 'opera', minVersion: '34' },
+ { engine: 'opera_android', minVersion: '34' },
+ { engine: 'samsunginternet_android', minVersion: '5.0' },
+ { engine: 'webview_android', minVersion: '47' },
+ { engine: 'webview_ios', minVersion: '9' },
+ ],
}
async function mountWithDeps(deps: Record | undefined) {
@@ -40,7 +62,9 @@ async function mountWithDeps(deps: Record | undefined) {
describe('useReplacementDependencies', () => {
it('returns replacements for dependencies that have them', async () => {
- registerEndpoint('/api/replacements/is-even', () => SIMPLE_REPLACEMENT)
+ registerEndpoint('/api/replacements/is-even', () => {
+ replacement: SIMPLE_REPLACEMENT
+ })
registerEndpoint('/api/replacements/picoquery', () => null)
const replacements = await mountWithDeps({
@@ -73,8 +97,12 @@ describe('useReplacementDependencies', () => {
})
it('handles multiple dependencies with replacements', async () => {
- registerEndpoint('/api/replacements/is-even', () => SIMPLE_REPLACEMENT)
- registerEndpoint('/api/replacements/array-includes', () => NATIVE_REPLACEMENT)
+ registerEndpoint('/api/replacements/is-even', () => {
+ replacement: SIMPLE_REPLACEMENT
+ })
+ registerEndpoint('/api/replacements/array-includes', () => {
+ replacement: NATIVE_REPLACEMENT
+ })
registerEndpoint('/api/replacements/picoquery', () => null)
const replacements = await mountWithDeps({
@@ -87,8 +115,12 @@ describe('useReplacementDependencies', () => {
expect(Object.keys(replacements.value)).toHaveLength(2)
})
- expect(replacements.value['is-even']?.type).toBe('simple')
- expect(replacements.value['array-includes']?.type).toBe('native')
+ const simple = replacements.value['is-even']
+ const native = replacements.value['array-includes']
+
+ expect(simple?.type).toBe('simple')
+ expect(native?.type).toBe('native')
+ expect(native?.url).toHaveProperty('type', 'mdn')
expect(replacements.value['picoquery']).toBeUndefined()
})
@@ -96,7 +128,9 @@ describe('useReplacementDependencies', () => {
registerEndpoint('/api/replacements/failing-package', () => {
throw new Error('Network error')
})
- registerEndpoint('/api/replacements/is-even', () => SIMPLE_REPLACEMENT)
+ registerEndpoint('/api/replacements/is-even', () => {
+ replacement: SIMPLE_REPLACEMENT
+ })
const replacements = await mountWithDeps({
'failing-package': '^1.0.0',