Skip to content

Commit 28bb82d

Browse files
committed
feat: add esm change
1 parent 245cb32 commit 28bb82d

File tree

5 files changed

+62
-1
lines changed

5 files changed

+62
-1
lines changed

app/composables/npm/usePackage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export function transformPackument(
9999
deprecated: version.deprecated,
100100
tags: version.tags as string[],
101101
license: typeof versionLicense === 'string' ? versionLicense : undefined,
102+
type: typeof version.type === 'string' ? version.type : undefined,
102103
}
103104
}
104105
}

app/pages/package-timeline/[[org]]/[packageName].vue

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,29 @@ const licenseChanges = computed(() => {
168168
return changes
169169
})
170170
171+
// Detect ESM support changes (package "type" field) between consecutive versions
172+
const esmChanges = computed(() => {
173+
const changes = new Map<string, 'added' | 'removed'>()
174+
const entries = timelineEntries.value
175+
176+
for (let i = 0; i < entries.length - 1; i++) {
177+
const current = pkg.value?.versions[entries[i]!.version]
178+
const previous = pkg.value?.versions[entries[i + 1]!.version]
179+
if (!current || !previous) continue
180+
181+
const currentIsEsm = current.type === 'module'
182+
const previousIsEsm = previous.type === 'module'
183+
184+
if (currentIsEsm && !previousIsEsm) {
185+
changes.set(entries[i]!.version, 'added')
186+
} else if (!currentIsEsm && previousIsEsm) {
187+
changes.set(entries[i]!.version, 'removed')
188+
}
189+
}
190+
191+
return changes
192+
})
193+
171194
const bytesFormatter = useBytesFormatter()
172195
173196
useSeoMeta({
@@ -273,6 +296,33 @@ useSeoMeta({
273296
}}
274297
</p>
275298
</div>
299+
<!-- ESM change -->
300+
<div v-if="esmChanges.has(entry.version)" class="mb-4 -ms-6 ps-6 relative">
301+
<span
302+
class="absolute -start-2 flex items-center justify-center w-4 h-4 rounded-full border"
303+
:class="
304+
esmChanges.get(entry.version) === 'added'
305+
? 'bg-green-500 border-green-600'
306+
: 'bg-amber-500 border-amber-600'
307+
"
308+
>
309+
<span class="w-2.5 h-2.5 text-white i-lucide:package" aria-hidden="true" />
310+
</span>
311+
<p
312+
class="text-sm"
313+
:class="
314+
esmChanges.get(entry.version) === 'added'
315+
? 'text-green-700 dark:text-green-400'
316+
: 'text-amber-700 dark:text-amber-400'
317+
"
318+
>
319+
{{
320+
esmChanges.get(entry.version) === 'added'
321+
? $t('package.timeline.esm_added')
322+
: $t('package.timeline.esm_removed')
323+
}}
324+
</p>
325+
</div>
276326
<!-- Dot -->
277327
<span
278328
class="absolute -start-2 flex items-center justify-center w-4 h-4 rounded-full border border-border"

i18n/locales/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,9 @@
427427
"size_decrease": "Install size decreased by {percent}% ({size})",
428428
"dep_increase": "{count} dependencies added",
429429
"dep_decrease": "{count} dependencies removed",
430-
"license_change": "License changed from {from} to {to}"
430+
"license_change": "License changed from {from} to {to}",
431+
"esm_added": "Module type changed to ESM",
432+
"esm_removed": "Module type changed from ESM to CJS"
431433
},
432434
"dependencies": {
433435
"title": "Dependency ({count}) | Dependencies ({count})",

i18n/schema.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,12 @@
12871287
},
12881288
"license_change": {
12891289
"type": "string"
1290+
},
1291+
"esm_added": {
1292+
"type": "string"
1293+
},
1294+
"esm_removed": {
1295+
"type": "string"
12901296
}
12911297
},
12921298
"additionalProperties": false

shared/types/npm-registry.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ export type SlimVersion = Pick<SlimPackumentVersion, 'version' | 'deprecated' |
4848
hasProvenance?: boolean
4949
trustLevel?: PublishTrustLevel
5050
license?: string
51+
/** Package type field — "module" indicates ESM */
52+
type?: string
5153
}
5254

5355
/**

0 commit comments

Comments
 (0)