From 5ee39275e14324ae81eca19ebba227a444cee9e6 Mon Sep 17 00:00:00 2001
From: Roman
- {{ packageName }}: {{ $t('package.replacement.title') }}
+ {{ packageName }}: {{ $t('package.replacement.title') }}
{{
$t('package.replacement.native', {
- replacement: replacementName,
- nodeVersion: nodeVersion || 'unknown',
+ replacement: replacement.replacement,
+ nodeVersion: replacement.nodeVersion,
})
}}
{{
$t('package.replacement.simple', {
- replacement: replacementName,
+ replacement: replacement.replacement,
community: $t('package.replacement.community'),
})
}}
{{
- $t('package.replacement.documented', { community: $t('package.replacement.community') })
+ $t('package.replacement.documented', {
+ community: $t('package.replacement.community'),
+ })
}}
-
- {{ $t('package.replacement.title') }}
+ {{ $t('package.replacements.title') }}
- {{ $t('package.replacements.title') }}
+ {{ $t('package.replacement.title') }}
{{ replacement.nodeFeatureId.moduleName }}
+ {{ replacement.id }}
- {{ replacement.nodeVersion }}
+ {{ nodeVersion || 'unknown' }}
{{ replacement.nodeFeatureId.moduleName }}
+
+ {{ replacement.nodeFeatureId.moduleName }}
+
+
+ {{ replacement.description }}
+
{{ replacement.id }}
{{ nodeVersion || 'unknown' }}
-
+
+
+
+ {{ replacement.example }}
{
{{ $t('package.replacement.community') }}
-
-
- {{ replacement.id }}
-
- {{ replacement.replacementModule }}
Date: Fri, 13 Mar 2026 22:31:43 +0000
Subject: [PATCH 13/94] [autofix.ci] apply automated fixes
---
app/components/Package/Replacement.vue | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 8551a5441f..1e64c423af 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -59,11 +59,13 @@ const nodeVersion = computed(() => {
{{ replacement.description }}
- Example:
-
+ Example:{{ replacement.example }}
+
- {{ replacement.example }}
+
Date: Fri, 13 Mar 2026 22:55:01 +0000
Subject: [PATCH 14/94] Update Replacement.vue
---
app/components/Package/Replacement.vue | 22 ++++++----------------
1 file changed, 6 insertions(+), 16 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 1e64c423af..5b7865f40d 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -59,23 +59,13 @@ const nodeVersion = computed(() => {
{{ replacement.description }}
- Example:
-
+ {{ replacement.example }}
+
+ {{ replacement.example }}
-
- {{ $t('package.replacement.community') }}
-
-
-
- {{ replacement.nodeFeatureId.moduleName }}
-
-
- {{ replacement.description }}
-
- {{ replacement.id }}
-
-
- {{ nodeVersion || 'unknown' }}
-
-
-
- {{ replacement.example }}{{ replacement.replacementModule }}
-
-
-
- {{ $t('package.replacement.community') }}
-
-
-
-
+ {{ replacement.nodeFeatureId.moduleName }}
+
+
+ {{ replacement.description }}
+
+ {{ replacement.id }}
-
- {{ $t('package.replacement.none') }}
+
+ {{ nodeVersion || 'unknown' }}
-
- {{ $t('package.replacement.learn_more') }}
-
-
-
+ {{ replacement.example }}{{ replacement.replacementModule }}
+
+
+
+ {{ $t('package.replacement.community') }}
+
+
+
+
- {{ replacement.nodeFeatureId.moduleName }}
-
-
- {{ replacement.description }}
-
- {{ replacement.id }}
+ {{ replacementName }}
{{ nodeVersion || 'unknown' }}
{{ replacement.example }}
{{ replacementName }}
+
+ {{ replacement.nodeFeatureId.moduleName }}
+
+
+ {{ replacement.description }}
+
+ {{ replacement.id }}
{{ nodeVersion || 'unknown' }}
{{ replacement.example }}
- {{ replacement.description }}
+
+ {{ replacementDescription }}
{{ replacement.id }}
@@ -44,14 +48,14 @@ const nodeVersion = computed(() => {
scope="global"
>
-
- {{ replacement.description }}
+
+ {{ replacementDescription }}
{{ replacement.id }}
{
- {{ replacement.description }}
+ {{ replacementDescription }}
{{ $t('package.replacement.none') }}
From 12e1b56d3fe7147b75d156f1e58d970127407da6 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Thu, 26 Mar 2026 13:06:13 +0000
Subject: [PATCH 52/94] [autofix.ci] apply automated fixes
---
app/components/Compare/ReplacementSuggestion.vue | 2 +-
app/components/Package/Replacement.vue | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index f72c165699..1bc4a3baed 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -23,7 +23,7 @@ const nodeVersion = computed(() => {
})
const replacementDescription = useMarkdown({
- text: props.replacement.description ?? ''
+ text: props.replacement.description ?? '',
})
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index b2598ff39b..f141d693d2 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -15,7 +15,7 @@ const nodeVersion = computed(() => {
})
const replacementDescription = useMarkdown({
- text: props.replacement.description ?? ''
+ text: props.replacement.description ?? '',
})
From fbed36bceecbec426304781b226ab7ab93552b16 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 13:11:21 +0000
Subject: [PATCH 53/94] revert markdown
---
app/components/Compare/ReplacementSuggestion.vue | 12 ++++--------
app/components/Package/Replacement.vue | 16 ++++++----------
2 files changed, 10 insertions(+), 18 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 1bc4a3baed..9db8e11c68 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -21,10 +21,6 @@ const nodeVersion = computed(() => {
const nodeEngine = props.replacement.engines?.find(e => e.engine === 'nodejs')
return nodeEngine?.minVersion || null
})
-
-const replacementDescription = useMarkdown({
- text: props.replacement.description ?? '',
-})
@@ -47,18 +43,18 @@ const replacementDescription = useMarkdown({
{{
nodeVersion
? $t('package.replacement.native', {
- replacement: replacementDescription || replacement.id,
+ replacement: replacement.description || replacement.id,
nodeVersion,
})
: $t('package.replacement.native_no_version', {
- replacement: replacementDescription || replacement.id,
+ replacement: replacement.description || replacement.id,
})
}}
{{
$t('package.replacement.simple', {
- replacement: replacementDescription,
+ replacement: replacement.description,
community: $t('package.replacement.community'),
})
}}
@@ -72,7 +68,7 @@ const replacementDescription = useMarkdown({
}}
- {{ replacementDescription }}
+ {{ replacement.description }}
- {{ replacementDescription }}
+
+ {{ replacement.description }}
{{ replacement.id }}
@@ -48,14 +44,14 @@ const replacementDescription = useMarkdown({
scope="global"
>
-
- {{ replacementDescription }}
+
+ {{ replacement.description }}
{{ replacement.id }}
- {{ replacementDescription }}
+ {{ replacement.description }}
{{ $t('package.replacement.none') }}
From 2782dc7affd417988c8dccb433f53c9256241db9 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 13:22:40 +0000
Subject: [PATCH 54/94] fix the bug and add e2e test
---
app/composables/useCompareReplacements.ts | 6 +++---
test/e2e/compare-replacements.spec.ts | 26 +++++++++++++++++++++++
2 files changed, 29 insertions(+), 3 deletions(-)
create mode 100644 test/e2e/compare-replacements.spec.ts
diff --git a/app/composables/useCompareReplacements.ts b/app/composables/useCompareReplacements.ts
index 4bf9cdc6f2..f80dc0d440 100644
--- a/app/composables/useCompareReplacements.ts
+++ b/app/composables/useCompareReplacements.ts
@@ -1,4 +1,4 @@
-import type { ModuleReplacement } from 'module-replacements'
+import type { ModuleReplacement, ModuleReplacementMapping } from 'module-replacements'
export interface ReplacementSuggestion {
forPackage: string
@@ -41,8 +41,8 @@ export function useCompareReplacements(packageNames: MaybeRefOrGetter)
const results = await Promise.all(
namesToCheck.map(async name => {
try {
- const replacement = await $fetch(`/api/replacements/${name}`)
- return { name, replacement }
+ const result = await $fetch<{ mapping: ModuleReplacementMapping; replacement: ModuleReplacement } | null>(`/api/replacements/${name}`)
+ return { name, replacement: result?.replacement ?? null }
} catch {
return { name, replacement: null }
}
diff --git a/test/e2e/compare-replacements.spec.ts b/test/e2e/compare-replacements.spec.ts
new file mode 100644
index 0000000000..e81d71a727
--- /dev/null
+++ b/test/e2e/compare-replacements.spec.ts
@@ -0,0 +1,26 @@
+import { expect, test } from './test-utils'
+
+test.describe('Compare page - replacement suggestions', () => {
+ test('shows "Consider no dep?" box for packages with native/simple replacements', async ({
+ page,
+ goto,
+ }) => {
+ // is-odd has a 'simple' replacement in module-replacements v3
+ await goto('/compare?packages=is-odd,is-even', { waitUntil: 'hydration' })
+
+ // The suggestion box should appear after client-side fetch resolves
+ // Button text comes from $t('package.replacement.consider_no_dep')
+ const considerNoDepButton = page.getByRole('button', { name: /consider no dep/i })
+ await expect(considerNoDepButton).toBeVisible({ timeout: 15_000 })
+ })
+
+ test('does not show "Consider no dep?" box for packages without replacements', async ({
+ page,
+ goto,
+ }) => {
+ await goto('/compare?packages=nuxt,vue', { waitUntil: 'hydration' })
+
+ const considerNoDepButton = page.getByRole('button', { name: /consider no dep/i })
+ await expect(considerNoDepButton).not.toBeVisible({ timeout: 10_000 })
+ })
+})
From 1e5d9e33236347b87b8b9046eb8b0e83da584022 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Thu, 26 Mar 2026 13:23:53 +0000
Subject: [PATCH 55/94] [autofix.ci] apply automated fixes
---
app/composables/useCompareReplacements.ts | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/app/composables/useCompareReplacements.ts b/app/composables/useCompareReplacements.ts
index f80dc0d440..784ffb03dc 100644
--- a/app/composables/useCompareReplacements.ts
+++ b/app/composables/useCompareReplacements.ts
@@ -41,7 +41,10 @@ export function useCompareReplacements(packageNames: MaybeRefOrGetter)
const results = await Promise.all(
namesToCheck.map(async name => {
try {
- const result = await $fetch<{ mapping: ModuleReplacementMapping; replacement: ModuleReplacement } | null>(`/api/replacements/${name}`)
+ const result = await $fetch<{
+ mapping: ModuleReplacementMapping
+ replacement: ModuleReplacement
+ } | null>(`/api/replacements/${name}`)
return { name, replacement: result?.replacement ?? null }
} catch {
return { name, replacement: null }
From f6838c5962966bb5ba73c11479da2c22b47538f7 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 13:35:12 +0000
Subject: [PATCH 56/94] remove double period
---
i18n/locales/en.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index ce5d55b26d..6ba3114be8 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -270,7 +270,7 @@
"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}.",
+ "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",
From f44bec61fe806803d1683d5a3f22ff0511e52f28 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 13:41:25 +0000
Subject: [PATCH 57/94] do test differently
---
test/e2e/compare-replacements.spec.ts | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/test/e2e/compare-replacements.spec.ts b/test/e2e/compare-replacements.spec.ts
index e81d71a727..1d4bea9987 100644
--- a/test/e2e/compare-replacements.spec.ts
+++ b/test/e2e/compare-replacements.spec.ts
@@ -5,13 +5,13 @@ test.describe('Compare page - replacement suggestions', () => {
page,
goto,
}) => {
- // is-odd has a 'simple' replacement in module-replacements v3
await goto('/compare?packages=is-odd,is-even', { waitUntil: 'hydration' })
- // The suggestion box should appear after client-side fetch resolves
- // Button text comes from $t('package.replacement.consider_no_dep')
- const considerNoDepButton = page.getByRole('button', { name: /consider no dep/i })
- await expect(considerNoDepButton).toBeVisible({ timeout: 15_000 })
+ const considerNoDepButton = await page.waitForSelector('button[aria-label="Add no dependency column to comparison"]', {
+ timeout: 15_000
+ })
+
+ expect(considerNoDepButton).not.toBeNull()
})
test('does not show "Consider no dep?" box for packages without replacements', async ({
@@ -20,7 +20,10 @@ test.describe('Compare page - replacement suggestions', () => {
}) => {
await goto('/compare?packages=nuxt,vue', { waitUntil: 'hydration' })
- const considerNoDepButton = page.getByRole('button', { name: /consider no dep/i })
- await expect(considerNoDepButton).not.toBeVisible({ timeout: 10_000 })
+ await page.waitForTimeout(10000)
+
+ const considerNoDepButton = await page.querySelector('button[aria-label="Add no dependency column to comparison"]')
+
+ expect(considerNoDepButton).toBeNull()
})
})
From 3f1fb7e858e47404407ad7469f33e30f2f1e0312 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Thu, 26 Mar 2026 13:42:46 +0000
Subject: [PATCH 58/94] [autofix.ci] apply automated fixes
---
test/e2e/compare-replacements.spec.ts | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/test/e2e/compare-replacements.spec.ts b/test/e2e/compare-replacements.spec.ts
index 1d4bea9987..f457dc2a3e 100644
--- a/test/e2e/compare-replacements.spec.ts
+++ b/test/e2e/compare-replacements.spec.ts
@@ -7,10 +7,13 @@ test.describe('Compare page - replacement suggestions', () => {
}) => {
await goto('/compare?packages=is-odd,is-even', { waitUntil: 'hydration' })
- const considerNoDepButton = await page.waitForSelector('button[aria-label="Add no dependency column to comparison"]', {
- timeout: 15_000
- })
-
+ const considerNoDepButton = await page.waitForSelector(
+ 'button[aria-label="Add no dependency column to comparison"]',
+ {
+ timeout: 15_000,
+ },
+ )
+
expect(considerNoDepButton).not.toBeNull()
})
@@ -20,10 +23,12 @@ test.describe('Compare page - replacement suggestions', () => {
}) => {
await goto('/compare?packages=nuxt,vue', { waitUntil: 'hydration' })
- await page.waitForTimeout(10000)
-
- const considerNoDepButton = await page.querySelector('button[aria-label="Add no dependency column to comparison"]')
-
+ await page.waitForTimeout(10000)
+
+ const considerNoDepButton = await page.querySelector(
+ 'button[aria-label="Add no dependency column to comparison"]',
+ )
+
expect(considerNoDepButton).toBeNull()
})
})
From b9ddce5053c539761b847b870a8ac6cfb6d94a93 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 13:46:59 +0000
Subject: [PATCH 59/94] wip
---
test/e2e/compare-replacements.spec.ts | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/test/e2e/compare-replacements.spec.ts b/test/e2e/compare-replacements.spec.ts
index f457dc2a3e..adb67107b3 100644
--- a/test/e2e/compare-replacements.spec.ts
+++ b/test/e2e/compare-replacements.spec.ts
@@ -16,19 +16,4 @@ test.describe('Compare page - replacement suggestions', () => {
expect(considerNoDepButton).not.toBeNull()
})
-
- test('does not show "Consider no dep?" box for packages without replacements', async ({
- page,
- goto,
- }) => {
- await goto('/compare?packages=nuxt,vue', { waitUntil: 'hydration' })
-
- await page.waitForTimeout(10000)
-
- const considerNoDepButton = await page.querySelector(
- 'button[aria-label="Add no dependency column to comparison"]',
- )
-
- expect(considerNoDepButton).toBeNull()
- })
})
From 2257ca30bc306094ceef1d4c75e6a1618c07c6c0 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 16:54:58 +0000
Subject: [PATCH 60/94] update test
---
.../use-compare-replacements.spec.ts | 111 +++++++++++-------
1 file changed, 66 insertions(+), 45 deletions(-)
diff --git a/test/nuxt/composables/use-compare-replacements.spec.ts b/test/nuxt/composables/use-compare-replacements.spec.ts
index fb1ce317fe..8828d8f69f 100644
--- a/test/nuxt/composables/use-compare-replacements.spec.ts
+++ b/test/nuxt/composables/use-compare-replacements.spec.ts
@@ -50,18 +50,21 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/array-includes')) {
return Promise.resolve({
- id: 'Array.prototype.includes',
- type: '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)
+ mapping: { replacements: ['Array.prototype.includes'] },
+ replacement: {
+ id: 'Array.prototype.includes',
+ type: '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)
}),
@@ -86,11 +89,14 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/is-even')) {
return Promise.resolve({
- id: 'snippet::is-even',
- type: 'simple',
- description: 'You can use the modulo operator to check if a number is even.',
- example: '(n % 2) === 0',
- } satisfies ModuleReplacement)
+ mapping: { replacements: ['snippet::is-even'] },
+ replacement: {
+ id: 'snippet::is-even',
+ type: 'simple',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
+ } satisfies ModuleReplacement,
+ })
}
return Promise.resolve(null)
}),
@@ -113,11 +119,14 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/moment')) {
return Promise.resolve({
- id: 'date-fns',
- type: 'documented',
- url: { type: 'e18e', id: 'moment' },
- replacementModule: 'date-fns',
- } satisfies ModuleReplacement)
+ mapping: { replacements: ['date-fns'] },
+ replacement: {
+ id: 'date-fns',
+ type: 'documented',
+ url: { type: 'e18e', id: 'moment' },
+ replacementModule: 'date-fns',
+ } satisfies ModuleReplacement,
+ })
}
return Promise.resolve(null)
}),
@@ -142,30 +151,39 @@ describe('useCompareReplacements', () => {
vi.fn().mockImplementation((url: string) => {
if (url.includes('/api/replacements/is-odd')) {
return Promise.resolve({
- id: 'snippet::is-odd',
- type: 'simple',
- description: 'Check if odd',
- example: '(n % 2) !== 0',
- } satisfies ModuleReplacement)
+ mapping: { replacements: ['snippet::is-odd'] },
+ replacement: {
+ id: 'snippet::is-odd',
+ type: 'simple',
+ description: 'Check if odd',
+ example: '(n % 2) !== 0',
+ } satisfies ModuleReplacement,
+ })
}
if (url.includes('/api/replacements/lodash')) {
return Promise.resolve({
- id: 'native',
- type: 'documented',
- url: { type: 'e18e', id: 'lodash' },
- replacementModule: 'native',
- } satisfies ModuleReplacement)
+ mapping: { replacements: ['native'] },
+ replacement: {
+ id: 'native',
+ type: 'documented',
+ 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',
- url: {
- type: 'mdn',
- id: 'Web/JavaScript/Reference/Global_Objects/Array/map',
- },
- engines: [{ engine: 'nodejs', minVersion: '0.10.0' }],
- } satisfies ModuleReplacement)
+ mapping: { replacements: ['Array.prototype.map'] },
+ replacement: {
+ id: 'Array.prototype.map',
+ type: '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)
}),
@@ -228,11 +246,14 @@ 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',
- description: 'Check even',
- example: '(n % 2) === 0',
- } satisfies ModuleReplacement)
+ mapping: { replacements: ['snippet::is-even'] },
+ replacement: {
+ id: 'snippet::is-even',
+ type: 'simple',
+ description: 'Check even',
+ example: '(n % 2) === 0',
+ } satisfies ModuleReplacement,
+ })
}
return Promise.resolve(null)
})
From d80c709c30b41ac68bb91b6524fabe59477417d2 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 17:43:57 +0000
Subject: [PATCH 61/94] use markdown
---
app/components/Package/Replacement.vue | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 9555ae5e2b..39c2bf1a4b 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -13,6 +13,10 @@ const nodeVersion = computed(() => {
const nodeEngine = props.replacement.engines?.find(e => e.engine === 'nodejs')
return nodeEngine?.minVersion || null
})
+
+const replacementDescription = props.replacement.type === 'documented' ? null : useMarkdown(() => ({
+ text: props.replacement.description ?? '',
+}));
@@ -29,9 +33,7 @@ const nodeVersion = computed(() => {
scope="global"
>
-
- {{ replacement.description }}
-
+
{{ replacement.id }}
@@ -44,14 +46,12 @@ const nodeVersion = computed(() => {
scope="global"
>
-
- {{ replacement.description }}
-
+
{{ replacement.id }}
- {{ replacement.description }}
+
{{ $t('package.replacement.example') }}
{
- {{ replacement.description }}
+
{{ $t('package.replacement.none') }}
From b0ef6d9ef4bfb89d9979f3e3b5f7a87d5f11e8b5 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Thu, 26 Mar 2026 17:45:09 +0000
Subject: [PATCH 62/94] [autofix.ci] apply automated fixes
---
app/components/Package/Replacement.vue | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 39c2bf1a4b..7378b4044c 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -14,9 +14,12 @@ const nodeVersion = computed(() => {
return nodeEngine?.minVersion || null
})
-const replacementDescription = props.replacement.type === 'documented' ? null : useMarkdown(() => ({
- text: props.replacement.description ?? '',
-}));
+const replacementDescription =
+ props.replacement.type === 'documented'
+ ? null
+ : useMarkdown(() => ({
+ text: props.replacement.description ?? '',
+ }))
From e4bcf9e452855b7d6fd59f03a372c62c3156a737 Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 26 Mar 2026 17:48:19 +0000
Subject: [PATCH 63/94] add data-testid
---
app/components/Compare/ReplacementSuggestion.vue | 1 +
app/components/Package/Replacement.vue | 1 +
2 files changed, 2 insertions(+)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 9db8e11c68..513f72a67d 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -31,6 +31,7 @@ const nodeVersion = computed(() => {
? 'bg-amber-500/10 border border-amber-600/30 text-amber-800 dark:text-amber-400'
: 'bg-blue-500/10 border border-blue-600/30 text-blue-700 dark:text-blue-400'
"
+ data-testid="replacement-suggestion-card"
>
From ff85c99464fb8641bd5dc46c2426aee0f436cd4a Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 29 Mar 2026 18:23:08 +0000
Subject: [PATCH 64/94] [autofix.ci] apply automated fixes
---
i18n/locales/vi-VN.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/i18n/locales/vi-VN.json b/i18n/locales/vi-VN.json
index 362f1831f7..92bb594c77 100644
--- a/i18n/locales/vi-VN.json
+++ b/i18n/locales/vi-VN.json
@@ -273,7 +273,6 @@
"none": "Gói này đã được đánh dấu là không còn cần thiết, chức năng của nó có thể đã có sẵn sẵn trong các engine.",
"learn_more": "Tìm hiểu thêm",
"learn_more_above": "Tìm hiểu thêm ở trên.",
- "mdn": "MDN",
"community": "cộng đồng",
"consider_no_dep": "+ Cân nhắc không dùng dep?"
},
From e2a2a696dbda4ed07bfa1f17551b16f120c6dfc2 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 19:23:42 +0100
Subject: [PATCH 65/94] fix
---
app/components/Package/Replacement.vue | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 65ec620637..6b32444180 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -14,11 +14,8 @@ const nodeVersion = computed(() => {
return nodeEngine?.minVersion || null
})
-const replacementDescription =
- props.replacement.type === 'documented'
- ? null
- : useMarkdown(() => ({
- text: props.replacement.description ?? '',
+const replacementDescription =useMarkdown(() => ({
+ text: (props.replacement as {description?:string}).description ?? '',
}))
From be8378f1c2ca7633a4f0820a6cf6daf1dcccbcaa Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 29 Mar 2026 18:24:56 +0000
Subject: [PATCH 66/94] [autofix.ci] apply automated fixes
---
app/components/Package/Replacement.vue | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 6b32444180..1037d9b845 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -14,9 +14,9 @@ const nodeVersion = computed(() => {
return nodeEngine?.minVersion || null
})
-const replacementDescription =useMarkdown(() => ({
- text: (props.replacement as {description?:string}).description ?? '',
- }))
+const replacementDescription = useMarkdown(() => ({
+ text: (props.replacement as { description?: string }).description ?? '',
+}))
From 221e5728e175e242219b2d2f2672270a231012b8 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 19:29:51 +0100
Subject: [PATCH 67/94] wip
---
.../Compare/ReplacementSuggestion.vue | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 513f72a67d..e0a074ef14 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -21,6 +21,10 @@ const nodeVersion = computed(() => {
const nodeEngine = props.replacement.engines?.find(e => e.engine === 'nodejs')
return nodeEngine?.minVersion || null
})
+
+const replacementDescription = useMarkdown(() => ({
+ text: (props.replacement as { description?: string }).description ?? '',
+}))
@@ -41,17 +45,20 @@ const nodeVersion = computed(() => {
{{ packageName }}: {{ $t('package.replacement.title') }}
- {{
- nodeVersion
- ? $t('package.replacement.native', {
+
+ {{$t('package.replacement.native', {
replacement: replacement.description || replacement.id,
nodeVersion,
})
- : $t('package.replacement.native_no_version', {
+ }}
+
+ {{
+ $t('package.replacement.native_no_version', {
replacement: replacement.description || replacement.id,
})
}}
+
{{
$t('package.replacement.simple', {
@@ -69,7 +76,7 @@ const nodeVersion = computed(() => {
}}
- {{ replacement.description }}
+
From 5145d17d2721f602e86b71e34efa9c863e052856 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 29 Mar 2026 18:30:56 +0000
Subject: [PATCH 68/94] [autofix.ci] apply automated fixes
---
.../Compare/ReplacementSuggestion.vue | 28 ++++++++++---------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index e0a074ef14..638fa579dc 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -45,19 +45,21 @@ const replacementDescription = useMarkdown(() => ({
{{ packageName }}: {{ $t('package.replacement.title') }}
-
- {{$t('package.replacement.native', {
- replacement: replacement.description || replacement.id,
- nodeVersion,
- })
- }}
-
- {{
- $t('package.replacement.native_no_version', {
- replacement: replacement.description || replacement.id,
- })
- }}
-
+
+ {{
+ $t('package.replacement.native', {
+ replacement: replacement.description || replacement.id,
+ nodeVersion,
+ })
+ }}
+
+ {{
+ $t('package.replacement.native_no_version', {
+ replacement: replacement.description || replacement.id,
+ })
+ }}
+
{{
From 50447c2ef11e652d702a0231c48a6a933ecd033a Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 19:46:02 +0100
Subject: [PATCH 69/94] use markdown everywhere
---
.../Compare/ReplacementSuggestion.vue | 40 ++++++++-----------
1 file changed, 16 insertions(+), 24 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 638fa579dc..c5d921a989 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -46,36 +46,28 @@ const replacementDescription = useMarkdown(() => ({
- {{
- $t('package.replacement.native', {
- replacement: replacement.description || replacement.id,
- nodeVersion,
- })
- }}
+
+
+ {{ nodeVersion }}
+
- {{
- $t('package.replacement.native_no_version', {
- replacement: replacement.description || replacement.id,
- })
- }}
+
+
+
+
- {{
- $t('package.replacement.simple', {
- replacement: replacement.description,
- community: $t('package.replacement.community'),
- })
- }}
+
+
+ {{ $t('package.replacement.community') }}
+
- {{
- $t('package.replacement.documented', {
- replacement: replacement.replacementModule,
- community: $t('package.replacement.community'),
- })
- }}
+
+
+ {{ $t('package.replacement.community') }}
+
From ba4c9bd41618ee14e140d539e3c460cac7130583 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 21:40:39 +0100
Subject: [PATCH 70/94] fix
---
.../Compare/ReplacementSuggestion.vue | 32 ++++++++++++-------
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index c5d921a989..4ec33bee65 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -44,19 +44,29 @@ const replacementDescription = useMarkdown(() => ({
{{ packageName }}: {{ $t('package.replacement.title') }}
-
-
-
-
- {{ nodeVersion }}
-
+
+
+
+ {{ replacement.id }}
-
-
-
-
+
+ {{ nodeVersion }}
-
+
+
+
+
+ {{ replacement.id }}
+
+
From 06cf980ae674b89ca7348d244e1da08de9e3a93b Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 21:43:11 +0100
Subject: [PATCH 71/94] fix
---
.../Compare/ReplacementSuggestion.vue | 26 ++++++++++++++-----
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 4ec33bee65..f80d6ec2f3 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -73,12 +73,26 @@ const replacementDescription = useMarkdown(() => ({
{{ $t('package.replacement.community') }}
-
-
-
- {{ $t('package.replacement.community') }}
-
-
+
+
+ {{ replacement.replacementModule }}
+
+
+
+ {{ $t('package.replacement.community') }}
+
+
+
+
From 3b01e5e735ab014e5e18ef92ea701ca29bf402b8 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 22:19:44 +0100
Subject: [PATCH 72/94] wip
---
app/components/Package/Replacement.vue | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 1037d9b845..fba9736860 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -34,8 +34,10 @@ const replacementDescription = useMarkdown(() => ({
scope="global"
>
+
{{ replacement.id }}
+
{{ nodeVersion }}
@@ -47,12 +49,16 @@ const replacementDescription = useMarkdown(() => ({
scope="global"
>
+
{{ replacement.id }}
+
-
+
+
+
{{ $t('package.replacement.example') }}
({
+
+
{{ $t('package.replacement.none') }}
From b1d49ce042c94289cea6d289b90af0b66502011d Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 29 Mar 2026 21:20:54 +0000
Subject: [PATCH 73/94] [autofix.ci] apply automated fixes
---
app/components/Package/Replacement.vue | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index fba9736860..d2171b46ef 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -35,8 +35,8 @@ const replacementDescription = useMarkdown(() => ({
>
-
- {{ replacement.id }}
+
+ {{ replacement.id }}
@@ -50,14 +50,14 @@ const replacementDescription = useMarkdown(() => ({
>
-
- {{ replacement.id }}
+
+ {{ replacement.id }}
-
-
+
+
{{ $t('package.replacement.example') }}
@@ -88,7 +88,7 @@ const replacementDescription = useMarkdown(() => ({
-
+
From ab45b5733324090e68adbae4aa4404a99772fd9a Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 23:17:47 +0100
Subject: [PATCH 74/94] use codeblock
---
app/components/Compare/ReplacementSuggestion.vue | 4 ++--
app/components/Package/Replacement.vue | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index f80d6ec2f3..5e0ea0adb7 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -51,7 +51,7 @@ const replacementDescription = useMarkdown(() => ({
>
- {{ replacement.id }}
+ {{ replacement.id }}
{{ nodeVersion }}
@@ -64,7 +64,7 @@ const replacementDescription = useMarkdown(() => ({
>
- {{ replacement.id }}
+ {{ replacement.id }}
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index d2171b46ef..236776814b 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -36,7 +36,7 @@ const replacementDescription = useMarkdown(() => ({
- {{ replacement.id }}
+ {{ replacement.id }}
@@ -51,7 +51,7 @@ const replacementDescription = useMarkdown(() => ({
- {{ replacement.id }}
+ {{ replacement.id }}
From 1c35f1714835462439accfe56b760edc18f9509a Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 29 Mar 2026 22:18:59 +0000
Subject: [PATCH 75/94] [autofix.ci] apply automated fixes
---
app/components/Compare/ReplacementSuggestion.vue | 8 ++++++--
app/components/Package/Replacement.vue | 8 ++++++--
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 5e0ea0adb7..93773d3a4e 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -51,7 +51,9 @@ const replacementDescription = useMarkdown(() => ({
>
- {{ replacement.id }}
+ {{ replacement.id }}
{{ nodeVersion }}
@@ -64,7 +66,9 @@ const replacementDescription = useMarkdown(() => ({
>
- {{ replacement.id }}
+ {{ replacement.id }}
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 236776814b..45763642cd 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -36,7 +36,9 @@ const replacementDescription = useMarkdown(() => ({
- {{ replacement.id }}
+ {{ replacement.id }}
@@ -51,7 +53,9 @@ const replacementDescription = useMarkdown(() => ({
- {{ replacement.id }}
+ {{ replacement.id }}
From 64d3d6802a8bcab3e8c66ad4588cda7985e00831 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 23:35:57 +0100
Subject: [PATCH 76/94] fix
---
app/components/Package/Replacement.vue | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 45763642cd..b82dd960ad 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -28,37 +28,37 @@ const replacementDescription = useMarkdown(() => ({
{{ $t('package.replacement.title') }}
+
-
{{ replacement.id }}
-
{{ nodeVersion }}
+
+
-
{{ replacement.id }}
-
+
From a36d2f39076d71dd0055e8d1716b1078b58a9562 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 29 Mar 2026 22:37:05 +0000
Subject: [PATCH 77/94] [autofix.ci] apply automated fixes
---
app/components/Package/Replacement.vue | 38 ++++++++++----------------
1 file changed, 15 insertions(+), 23 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index b82dd960ad..27724bee2b 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -28,37 +28,29 @@ const replacementDescription = useMarkdown(() => ({
{{ $t('package.replacement.title') }}
-
-
-
+
+
+
{{ replacement.id }}
-
-
- {{ nodeVersion }}
-
-
-
-
-
-
+
+
+ {{ nodeVersion }}
+
+
+
+
+
+
{{ replacement.id }}
-
-
-
+
+
+
From 08a3a90b2d354d0fa599794735209fc9f5ef496d Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 23:48:37 +0100
Subject: [PATCH 78/94] use different strategy
---
app/components/Package/Replacement.vue | 26 ++++++++++----------------
1 file changed, 10 insertions(+), 16 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 27724bee2b..ee53b55cf3 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -28,8 +28,8 @@ const replacementDescription = useMarkdown(() => ({
{{ $t('package.replacement.title') }}
-
-
+
+
({
{{ nodeVersion }}
-
-
-
+
({
>
-
-
-
-
- {{ $t('package.replacement.example') }}
- {{ replacement.example }}
-
({
-
-
{{ $t('package.replacement.none') }}
@@ -100,5 +87,12 @@ const replacementDescription = useMarkdown(() => ({
{{ $t('package.replacement.learn_more') }}
+
+
+ {{ $t('package.replacement.example') }}
+ {{ replacement.example }}
+
From 34082cb255b6a8b35bb7df5f6e7f1264103aca48 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 29 Mar 2026 23:54:45 +0100
Subject: [PATCH 79/94] wip
---
app/components/Package/Replacement.vue | 83 +++++++++++++-------------
1 file changed, 40 insertions(+), 43 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index ee53b55cf3..3dc12a092d 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -48,51 +48,48 @@ const replacementDescription = useMarkdown(() => ({
>
-
+
-
-
-
- {{ replacement.replacementModule }}
-
-
- {{ $t('package.replacement.community') }}
-
-
+
+
+ {{ replacement.replacementModule }}
+
+
+
+ {{ $t('package.replacement.community') }}
+
+
+
+
+
+ {{ $t('package.replacement.none') }}
-
-
-
-
-
- {{ $t('package.replacement.none') }}
-
-
- {{ $t('package.replacement.learn_more') }}
-
-
-
-
- {{ $t('package.replacement.example') }}
- {{ replacement.example }}
-
+
+ {{ $t('package.replacement.learn_more') }}
+
+
+
+
+ {{ $t('package.replacement.example') }}
+ {{ replacement.example }}
+
From d9d422a655ba867bec2fe56bce3aa7fbb37a37fc Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 29 Mar 2026 22:55:55 +0000
Subject: [PATCH 80/94] [autofix.ci] apply automated fixes
---
app/components/Package/Replacement.vue | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index 3dc12a092d..bfff336664 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -29,7 +29,11 @@ const replacementDescription = useMarkdown(() => ({
{{ $t('package.replacement.title') }}
-
+
({
{{ nodeVersion }}
-
+
Date: Sun, 29 Mar 2026 23:59:03 +0100
Subject: [PATCH 81/94] wip
---
app/components/Package/Replacement.vue | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index bfff336664..afdc1585f8 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -56,9 +56,6 @@ const replacementDescription = useMarkdown(() => ({
>
-
-
-
({
+
+
+
+
+
+
{{ $t('package.replacement.none') }}
@@ -93,7 +96,7 @@ const replacementDescription = useMarkdown(() => ({
-
+
{{ $t('package.replacement.example') }}
Date: Mon, 30 Mar 2026 00:00:50 +0100
Subject: [PATCH 82/94] fix
---
app/components/Package/Replacement.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/components/Package/Replacement.vue b/app/components/Package/Replacement.vue
index afdc1585f8..d789228766 100644
--- a/app/components/Package/Replacement.vue
+++ b/app/components/Package/Replacement.vue
@@ -79,7 +79,7 @@ const replacementDescription = useMarkdown(() => ({
-
+
From fcb00889beda86759770f470fdbda0d082e77c5c Mon Sep 17 00:00:00 2001
From: Roman
Date: Thu, 2 Apr 2026 23:31:20 +0100
Subject: [PATCH 83/94] update message
---
i18n/locales/en.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index 5bfa04908a..cb6956a11a 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -268,8 +268,8 @@
"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}.",
+ "native": "This package can be replaced with {replacement}, available since Node {nodeVersion}.",
+ "native_no_version": "This package 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.",
From ccc0b2fe6b4b2d2a4f8848288bd3bdf1458941d5 Mon Sep 17 00:00:00 2001
From: Roman
Date: Fri, 3 Apr 2026 12:27:45 +0100
Subject: [PATCH 84/94] add `getReplacementDescription`
---
app/components/Compare/ReplacementSuggestion.vue | 7 ++++++-
server/api/replacements/[...pkg].get.ts | 1 +
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 93773d3a4e..518704306f 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -22,8 +22,13 @@ const nodeVersion = computed(() => {
return nodeEngine?.minVersion || null
})
+function getReplacementDescription(replacement: ModuleReplacement) {
+ if (replacement.type === 'documented') return ''
+ return props.replacement.description ?? ''
+}
+
const replacementDescription = useMarkdown(() => ({
- text: (props.replacement as { description?: string }).description ?? '',
+ text: getReplacementDescription(props.replacement),
}))
diff --git a/server/api/replacements/[...pkg].get.ts b/server/api/replacements/[...pkg].get.ts
index 147f332cc5..3cabb56268 100644
--- a/server/api/replacements/[...pkg].get.ts
+++ b/server/api/replacements/[...pkg].get.ts
@@ -4,6 +4,7 @@ export default defineEventHandler(
(event): { mapping: ModuleReplacementMapping; replacement: ModuleReplacement } | null => {
const pkg = getRouterParam(event, 'pkg')
if (!pkg) return null
+ if (!Object.hasOwn(all.mappings, pkg)) return null
const mapping = all.mappings[pkg]
if (!mapping) return null
const replacementId = mapping.replacements[0]
From 91e8420eed373360de845cd7c47b8a3579bf18a0 Mon Sep 17 00:00:00 2001
From: Roman
Date: Fri, 3 Apr 2026 12:30:12 +0100
Subject: [PATCH 85/94] fix
---
app/components/Compare/ReplacementSuggestion.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index 518704306f..d191961ba9 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -24,7 +24,7 @@ const nodeVersion = computed(() => {
function getReplacementDescription(replacement: ModuleReplacement) {
if (replacement.type === 'documented') return ''
- return props.replacement.description ?? ''
+ return replacement.description ?? ''
}
const replacementDescription = useMarkdown(() => ({
From 14cb914d645ff3794592336c5a4aea0cbcdb97ca Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 5 Apr 2026 02:44:37 +0000
Subject: [PATCH 86/94] [autofix.ci] apply automated fixes
---
i18n/locales/sr-Latn-RS.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/i18n/locales/sr-Latn-RS.json b/i18n/locales/sr-Latn-RS.json
index ee5f0cb0c3..c015089b8c 100644
--- a/i18n/locales/sr-Latn-RS.json
+++ b/i18n/locales/sr-Latn-RS.json
@@ -273,7 +273,6 @@
"none": "Ovaj paket je označen kao nepotreban, a njegova funkcionalnost je verovatno dostupna izvorno u svim okruženjima.",
"learn_more": "Saznajte više",
"learn_more_above": "Saznajte više iznad.",
- "mdn": "MDN",
"community": "zajednica",
"consider_no_dep": "+ Razmislite bez zavisnosti?"
},
From 0a06767b9f1279f481f92f47b0113a93f7035e8d Mon Sep 17 00:00:00 2001
From: Roman
Date: Tue, 7 Apr 2026 12:08:37 +0100
Subject: [PATCH 87/94] update
---
app/components/Compare/ReplacementSuggestion.vue | 11 ++---------
app/components/Package/Replacement.vue | 8 +++-----
app/composables/useCompareReplacements.ts | 4 ++--
app/utils/module-replacements.ts | 9 +++++++++
4 files changed, 16 insertions(+), 16 deletions(-)
create mode 100644 app/utils/module-replacements.ts
diff --git a/app/components/Compare/ReplacementSuggestion.vue b/app/components/Compare/ReplacementSuggestion.vue
index d191961ba9..4a259356bb 100644
--- a/app/components/Compare/ReplacementSuggestion.vue
+++ b/app/components/Compare/ReplacementSuggestion.vue
@@ -1,6 +1,7 @@
diff --git a/app/composables/useCompareReplacements.ts b/app/composables/useCompareReplacements.ts
index 784ffb03dc..b156a9a745 100644
--- a/app/composables/useCompareReplacements.ts
+++ b/app/composables/useCompareReplacements.ts
@@ -8,13 +8,13 @@ export interface ReplacementSuggestion {
/**
* Replacement types that suggest "no dependency" (can be replaced with native code or inline).
*/
-const NO_DEP_REPLACEMENT_TYPES = ['native', 'simple'] as const
+const NO_DEP_REPLACEMENT_TYPES = ['native', 'simple', 'removal'] as const satisfies ModuleReplacement['type'][]
/**
* Replacement types that are informational only.
* These suggest alternative packages exist but don't fit the "no dependency" pattern.
*/
-const INFO_REPLACEMENT_TYPES = ['documented'] as const
+const INFO_REPLACEMENT_TYPES = ['documented'] as const satisfies ModuleReplacement['type'][]
/**
* Composable for fetching module replacement suggestions for packages in comparison.
diff --git a/app/utils/module-replacements.ts b/app/utils/module-replacements.ts
new file mode 100644
index 0000000000..2413c87408
--- /dev/null
+++ b/app/utils/module-replacements.ts
@@ -0,0 +1,9 @@
+export function getReplacementDescription(replacement: ModuleReplacement) {
+ if (replacement.type === 'documented') return ''
+ return replacement.description ?? ''
+}
+
+export function getReplacementNodeVersion(replacement: ModuleReplacement) {
+ const nodeEngine = replacement.engines?.find(e => e.engine === 'nodejs')
+ return nodeEngine?.minVersion || null
+}
From 64f1aef93f1504d5f64459d2a8b2da43027e1d14 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Tue, 7 Apr 2026 11:09:51 +0000
Subject: [PATCH 88/94] [autofix.ci] apply automated fixes
---
app/composables/useCompareReplacements.ts | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/composables/useCompareReplacements.ts b/app/composables/useCompareReplacements.ts
index b156a9a745..dfb7775ddf 100644
--- a/app/composables/useCompareReplacements.ts
+++ b/app/composables/useCompareReplacements.ts
@@ -8,7 +8,11 @@ export interface ReplacementSuggestion {
/**
* Replacement types that suggest "no dependency" (can be replaced with native code or inline).
*/
-const NO_DEP_REPLACEMENT_TYPES = ['native', 'simple', 'removal'] as const satisfies ModuleReplacement['type'][]
+const NO_DEP_REPLACEMENT_TYPES = [
+ 'native',
+ 'simple',
+ 'removal',
+] as const satisfies ModuleReplacement['type'][]
/**
* Replacement types that are informational only.
From edfd26c44b5611bfc44bc65206d5565dd676ccc1 Mon Sep 17 00:00:00 2001
From: Roman
Date: Tue, 7 Apr 2026 12:12:26 +0100
Subject: [PATCH 89/94] fix
---
app/utils/module-replacements.ts | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/utils/module-replacements.ts b/app/utils/module-replacements.ts
index 2413c87408..c412c85fcf 100644
--- a/app/utils/module-replacements.ts
+++ b/app/utils/module-replacements.ts
@@ -1,9 +1,11 @@
-export function getReplacementDescription(replacement: ModuleReplacement) {
+import type { ModuleReplacement } from 'module-replacements'
+
+export function getReplacementDescription(replacement: ModuleReplacement): string {
if (replacement.type === 'documented') return ''
return replacement.description ?? ''
}
-export function getReplacementNodeVersion(replacement: ModuleReplacement) {
+export function getReplacementNodeVersion(replacement: ModuleReplacement): string | null {
const nodeEngine = replacement.engines?.find(e => e.engine === 'nodejs')
return nodeEngine?.minVersion || null
}
From ecf53745b461369d53148df6eea67a554739c958 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 12 Apr 2026 18:21:53 +0100
Subject: [PATCH 90/94] fix
---
.../composables/use-compare-replacements.spec.ts | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/test/nuxt/composables/use-compare-replacements.spec.ts b/test/nuxt/composables/use-compare-replacements.spec.ts
index 6063756fd3..0f2441e12a 100644
--- a/test/nuxt/composables/use-compare-replacements.spec.ts
+++ b/test/nuxt/composables/use-compare-replacements.spec.ts
@@ -1,6 +1,6 @@
import { afterEach, describe, expect, it, vi } from 'vitest'
import { mountSuspended } from '@nuxt/test-utils/runtime'
-import type { ModuleReplacement } from 'module-replacements'
+import type { ModuleReplacement, SimpleModuleReplacement } from 'module-replacements'
import type { ReplacementSuggestion } from '~/composables/useCompareReplacements'
/**
@@ -234,7 +234,7 @@ describe('useCompareReplacements', () => {
vi.stubGlobal('$fetch', fetchMock)
- const { replacements } = await useCompareReplacementsInComponent(['some-package'])
+ const { noDepSuggestions, infoSuggestions, replacements } = await useCompareReplacementsInComponent(['some-package'])
await vi.waitFor(() => {
expect(fetchMock).toHaveBeenCalledTimes(1)
@@ -254,11 +254,11 @@ describe('useCompareReplacements', () => {
.fn()
.mockRejectedValueOnce(new Error('Temporary network error'))
.mockResolvedValueOnce({
- type: 'simple',
- moduleName: 'is-even',
- replacement: 'Use (n % 2) === 0',
- category: 'micro-utilities',
- } satisfies ModuleReplacement)
+ "id": "snippet::is-even",
+ "type": "simple",
+ "description": "You can use the modulo operator to check if a number is even.",
+ "example": "(n % 2) === 0",
+ } satisfies SimpleModuleReplacement)
vi.stubGlobal('$fetch', fetchMock)
From f433e84dd8ac669659761cf363a073481fbc46e7 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 12 Apr 2026 17:23:05 +0000
Subject: [PATCH 91/94] [autofix.ci] apply automated fixes
---
.../nuxt/composables/use-compare-replacements.spec.ts | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/test/nuxt/composables/use-compare-replacements.spec.ts b/test/nuxt/composables/use-compare-replacements.spec.ts
index 0f2441e12a..ba75054549 100644
--- a/test/nuxt/composables/use-compare-replacements.spec.ts
+++ b/test/nuxt/composables/use-compare-replacements.spec.ts
@@ -234,7 +234,8 @@ describe('useCompareReplacements', () => {
vi.stubGlobal('$fetch', fetchMock)
- const { noDepSuggestions, infoSuggestions, replacements } = await useCompareReplacementsInComponent(['some-package'])
+ const { noDepSuggestions, infoSuggestions, replacements } =
+ await useCompareReplacementsInComponent(['some-package'])
await vi.waitFor(() => {
expect(fetchMock).toHaveBeenCalledTimes(1)
@@ -254,10 +255,10 @@ describe('useCompareReplacements', () => {
.fn()
.mockRejectedValueOnce(new Error('Temporary network error'))
.mockResolvedValueOnce({
- "id": "snippet::is-even",
- "type": "simple",
- "description": "You can use the modulo operator to check if a number is even.",
- "example": "(n % 2) === 0",
+ id: 'snippet::is-even',
+ type: 'simple',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
} satisfies SimpleModuleReplacement)
vi.stubGlobal('$fetch', fetchMock)
From b095180557101950ec7adb7ae8be18eac8473922 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 12 Apr 2026 18:40:05 +0100
Subject: [PATCH 92/94] wip
---
test/nuxt/composables/use-compare-replacements.spec.ts | 1 -
1 file changed, 1 deletion(-)
diff --git a/test/nuxt/composables/use-compare-replacements.spec.ts b/test/nuxt/composables/use-compare-replacements.spec.ts
index ba75054549..bbb12c4301 100644
--- a/test/nuxt/composables/use-compare-replacements.spec.ts
+++ b/test/nuxt/composables/use-compare-replacements.spec.ts
@@ -241,7 +241,6 @@ describe('useCompareReplacements', () => {
expect(fetchMock).toHaveBeenCalledTimes(1)
})
- expect(replacements.value.get('some-package')).toBeNull()
expect(replacements.value.has('some-package')).toBe(false)
expect(noDepSuggestions.value).toHaveLength(0)
expect(infoSuggestions.value).toHaveLength(0)
From d895a21a2bef717ba27085c5805a8bb153380b25 Mon Sep 17 00:00:00 2001
From: Roman
Date: Sun, 12 Apr 2026 19:01:07 +0100
Subject: [PATCH 93/94] fix
---
.../use-compare-replacements.spec.ts | 24 ++++++++++---------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/test/nuxt/composables/use-compare-replacements.spec.ts b/test/nuxt/composables/use-compare-replacements.spec.ts
index bbb12c4301..b14e79ed7c 100644
--- a/test/nuxt/composables/use-compare-replacements.spec.ts
+++ b/test/nuxt/composables/use-compare-replacements.spec.ts
@@ -97,7 +97,7 @@ describe('useCompareReplacements', () => {
type: 'simple',
description: 'You can use the modulo operator to check if a number is even.',
example: '(n % 2) === 0',
- } satisfies ModuleReplacement,
+ } satisfies SimpleModuleReplacement,
})
}
return Promise.resolve(null)
@@ -250,15 +250,17 @@ describe('useCompareReplacements', () => {
describe('caching', () => {
it('retries a package after a transient fetch failure', async () => {
const packageNames = ref(['is-even'])
- const fetchMock = vi
- .fn()
- .mockRejectedValueOnce(new Error('Temporary network error'))
- .mockResolvedValueOnce({
- id: 'snippet::is-even',
- type: 'simple',
- description: 'You can use the modulo operator to check if a number is even.',
- example: '(n % 2) === 0',
- } satisfies SimpleModuleReplacement)
+ const fetchMock = vi.fn()
+ .mockRejectedValueOnce(new Error('Temporary network error'))
+ .mockResolvedValueOnce({
+ mapping: { replacements: ['snippet::is-even'] },
+ replacement: {
+ id: 'snippet::is-even',
+ type: 'simple',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
+ } satisfies SimpleModuleReplacement,
+ })
vi.stubGlobal('$fetch', fetchMock)
@@ -314,7 +316,7 @@ describe('useCompareReplacements', () => {
type: 'simple',
description: 'Check even',
example: '(n % 2) === 0',
- } satisfies ModuleReplacement,
+ } satisfies SimpleModuleReplacement,
})
}
return Promise.resolve(null)
From 887a1319c7deab967b72d2207bfe3aa25db17d83 Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sun, 12 Apr 2026 18:02:17 +0000
Subject: [PATCH 94/94] [autofix.ci] apply automated fixes
---
.../use-compare-replacements.spec.ts | 23 ++++++++++---------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/test/nuxt/composables/use-compare-replacements.spec.ts b/test/nuxt/composables/use-compare-replacements.spec.ts
index b14e79ed7c..4737ae30de 100644
--- a/test/nuxt/composables/use-compare-replacements.spec.ts
+++ b/test/nuxt/composables/use-compare-replacements.spec.ts
@@ -250,17 +250,18 @@ describe('useCompareReplacements', () => {
describe('caching', () => {
it('retries a package after a transient fetch failure', async () => {
const packageNames = ref(['is-even'])
- const fetchMock = vi.fn()
- .mockRejectedValueOnce(new Error('Temporary network error'))
- .mockResolvedValueOnce({
- mapping: { replacements: ['snippet::is-even'] },
- replacement: {
- id: 'snippet::is-even',
- type: 'simple',
- description: 'You can use the modulo operator to check if a number is even.',
- example: '(n % 2) === 0',
- } satisfies SimpleModuleReplacement,
- })
+ const fetchMock = vi
+ .fn()
+ .mockRejectedValueOnce(new Error('Temporary network error'))
+ .mockResolvedValueOnce({
+ mapping: { replacements: ['snippet::is-even'] },
+ replacement: {
+ id: 'snippet::is-even',
+ type: 'simple',
+ description: 'You can use the modulo operator to check if a number is even.',
+ example: '(n % 2) === 0',
+ } satisfies SimpleModuleReplacement,
+ })
vi.stubGlobal('$fetch', fetchMock)