Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
5ee3927
Update module-replacements dependency to 3.0.0-beta.0
gameroman Mar 13, 2026
49dd770
Update [...pkg].get.ts
gameroman Mar 13, 2026
f276037
wip
gameroman Mar 13, 2026
e528c90
use a simpler approach
gameroman Mar 13, 2026
ad27978
revert
gameroman Mar 13, 2026
59ac18c
wip
gameroman Mar 13, 2026
6422b11
wip
gameroman Mar 13, 2026
3ecebf0
Update use-replacement-dependencies.spec.ts
gameroman Mar 13, 2026
7d4198b
Update use-replacement-dependencies.spec.ts
gameroman Mar 13, 2026
1e94e2d
Update use-replacement-dependencies.spec.ts
gameroman Mar 13, 2026
7ae1a63
Update use-replacement-dependencies.spec.ts
gameroman Mar 13, 2026
8e8882b
Update Replacement.vue
gameroman Mar 13, 2026
1c72e05
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 13, 2026
a36b4ce
Update Replacement.vue
gameroman Mar 13, 2026
2464a08
Update Replacement.vue
gameroman Mar 13, 2026
d6f4b0b
update tests
gameroman Mar 13, 2026
83102e3
Update use-compare-replacements.spec.ts
gameroman Mar 13, 2026
363aa2a
Update use-compare-replacements.spec.ts
gameroman Mar 13, 2026
b30c0fd
Update use-compare-replacements.spec.ts
gameroman Mar 13, 2026
c1f52f2
Update use-compare-replacements.spec.ts
gameroman Mar 13, 2026
e346d83
Update a11y.spec.ts
gameroman Mar 13, 2026
f89546e
wip
gameroman Mar 14, 2026
74eee66
Revert "wip"
gameroman Mar 14, 2026
a95b7a0
Update ReplacementSuggestion.vue
gameroman Mar 14, 2026
b60b234
Update ReplacementSuggestion.vue
gameroman Mar 14, 2026
7207e50
Update en.json
gameroman Mar 14, 2026
9e742ab
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 14, 2026
e365d7e
Update schema.json
gameroman Mar 14, 2026
63417bf
create resolveReplacementUrl util
gameroman Mar 14, 2026
93babd2
wip
gameroman Mar 14, 2026
03584bd
don't render 'unknown'
gameroman Mar 14, 2026
375bd0a
fix
gameroman Mar 14, 2026
7ad1a05
Update Replacement.vue
gameroman Mar 14, 2026
bfd7ce1
Update schema.json
gameroman Mar 14, 2026
2c69f4e
Update useCompareReplacements.ts
gameroman Mar 14, 2026
e16308c
Update useCompareReplacements.ts
gameroman Mar 14, 2026
01d39ff
Merge branch 'main' into module-replacements-v3
gameroman Mar 16, 2026
53aeaf6
fix: use url from mapping when provided
gameroman Mar 16, 2026
3eeb9cf
fix: add missing imports
gameroman Mar 16, 2026
0eda816
fix: update tests
gameroman Mar 16, 2026
07bd1ba
fix: correctly format files
gameroman Mar 16, 2026
25f99e6
fix
gameroman Mar 16, 2026
55abc67
tests: add package replacement tests
gameroman Mar 16, 2026
fcd16fb
Merge branch 'main' into module-replacements-v3
gameroman Mar 18, 2026
c4ef9dd
fix: resolve git confilcts
gameroman Mar 18, 2026
f6161b8
Merge branch 'main' into module-replacements-v3
gameroman Mar 18, 2026
6133408
Merge branch 'main' into module-replacements-v3
gameroman Mar 24, 2026
0df272e
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 24, 2026
227f7eb
Merge branch 'main' into module-replacements-v3
gameroman Mar 25, 2026
b86fbff
Merge branch 'main' into module-replacements-v3
gameroman Mar 25, 2026
4041dbd
update module-replacements
gameroman Mar 25, 2026
65d1a87
Use resolveDocUrl
gameroman Mar 25, 2026
bcf3ed9
3.0.0-beta.4
gameroman Mar 25, 2026
d1ca961
Merge branch 'main' into module-replacements-v3
gameroman Mar 25, 2026
2f6de9e
revert incorrect i18n changes
gameroman Mar 26, 2026
503f2ed
fix
gameroman Mar 26, 2026
ac522de
fix
gameroman Mar 26, 2026
96accb3
Merge branch 'main' into module-replacements-v3
gameroman Mar 26, 2026
46af065
use markdown
gameroman Mar 26, 2026
12e1b56
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 26, 2026
fbed36b
revert markdown
gameroman Mar 26, 2026
2782dc7
fix the bug and add e2e test
gameroman Mar 26, 2026
1e5d9e3
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 26, 2026
f6838c5
remove double period
gameroman Mar 26, 2026
f44bec6
do test differently
gameroman Mar 26, 2026
3f1fb7e
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 26, 2026
b9ddce5
wip
gameroman Mar 26, 2026
2257ca3
update test
gameroman Mar 26, 2026
d80c709
use markdown
gameroman Mar 26, 2026
b0ef6d9
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 26, 2026
e4bcf9e
add data-testid
gameroman Mar 26, 2026
4dec509
Merge branch 'main' into module-replacements-v3
gameroman Mar 29, 2026
ff85c99
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 29, 2026
e2a2a69
fix
gameroman Mar 29, 2026
be8378f
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 29, 2026
221e572
wip
gameroman Mar 29, 2026
5145d17
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 29, 2026
50447c2
use markdown everywhere
gameroman Mar 29, 2026
ba4c9bd
fix
gameroman Mar 29, 2026
06cf980
fix
gameroman Mar 29, 2026
3b01e5e
wip
gameroman Mar 29, 2026
b1d49ce
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 29, 2026
ab45b57
use codeblock
gameroman Mar 29, 2026
1c35f17
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 29, 2026
64d3d68
fix
gameroman Mar 29, 2026
a36d2f3
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 29, 2026
08a3a90
use different strategy
gameroman Mar 29, 2026
34082cb
wip
gameroman Mar 29, 2026
d9d422a
[autofix.ci] apply automated fixes
autofix-ci[bot] Mar 29, 2026
aab96cc
wip
gameroman Mar 29, 2026
02f622f
fix
gameroman Mar 29, 2026
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
88 changes: 64 additions & 24 deletions app/components/Compare/ReplacementSuggestion.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import type { ModuleReplacement } from 'module-replacements'
import { resolveDocUrl } from 'module-replacements'

const props = defineProps<{
packageName: string
Expand All @@ -14,10 +15,16 @@ const emit = defineEmits<{
addNoDep: []
}>()

const docUrl = computed(() => {
if (props.replacement.type !== 'documented' || !props.replacement.docPath) return null
return `https://e18e.dev/docs/replacements/${props.replacement.docPath}.html`
const docUrl = computed(() => resolveDocUrl(props.replacement.url))

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 ?? '',
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

What do you think of using a type guard instead of relying in casting ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

description is either undefined or a string so it can't be anything else

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

i think he means this which is safer than casting:

const description = props.replacement.type !== 'preferred' ? props.replacement.description : undefined;
return {text: description ?? ''};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Yeah exactly trying to make the code more typesafe to refactors etc

}))
</script>

<template>
Expand All @@ -28,6 +35,7 @@ const docUrl = 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"
>
<span
class="w-4 h-4 flex-shrink-0 mt-0.5"
Expand All @@ -36,33 +44,65 @@ const docUrl = computed(() => {
<div class="min-w-0 flex-1">
<p class="font-medium">{{ packageName }}: {{ $t('package.replacement.title') }}</p>
<p class="text-xs mt-0.5 opacity-80">
<template v-if="replacement.type === 'native'">
{{
$t('package.replacement.native', {
replacement: replacement.replacement,
nodeVersion: replacement.nodeVersion,
})
}}
</template>
<i18n-t
v-if="nodeVersion && replacement.type === 'native'"
keypath="package.replacement.native"
scope="global"
>
<template #replacement>
<span v-if="replacementDescription" v-html="replacementDescription" />
<span v-else
><code>{{ replacement.id }}</code></span
>
</template>
<template #nodeVersion>
{{ nodeVersion }}
</template>
</i18n-t>
<i18n-t
v-else-if="replacement.type === 'native'"
keypath="package.replacement.native_no_version"
scope="global"
>
<template #replacement>
<span v-if="replacementDescription" v-html="replacementDescription" />
<span v-else
><code>{{ replacement.id }}</code></span
>
</template>
</i18n-t>
<template v-else-if="replacement.type === 'simple'">
{{
$t('package.replacement.simple', {
replacement: replacement.replacement,
community: $t('package.replacement.community'),
})
}}
<i18n-t keypath="package.replacement.simple">
<template #replacement><span v-html="replacementDescription" /></template>
<template #community>{{ $t('package.replacement.community') }}</template>
</i18n-t>
</template>
<template v-else-if="replacement.type === 'documented'">
{{
$t('package.replacement.documented', {
community: $t('package.replacement.community'),
})
}}
<i18n-t
v-else-if="replacement.type === 'documented'"
keypath="package.replacement.documented"
scope="global"
>
<template #replacement>
<code>{{ replacement.replacementModule }}</code>
</template>
<template #community>
<a
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I think we should use NuxtLink but what do you think ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I think NuxtLink is for internal links?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

It also works for external links as far as I know

https://nuxt.com/docs/4.x/api/components/nuxt-link#external-routing

href="https://e18e.dev/docs/replacements/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-1 ms-1 underline underline-offset-4 decoration-amber-600/60 dark:decoration-amber-400/50 hover:decoration-fg transition-colors"
>
{{ $t('package.replacement.community') }}
<span class="i-lucide:external-link w-3 h-3" aria-hidden="true" />
</a>
</template>
</i18n-t>
<template v-else-if="replacement.type === 'removal'">
<span v-html="replacementDescription" />
</template>
</p>
</div>

<!-- No dependency action button -->
<ButtonBase
v-if="variant === 'nodep' && showAction !== false"
size="sm"
Expand Down
80 changes: 42 additions & 38 deletions app/components/Package/Replacement.vue
Original file line number Diff line number Diff line change
@@ -1,67 +1,69 @@
<script setup lang="ts">
import type { ModuleReplacement } from 'module-replacements'
import type { ModuleReplacement, ModuleReplacementMapping } from 'module-replacements'
import { resolveDocUrl } from 'module-replacements'

const props = defineProps<{
mapping: ModuleReplacementMapping
replacement: ModuleReplacement
}>()

const mdnUrl = computed(() => {
if (props.replacement.type !== 'native' || !props.replacement.mdnPath) return null
return `https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/${props.replacement.mdnPath}`
})
const externalUrl = computed(() => resolveDocUrl(props.mapping.url ?? props.replacement.url))

const docPath = computed(() => {
if (props.replacement.type !== 'documented' || !props.replacement.docPath) return null
return `https://e18e.dev/docs/replacements/${props.replacement.docPath}.html`
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 ?? '',
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

we should probably just have a shared function in this repo that computes the description:

function getReplacementDescription(replacement) {
  switch (replacement.type) {
    case 'documented':
      return undefined;
    default:
      return replacement.description;
  }
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Should that be in module-replacements itself since it might be useful for other consumers too or just here?

}))
</script>

<template>
<div
class="border border-amber-600/40 bg-amber-500/10 rounded-lg px-3 py-2 text-base text-amber-800 dark:text-amber-400"
data-testid="replacement-card"
>
<h2 class="font-medium mb-1 flex items-center gap-2">
<span class="i-lucide:lightbulb w-4 h-4" aria-hidden="true" />
{{ $t('package.replacement.title') }}
</h2>
<p class="text-sm m-0">
<p>
<i18n-t
v-if="replacement.type === 'native'"
v-if="nodeVersion && replacement.type === 'native'"
keypath="package.replacement.native"
scope="global"
>
<template #replacement>
{{ replacement.replacement }}
<span v-if="replacementDescription" v-html="replacementDescription" />
<span v-else
><code>{{ replacement.id }}</code></span
>
</template>
<template #nodeVersion>
{{ replacement.nodeVersion }}
{{ nodeVersion }}
</template>
</i18n-t>
<i18n-t
v-else-if="replacement.type === 'simple'"
keypath="package.replacement.simple"
v-else-if="replacement.type === 'native'"
keypath="package.replacement.native_no_version"
scope="global"
>
<template #community>
<a
href="https://e18e.dev/docs/replacements/"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-1 ms-1 underline underline-offset-4 decoration-amber-600/60 dark:decoration-amber-400/50 hover:decoration-fg transition-colors"
>
{{ $t('package.replacement.community') }}
<span class="i-lucide:external-link w-3 h-3" aria-hidden="true" />
</a>
</template>
<template #replacement>
{{ replacement.replacement }}
<span v-if="replacementDescription" v-html="replacementDescription" />
<span v-else
><code>{{ replacement.id }}</code></span
>
</template>
</i18n-t>
<i18n-t
v-else-if="replacement.type === 'documented'"
keypath="package.replacement.documented"
scope="global"
>
<template #replacement>
<code>{{ replacement.replacementModule }}</code>
</template>
<template #community>
<a
href="https://e18e.dev/docs/replacements/"
Expand All @@ -74,22 +76,18 @@ const docPath = computed(() => {
</a>
</template>
</i18n-t>
<template v-else-if="replacement.type === 'removal'">
<span v-html="replacementDescription" />
</template>
<template v-else-if="replacement.type === 'simple'">
<span v-html="replacementDescription" />
</template>
<template v-else>
{{ $t('package.replacement.none') }}
</template>
<a
v-if="mdnUrl"
:href="mdnUrl"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-1 ms-1 underline underline-offset-4 decoration-amber-600/60 dark:decoration-amber-400/50 hover:decoration-fg transition-colors"
>
{{ $t('package.replacement.mdn') }}
<span class="i-lucide:external-link w-3 h-3" aria-hidden="true" />
</a>
<a
v-if="docPath"
:href="docPath"
v-if="externalUrl"
:href="externalUrl"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-1 ms-1 underline underline-offset-4 decoration-amber-600/60 dark:decoration-amber-400/50 hover:decoration-fg transition-colors"
Expand All @@ -98,5 +96,11 @@ const docPath = computed(() => {
<span class="i-lucide:external-link w-3 h-3" aria-hidden="true" />
</a>
</p>
<div v-if="replacement.type === 'simple' && replacement.example">
<strong class="block mb-1.5">{{ $t('package.replacement.example') }}</strong>
<pre
class="bg-amber-800/10 dark:bg-amber-950/30 p-2 rounded border border-amber-700/20 overflow-x-auto text-xs font-mono leading-relaxed"
><code>{{ replacement.example }}</code></pre>
</div>
</div>
</template>
8 changes: 6 additions & 2 deletions app/composables/npm/useReplacementDependencies.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { ModuleReplacement } from 'module-replacements'
import type { ModuleReplacement, ModuleReplacementMapping } from 'module-replacements'

async function fetchReplacements(
deps: Record<string, string>,
Expand All @@ -8,7 +8,11 @@ async function fetchReplacements(
const results = await Promise.all(
names.map(async name => {
try {
const replacement = await $fetch<ModuleReplacement | null>(`/api/replacements/${name}`)
const response = await $fetch<{
mapping: ModuleReplacementMapping
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@danielroe iirc you said these types are inferred based on the route. is that true? does this not infer them because of the interpolation?

replacement: ModuleReplacement
} | null>(`/api/replacements/${name}`)
const replacement = response?.replacement ?? null
return { name, replacement }
} catch {
return { name, replacement: null }
Expand Down
15 changes: 9 additions & 6 deletions app/composables/useCompareReplacements.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { ModuleReplacement } from 'module-replacements'
import type { ModuleReplacement, ModuleReplacementMapping } from 'module-replacements'

export interface ReplacementSuggestion {
forPackage: string
Expand Down Expand Up @@ -41,8 +41,11 @@ export function useCompareReplacements(packageNames: MaybeRefOrGetter<string[]>)
const results = await Promise.all(
namesToCheck.map(async name => {
try {
const replacement = await $fetch<ModuleReplacement | null>(`/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 }
}
Expand Down Expand Up @@ -99,9 +102,9 @@ export function useCompareReplacements(packageNames: MaybeRefOrGetter<string[]>)
)

return {
replacements: readonly(replacements),
noDepSuggestions: readonly(noDepSuggestions),
infoSuggestions: readonly(infoSuggestions),
replacements,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

are these still readonly? was that dropped on purpose?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

as far as I can see seems by mistake,

noDepSuggestions,
infoSuggestions,
loading: readonly(loading),
}
}
6 changes: 4 additions & 2 deletions app/composables/useModuleReplacement.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import type { ModuleReplacement } from 'module-replacements'
import type { ModuleReplacement, ModuleReplacementMapping } from 'module-replacements'

export function useModuleReplacement(packageName: MaybeRefOrGetter<string>) {
return useLazyFetch<ModuleReplacement | null>(() => `/api/replacements/${toValue(packageName)}`)
return useLazyFetch<{ mapping: ModuleReplacementMapping; replacement: ModuleReplacement } | null>(
() => `/api/replacements/${toValue(packageName)}`,
)
}
6 changes: 5 additions & 1 deletion app/pages/package/[[org]]/[name].vue
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,11 @@ const showSkeleton = shallowRef(false)

<div class="space-y-6" :class="$style.areaVulns">
<!-- Bad package warning -->
<PackageReplacement v-if="moduleReplacement" :replacement="moduleReplacement" />
<PackageReplacement
v-if="moduleReplacement"
:mapping="moduleReplacement.mapping"
:replacement="moduleReplacement.replacement"
/>
Comment on lines +887 to +891
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

maybe we should just call useModuleReplacement inside this component

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That makes sense, yes

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

actually I'm not sure, since it's rendered conditionally based on if moduleReplacement is defined or not

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I don't think we should

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I think we always have to options parent fetchs and decides if renders or not or we put that logic inside the component and inside we have a v-if to not render html etc

Maybe you can even have a component packageReplacementIntegration that is responsible to fetch the replacement and the rendering the visual part

<!-- Size / dependency increase notice -->
<PackageSizeIncrease v-if="sizeDiff" :diff="sizeDiff" />
<!-- Vulnerability scan -->
Expand Down
1 change: 0 additions & 1 deletion i18n/locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,6 @@
"none": "تم وضع علامة على هذه الحزمة بأنها لم تعد مطلوبة، ومن المرجح أن وظيفتها متاحة أصلًا في جميع المحركات.",
"learn_more": "اعرف المزيد",
"learn_more_above": "اعرف المزيد أعلاه.",
"mdn": "MDN",
"community": "المجتمع",
"consider_no_dep": "+ هل تريد خيار «بدون تبعية»؟"
},
Expand Down
1 change: 0 additions & 1 deletion i18n/locales/az-AZ.json
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,6 @@
"none": "Bu paket artıq lazımsız olaraq qeyd edilib və funksionallığı bütün mühərriklərdə yerli olaraq mövcuddur.",
"learn_more": "Ətraflı öyrən",
"learn_more_above": "Yuxarıda ətraflı öyrənin.",
"mdn": "MDN",
"community": "icma",
"consider_no_dep": "+ Asılılıqsız düşünün?"
},
Expand Down
1 change: 0 additions & 1 deletion i18n/locales/bg-BG.json
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,6 @@
"none": "Този пакет е отбелязан като вече ненужен и функционалността му вероятно е налична нативно във всички двигатели.",
"learn_more": "Научете повече",
"learn_more_above": "Научете повече по-горе.",
"mdn": "MDN",
"community": "общност",
"consider_no_dep": "+ Обмислете без зависимости?"
},
Expand Down
1 change: 0 additions & 1 deletion i18n/locales/bn-IN.json
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@
"documented": "{community} এই প্যাকেজটিকে আরো ভাল পারফরম্যান্স অপশন হিসাবে চিহ্নিত করেছে।",
"none": "এই প্যাকেজটি এখন অনাবশ্যক হিসাবে চিহ্নিত, এবং এর কার্যকরিতা সমস্ত ইঞ্জিনে নেটিভভাবে উপলব্ধ হওয়ার সম্ভাবনা আছে।",
"learn_more": "আরো জানুন",
"mdn": "MDN",
"community": "কমিউনিটি"
},
"stats": {
Expand Down
1 change: 0 additions & 1 deletion i18n/locales/cs-CZ.json
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,6 @@
"none": "Tento balíček byl označen jako již nepotřebný a jeho funkčnost je pravděpodobně dostupná nativně ve všech enginech.",
"learn_more": "Zjistit více",
"learn_more_above": "Zjistit více výše.",
"mdn": "MDN",
"community": "komunita",
"consider_no_dep": "+ Zvážit žádnou závislost?"
},
Expand Down
1 change: 0 additions & 1 deletion i18n/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@
"none": "Dieses Paket wurde als nicht mehr nötig markiert, und seine Funktionalität ist wahrscheinlich in allen Engines nativ verfügbar.",
"learn_more": "Mehr erfahren",
"learn_more_above": "Erfahre oben mehr.",
"mdn": "MDN",
"community": "Community",
"consider_no_dep": "+ Ohne Abhängigkeit lösen?"
},
Expand Down
Loading
Loading