Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions app/components/Package/ZeroDependencies.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<template>
<section aria-labelledby="zero-direct-deps-heading" class="relative">
<div
class="border border-emerald-600/40 bg-emerald-500/10 rounded-lg px-3 py-2 text-base text-emerald-800 dark:text-emerald-400"
>
<h2 id="zero-direct-deps-heading" class="font-medium mb-1 flex items-center gap-2">
<span class="i-lucide:circle-check-big w-4 h-4" aria-hidden="true" />
{{ $t('package.dependencies.zero_dependencies.title') }}
</h2>
<p class="text-sm m-0 mt-1">
{{ $t('package.dependencies.zero_dependencies.description') }}
</p>
</div>
</section>
</template>
11 changes: 11 additions & 0 deletions app/pages/package/[[org]]/[name].vue
Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,15 @@ const hasDependencies = computed(() => {
)
})

const hasZeroDirectDependencies = computed(
() =>
displayVersion.value &&
(!displayVersion.value.dependencies ||
Object.keys(displayVersion.value.dependencies).length === 0) &&
(!displayVersion.value.optionalDependencies ||
Object.keys(displayVersion.value.optionalDependencies).length === 0),
)

// Vulnerability count for the stats banner
const vulnCount = computed(() => vulnTree.value?.totalCounts.total ?? 0)
const hasVulnerabilities = computed(() => vulnCount.value > 0)
Expand Down Expand Up @@ -1384,6 +1393,8 @@ const showSkeleton = shallowRef(false)
<PackageReplacement v-if="moduleReplacement" :replacement="moduleReplacement" />
<!-- Size / dependency increase notice -->
<PackageSizeIncrease v-if="sizeDiff" :diff="sizeDiff" />
<!-- Positive signal: no direct runtime dependencies -->
<PackageZeroDependencies v-if="hasZeroDirectDependencies" />
<!-- Vulnerability scan -->
<ClientOnly>
<PackageVulnerabilityTree
Expand Down
6 changes: 5 additions & 1 deletion i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,11 @@
"outdated_major": "{count} major version behind (latest: {latest}) | {count} major versions behind (latest: {latest})",
"outdated_minor": "{count} minor version behind (latest: {latest}) | {count} minor versions behind (latest: {latest})",
"outdated_patch": "Patch update available (latest: {latest})",
"has_replacement": "This dependency has suggested replacements"
"has_replacement": "This dependency has suggested replacements",
"zero_dependencies": {
"title": "0 dependencies",
"description": "This package can help keep node_modules smaller and reduce the risk of upcoming security issues."
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want to make sure we get the wording right, so will share in the Discord to get some feedback 👀

}
},
"peer_dependencies": {
"title": "Peer Dependency ({count}) | Peer Dependencies ({count})",
Expand Down
6 changes: 5 additions & 1 deletion i18n/locales/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,11 @@
"outdated_major": "落后 {count} 个主要版本(最新:{latest})",
"outdated_minor": "落后 {count} 个次要版本(最新:{latest})",
"outdated_patch": "有可用的补丁更新(最新:{latest})",
"has_replacement": "该依赖有推荐的替代包。"
"has_replacement": "该依赖有推荐的替代包。",
"zero_dependencies": {
"title": "0 个直接依赖",
"description": "这个包有利于你维护更小体积的 node_modules ,并降低未来安全问题的风险。"
}
},
"peer_dependencies": {
"title": "对等依赖({count} 个)",
Expand Down
12 changes: 12 additions & 0 deletions i18n/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,18 @@
},
"has_replacement": {
"type": "string"
},
"zero_dependencies": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
Expand Down
9 changes: 9 additions & 0 deletions test/nuxt/a11y.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@ import PackageTrendsChart from '~/components/Package/TrendsChart.vue'
import FacetBarChart from '~/components/Compare/FacetBarChart.vue'
import PackageLikeCard from '~/components/Package/LikeCard.vue'
import SizeIncrease from '~/components/Package/SizeIncrease.vue'
import PackageZeroDependencies from '~/components/Package/ZeroDependencies.vue'

describe('component accessibility audits', () => {
describe('DateTime', () => {
Expand Down Expand Up @@ -3529,6 +3530,14 @@ describe('component accessibility audits', () => {
expect(results.violations).toEqual([])
})
})

describe('PackageZeroDependencies', () => {
it('should have no accessibility violations', async () => {
const component = await mountSuspended(PackageZeroDependencies)
const results = await runAxe(component)
expect(results.violations).toEqual([])
})
})
})

function applyTheme(colorMode: string, bgTheme: string | null) {
Expand Down
Loading