@@ -36,7 +36,10 @@ onMounted(() => {
3636
3737const { packageName, requestedVersion } = usePackageRoute ()
3838
39- const { data : resolvedVersion, status : resolvedStatus } = await useResolvedVersion (packageName , requestedVersion )
39+ const { data : resolvedVersion, status : resolvedStatus } = await useResolvedVersion (
40+ packageName ,
41+ requestedVersion ,
42+ )
4043
4144if (import .meta .server ) {
4245 assertValidPackageName (packageName .value )
@@ -164,7 +167,11 @@ const { data: skillsData } = useLazyFetch<SkillsListResponse>(
164167const { data : packageAnalysis } = usePackageAnalysis (packageName , requestedVersion )
165168const { data : moduleReplacement } = useModuleReplacement (packageName )
166169
167- if (import .meta .server && ! resolvedVersion .value && [' success' , ' error' ].includes (resolvedStatus .value )) {
170+ if (
171+ import .meta .server &&
172+ ! resolvedVersion .value &&
173+ [' success' , ' error' ].includes (resolvedStatus .value )
174+ ) {
168175 throw createError ({
169176 statusCode: 404 ,
170177 statusMessage: $t (' package.not_found' ),
@@ -186,7 +193,11 @@ watch(
186193 { immediate: true },
187194)
188195
189- const { data : pkg, status, error } = usePackage (packageName , () => resolvedVersion .value ?? requestedVersion .value )
196+ const {
197+ data : pkg,
198+ status,
199+ error,
200+ } = usePackage (packageName , () => resolvedVersion .value ?? requestedVersion .value )
190201
191202const { diff : sizeDiff } = useInstallSizeDiff (packageName , resolvedVersion , pkg , installSize )
192203
@@ -204,7 +215,9 @@ const route = useRoute()
204215// immediate is set once at mount — skipped requests won't re-fire on navigation, leaving data permanently missing.
205216const isVersionsRoute = computed (() => route .name === ' package-versions' )
206217const hasEmptyPayload =
207- import .meta .client && nuxtApp .payload .serverRendered && ! Object .keys (nuxtApp .payload .data ?? {}).length
218+ import .meta .client &&
219+ nuxtApp .payload .serverRendered &&
220+ ! Object .keys (nuxtApp .payload .data ?? {}).length
208221const isSpaFallback = shallowRef (nuxtApp .isHydrating && hasEmptyPayload && ! nuxtApp .payload .path )
209222const isHydratingWithServerContent = shallowRef (
210223 nuxtApp .isHydrating && hasEmptyPayload && nuxtApp .payload .path === route .path ,
@@ -215,7 +228,9 @@ const hasServerContentOnly = shallowRef(hasEmptyPayload && nuxtApp.payload.path
215228// DOM before Vue's hydration replaces it. This lets us show the server-rendered
216229// HTML as a static snapshot while data refetches, avoiding any visual flash.
217230const serverRenderedHtml = shallowRef <string | null >(
218- hasServerContentOnly .value ? (document .getElementById (' package-article' )?.innerHTML ?? null ) : null ,
231+ hasServerContentOnly .value
232+ ? (document .getElementById (' package-article' )?.innerHTML ?? null )
233+ : null ,
219234)
220235
221236if (isSpaFallback .value || isHydratingWithServerContent .value ) {
@@ -246,7 +261,10 @@ const pkgDescription = useMarkdown(() => ({
246261
247262// Fetch dependency analysis (lazy, client-side)
248263// This is the same composable used by PackageVulnerabilityTree and PackageDeprecatedTree
249- const { data : vulnTree, status : vulnTreeStatus } = useDependencyAnalysis (packageName , () => resolvedVersion .value ?? ' ' )
264+ const { data : vulnTree, status : vulnTreeStatus } = useDependencyAnalysis (
265+ packageName ,
266+ () => resolvedVersion .value ?? ' ' ,
267+ )
250268
251269const {
252270 data : provenanceData,
@@ -267,7 +285,7 @@ const {
267285if (import .meta .client ) {
268286 watch (
269287 displayVersion ,
270- ( v ) => {
288+ v => {
271289 if (v && hasProvenance (v ) && provenanceStatus .value === ' idle' ) {
272290 fetchProvenance ()
273291 }
@@ -313,7 +331,9 @@ const publishSecurityDowngrade = computed(() => {
313331 return detectPublishSecurityDowngradeForVersion (versionSecurityMetadata .value , currentVersion )
314332})
315333
316- const installVersionOverride = computed (() => publishSecurityDowngrade .value ?.trustedVersion ?? null )
334+ const installVersionOverride = computed (
335+ () => publishSecurityDowngrade .value ?.trustedVersion ?? null ,
336+ )
317337
318338const downgradeFallbackInstallText = computed (() => {
319339 const d = publishSecurityDowngrade .value
@@ -435,7 +455,9 @@ const canonicalUrl = computed(() => {
435455})
436456
437457// URL pattern for version selector - includes file path if present
438- const versionUrlPattern = computed (() => ` /package/${pkg .value ?.name || packageName .value }/v/{version} ` )
458+ const versionUrlPattern = computed (
459+ () => ` /package/${pkg .value ?.name || packageName .value }/v/{version} ` ,
460+ )
439461
440462const dependencyCount = computed (() => getDependencyCount (displayVersion .value ))
441463
@@ -475,7 +497,9 @@ const showSkeleton = shallowRef(false)
475497 <main v-if =" !isVersionsRoute" class =" flex-1 pb-8" >
476498 <!-- Scenario 1: SPA fallback — show skeleton (no real content to preserve) -->
477499 <!-- Scenario 2: SSR with missing payload — preserve server DOM, skip skeleton -->
478- <PackageSkeleton v-if =" isSpaFallback || (!hasServerContentOnly && (showSkeleton || status === 'pending'))" />
500+ <PackageSkeleton
501+ v-if =" isSpaFallback || (!hasServerContentOnly && (showSkeleton || status === 'pending'))"
502+ />
479503
480504 <!-- During hydration without payload, show captured server HTML as a static snapshot.
481505 This avoids a visual flash: the user sees the server content while data refetches.
@@ -576,13 +600,17 @@ const showSkeleton = shallowRef(false)
576600 <template v-if =" dependencyCount > 0 && dependencyCount !== totalDepsCount " >
577601 <ClientOnly >
578602 <span
579- v-if =" vulnTreeStatus === 'pending' || (installSizeStatus === 'pending' && !vulnTree)"
603+ v-if ="
604+ vulnTreeStatus === 'pending' ||
605+ (installSizeStatus === 'pending' && !vulnTree)
606+ "
580607 class =" inline-flex items-center gap-1 text-fg-subtle"
581608 >
582609 (<span class =" i-svg-spinners:ring-resize w-3 h-3" aria-hidden =" true" />)
583610 </span >
584611 <span v-else-if =" totalDepsCount !== null"
585- ><span class =" text-fg-subtle" >(</span >{{ numberFormatter.format(totalDepsCount)
612+ ><span class =" text-fg-subtle" >(</span
613+ >{{ numberFormatter.format(totalDepsCount)
586614 }}<span class =" text-fg-subtle" >)</span ></span
587615 >
588616 <span v-else class =" text-fg-subtle" >(-)</span >
@@ -640,11 +668,15 @@ const showSkeleton = shallowRef(false)
640668 <!-- Total install size in parens -->
641669 <template v-if =" displayVersion ?.dist ?.unpackedSize !== installSize ?.totalSize " >
642670 <span class =" ms-1" >
643- <span v-if =" installSizeStatus === 'pending'" class =" inline-flex items-center gap-1 text-fg-subtle" >
671+ <span
672+ v-if =" installSizeStatus === 'pending'"
673+ class =" inline-flex items-center gap-1 text-fg-subtle"
674+ >
644675 (<span class =" i-svg-spinners:ring-resize w-3 h-3" aria-hidden =" true" />)
645676 </span >
646677 <span v-else-if =" installSize?.totalSize" dir =" ltr" >
647- <span class =" text-fg-subtle" >(</span >{{ bytesFormatter.format(installSize.totalSize)
678+ <span class =" text-fg-subtle" >(</span
679+ >{{ bytesFormatter.format(installSize.totalSize)
648680 }}<span class =" text-fg-subtle" >)</span >
649681 </span >
650682 <span v-else class =" text-fg-subtle" >(-)</span >
@@ -678,7 +710,10 @@ const showSkeleton = shallowRef(false)
678710 </dd >
679711 </div >
680712
681- <div v-if =" resolvedVersion && pkg.time?.[resolvedVersion]" class =" space-y-1 sm:col-span-2" >
713+ <div
714+ v-if =" resolvedVersion && pkg.time?.[resolvedVersion]"
715+ class =" space-y-1 sm:col-span-2"
716+ >
682717 <dt
683718 class =" text-xs text-fg-subtle uppercase tracking-wider"
684719 :title ="
@@ -716,21 +751,32 @@ const showSkeleton = shallowRef(false)
716751 <PackageManagerSelect />
717752 </div >
718753 <div >
719- <TerminalExecute :package-name =" pkg.name" :jsr-info =" jsrInfo" :is-create-package =" isCreatePkg" />
754+ <TerminalExecute
755+ :package-name =" pkg.name"
756+ :jsr-info =" jsrInfo"
757+ :is-create-package =" isCreatePkg"
758+ />
720759 </div >
721760 </section >
722761
723762 <!-- Regular packages: Install command with optional run command -->
724763 <section v-else id =" get-started" class =" scroll-mt-20" :class =" $style.areaInstall" >
725764 <div class =" flex flex-wrap items-center justify-between mb-3" >
726- <h2 id =" get-started-heading" class =" group text-xs text-fg-subtle uppercase tracking-wider" >
765+ <h2
766+ id =" get-started-heading"
767+ class =" group text-xs text-fg-subtle uppercase tracking-wider"
768+ >
727769 <LinkBase to =" #get-started" >
728770 {{ $t('package.get_started.title') }}
729771 </LinkBase >
730772 </h2 >
731773 <!-- Package manager dropdown + Download button -->
732774 <div class =" flex items-center gap-2" >
733- <PackageDownloadButton v-if =" displayVersion" :package-name =" pkg.name" :version =" displayVersion" />
775+ <PackageDownloadButton
776+ v-if =" displayVersion"
777+ :package-name =" pkg.name"
778+ :version =" displayVersion"
779+ />
734780 <PackageManagerSelect />
735781 </div >
736782 </div >
@@ -823,7 +869,9 @@ const showSkeleton = shallowRef(false)
823869 </div >
824870 <TerminalInstall
825871 :package-name =" pkg.name"
826- :requested-version =" requestedVersion && requestedVersion !== 'latest' ? resolvedVersion : null"
872+ :requested-version ="
873+ requestedVersion && requestedVersion !== 'latest' ? resolvedVersion : null
874+ "
827875 :install-version-override =" installVersionOverride"
828876 :jsr-info =" jsrInfo"
829877 :dev-dependency-suggestion =" packageAnalysis?.devDependencySuggestion"
@@ -841,7 +889,11 @@ const showSkeleton = shallowRef(false)
841889 <PackageSizeIncrease v-if =" sizeDiff" :diff =" sizeDiff" />
842890 <!-- Vulnerability scan -->
843891 <ClientOnly >
844- <PackageVulnerabilityTree v-if =" resolvedVersion" :package-name =" pkg.name" :version =" resolvedVersion" />
892+ <PackageVulnerabilityTree
893+ v-if =" resolvedVersion"
894+ :package-name =" pkg.name"
895+ :version =" resolvedVersion"
896+ />
845897 <PackageDeprecatedTree
846898 v-if =" resolvedVersion"
847899 :package-name =" pkg.name"
@@ -878,7 +930,11 @@ const showSkeleton = shallowRef(false)
878930 <PackageHealthScore :package-name =" pkg.name" :version =" resolvedVersion || undefined" />
879931
880932 <!-- Download stats -->
881- <PackageWeeklyDownloadStats :packageName :createdIso =" pkg?.time?.created ?? null" :repoRef =" repoRef" />
933+ <PackageWeeklyDownloadStats
934+ :packageName
935+ :createdIso =" pkg?.time?.created ?? null"
936+ :repoRef =" repoRef"
937+ />
882938
883939 <!-- Playground links -->
884940 <PackagePlaygrounds v-if =" playgroundLinks.length" :links =" playgroundLinks" />
@@ -937,13 +993,19 @@ const showSkeleton = shallowRef(false)
937993 </h2 >
938994 <div class =" flex gap-2" >
939995 <!-- Copy readme as Markdown button -->
940- <TooltipApp v-if =" readmeData?.mdExists" :text =" $t('package.readme.copy_as_markdown')" position =" bottom" >
996+ <TooltipApp
997+ v-if =" readmeData?.mdExists"
998+ :text =" $t('package.readme.copy_as_markdown')"
999+ position =" bottom"
1000+ >
9411001 <ButtonBase
9421002 @mouseenter =" prefetchReadmeMarkdown"
9431003 @focus =" prefetchReadmeMarkdown"
9441004 @click =" copyReadmeHandler()"
9451005 :aria-pressed =" copiedReadme"
946- :aria-label =" copiedReadme ? $t('common.copied') : $t('package.readme.copy_as_markdown')"
1006+ :aria-label ="
1007+ copiedReadme ? $t('common.copied') : $t('package.readme.copy_as_markdown')
1008+ "
9471009 :classicon =" copiedReadme ? 'i-lucide:check' : 'i-simple-icons:markdown'"
9481010 >
9491011 {{ copiedReadme ? $t('common.copied') : $t('common.copy') }}
@@ -972,14 +1034,28 @@ const showSkeleton = shallowRef(false)
9721034 >
9731035 </p >
9741036
975- <section v-if =" hasProvenance(displayVersion) && isMounted" id =" provenance" class =" scroll-mt-20" >
976- <div v-if =" provenanceStatus === 'pending'" class =" mt-8 flex items-center gap-2 text-fg-subtle text-sm" >
1037+ <section
1038+ v-if =" hasProvenance(displayVersion) && isMounted"
1039+ id =" provenance"
1040+ class =" scroll-mt-20"
1041+ >
1042+ <div
1043+ v-if =" provenanceStatus === 'pending'"
1044+ class =" mt-8 flex items-center gap-2 text-fg-subtle text-sm"
1045+ >
9771046 <span class =" i-svg-spinners:ring-resize w-4 h-4" aria-hidden =" true" />
9781047 <span >{{ $t('package.provenance_section.title') }}…</span >
9791048 </div >
980- <PackageProvenanceSection v-else-if =" provenanceData" :details =" provenanceData" class =" mt-8" />
1049+ <PackageProvenanceSection
1050+ v-else-if =" provenanceData"
1051+ :details =" provenanceData"
1052+ class =" mt-8"
1053+ />
9811054 <!-- Error state: provenance exists but details failed to load -->
982- <div v-else-if =" provenanceStatus === 'error'" class =" mt-8 flex items-center gap-2 text-fg-subtle text-sm" >
1055+ <div
1056+ v-else-if =" provenanceStatus === 'error'"
1057+ class =" mt-8 flex items-center gap-2 text-fg-subtle text-sm"
1058+ >
9831059 <span class =" i-lucide:circle-alert w-4 h-4" aria-hidden =" true" />
9841060 <span >{{ $t('package.provenance_section.error_loading') }}</span >
9851061 </div >
@@ -1000,7 +1076,9 @@ const showSkeleton = shallowRef(false)
10001076 <p class =" text-fg-muted mb-8" >
10011077 {{ error?.message ?? $t('package.not_found_message') }}
10021078 </p >
1003- <LinkBase variant =" button-secondary" :to =" { name: 'index' }" >{{ $t('common.go_back_home') }}</LinkBase >
1079+ <LinkBase variant =" button-secondary" :to =" { name: 'index' }" >{{
1080+ $t('common.go_back_home')
1081+ }}</LinkBase >
10041082 </div >
10051083 </main >
10061084</template >
0 commit comments