diff --git a/app/components/Package/ZeroDependencies.vue b/app/components/Package/ZeroDependencies.vue new file mode 100644 index 0000000000..e6cf393acc --- /dev/null +++ b/app/components/Package/ZeroDependencies.vue @@ -0,0 +1,15 @@ + + + + + + {{ $t('package.dependencies.zero_dependencies.title') }} + + + {{ $t('package.dependencies.zero_dependencies.description') }} + + + + diff --git a/app/pages/package/[[org]]/[name].vue b/app/pages/package/[[org]]/[name].vue index a57774f110..411f09217f 100644 --- a/app/pages/package/[[org]]/[name].vue +++ b/app/pages/package/[[org]]/[name].vue @@ -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) @@ -1384,6 +1393,8 @@ const showSkeleton = shallowRef(false) + + { describe('DateTime', () => { @@ -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) {
+ {{ $t('package.dependencies.zero_dependencies.description') }} +