[READ-ONLY] a fast, modern browser for the npm registry

fix: use version publish date instead of misleading time.modified (#702)

Co-authored-by: Daniel Roe <daniel@roe.dev>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

authored by philippeserhal.com

Daniel Roe
autofix-ci[bot]
and committed by
GitHub
b0a0bd4f 32e14085

+266 -237
+1 -1
app/components/ColumnPicker.vue
··· 42 42 version: 'filters.columns.version', 43 43 description: 'filters.columns.description', 44 44 downloads: 'filters.columns.downloads', 45 - updated: 'filters.columns.updated', 45 + updated: 'filters.columns.published', 46 46 maintainers: 'filters.columns.maintainers', 47 47 keywords: 'filters.columns.keywords', 48 48 qualityScore: 'filters.columns.quality_score',
+1 -1
app/components/Package/Card.vue
··· 94 94 <dd class="font-mono">{{ result.package.publisher.username }}</dd> 95 95 </div> 96 96 <div v-if="result.package.date" class="flex items-center gap-1.5"> 97 - <dt class="sr-only">{{ $t('package.card.updated') }}</dt> 97 + <dt class="sr-only">{{ $t('package.card.published') }}</dt> 98 98 <dd> 99 99 <DateTime 100 100 :datetime="result.package.date"
+1 -1
app/components/Package/ListControls.vue
··· 33 33 () => 34 34 [ 35 35 { value: 'downloads', label: $t('package.sort.downloads') }, 36 - { value: 'updated', label: $t('package.sort.updated') }, 36 + { value: 'updated', label: $t('package.sort.published') }, 37 37 { value: 'name-asc', label: $t('package.sort.name_asc') }, 38 38 { value: 'name-desc', label: $t('package.sort.name_desc') }, 39 39 ] as const,
+1 -1
app/components/Package/ListToolbar.vue
··· 91 91 'downloads-day': 'filters.sort.downloads_day', 92 92 'downloads-month': 'filters.sort.downloads_month', 93 93 'downloads-year': 'filters.sort.downloads_year', 94 - 'updated': 'filters.sort.updated', 94 + 'updated': 'filters.sort.published', 95 95 'name': 'filters.sort.name', 96 96 'quality': 'filters.sort.quality', 97 97 'popularity': 'filters.sort.popularity',
+2 -2
app/components/Package/Skeleton.vue
··· 70 70 </dd> 71 71 </div> 72 72 73 - <!-- Updated --> 73 + <!-- Published --> 74 74 <div class="space-y-1 col-span-2"> 75 75 <dt class="text-xs text-fg-subtle uppercase tracking-wider"> 76 - {{ $t('package.skeleton.updated') }} 76 + {{ $t('package.skeleton.published') }} 77 77 </dt> 78 78 <dd class="font-mono text-sm"> 79 79 <span class="skeleton inline-block h-5 w-28" />
+1 -1
app/components/Package/Table.vue
··· 85 85 version: 'filters.columns.version', 86 86 description: 'filters.columns.description', 87 87 downloads: 'filters.columns.downloads', 88 - updated: 'filters.columns.updated', 88 + updated: 'filters.columns.published', 89 89 maintainers: 'filters.columns.maintainers', 90 90 keywords: 'filters.columns.keywords', 91 91 qualityScore: 'filters.columns.quality_score',
+9 -1
app/composables/usePackageComparison.ts
··· 21 21 } 22 22 metadata?: { 23 23 license?: string 24 + /** 25 + * Publish date of this version (ISO 8601 date-time string). 26 + * Uses `time[version]` from the registry, NOT `time.modified`. 27 + * For example, if the package was most recently published 3 years ago 28 + * but a maintainer was removed last week, this would show the '3 years ago' time. 29 + */ 24 30 lastUpdated?: string 25 31 engines?: { node?: string; npm?: string } 26 32 deprecated?: string ··· 133 139 }, 134 140 metadata: { 135 141 license: pkgData.license, 136 - lastUpdated: pkgData.time?.modified, 142 + // Use version-specific publish time, NOT time.modified (which can be 143 + // updated by metadata changes like maintainer additions) 144 + lastUpdated: pkgData.time?.[latestVersion], 137 145 engines: analysis?.engines, 138 146 deprecated: versionData?.deprecated, 139 147 },
+17 -6
app/pages/package/[...package].vue
··· 855 855 </template> 856 856 </ClientOnly> 857 857 858 - <div v-if="pkg.time?.modified" class="space-y-1 sm:col-span-2"> 859 - <dt class="text-xs text-fg-subtle uppercase tracking-wider"> 860 - {{ $t('package.stats.updated') }} 858 + <div 859 + v-if="resolvedVersion && pkg.time?.[resolvedVersion]" 860 + class="space-y-1 sm:col-span-2" 861 + > 862 + <dt 863 + class="text-xs text-fg-subtle uppercase tracking-wider" 864 + :title=" 865 + $t('package.stats.published_tooltip', { 866 + package: pkg.name, 867 + version: resolvedVersion, 868 + }) 869 + " 870 + > 871 + {{ $t('package.stats.published') }} 861 872 </dt> 862 873 <dd class="font-mono text-sm text-fg"> 863 - <DateTime :datetime="pkg.time.modified" date-style="medium" /> 874 + <DateTime :datetime="pkg.time[resolvedVersion]!" date-style="medium" /> 864 875 </dd> 865 876 </div> 866 877 </dl> ··· 870 881 <PackageSkillsModal 871 882 :skills="skillsData?.skills ?? []" 872 883 :package-name="pkg.name" 873 - :version="displayVersion?.version" 884 + :version="resolvedVersion || undefined" 874 885 /> 875 886 </ClientOnly> 876 887 </section> ··· 1025 1036 v-if="skillsData?.skills?.length" 1026 1037 :skills="skillsData.skills" 1027 1038 :package-name="pkg.name" 1028 - :version="displayVersion?.version" 1039 + :version="resolvedVersion || undefined" 1029 1040 /> 1030 1041 </ClientOnly> 1031 1042
-6
i18n/locales/ar.json
··· 142 142 "deps": "الاعتماديات", 143 143 "install_size": "حجم التثبيت", 144 144 "vulns": "الثغرات", 145 - "updated": "آخر تحديث", 146 145 "skills": "المهارات", 147 146 "view_dependency_graph": "عرض مخطط الاعتماديات", 148 147 "inspect_dependency_tree": "فحص شجرة الاعتماديات", ··· 206 205 "compatibility": "التوافق", 207 206 "card": { 208 207 "publisher": "الناشر", 209 - "updated": "آخر تحديث", 210 208 "weekly_downloads": "التنزيلات الأسبوعية", 211 209 "keywords": "الكلمات المفتاحية", 212 210 "license": "الترخيص" ··· 366 364 "weekly": "أسبوعيًا", 367 365 "size": "الحجم", 368 366 "deps": "الاعتماديات", 369 - "updated": "آخر تحديث", 370 367 "get_started": "ابدأ", 371 368 "readme": "README", 372 369 "maintainers": "المشرفون", ··· 376 373 }, 377 374 "sort": { 378 375 "downloads": "الأكثر تنزيلًا", 379 - "updated": "مُحدَّثة مؤخرًا", 380 376 "name_asc": "الاسم (A-Z)", 381 377 "name_desc": "الاسم (Z-A)" 382 378 } ··· 661 657 "downloads_day": "التنزيلات/اليوم", 662 658 "downloads_month": "التنزيلات/الشهر", 663 659 "downloads_year": "التنزيلات/السنة", 664 - "updated": "آخر تحديث", 665 660 "name": "الاسم", 666 661 "quality": "الجودة", 667 662 "popularity": "الشعبية", ··· 677 672 "version": "الإصدار", 678 673 "description": "الوصف", 679 674 "downloads": "التنزيلات/الأسبوع", 680 - "updated": "آخر تحديث", 681 675 "maintainers": "المشرفون", 682 676 "keywords": "الكلمات المفتاحية", 683 677 "quality_score": "درجة الجودة",
-6
i18n/locales/az.json
··· 129 129 "deps": "Asılılıqlar", 130 130 "install_size": "Quraşdırma Həcmi", 131 131 "vulns": "Zəifliklər", 132 - "updated": "Yenilənib", 133 132 "view_dependency_graph": "Asılılıq qrafikini göstər", 134 133 "inspect_dependency_tree": "Asılılıq ağacını yoxla", 135 134 "size_tooltip": { ··· 176 175 "compatibility": "Uyğunluq", 177 176 "card": { 178 177 "publisher": "Naşir", 179 - "updated": "Yenilənib", 180 178 "weekly_downloads": "Həftəlik endirmələr", 181 179 "keywords": "Açar sözlər", 182 180 "license": "Lisenziya" ··· 330 328 "weekly": "Həftəlik", 331 329 "size": "Həcm", 332 330 "deps": "Asılılıqlar", 333 - "updated": "Yenilənib", 334 331 "get_started": "Başla", 335 332 "readme": "Readme", 336 333 "maintainers": "Dəstəkçilər", ··· 340 337 }, 341 338 "sort": { 342 339 "downloads": "Ən çox endirilən", 343 - "updated": "Son yenilənən", 344 340 "name_asc": "Ad (A-Z)", 345 341 "name_desc": "Ad (Z-A)" 346 342 } ··· 620 616 "downloads_day": "Endirmələr/gün", 621 617 "downloads_month": "Endirmələr/ay", 622 618 "downloads_year": "Endirmələr/il", 623 - "updated": "Son Yenilənmə", 624 619 "name": "Ad", 625 620 "quality": "Keyfiyyət", 626 621 "popularity": "Populyarlıq", ··· 636 631 "version": "Versiya", 637 632 "description": "Təsvir", 638 633 "downloads": "Endirmələr/həftə", 639 - "updated": "Son Yenilənmə", 640 634 "maintainers": "Dəstəkçilər", 641 635 "keywords": "Açar sözlər", 642 636 "quality_score": "Keyfiyyət xalı",
-6
i18n/locales/cs-CZ.json
··· 141 141 "deps": "Závislosti", 142 142 "install_size": "Velikost instalace", 143 143 "vulns": "Zranitelnosti", 144 - "updated": "Aktualizováno", 145 144 "skills": "Dovednosti", 146 145 "view_dependency_graph": "Zobrazit graf závislostí", 147 146 "inspect_dependency_tree": "Prozkoumat strom závislostí", ··· 205 204 "compatibility": "Kompatibilita", 206 205 "card": { 207 206 "publisher": "Vydavatel", 208 - "updated": "Aktualizováno", 209 207 "weekly_downloads": "Týdenní stažení", 210 208 "keywords": "Klíčová slova", 211 209 "license": "Licence" ··· 364 362 "weekly": "Týdenní", 365 363 "size": "Velikost", 366 364 "deps": "Závislosti", 367 - "updated": "Aktualizováno", 368 365 "get_started": "Začínáme", 369 366 "readme": "Readme", 370 367 "maintainers": "Správci", ··· 374 371 }, 375 372 "sort": { 376 373 "downloads": "Nejvíce stažení", 377 - "updated": "Nedávno aktualizováné", 378 374 "name_asc": "Název (A-Z)", 379 375 "name_desc": "Název (Z-A)" 380 376 } ··· 659 655 "downloads_day": "Stažení/den", 660 656 "downloads_month": "Stažení/měsíc", 661 657 "downloads_year": "Stažení/rok", 662 - "updated": "Naposledy aktualizováno", 663 658 "name": "Název", 664 659 "quality": "Kvalita", 665 660 "popularity": "Popularita", ··· 675 670 "version": "Verze", 676 671 "description": "Popis", 677 672 "downloads": "Stažení/týden", 678 - "updated": "Naposledy aktualizováno", 679 673 "maintainers": "Správci", 680 674 "keywords": "Klíčová slova", 681 675 "quality_score": "Skóre kvality",
-6
i18n/locales/de-DE.json
··· 142 142 "deps": "Abhängigkeiten", 143 143 "install_size": "Installationsgröße", 144 144 "vulns": "Sicherheitslücken", 145 - "updated": "Aktualisiert", 146 145 "skills": "Fähigkeiten", 147 146 "view_dependency_graph": "Abhängigkeitsgraph anzeigen", 148 147 "inspect_dependency_tree": "Abhängigkeitsbaum untersuchen", ··· 206 205 "compatibility": "Kompatibilität", 207 206 "card": { 208 207 "publisher": "Herausgeber", 209 - "updated": "Aktualisiert", 210 208 "weekly_downloads": "Wöchentliche Downloads", 211 209 "keywords": "Schlüsselwörter", 212 210 "license": "Lizenz" ··· 366 364 "weekly": "Wöchentlich", 367 365 "size": "Größe", 368 366 "deps": "Abhängigkeiten", 369 - "updated": "Aktualisiert", 370 367 "get_started": "Erste Schritte", 371 368 "readme": "Readme", 372 369 "maintainers": "Maintainer", ··· 376 373 }, 377 374 "sort": { 378 375 "downloads": "Meiste Downloads", 379 - "updated": "Zuletzt aktualisiert", 380 376 "name_asc": "Name (A-Z)", 381 377 "name_desc": "Name (Z-A)" 382 378 } ··· 661 657 "downloads_day": "Downloads/Tag", 662 658 "downloads_month": "Downloads/Monat", 663 659 "downloads_year": "Downloads/Jahr", 664 - "updated": "Zuletzt aktualisiert", 665 660 "name": "Name", 666 661 "quality": "Qualität", 667 662 "popularity": "Beliebtheit", ··· 677 672 "version": "Version", 678 673 "description": "Beschreibung", 679 674 "downloads": "Downloads/Woche", 680 - "updated": "Zuletzt aktualisiert", 681 675 "maintainers": "Maintainer", 682 676 "keywords": "Stichwörter", 683 677 "quality_score": "Qualitätsfaktor",
+7 -6
i18n/locales/en.json
··· 142 142 "deps": "Deps", 143 143 "install_size": "Install Size", 144 144 "vulns": "Vulns", 145 - "updated": "Updated", 145 + "published": "Published", 146 + "published_tooltip": "Date {package}{'@'}{version} was published", 146 147 "skills": "Skills", 147 148 "view_dependency_graph": "View dependency graph", 148 149 "inspect_dependency_tree": "Inspect dependency tree", ··· 206 207 "compatibility": "Compatibility", 207 208 "card": { 208 209 "publisher": "Publisher", 209 - "updated": "Updated", 210 + "published": "Published", 210 211 "weekly_downloads": "Weekly downloads", 211 212 "keywords": "Keywords", 212 213 "license": "License" ··· 366 367 "weekly": "Weekly", 367 368 "size": "Size", 368 369 "deps": "Deps", 369 - "updated": "Updated", 370 + "published": "Published", 370 371 "get_started": "Get started", 371 372 "readme": "Readme", 372 373 "maintainers": "Maintainers", ··· 376 377 }, 377 378 "sort": { 378 379 "downloads": "Most downloaded", 379 - "updated": "Recently updated", 380 + "published": "Recently published", 380 381 "name_asc": "Name (A-Z)", 381 382 "name_desc": "Name (Z-A)" 382 383 } ··· 661 662 "downloads_day": "Downloads/day", 662 663 "downloads_month": "Downloads/mo", 663 664 "downloads_year": "Downloads/yr", 664 - "updated": "Last Updated", 665 + "published": "Last Published", 665 666 "name": "Name", 666 667 "quality": "Quality", 667 668 "popularity": "Popularity", ··· 677 678 "version": "Version", 678 679 "description": "Description", 679 680 "downloads": "Downloads/wk", 680 - "updated": "Last Updated", 681 + "published": "Last Published", 681 682 "maintainers": "Maintainers", 682 683 "keywords": "Keywords", 683 684 "quality_score": "Quality score",
-6
i18n/locales/es.json
··· 130 130 "deps": "Dependencias", 131 131 "install_size": "Tamaño de instalación", 132 132 "vulns": "Vulnerabilidades", 133 - "updated": "Actualizado", 134 133 "view_dependency_graph": "Ver gráfico de dependencias", 135 134 "inspect_dependency_tree": "Inspeccionar árbol de dependencias", 136 135 "size_tooltip": { ··· 177 176 "compatibility": "Compatibilidad", 178 177 "card": { 179 178 "publisher": "Publicador", 180 - "updated": "Actualizado", 181 179 "weekly_downloads": "Descargas semanales", 182 180 "keywords": "Palabras clave", 183 181 "license": "Licencia" ··· 336 334 "weekly": "Semanal", 337 335 "size": "Tamaño", 338 336 "deps": "Deps", 339 - "updated": "Actualizado", 340 337 "get_started": "Empezar", 341 338 "readme": "Léeme", 342 339 "maintainers": "Mantenedores", ··· 346 343 }, 347 344 "sort": { 348 345 "downloads": "Más descargados", 349 - "updated": "Recientemente actualizados", 350 346 "name_asc": "Nombre (A-Z)", 351 347 "name_desc": "Nombre (Z-A)" 352 348 } ··· 627 623 "downloads_day": "Descargas/día", 628 624 "downloads_month": "Descargas/mes", 629 625 "downloads_year": "Descargas/año", 630 - "updated": "Última Actualización", 631 626 "name": "Nombre", 632 627 "quality": "Calidad", 633 628 "popularity": "Popularidad", ··· 643 638 "version": "Versión", 644 639 "description": "Descripción", 645 640 "downloads": "Descargas/sem", 646 - "updated": "Última Actualización", 647 641 "maintainers": "Mantenedores", 648 642 "keywords": "Palabras clave", 649 643 "quality_score": "Puntuación de calidad",
+7 -6
i18n/locales/fr-FR.json
··· 135 135 "deps": "Dépendances", 136 136 "install_size": "Taille d'install.", 137 137 "vulns": "Vulnérabilités", 138 - "updated": "Mis à jour", 138 + "published": "Publié", 139 + "published_tooltip": "Date de publication de {package}{'@'}{version}", 139 140 "view_dependency_graph": "Voir le graphe de dépendances", 140 141 "inspect_dependency_tree": "Inspecter l'arbre de dépendances", 141 142 "size_tooltip": { ··· 183 184 "compatibility": "Compatibilité", 184 185 "card": { 185 186 "publisher": "Éditeur", 186 - "updated": "Mis à jour", 187 + "published": "Publié", 187 188 "weekly_downloads": "Téléchargements hebdomadaires", 188 189 "keywords": "Mots-clés", 189 190 "license": "Licence" ··· 342 343 "weekly": "Hebdo", 343 344 "size": "Taille", 344 345 "deps": "Dépendances", 345 - "updated": "Mis à jour", 346 + "published": "Publié", 346 347 "get_started": "Commencer", 347 348 "readme": "Readme", 348 349 "maintainers": "Mainteneurs", ··· 352 353 }, 353 354 "sort": { 354 355 "downloads": "Plus téléchargés", 355 - "updated": "Récemment mis à jour", 356 + "published": "Récemment publié", 356 357 "name_asc": "Nom (A-Z)", 357 358 "name_desc": "Nom (Z-A)" 358 359 } ··· 633 634 "downloads_day": "Téléch./jour", 634 635 "downloads_month": "Téléch./mois", 635 636 "downloads_year": "Téléch./an", 636 - "updated": "Dern. mise à jour", 637 + "published": "Dern. publication", 637 638 "name": "Nom", 638 639 "quality": "Qualité", 639 640 "popularity": "Popularité", ··· 649 650 "version": "Version", 650 651 "description": "Description", 651 652 "downloads": "Téléch./sem", 652 - "updated": "Dern. mise à jour", 653 + "published": "Dern. publication", 653 654 "maintainers": "Mainteneurs", 654 655 "keywords": "Mots-clés", 655 656 "quality_score": "Score de qualité",
-6
i18n/locales/hi-IN.json
··· 141 141 "deps": "निर्भरता", 142 142 "install_size": "इंस्टॉल साइज़", 143 143 "vulns": "कमजोरियाँ", 144 - "updated": "अद्यतन किया गया", 145 144 "skills": "स्किल्स", 146 145 "view_dependency_graph": "निर्भरता ग्राफ़ देखें", 147 146 "inspect_dependency_tree": "निर्भरता ट्री का निरीक्षण करें", ··· 205 204 "compatibility": "संगतता", 206 205 "card": { 207 206 "publisher": "प्रकाशक", 208 - "updated": "अद्यतन किया गया", 209 207 "weekly_downloads": "साप्ताहिक डाउनलोड्स", 210 208 "keywords": "कीवर्ड्स", 211 209 "license": "अनुज्ञप्ति" ··· 365 363 "weekly": "साप्ताहिक", 366 364 "size": "साइज़", 367 365 "deps": "निर्भरताएँ", 368 - "updated": "अद्यतन किया गया", 369 366 "get_started": "शुरू करें", 370 367 "readme": "रीडमी", 371 368 "maintainers": "अनुरक्षक", ··· 375 372 }, 376 373 "sort": { 377 374 "downloads": "सबसे अधिक डाउनलोड किए गए", 378 - "updated": "हाल ही में अद्यतन किए गए", 379 375 "name_asc": "नाम (A-Z)", 380 376 "name_desc": "नाम (Z-A)" 381 377 } ··· 660 656 "downloads_day": "डाउनलोड्स/दिन", 661 657 "downloads_month": "डाउनलोड्स/महीना", 662 658 "downloads_year": "डाउनलोड्स/वर्ष", 663 - "updated": "अंतिम अद्यतन", 664 659 "name": "नाम", 665 660 "quality": "गुणवत्ता", 666 661 "popularity": "लोकप्रियता", ··· 676 671 "version": "संस्करण", 677 672 "description": "विवरण", 678 673 "downloads": "डाउनलोड्स/सप्ताह", 679 - "updated": "अंतिम अद्यतन", 680 674 "maintainers": "अनुरक्षक", 681 675 "keywords": "कीवर्ड्स", 682 676 "quality_score": "गुणवत्ता स्कोर",
-6
i18n/locales/hu-HU.json
··· 129 129 "deps": "Függ.", 130 130 "install_size": "Telepítési méret", 131 131 "vulns": "Sebez.", 132 - "updated": "Frissítve", 133 132 "view_dependency_graph": "Függőségi gráf megtekintése", 134 133 "inspect_dependency_tree": "Függőségi fa vizsgálata", 135 134 "size_tooltip": { ··· 176 175 "compatibility": "Kompatibilitás", 177 176 "card": { 178 177 "publisher": "Kiadó", 179 - "updated": "Frissítve", 180 178 "weekly_downloads": "Heti letöltések", 181 179 "keywords": "Kulcsszavak", 182 180 "license": "Licenc" ··· 329 327 "weekly": "Heti", 330 328 "size": "Méret", 331 329 "deps": "Függ.", 332 - "updated": "Frissítve", 333 330 "readme": "Readme", 334 331 "maintainers": "Karbantartók", 335 332 "keywords": "Kulcsszavak", ··· 338 335 }, 339 336 "sort": { 340 337 "downloads": "Legtöbbször letöltött", 341 - "updated": "Legfrissebb", 342 338 "name_asc": "Név (A-Z)", 343 339 "name_desc": "Név (Z-A)" 344 340 } ··· 618 614 "downloads_day": "Letöltés/nap", 619 615 "downloads_month": "Letöltés/hó", 620 616 "downloads_year": "Letöltés/év", 621 - "updated": "Frissítve", 622 617 "name": "Név", 623 618 "quality": "Minőség", 624 619 "popularity": "Népszerűség", ··· 634 629 "version": "Verzió", 635 630 "description": "Leírás", 636 631 "downloads": "Letöltés/hét", 637 - "updated": "Frissítve", 638 632 "maintainers": "Karbantartók", 639 633 "keywords": "Kulcsszavak", 640 634 "quality_score": "Minőség pontszám",
-6
i18n/locales/id-ID.json
··· 141 141 "deps": "Dep", 142 142 "install_size": "Ukuran Instal", 143 143 "vulns": "Kerentanan", 144 - "updated": "Diperbarui", 145 144 "view_dependency_graph": "Lihat grafik dependensi", 146 145 "inspect_dependency_tree": "Periksa pohon dependensi", 147 146 "size_tooltip": { ··· 189 188 "compatibility": "Kompatibilitas", 190 189 "card": { 191 190 "publisher": "Penerbit", 192 - "updated": "Diperbarui", 193 191 "weekly_downloads": "Unduhan mingguan", 194 192 "keywords": "Kata kunci", 195 193 "license": "Lisensi" ··· 348 346 "weekly": "Mingguan", 349 347 "size": "Ukuran", 350 348 "deps": "Dep", 351 - "updated": "Diperbarui", 352 349 "get_started": "Memulai", 353 350 "readme": "Readme", 354 351 "maintainers": "Pemelihara", ··· 358 355 }, 359 356 "sort": { 360 357 "downloads": "Paling banyak diunduh", 361 - "updated": "Terakhir diperbarui", 362 358 "name_asc": "Nama (A-Z)", 363 359 "name_desc": "Nama (Z-A)" 364 360 } ··· 643 639 "downloads_day": "Unduhan/hari", 644 640 "downloads_month": "Unduhan/bulan", 645 641 "downloads_year": "Unduhan/tahun", 646 - "updated": "Pembaruan Terakhir", 647 642 "name": "Nama", 648 643 "quality": "Kualitas", 649 644 "popularity": "Popularitas", ··· 659 654 "version": "Versi", 660 655 "description": "Deskripsi", 661 656 "downloads": "Unduhan/minggu", 662 - "updated": "Pembaruan Terakhir", 663 657 "maintainers": "Pemelihara", 664 658 "keywords": "Kata kunci", 665 659 "quality_score": "Skor kualitas",
-6
i18n/locales/it-IT.json
··· 121 121 "deps": "Deps", 122 122 "install_size": "Dimensioni di installazione", 123 123 "vulns": "Vulns", 124 - "updated": "Aggiornato", 125 124 "view_dependency_graph": "Vedi il grafico delle dipendenze", 126 125 "inspect_dependency_tree": "Ispeziona l'albero delle dipendenze" 127 126 }, ··· 161 160 "compatibility": "Compatibilità", 162 161 "card": { 163 162 "publisher": "Autore", 164 - "updated": "Aggiornato", 165 163 "weekly_downloads": "Download settimanali", 166 164 "keywords": "Keywords", 167 165 "license": "Licenza" ··· 315 313 "weekly": "Settimanale", 316 314 "size": "Misura", 317 315 "deps": "Deps", 318 - "updated": "Aggiornato", 319 316 "readme": "Readme", 320 317 "maintainers": "Manutentori", 321 318 "keywords": "Keywords", ··· 324 321 }, 325 322 "sort": { 326 323 "downloads": "Più scaricati", 327 - "updated": "Aggiornati di recente", 328 324 "name_asc": "Nome (A-Z)", 329 325 "name_desc": "Nome (Z-A)" 330 326 } ··· 593 589 "downloads_day": "Download/giorno", 594 590 "downloads_month": "Download/mese", 595 591 "downloads_year": "Download/anno", 596 - "updated": "Ultimo aggiornamento", 597 592 "name": "Nome", 598 593 "quality": "Qualità", 599 594 "popularity": "Popolarità", ··· 609 604 "version": "Versione", 610 605 "description": "Descrizione", 611 606 "downloads": "Download/sett", 612 - "updated": "Ultimo aggiornamento", 613 607 "maintainers": "Manutentori", 614 608 "keywords": "Keywords", 615 609 "quality_score": "Punteggio qualità",
-5
i18n/locales/ja-JP.json
··· 121 121 "deps": "依存関係", 122 122 "install_size": "インストールサイズ", 123 123 "vulns": "脆弱性", 124 - "updated": "最終更新", 125 124 "view_dependency_graph": "依存関係グラフを表示", 126 125 "inspect_dependency_tree": "依存関係ツリーを検査", 127 126 "size_tooltip": {} ··· 165 164 "compatibility": "互換性", 166 165 "card": { 167 166 "publisher": "パブリッシャー", 168 - "updated": "最終更新", 169 167 "weekly_downloads": "週間ダウンロード数", 170 168 "keywords": "キーワード", 171 169 "license": "ライセンス" ··· 319 317 "weekly": "週間", 320 318 "size": "サイズ", 321 319 "deps": "依存関係", 322 - "updated": "最終更新", 323 320 "readme": "Readme", 324 321 "maintainers": "メンテナ", 325 322 "keywords": "キーワード", ··· 328 325 }, 329 326 "sort": { 330 327 "downloads": "ダウンロード数順", 331 - "updated": "更新順", 332 328 "name_asc": "名前順(A-Z)", 333 329 "name_desc": "名前順(Z-A)" 334 330 } ··· 569 565 "downloads_day": "ダウンロード数/日", 570 566 "downloads_month": "ダウンロード数/月", 571 567 "downloads_year": "ダウンロード数/年", 572 - "updated": "最終更新", 573 568 "name": "パッケージ名", 574 569 "quality": "品質", 575 570 "popularity": "人気度",
-6
i18n/locales/ne-NP.json
··· 141 141 "deps": "डिपेन्डेन्सी", 142 142 "install_size": "इन्स्टल साइज", 143 143 "vulns": "कमजोरीहरू", 144 - "updated": "अपडेट", 145 144 "view_dependency_graph": "डिपेन्डेन्सी ग्राफ हेर्नुहोस्", 146 145 "inspect_dependency_tree": "डिपेन्डेन्सी ट्री जाँच्नुहोस्", 147 146 "size_tooltip": { ··· 189 188 "compatibility": "कम्प्याटिबिलिटी", 190 189 "card": { 191 190 "publisher": "प्रकाशक", 192 - "updated": "अपडेट", 193 191 "weekly_downloads": "साप्ताहिक डाउनलोड", 194 192 "keywords": "किवर्ड्स", 195 193 "license": "लाइसेन्स" ··· 348 346 "weekly": "साप्ताहिक", 349 347 "size": "साइज", 350 348 "deps": "डिपेन्डेन्सी", 351 - "updated": "अपडेट", 352 349 "get_started": "सुरु गर्नुहोस्", 353 350 "readme": "README", 354 351 "maintainers": "मेन्टेनरहरू", ··· 358 355 }, 359 356 "sort": { 360 357 "downloads": "धेरै डाउनलोड भएका", 361 - "updated": "भर्खरै अपडेट भएका", 362 358 "name_asc": "नाम (A-Z)", 363 359 "name_desc": "नाम (Z-A)" 364 360 } ··· 643 639 "downloads_day": "डाउनलोड/दिन", 644 640 "downloads_month": "डाउनलोड/महिना", 645 641 "downloads_year": "डाउनलोड/वर्ष", 646 - "updated": "अन्तिम अपडेट", 647 642 "name": "नाम", 648 643 "quality": "क्वालिटी", 649 644 "popularity": "लोकप्रियता", ··· 659 654 "version": "संस्करण", 660 655 "description": "विवरण", 661 656 "downloads": "डाउनलोड/हप्ता", 662 - "updated": "अन्तिम अपडेट", 663 657 "maintainers": "मेन्टेनरहरू", 664 658 "keywords": "किवर्ड्स", 665 659 "quality_score": "क्वालिटी स्कोर",
-6
i18n/locales/pl-PL.json
··· 141 141 "deps": "Zależności", 142 142 "install_size": "Rozmiar instalacji", 143 143 "vulns": "Luki", 144 - "updated": "Zaktualizowano", 145 144 "view_dependency_graph": "Pokaż graf zależności", 146 145 "inspect_dependency_tree": "Przejrzyj drzewo zależności", 147 146 "size_tooltip": { ··· 189 188 "compatibility": "Zgodność", 190 189 "card": { 191 190 "publisher": "Wydawca", 192 - "updated": "Zaktualizowano", 193 191 "weekly_downloads": "Pobrania tygodniowe", 194 192 "keywords": "Słowa kluczowe", 195 193 "license": "Licencja" ··· 348 346 "weekly": "Tygodniowo", 349 347 "size": "Rozmiar", 350 348 "deps": "Zależności", 351 - "updated": "Zaktualizowano", 352 349 "get_started": "Zacznij", 353 350 "readme": "README", 354 351 "maintainers": "Opiekunowie", ··· 358 355 }, 359 356 "sort": { 360 357 "downloads": "Najczęściej pobierane", 361 - "updated": "Ostatnio aktualizowane", 362 358 "name_asc": "Nazwa (A-Z)", 363 359 "name_desc": "Nazwa (Z-A)" 364 360 } ··· 643 639 "downloads_day": "Pobrania/dzień", 644 640 "downloads_month": "Pobrania/mies.", 645 641 "downloads_year": "Pobrania/rok", 646 - "updated": "Ostatnia aktualizacja", 647 642 "name": "Nazwa", 648 643 "quality": "Jakość", 649 644 "popularity": "Popularność", ··· 659 654 "version": "Wersja", 660 655 "description": "Opis", 661 656 "downloads": "Pobrania/tydz.", 662 - "updated": "Ostatnia aktualizacja", 663 657 "maintainers": "Opiekunowie", 664 658 "keywords": "Słowa kluczowe", 665 659 "quality_score": "Wynik jakości",
-6
i18n/locales/pt-BR.json
··· 142 142 "deps": "Deps", 143 143 "install_size": "Tamanho de Instalação", 144 144 "vulns": "Vulnerabilidades", 145 - "updated": "Atualizado", 146 145 "skills": "Habilidades", 147 146 "view_dependency_graph": "Ver gráfico de dependências", 148 147 "inspect_dependency_tree": "Inspecionar árvore de dependências", ··· 206 205 "compatibility": "Compatibilidade", 207 206 "card": { 208 207 "publisher": "Publicador", 209 - "updated": "Atualizado", 210 208 "weekly_downloads": "Downloads semanais", 211 209 "keywords": "Palavras-chave", 212 210 "license": "Licença" ··· 366 364 "weekly": "Semanal", 367 365 "size": "Tamanho", 368 366 "deps": "Deps", 369 - "updated": "Atualizado", 370 367 "get_started": "Comece agora", 371 368 "readme": "Readme", 372 369 "maintainers": "Mantenedores", ··· 376 373 }, 377 374 "sort": { 378 375 "downloads": "Mais baixados", 379 - "updated": "Recentemente atualizado", 380 376 "name_asc": "Nome (A-Z)", 381 377 "name_desc": "Nome (Z-A)" 382 378 } ··· 661 657 "downloads_day": "Downloads/dia", 662 658 "downloads_month": "Downloads/mês", 663 659 "downloads_year": "Downloads/ano", 664 - "updated": "Última Atualização", 665 660 "name": "Nome", 666 661 "quality": "Qualidade", 667 662 "popularity": "Popularidade", ··· 677 672 "version": "Versão", 678 673 "description": "Descrição", 679 674 "downloads": "Downloads/sem", 680 - "updated": "Última Atualização", 681 675 "maintainers": "Mantenedores", 682 676 "keywords": "Palavras-chave", 683 677 "quality_score": "Pontuação de qualidade",
-6
i18n/locales/ru-RU.json
··· 129 129 "deps": "Зависимости", 130 130 "install_size": "Размер установки", 131 131 "vulns": "Уязвимости", 132 - "updated": "Обновлен", 133 132 "view_dependency_graph": "Посмотреть граф зависимостей", 134 133 "inspect_dependency_tree": "Изучить дерево зависимостей", 135 134 "size_tooltip": {} ··· 173 172 "compatibility": "Совместимость", 174 173 "card": { 175 174 "publisher": "Издатель", 176 - "updated": "Обновлен", 177 175 "weekly_downloads": "Еженедельные загрузки", 178 176 "keywords": "Ключевые слова", 179 177 "license": "Лицензия" ··· 327 325 "weekly": "В неделю", 328 326 "size": "Размер", 329 327 "deps": "Зависимости", 330 - "updated": "Обновлен", 331 328 "readme": "Readme", 332 329 "maintainers": "Мейнтейнеры", 333 330 "keywords": "Ключевые слова", ··· 336 333 }, 337 334 "sort": { 338 335 "downloads": "Больше всего скачиваний", 339 - "updated": "Недавно обновлённые", 340 336 "name_asc": "Имя (А-Я)", 341 337 "name_desc": "Имя (Я-А)" 342 338 } ··· 613 609 "downloads_day": "Загрузок/день", 614 610 "downloads_month": "Загрузок/мес", 615 611 "downloads_year": "Загрузок/год", 616 - "updated": "Последнее обновление", 617 612 "name": "Имя", 618 613 "quality": "Качество", 619 614 "popularity": "Популярность", ··· 629 624 "version": "Версия", 630 625 "description": "Описание", 631 626 "downloads": "Загрузок/нед", 632 - "updated": "Последнее обновление", 633 627 "maintainers": "Мейнтейнеры", 634 628 "keywords": "Ключевые слова", 635 629 "quality_score": "Оценка качества",
-6
i18n/locales/uk-UA.json
··· 129 129 "deps": "Залежності", 130 130 "install_size": "Розмір встановлення", 131 131 "vulns": "Вразливості", 132 - "updated": "Оновлено", 133 132 "view_dependency_graph": "Переглянути граф залежностей", 134 133 "inspect_dependency_tree": "Дослідити дерево залежностей", 135 134 "size_tooltip": { ··· 176 175 "compatibility": "Сумісність", 177 176 "card": { 178 177 "publisher": "Видавець", 179 - "updated": "Оновлено", 180 178 "weekly_downloads": "Завантажень на тиждень", 181 179 "keywords": "Ключові слова", 182 180 "license": "Ліцензія" ··· 330 328 "weekly": "Щотижнева", 331 329 "size": "Розмір", 332 330 "deps": "Залежності", 333 - "updated": "Оновлено", 334 331 "get_started": "Розпочніть роботу", 335 332 "readme": "Readme", 336 333 "maintainers": "Супроводжувачі", ··· 340 337 }, 341 338 "sort": { 342 339 "downloads": "Найбільше завантажено", 343 - "updated": "Недавно оновлено", 344 340 "name_asc": "Ім'я (A-Z)", 345 341 "name_desc": "Ім'я (Z-A)" 346 342 } ··· 620 616 "downloads_day": "Завантажень/день", 621 617 "downloads_month": "Завантажень/міс", 622 618 "downloads_year": "Завантажень/рік", 623 - "updated": "Останнє оновлення", 624 619 "name": "Ім'я", 625 620 "quality": "Якість", 626 621 "popularity": "Популярність", ··· 636 631 "version": "Версія", 637 632 "description": "Опис", 638 633 "downloads": "Завантажень/тиж", 639 - "updated": "Останнє оновлення", 640 634 "maintainers": "Супроводжувачі", 641 635 "keywords": "Ключові слова", 642 636 "quality_score": "Оцінка якості",
-6
i18n/locales/zh-CN.json
··· 130 130 "deps": "依赖项", 131 131 "install_size": "安装大小", 132 132 "vulns": "漏洞", 133 - "updated": "最近更新", 134 133 "view_dependency_graph": "查看依赖图", 135 134 "inspect_dependency_tree": "查看依赖树", 136 135 "size_tooltip": { ··· 177 176 "compatibility": "兼容性", 178 177 "card": { 179 178 "publisher": "发布者", 180 - "updated": "更新", 181 179 "weekly_downloads": "每周下载量", 182 180 "keywords": "关键词", 183 181 "license": "许可证" ··· 336 334 "weekly": "每周", 337 335 "size": "大小", 338 336 "deps": "依赖", 339 - "updated": "更新", 340 337 "get_started": "开始使用", 341 338 "readme": "Readme", 342 339 "maintainers": "维护者", ··· 346 343 }, 347 344 "sort": { 348 345 "downloads": "最多下载的", 349 - "updated": "最近更新的", 350 346 "name_asc": "名称(A-Z)", 351 347 "name_desc": "名称(Z-A)" 352 348 } ··· 627 623 "downloads_day": "每日下载量", 628 624 "downloads_month": "每月下载量", 629 625 "downloads_year": "每年下载量", 630 - "updated": "最近更新", 631 626 "name": "名称", 632 627 "quality": "质量评分", 633 628 "popularity": "受欢迎度", ··· 643 638 "version": "版本", 644 639 "description": "描述", 645 640 "downloads": "每周下载量", 646 - "updated": "最近更新", 647 641 "maintainers": "维护者", 648 642 "keywords": "关键词", 649 643 "quality_score": "质量评分",
-6
lunaria/files/ar-EG.json
··· 142 142 "deps": "الاعتماديات", 143 143 "install_size": "حجم التثبيت", 144 144 "vulns": "الثغرات", 145 - "updated": "آخر تحديث", 146 145 "skills": "المهارات", 147 146 "view_dependency_graph": "عرض مخطط الاعتماديات", 148 147 "inspect_dependency_tree": "فحص شجرة الاعتماديات", ··· 206 205 "compatibility": "التوافق", 207 206 "card": { 208 207 "publisher": "الناشر", 209 - "updated": "آخر تحديث", 210 208 "weekly_downloads": "التنزيلات الأسبوعية", 211 209 "keywords": "الكلمات المفتاحية", 212 210 "license": "الترخيص" ··· 366 364 "weekly": "أسبوعيًا", 367 365 "size": "الحجم", 368 366 "deps": "الاعتماديات", 369 - "updated": "آخر تحديث", 370 367 "get_started": "ابدأ", 371 368 "readme": "README", 372 369 "maintainers": "المشرفون", ··· 376 373 }, 377 374 "sort": { 378 375 "downloads": "الأكثر تنزيلًا", 379 - "updated": "مُحدَّثة مؤخرًا", 380 376 "name_asc": "الاسم (A-Z)", 381 377 "name_desc": "الاسم (Z-A)" 382 378 } ··· 661 657 "downloads_day": "التنزيلات/اليوم", 662 658 "downloads_month": "التنزيلات/الشهر", 663 659 "downloads_year": "التنزيلات/السنة", 664 - "updated": "آخر تحديث", 665 660 "name": "الاسم", 666 661 "quality": "الجودة", 667 662 "popularity": "الشعبية", ··· 677 672 "version": "الإصدار", 678 673 "description": "الوصف", 679 674 "downloads": "التنزيلات/الأسبوع", 680 - "updated": "آخر تحديث", 681 675 "maintainers": "المشرفون", 682 676 "keywords": "الكلمات المفتاحية", 683 677 "quality_score": "درجة الجودة",
-6
lunaria/files/az.json
··· 129 129 "deps": "Asılılıqlar", 130 130 "install_size": "Quraşdırma Həcmi", 131 131 "vulns": "Zəifliklər", 132 - "updated": "Yenilənib", 133 132 "view_dependency_graph": "Asılılıq qrafikini göstər", 134 133 "inspect_dependency_tree": "Asılılıq ağacını yoxla", 135 134 "size_tooltip": { ··· 176 175 "compatibility": "Uyğunluq", 177 176 "card": { 178 177 "publisher": "Naşir", 179 - "updated": "Yenilənib", 180 178 "weekly_downloads": "Həftəlik endirmələr", 181 179 "keywords": "Açar sözlər", 182 180 "license": "Lisenziya" ··· 330 328 "weekly": "Həftəlik", 331 329 "size": "Həcm", 332 330 "deps": "Asılılıqlar", 333 - "updated": "Yenilənib", 334 331 "get_started": "Başla", 335 332 "readme": "Readme", 336 333 "maintainers": "Dəstəkçilər", ··· 340 337 }, 341 338 "sort": { 342 339 "downloads": "Ən çox endirilən", 343 - "updated": "Son yenilənən", 344 340 "name_asc": "Ad (A-Z)", 345 341 "name_desc": "Ad (Z-A)" 346 342 } ··· 620 616 "downloads_day": "Endirmələr/gün", 621 617 "downloads_month": "Endirmələr/ay", 622 618 "downloads_year": "Endirmələr/il", 623 - "updated": "Son Yenilənmə", 624 619 "name": "Ad", 625 620 "quality": "Keyfiyyət", 626 621 "popularity": "Populyarlıq", ··· 636 631 "version": "Versiya", 637 632 "description": "Təsvir", 638 633 "downloads": "Endirmələr/həftə", 639 - "updated": "Son Yenilənmə", 640 634 "maintainers": "Dəstəkçilər", 641 635 "keywords": "Açar sözlər", 642 636 "quality_score": "Keyfiyyət xalı",
-6
lunaria/files/cs-CZ.json
··· 141 141 "deps": "Závislosti", 142 142 "install_size": "Velikost instalace", 143 143 "vulns": "Zranitelnosti", 144 - "updated": "Aktualizováno", 145 144 "skills": "Dovednosti", 146 145 "view_dependency_graph": "Zobrazit graf závislostí", 147 146 "inspect_dependency_tree": "Prozkoumat strom závislostí", ··· 205 204 "compatibility": "Kompatibilita", 206 205 "card": { 207 206 "publisher": "Vydavatel", 208 - "updated": "Aktualizováno", 209 207 "weekly_downloads": "Týdenní stažení", 210 208 "keywords": "Klíčová slova", 211 209 "license": "Licence" ··· 364 362 "weekly": "Týdenní", 365 363 "size": "Velikost", 366 364 "deps": "Závislosti", 367 - "updated": "Aktualizováno", 368 365 "get_started": "Začínáme", 369 366 "readme": "Readme", 370 367 "maintainers": "Správci", ··· 374 371 }, 375 372 "sort": { 376 373 "downloads": "Nejvíce stažení", 377 - "updated": "Nedávno aktualizováné", 378 374 "name_asc": "Název (A-Z)", 379 375 "name_desc": "Název (Z-A)" 380 376 } ··· 659 655 "downloads_day": "Stažení/den", 660 656 "downloads_month": "Stažení/měsíc", 661 657 "downloads_year": "Stažení/rok", 662 - "updated": "Naposledy aktualizováno", 663 658 "name": "Název", 664 659 "quality": "Kvalita", 665 660 "popularity": "Popularita", ··· 675 670 "version": "Verze", 676 671 "description": "Popis", 677 672 "downloads": "Stažení/týden", 678 - "updated": "Naposledy aktualizováno", 679 673 "maintainers": "Správci", 680 674 "keywords": "Klíčová slova", 681 675 "quality_score": "Skóre kvality",
-6
lunaria/files/de-DE.json
··· 142 142 "deps": "Abhängigkeiten", 143 143 "install_size": "Installationsgröße", 144 144 "vulns": "Sicherheitslücken", 145 - "updated": "Aktualisiert", 146 145 "skills": "Fähigkeiten", 147 146 "view_dependency_graph": "Abhängigkeitsgraph anzeigen", 148 147 "inspect_dependency_tree": "Abhängigkeitsbaum untersuchen", ··· 206 205 "compatibility": "Kompatibilität", 207 206 "card": { 208 207 "publisher": "Herausgeber", 209 - "updated": "Aktualisiert", 210 208 "weekly_downloads": "Wöchentliche Downloads", 211 209 "keywords": "Schlüsselwörter", 212 210 "license": "Lizenz" ··· 366 364 "weekly": "Wöchentlich", 367 365 "size": "Größe", 368 366 "deps": "Abhängigkeiten", 369 - "updated": "Aktualisiert", 370 367 "get_started": "Erste Schritte", 371 368 "readme": "Readme", 372 369 "maintainers": "Maintainer", ··· 376 373 }, 377 374 "sort": { 378 375 "downloads": "Meiste Downloads", 379 - "updated": "Zuletzt aktualisiert", 380 376 "name_asc": "Name (A-Z)", 381 377 "name_desc": "Name (Z-A)" 382 378 } ··· 661 657 "downloads_day": "Downloads/Tag", 662 658 "downloads_month": "Downloads/Monat", 663 659 "downloads_year": "Downloads/Jahr", 664 - "updated": "Zuletzt aktualisiert", 665 660 "name": "Name", 666 661 "quality": "Qualität", 667 662 "popularity": "Beliebtheit", ··· 677 672 "version": "Version", 678 673 "description": "Beschreibung", 679 674 "downloads": "Downloads/Woche", 680 - "updated": "Zuletzt aktualisiert", 681 675 "maintainers": "Maintainer", 682 676 "keywords": "Stichwörter", 683 677 "quality_score": "Qualitätsfaktor",
+7 -6
lunaria/files/en-US.json
··· 142 142 "deps": "Deps", 143 143 "install_size": "Install Size", 144 144 "vulns": "Vulns", 145 - "updated": "Updated", 145 + "published": "Published", 146 + "published_tooltip": "Date {package}{'@'}{version} was published", 146 147 "skills": "Skills", 147 148 "view_dependency_graph": "View dependency graph", 148 149 "inspect_dependency_tree": "Inspect dependency tree", ··· 206 207 "compatibility": "Compatibility", 207 208 "card": { 208 209 "publisher": "Publisher", 209 - "updated": "Updated", 210 + "published": "Published", 210 211 "weekly_downloads": "Weekly downloads", 211 212 "keywords": "Keywords", 212 213 "license": "License" ··· 366 367 "weekly": "Weekly", 367 368 "size": "Size", 368 369 "deps": "Deps", 369 - "updated": "Updated", 370 + "published": "Published", 370 371 "get_started": "Get started", 371 372 "readme": "Readme", 372 373 "maintainers": "Maintainers", ··· 376 377 }, 377 378 "sort": { 378 379 "downloads": "Most downloaded", 379 - "updated": "Recently updated", 380 + "published": "Recently published", 380 381 "name_asc": "Name (A-Z)", 381 382 "name_desc": "Name (Z-A)" 382 383 } ··· 661 662 "downloads_day": "Downloads/day", 662 663 "downloads_month": "Downloads/mo", 663 664 "downloads_year": "Downloads/yr", 664 - "updated": "Last Updated", 665 + "published": "Last Published", 665 666 "name": "Name", 666 667 "quality": "Quality", 667 668 "popularity": "Popularity", ··· 677 678 "version": "Version", 678 679 "description": "Description", 679 680 "downloads": "Downloads/wk", 680 - "updated": "Last Updated", 681 + "published": "Last Published", 681 682 "maintainers": "Maintainers", 682 683 "keywords": "Keywords", 683 684 "quality_score": "Quality score",
-6
lunaria/files/es-419.json
··· 130 130 "deps": "Dependencias", 131 131 "install_size": "Tamaño de instalación", 132 132 "vulns": "Vulnerabilidades", 133 - "updated": "Actualizado", 134 133 "view_dependency_graph": "Ver gráfico de dependencias", 135 134 "inspect_dependency_tree": "Inspeccionar árbol de dependencias", 136 135 "size_tooltip": { ··· 177 176 "compatibility": "Compatibilidad", 178 177 "card": { 179 178 "publisher": "Publicador", 180 - "updated": "Actualizado", 181 179 "weekly_downloads": "Descargas semanales", 182 180 "keywords": "Palabras clave", 183 181 "license": "Licencia" ··· 336 334 "weekly": "Semanal", 337 335 "size": "Tamaño", 338 336 "deps": "Deps", 339 - "updated": "Actualizado", 340 337 "get_started": "Empezar", 341 338 "readme": "Léame", 342 339 "maintainers": "Mantenedores", ··· 346 343 }, 347 344 "sort": { 348 345 "downloads": "Más descargados", 349 - "updated": "Recientemente actualizados", 350 346 "name_asc": "Nombre (A-Z)", 351 347 "name_desc": "Nombre (Z-A)" 352 348 } ··· 627 623 "downloads_day": "Descargas/día", 628 624 "downloads_month": "Descargas/mes", 629 625 "downloads_year": "Descargas/año", 630 - "updated": "Última Actualización", 631 626 "name": "Nombre", 632 627 "quality": "Calidad", 633 628 "popularity": "Popularidad", ··· 643 638 "version": "Versión", 644 639 "description": "Descripción", 645 640 "downloads": "Descargas/sem", 646 - "updated": "Última Actualización", 647 641 "maintainers": "Mantenedores", 648 642 "keywords": "Palabras clave", 649 643 "quality_score": "Puntuación de calidad",
-6
lunaria/files/es-ES.json
··· 130 130 "deps": "Dependencias", 131 131 "install_size": "Tamaño de instalación", 132 132 "vulns": "Vulnerabilidades", 133 - "updated": "Actualizado", 134 133 "view_dependency_graph": "Ver gráfico de dependencias", 135 134 "inspect_dependency_tree": "Inspeccionar árbol de dependencias", 136 135 "size_tooltip": { ··· 177 176 "compatibility": "Compatibilidad", 178 177 "card": { 179 178 "publisher": "Publicador", 180 - "updated": "Actualizado", 181 179 "weekly_downloads": "Descargas semanales", 182 180 "keywords": "Palabras clave", 183 181 "license": "Licencia" ··· 336 334 "weekly": "Semanal", 337 335 "size": "Tamaño", 338 336 "deps": "Deps", 339 - "updated": "Actualizado", 340 337 "get_started": "Empezar", 341 338 "readme": "Léeme", 342 339 "maintainers": "Mantenedores", ··· 346 343 }, 347 344 "sort": { 348 345 "downloads": "Más descargados", 349 - "updated": "Recientemente actualizados", 350 346 "name_asc": "Nombre (A-Z)", 351 347 "name_desc": "Nombre (Z-A)" 352 348 } ··· 627 623 "downloads_day": "Descargas/día", 628 624 "downloads_month": "Descargas/mes", 629 625 "downloads_year": "Descargas/año", 630 - "updated": "Última Actualización", 631 626 "name": "Nombre", 632 627 "quality": "Calidad", 633 628 "popularity": "Popularidad", ··· 643 638 "version": "Versión", 644 639 "description": "Descripción", 645 640 "downloads": "Descargas/sem", 646 - "updated": "Última Actualización", 647 641 "maintainers": "Mantenedores", 648 642 "keywords": "Palabras clave", 649 643 "quality_score": "Puntuación de calidad",
+7 -6
lunaria/files/fr-FR.json
··· 135 135 "deps": "Dépendances", 136 136 "install_size": "Taille d'install.", 137 137 "vulns": "Vulnérabilités", 138 - "updated": "Mis à jour", 138 + "published": "Publié", 139 + "published_tooltip": "Date de publication de {package}{'@'}{version}", 139 140 "view_dependency_graph": "Voir le graphe de dépendances", 140 141 "inspect_dependency_tree": "Inspecter l'arbre de dépendances", 141 142 "size_tooltip": { ··· 183 184 "compatibility": "Compatibilité", 184 185 "card": { 185 186 "publisher": "Éditeur", 186 - "updated": "Mis à jour", 187 + "published": "Publié", 187 188 "weekly_downloads": "Téléchargements hebdomadaires", 188 189 "keywords": "Mots-clés", 189 190 "license": "Licence" ··· 342 343 "weekly": "Hebdo", 343 344 "size": "Taille", 344 345 "deps": "Dépendances", 345 - "updated": "Mis à jour", 346 + "published": "Publié", 346 347 "get_started": "Commencer", 347 348 "readme": "Readme", 348 349 "maintainers": "Mainteneurs", ··· 352 353 }, 353 354 "sort": { 354 355 "downloads": "Plus téléchargés", 355 - "updated": "Récemment mis à jour", 356 + "published": "Récemment publié", 356 357 "name_asc": "Nom (A-Z)", 357 358 "name_desc": "Nom (Z-A)" 358 359 } ··· 633 634 "downloads_day": "Téléch./jour", 634 635 "downloads_month": "Téléch./mois", 635 636 "downloads_year": "Téléch./an", 636 - "updated": "Dern. mise à jour", 637 + "published": "Dern. publication", 637 638 "name": "Nom", 638 639 "quality": "Qualité", 639 640 "popularity": "Popularité", ··· 649 650 "version": "Version", 650 651 "description": "Description", 651 652 "downloads": "Téléch./sem", 652 - "updated": "Dern. mise à jour", 653 + "published": "Dern. publication", 653 654 "maintainers": "Mainteneurs", 654 655 "keywords": "Mots-clés", 655 656 "quality_score": "Score de qualité",
-6
lunaria/files/hi-IN.json
··· 141 141 "deps": "निर्भरता", 142 142 "install_size": "इंस्टॉल साइज़", 143 143 "vulns": "कमजोरियाँ", 144 - "updated": "अद्यतन किया गया", 145 144 "skills": "स्किल्स", 146 145 "view_dependency_graph": "निर्भरता ग्राफ़ देखें", 147 146 "inspect_dependency_tree": "निर्भरता ट्री का निरीक्षण करें", ··· 205 204 "compatibility": "संगतता", 206 205 "card": { 207 206 "publisher": "प्रकाशक", 208 - "updated": "अद्यतन किया गया", 209 207 "weekly_downloads": "साप्ताहिक डाउनलोड्स", 210 208 "keywords": "कीवर्ड्स", 211 209 "license": "अनुज्ञप्ति" ··· 365 363 "weekly": "साप्ताहिक", 366 364 "size": "साइज़", 367 365 "deps": "निर्भरताएँ", 368 - "updated": "अद्यतन किया गया", 369 366 "get_started": "शुरू करें", 370 367 "readme": "रीडमी", 371 368 "maintainers": "अनुरक्षक", ··· 375 372 }, 376 373 "sort": { 377 374 "downloads": "सबसे अधिक डाउनलोड किए गए", 378 - "updated": "हाल ही में अद्यतन किए गए", 379 375 "name_asc": "नाम (A-Z)", 380 376 "name_desc": "नाम (Z-A)" 381 377 } ··· 660 656 "downloads_day": "डाउनलोड्स/दिन", 661 657 "downloads_month": "डाउनलोड्स/महीना", 662 658 "downloads_year": "डाउनलोड्स/वर्ष", 663 - "updated": "अंतिम अद्यतन", 664 659 "name": "नाम", 665 660 "quality": "गुणवत्ता", 666 661 "popularity": "लोकप्रियता", ··· 676 671 "version": "संस्करण", 677 672 "description": "विवरण", 678 673 "downloads": "डाउनलोड्स/सप्ताह", 679 - "updated": "अंतिम अद्यतन", 680 674 "maintainers": "अनुरक्षक", 681 675 "keywords": "कीवर्ड्स", 682 676 "quality_score": "गुणवत्ता स्कोर",
-6
lunaria/files/hu-HU.json
··· 129 129 "deps": "Függ.", 130 130 "install_size": "Telepítési méret", 131 131 "vulns": "Sebez.", 132 - "updated": "Frissítve", 133 132 "view_dependency_graph": "Függőségi gráf megtekintése", 134 133 "inspect_dependency_tree": "Függőségi fa vizsgálata", 135 134 "size_tooltip": { ··· 176 175 "compatibility": "Kompatibilitás", 177 176 "card": { 178 177 "publisher": "Kiadó", 179 - "updated": "Frissítve", 180 178 "weekly_downloads": "Heti letöltések", 181 179 "keywords": "Kulcsszavak", 182 180 "license": "Licenc" ··· 329 327 "weekly": "Heti", 330 328 "size": "Méret", 331 329 "deps": "Függ.", 332 - "updated": "Frissítve", 333 330 "readme": "Readme", 334 331 "maintainers": "Karbantartók", 335 332 "keywords": "Kulcsszavak", ··· 338 335 }, 339 336 "sort": { 340 337 "downloads": "Legtöbbször letöltött", 341 - "updated": "Legfrissebb", 342 338 "name_asc": "Név (A-Z)", 343 339 "name_desc": "Név (Z-A)" 344 340 } ··· 618 614 "downloads_day": "Letöltés/nap", 619 615 "downloads_month": "Letöltés/hó", 620 616 "downloads_year": "Letöltés/év", 621 - "updated": "Frissítve", 622 617 "name": "Név", 623 618 "quality": "Minőség", 624 619 "popularity": "Népszerűség", ··· 634 629 "version": "Verzió", 635 630 "description": "Leírás", 636 631 "downloads": "Letöltés/hét", 637 - "updated": "Frissítve", 638 632 "maintainers": "Karbantartók", 639 633 "keywords": "Kulcsszavak", 640 634 "quality_score": "Minőség pontszám",
-6
lunaria/files/id-ID.json
··· 141 141 "deps": "Dep", 142 142 "install_size": "Ukuran Instal", 143 143 "vulns": "Kerentanan", 144 - "updated": "Diperbarui", 145 144 "view_dependency_graph": "Lihat grafik dependensi", 146 145 "inspect_dependency_tree": "Periksa pohon dependensi", 147 146 "size_tooltip": { ··· 189 188 "compatibility": "Kompatibilitas", 190 189 "card": { 191 190 "publisher": "Penerbit", 192 - "updated": "Diperbarui", 193 191 "weekly_downloads": "Unduhan mingguan", 194 192 "keywords": "Kata kunci", 195 193 "license": "Lisensi" ··· 348 346 "weekly": "Mingguan", 349 347 "size": "Ukuran", 350 348 "deps": "Dep", 351 - "updated": "Diperbarui", 352 349 "get_started": "Memulai", 353 350 "readme": "Readme", 354 351 "maintainers": "Pemelihara", ··· 358 355 }, 359 356 "sort": { 360 357 "downloads": "Paling banyak diunduh", 361 - "updated": "Terakhir diperbarui", 362 358 "name_asc": "Nama (A-Z)", 363 359 "name_desc": "Nama (Z-A)" 364 360 } ··· 643 639 "downloads_day": "Unduhan/hari", 644 640 "downloads_month": "Unduhan/bulan", 645 641 "downloads_year": "Unduhan/tahun", 646 - "updated": "Pembaruan Terakhir", 647 642 "name": "Nama", 648 643 "quality": "Kualitas", 649 644 "popularity": "Popularitas", ··· 659 654 "version": "Versi", 660 655 "description": "Deskripsi", 661 656 "downloads": "Unduhan/minggu", 662 - "updated": "Pembaruan Terakhir", 663 657 "maintainers": "Pemelihara", 664 658 "keywords": "Kata kunci", 665 659 "quality_score": "Skor kualitas",
-6
lunaria/files/it-IT.json
··· 121 121 "deps": "Deps", 122 122 "install_size": "Dimensioni di installazione", 123 123 "vulns": "Vulns", 124 - "updated": "Aggiornato", 125 124 "view_dependency_graph": "Vedi il grafico delle dipendenze", 126 125 "inspect_dependency_tree": "Ispeziona l'albero delle dipendenze" 127 126 }, ··· 161 160 "compatibility": "Compatibilità", 162 161 "card": { 163 162 "publisher": "Autore", 164 - "updated": "Aggiornato", 165 163 "weekly_downloads": "Download settimanali", 166 164 "keywords": "Keywords", 167 165 "license": "Licenza" ··· 315 313 "weekly": "Settimanale", 316 314 "size": "Misura", 317 315 "deps": "Deps", 318 - "updated": "Aggiornato", 319 316 "readme": "Readme", 320 317 "maintainers": "Manutentori", 321 318 "keywords": "Keywords", ··· 324 321 }, 325 322 "sort": { 326 323 "downloads": "Più scaricati", 327 - "updated": "Aggiornati di recente", 328 324 "name_asc": "Nome (A-Z)", 329 325 "name_desc": "Nome (Z-A)" 330 326 } ··· 593 589 "downloads_day": "Download/giorno", 594 590 "downloads_month": "Download/mese", 595 591 "downloads_year": "Download/anno", 596 - "updated": "Ultimo aggiornamento", 597 592 "name": "Nome", 598 593 "quality": "Qualità", 599 594 "popularity": "Popolarità", ··· 609 604 "version": "Versione", 610 605 "description": "Descrizione", 611 606 "downloads": "Download/sett", 612 - "updated": "Ultimo aggiornamento", 613 607 "maintainers": "Manutentori", 614 608 "keywords": "Keywords", 615 609 "quality_score": "Punteggio qualità",
-5
lunaria/files/ja-JP.json
··· 121 121 "deps": "依存関係", 122 122 "install_size": "インストールサイズ", 123 123 "vulns": "脆弱性", 124 - "updated": "最終更新", 125 124 "view_dependency_graph": "依存関係グラフを表示", 126 125 "inspect_dependency_tree": "依存関係ツリーを検査", 127 126 "size_tooltip": {} ··· 165 164 "compatibility": "互換性", 166 165 "card": { 167 166 "publisher": "パブリッシャー", 168 - "updated": "最終更新", 169 167 "weekly_downloads": "週間ダウンロード数", 170 168 "keywords": "キーワード", 171 169 "license": "ライセンス" ··· 319 317 "weekly": "週間", 320 318 "size": "サイズ", 321 319 "deps": "依存関係", 322 - "updated": "最終更新", 323 320 "readme": "Readme", 324 321 "maintainers": "メンテナ", 325 322 "keywords": "キーワード", ··· 328 325 }, 329 326 "sort": { 330 327 "downloads": "ダウンロード数順", 331 - "updated": "更新順", 332 328 "name_asc": "名前順(A-Z)", 333 329 "name_desc": "名前順(Z-A)" 334 330 } ··· 569 565 "downloads_day": "ダウンロード数/日", 570 566 "downloads_month": "ダウンロード数/月", 571 567 "downloads_year": "ダウンロード数/年", 572 - "updated": "最終更新", 573 568 "name": "パッケージ名", 574 569 "quality": "品質", 575 570 "popularity": "人気度",
-6
lunaria/files/ne-NP.json
··· 141 141 "deps": "डिपेन्डेन्सी", 142 142 "install_size": "इन्स्टल साइज", 143 143 "vulns": "कमजोरीहरू", 144 - "updated": "अपडेट", 145 144 "view_dependency_graph": "डिपेन्डेन्सी ग्राफ हेर्नुहोस्", 146 145 "inspect_dependency_tree": "डिपेन्डेन्सी ट्री जाँच्नुहोस्", 147 146 "size_tooltip": { ··· 189 188 "compatibility": "कम्प्याटिबिलिटी", 190 189 "card": { 191 190 "publisher": "प्रकाशक", 192 - "updated": "अपडेट", 193 191 "weekly_downloads": "साप्ताहिक डाउनलोड", 194 192 "keywords": "किवर्ड्स", 195 193 "license": "लाइसेन्स" ··· 348 346 "weekly": "साप्ताहिक", 349 347 "size": "साइज", 350 348 "deps": "डिपेन्डेन्सी", 351 - "updated": "अपडेट", 352 349 "get_started": "सुरु गर्नुहोस्", 353 350 "readme": "README", 354 351 "maintainers": "मेन्टेनरहरू", ··· 358 355 }, 359 356 "sort": { 360 357 "downloads": "धेरै डाउनलोड भएका", 361 - "updated": "भर्खरै अपडेट भएका", 362 358 "name_asc": "नाम (A-Z)", 363 359 "name_desc": "नाम (Z-A)" 364 360 } ··· 643 639 "downloads_day": "डाउनलोड/दिन", 644 640 "downloads_month": "डाउनलोड/महिना", 645 641 "downloads_year": "डाउनलोड/वर्ष", 646 - "updated": "अन्तिम अपडेट", 647 642 "name": "नाम", 648 643 "quality": "क्वालिटी", 649 644 "popularity": "लोकप्रियता", ··· 659 654 "version": "संस्करण", 660 655 "description": "विवरण", 661 656 "downloads": "डाउनलोड/हप्ता", 662 - "updated": "अन्तिम अपडेट", 663 657 "maintainers": "मेन्टेनरहरू", 664 658 "keywords": "किवर्ड्स", 665 659 "quality_score": "क्वालिटी स्कोर",
-6
lunaria/files/pl-PL.json
··· 141 141 "deps": "Zależności", 142 142 "install_size": "Rozmiar instalacji", 143 143 "vulns": "Luki", 144 - "updated": "Zaktualizowano", 145 144 "view_dependency_graph": "Pokaż graf zależności", 146 145 "inspect_dependency_tree": "Przejrzyj drzewo zależności", 147 146 "size_tooltip": { ··· 189 188 "compatibility": "Zgodność", 190 189 "card": { 191 190 "publisher": "Wydawca", 192 - "updated": "Zaktualizowano", 193 191 "weekly_downloads": "Pobrania tygodniowe", 194 192 "keywords": "Słowa kluczowe", 195 193 "license": "Licencja" ··· 348 346 "weekly": "Tygodniowo", 349 347 "size": "Rozmiar", 350 348 "deps": "Zależności", 351 - "updated": "Zaktualizowano", 352 349 "get_started": "Zacznij", 353 350 "readme": "README", 354 351 "maintainers": "Opiekunowie", ··· 358 355 }, 359 356 "sort": { 360 357 "downloads": "Najczęściej pobierane", 361 - "updated": "Ostatnio aktualizowane", 362 358 "name_asc": "Nazwa (A-Z)", 363 359 "name_desc": "Nazwa (Z-A)" 364 360 } ··· 643 639 "downloads_day": "Pobrania/dzień", 644 640 "downloads_month": "Pobrania/mies.", 645 641 "downloads_year": "Pobrania/rok", 646 - "updated": "Ostatnia aktualizacja", 647 642 "name": "Nazwa", 648 643 "quality": "Jakość", 649 644 "popularity": "Popularność", ··· 659 654 "version": "Wersja", 660 655 "description": "Opis", 661 656 "downloads": "Pobrania/tydz.", 662 - "updated": "Ostatnia aktualizacja", 663 657 "maintainers": "Opiekunowie", 664 658 "keywords": "Słowa kluczowe", 665 659 "quality_score": "Wynik jakości",
-6
lunaria/files/pt-BR.json
··· 142 142 "deps": "Deps", 143 143 "install_size": "Tamanho de Instalação", 144 144 "vulns": "Vulnerabilidades", 145 - "updated": "Atualizado", 146 145 "skills": "Habilidades", 147 146 "view_dependency_graph": "Ver gráfico de dependências", 148 147 "inspect_dependency_tree": "Inspecionar árvore de dependências", ··· 206 205 "compatibility": "Compatibilidade", 207 206 "card": { 208 207 "publisher": "Publicador", 209 - "updated": "Atualizado", 210 208 "weekly_downloads": "Downloads semanais", 211 209 "keywords": "Palavras-chave", 212 210 "license": "Licença" ··· 366 364 "weekly": "Semanal", 367 365 "size": "Tamanho", 368 366 "deps": "Deps", 369 - "updated": "Atualizado", 370 367 "get_started": "Comece agora", 371 368 "readme": "Readme", 372 369 "maintainers": "Mantenedores", ··· 376 373 }, 377 374 "sort": { 378 375 "downloads": "Mais baixados", 379 - "updated": "Recentemente atualizado", 380 376 "name_asc": "Nome (A-Z)", 381 377 "name_desc": "Nome (Z-A)" 382 378 } ··· 661 657 "downloads_day": "Downloads/dia", 662 658 "downloads_month": "Downloads/mês", 663 659 "downloads_year": "Downloads/ano", 664 - "updated": "Última Atualização", 665 660 "name": "Nome", 666 661 "quality": "Qualidade", 667 662 "popularity": "Popularidade", ··· 677 672 "version": "Versão", 678 673 "description": "Descrição", 679 674 "downloads": "Downloads/sem", 680 - "updated": "Última Atualização", 681 675 "maintainers": "Mantenedores", 682 676 "keywords": "Palavras-chave", 683 677 "quality_score": "Pontuação de qualidade",
-6
lunaria/files/ru-RU.json
··· 129 129 "deps": "Зависимости", 130 130 "install_size": "Размер установки", 131 131 "vulns": "Уязвимости", 132 - "updated": "Обновлен", 133 132 "view_dependency_graph": "Посмотреть граф зависимостей", 134 133 "inspect_dependency_tree": "Изучить дерево зависимостей", 135 134 "size_tooltip": {} ··· 173 172 "compatibility": "Совместимость", 174 173 "card": { 175 174 "publisher": "Издатель", 176 - "updated": "Обновлен", 177 175 "weekly_downloads": "Еженедельные загрузки", 178 176 "keywords": "Ключевые слова", 179 177 "license": "Лицензия" ··· 327 325 "weekly": "В неделю", 328 326 "size": "Размер", 329 327 "deps": "Зависимости", 330 - "updated": "Обновлен", 331 328 "readme": "Readme", 332 329 "maintainers": "Мейнтейнеры", 333 330 "keywords": "Ключевые слова", ··· 336 333 }, 337 334 "sort": { 338 335 "downloads": "Больше всего скачиваний", 339 - "updated": "Недавно обновлённые", 340 336 "name_asc": "Имя (А-Я)", 341 337 "name_desc": "Имя (Я-А)" 342 338 } ··· 613 609 "downloads_day": "Загрузок/день", 614 610 "downloads_month": "Загрузок/мес", 615 611 "downloads_year": "Загрузок/год", 616 - "updated": "Последнее обновление", 617 612 "name": "Имя", 618 613 "quality": "Качество", 619 614 "popularity": "Популярность", ··· 629 624 "version": "Версия", 630 625 "description": "Описание", 631 626 "downloads": "Загрузок/нед", 632 - "updated": "Последнее обновление", 633 627 "maintainers": "Мейнтейнеры", 634 628 "keywords": "Ключевые слова", 635 629 "quality_score": "Оценка качества",
-6
lunaria/files/uk-UA.json
··· 129 129 "deps": "Залежності", 130 130 "install_size": "Розмір встановлення", 131 131 "vulns": "Вразливості", 132 - "updated": "Оновлено", 133 132 "view_dependency_graph": "Переглянути граф залежностей", 134 133 "inspect_dependency_tree": "Дослідити дерево залежностей", 135 134 "size_tooltip": { ··· 176 175 "compatibility": "Сумісність", 177 176 "card": { 178 177 "publisher": "Видавець", 179 - "updated": "Оновлено", 180 178 "weekly_downloads": "Завантажень на тиждень", 181 179 "keywords": "Ключові слова", 182 180 "license": "Ліцензія" ··· 330 328 "weekly": "Щотижнева", 331 329 "size": "Розмір", 332 330 "deps": "Залежності", 333 - "updated": "Оновлено", 334 331 "get_started": "Розпочніть роботу", 335 332 "readme": "Readme", 336 333 "maintainers": "Супроводжувачі", ··· 340 337 }, 341 338 "sort": { 342 339 "downloads": "Найбільше завантажено", 343 - "updated": "Недавно оновлено", 344 340 "name_asc": "Ім'я (A-Z)", 345 341 "name_desc": "Ім'я (Z-A)" 346 342 } ··· 620 616 "downloads_day": "Завантажень/день", 621 617 "downloads_month": "Завантажень/міс", 622 618 "downloads_year": "Завантажень/рік", 623 - "updated": "Останнє оновлення", 624 619 "name": "Ім'я", 625 620 "quality": "Якість", 626 621 "popularity": "Популярність", ··· 636 631 "version": "Версія", 637 632 "description": "Опис", 638 633 "downloads": "Завантажень/тиж", 639 - "updated": "Останнє оновлення", 640 634 "maintainers": "Супроводжувачі", 641 635 "keywords": "Ключові слова", 642 636 "quality_score": "Оцінка якості",
-6
lunaria/files/zh-CN.json
··· 130 130 "deps": "依赖项", 131 131 "install_size": "安装大小", 132 132 "vulns": "漏洞", 133 - "updated": "最近更新", 134 133 "view_dependency_graph": "查看依赖图", 135 134 "inspect_dependency_tree": "查看依赖树", 136 135 "size_tooltip": { ··· 177 176 "compatibility": "兼容性", 178 177 "card": { 179 178 "publisher": "发布者", 180 - "updated": "更新", 181 179 "weekly_downloads": "每周下载量", 182 180 "keywords": "关键词", 183 181 "license": "许可证" ··· 336 334 "weekly": "每周", 337 335 "size": "大小", 338 336 "deps": "依赖", 339 - "updated": "更新", 340 337 "get_started": "开始使用", 341 338 "readme": "Readme", 342 339 "maintainers": "维护者", ··· 346 343 }, 347 344 "sort": { 348 345 "downloads": "最多下载的", 349 - "updated": "最近更新的", 350 346 "name_asc": "名称(A-Z)", 351 347 "name_desc": "名称(Z-A)" 352 348 } ··· 627 623 "downloads_day": "每日下载量", 628 624 "downloads_month": "每月下载量", 629 625 "downloads_year": "每年下载量", 630 - "updated": "最近更新", 631 626 "name": "名称", 632 627 "quality": "质量评分", 633 628 "popularity": "受欢迎度", ··· 643 638 "version": "版本", 644 639 "description": "描述", 645 640 "downloads": "每周下载量", 646 - "updated": "最近更新", 647 641 "maintainers": "维护者", 648 642 "keywords": "关键词", 649 643 "quality_score": "质量评分",
+2 -2
shared/types/comparison.ts
··· 60 60 category: 'health', 61 61 }, 62 62 lastUpdated: { 63 - label: 'Last Updated', 64 - description: 'Most recent publish date', 63 + label: 'Published', 64 + description: 'When this version was published', 65 65 category: 'health', 66 66 }, 67 67 deprecated: {
+13 -1
shared/types/npm-registry.ts
··· 47 47 'name': string 48 48 'description'?: string 49 49 'dist-tags': { latest?: string } & Record<string, string> 50 - /** Only includes time for dist-tag versions + modified/created */ 50 + /** 51 + * Timestamps for package versions. 52 + * 53 + * **IMPORTANT**: Use `time[version]` to get the publish date of a specific version. 54 + * 55 + * **DO NOT use `time.modified`** - it can be updated by metadata changes (e.g., maintainer 56 + * additions/removals) without any code being published, making it misleading for users 57 + * trying to assess package maintenance activity. 58 + * 59 + * - `time[version]` - When that specific version was published (use this!) 60 + * - `time.created` - When the package was first created 61 + * - `time.modified` - Last metadata change (misleading - avoid using) 62 + */ 51 63 'time': { modified?: string; created?: string } & Record<string, string> 52 64 'maintainers'?: NpmPerson[] 53 65 'author'?: NpmPerson
+190
test/nuxt/composables/use-package-comparison.spec.ts
··· 1 + import { afterEach, describe, expect, it, vi } from 'vitest' 2 + import { mountSuspended } from '@nuxt/test-utils/runtime' 3 + import type { PackageComparisonData } from '~/composables/usePackageComparison' 4 + 5 + /** 6 + * Helper to test usePackageComparison by wrapping it in a component. 7 + * This is required because the composable uses useI18n which must be 8 + * called inside a Vue component's setup function. 9 + */ 10 + async function usePackageComparisonInComponent(packageNames: string[]) { 11 + // Create refs to capture the composable's return values 12 + const capturedPackagesData = ref<(PackageComparisonData | null)[]>([]) as Ref< 13 + (PackageComparisonData | null)[] 14 + > 15 + const capturedStatus = ref<'idle' | 'pending' | 'success' | 'error'>('idle') as Ref< 16 + 'idle' | 'pending' | 'success' | 'error' 17 + > 18 + let capturedGetFacetValues: (facet: ComparisonFacet) => (FacetValue | null)[] 19 + 20 + const WrapperComponent = defineComponent({ 21 + setup() { 22 + const { packagesData, status, getFacetValues } = usePackageComparison(packageNames) 23 + 24 + // Sync values to captured refs 25 + watchEffect(() => { 26 + capturedPackagesData.value = [...packagesData.value] 27 + capturedStatus.value = status.value 28 + }) 29 + capturedGetFacetValues = getFacetValues 30 + 31 + return () => h('div') 32 + }, 33 + }) 34 + 35 + await mountSuspended(WrapperComponent) 36 + 37 + return { 38 + packagesData: capturedPackagesData, 39 + status: capturedStatus, 40 + getFacetValues: (facet: ComparisonFacet) => capturedGetFacetValues(facet), 41 + } 42 + } 43 + 44 + describe('usePackageComparison', () => { 45 + afterEach(() => { 46 + vi.unstubAllGlobals() 47 + }) 48 + 49 + describe('lastUpdated facet', () => { 50 + it('uses version-specific publish date, not time.modified', async () => { 51 + vi.stubGlobal( 52 + '$fetch', 53 + vi.fn().mockImplementation((url: string) => { 54 + if (url.startsWith('https://registry.npmjs.org/')) { 55 + return Promise.resolve({ 56 + 'name': 'test-package', 57 + 'dist-tags': { latest: '2.0.0' }, 58 + 'time': { 59 + // This is the WRONG value - updated by metadata changes 60 + 'modified': '2024-12-01T00:00:00.000Z', 61 + // This is the CORRECT value - actual publish date 62 + '2.0.0': '2024-06-15T00:00:00.000Z', 63 + }, 64 + 'license': 'MIT', 65 + 'versions': { 66 + '2.0.0': { dist: { unpackedSize: 15000 } }, 67 + }, 68 + }) 69 + } 70 + return Promise.resolve(null) 71 + }), 72 + ) 73 + 74 + const { packagesData, status, getFacetValues } = await usePackageComparisonInComponent([ 75 + 'test-package', 76 + ]) 77 + 78 + await vi.waitFor(() => { 79 + expect(status.value).toBe('success') 80 + }) 81 + 82 + expect(packagesData.value[0]).not.toBeNull() 83 + 84 + const values = getFacetValues('lastUpdated') 85 + expect(values).toHaveLength(1) 86 + expect(values[0]).not.toBeNull() 87 + 88 + // Should use version-specific timestamp, NOT time.modified 89 + expect(values[0]!.display).toBe('2024-06-15T00:00:00.000Z') 90 + expect(values[0]!.raw).toBe(new Date('2024-06-15T00:00:00.000Z').getTime()) 91 + }) 92 + 93 + it('stores version-specific time in metadata', async () => { 94 + vi.stubGlobal( 95 + '$fetch', 96 + vi.fn().mockImplementation((url: string) => { 97 + if (url.startsWith('https://registry.npmjs.org/')) { 98 + return Promise.resolve({ 99 + 'name': 'test-package', 100 + 'dist-tags': { latest: '1.0.0' }, 101 + 'time': { 102 + 'modified': '2025-01-01T00:00:00.000Z', 103 + '1.0.0': '2023-03-20T00:00:00.000Z', 104 + }, 105 + 'license': 'MIT', 106 + 'versions': { 107 + '1.0.0': { dist: { unpackedSize: 10000 } }, 108 + }, 109 + }) 110 + } 111 + return Promise.resolve(null) 112 + }), 113 + ) 114 + 115 + const { packagesData, status } = await usePackageComparisonInComponent(['test-package']) 116 + 117 + await vi.waitFor(() => { 118 + expect(status.value).toBe('success') 119 + }) 120 + 121 + const metadata = packagesData.value[0]?.metadata 122 + expect(metadata?.lastUpdated).toBe('2023-03-20T00:00:00.000Z') 123 + expect(metadata?.lastUpdated).not.toBe('2025-01-01T00:00:00.000Z') 124 + }) 125 + }) 126 + 127 + describe('staleness detection', () => { 128 + it('marks packages not published in 2+ years as stale', async () => { 129 + vi.stubGlobal( 130 + '$fetch', 131 + vi.fn().mockImplementation((url: string) => { 132 + if (url.startsWith('https://registry.npmjs.org/')) { 133 + return Promise.resolve({ 134 + 'name': 'old-package', 135 + 'dist-tags': { latest: '1.0.0' }, 136 + 'time': { 137 + '1.0.0': '2020-01-01T00:00:00.000Z', // More than 2 years ago 138 + }, 139 + 'license': 'MIT', 140 + 'versions': { 141 + '1.0.0': { dist: { unpackedSize: 5000 } }, 142 + }, 143 + }) 144 + } 145 + return Promise.resolve(null) 146 + }), 147 + ) 148 + 149 + const { status, getFacetValues } = await usePackageComparisonInComponent(['old-package']) 150 + 151 + await vi.waitFor(() => { 152 + expect(status.value).toBe('success') 153 + }) 154 + 155 + const values = getFacetValues('lastUpdated') 156 + expect(values[0]?.status).toBe('warning') 157 + }) 158 + 159 + it('marks recently published packages as neutral', async () => { 160 + vi.stubGlobal( 161 + '$fetch', 162 + vi.fn().mockImplementation((url: string) => { 163 + if (url.startsWith('https://registry.npmjs.org/')) { 164 + return Promise.resolve({ 165 + 'name': 'fresh-package', 166 + 'dist-tags': { latest: '1.0.0' }, 167 + 'time': { 168 + '1.0.0': new Date().toISOString(), // Today 169 + }, 170 + 'license': 'MIT', 171 + 'versions': { 172 + '1.0.0': { dist: { unpackedSize: 5000 } }, 173 + }, 174 + }) 175 + } 176 + return Promise.resolve(null) 177 + }), 178 + ) 179 + 180 + const { status, getFacetValues } = await usePackageComparisonInComponent(['fresh-package']) 181 + 182 + await vi.waitFor(() => { 183 + expect(status.value).toBe('success') 184 + }) 185 + 186 + const values = getFacetValues('lastUpdated') 187 + expect(values[0]?.status).toBe('neutral') 188 + }) 189 + }) 190 + })