Skip to content

Commit a076acb

Browse files
authored
Merge branch 'npmx-dev:main' into main
2 parents 465eba6 + f95f1bb commit a076acb

7 files changed

Lines changed: 857 additions & 17 deletions

File tree

app/components/PackageCard.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,10 @@ const emit = defineEmits<{
8484
/>
8585
</dd>
8686
</div>
87+
<div v-if="result.package.license" class="flex items-center gap-1.5">
88+
<dt class="sr-only">License</dt>
89+
<dd>{{ result.package.license }}</dd>
90+
</div>
8791
</dl>
8892
</div>
8993
<!-- Mobile: downloads on separate row -->

app/components/PackageVersions.vue

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,8 @@ const tagVersions = ref<Map<string, VersionDisplay[]>>(new Map())
120120
const loadingTags = ref<Set<string>>(new Set())
121121
122122
const otherVersionsExpanded = shallowRef(false)
123-
const otherMajorGroups = shallowRef<
124-
Array<{ major: number; versions: VersionDisplay[]; expanded: boolean }>
125-
>([])
123+
const expandedMajorGroups = ref<Set<number>>(new Set())
124+
const otherMajorGroups = shallowRef<Array<{ major: number; versions: VersionDisplay[] }>>([])
126125
const otherVersionsLoading = shallowRef(false)
127126
128127
// Cached full version list (local to component instance)
@@ -222,8 +221,8 @@ function processLoadedVersions(allVersions: PackageVersionInfo[]) {
222221
otherMajorGroups.value = sortedMajors.map(major => ({
223222
major,
224223
versions: byMajor.get(major)!,
225-
expanded: false,
226224
}))
225+
expandedMajorGroups.value.clear()
227226
}
228227
229228
// Expand a tag row
@@ -277,10 +276,11 @@ async function expandOtherVersions() {
277276
}
278277
279278
// Toggle a major group
280-
function toggleMajorGroup(index: number) {
281-
const group = otherMajorGroups.value[index]
282-
if (group) {
283-
group.expanded = !group.expanded
279+
function toggleMajorGroup(major: number) {
280+
if (expandedMajorGroups.value.has(major)) {
281+
expandedMajorGroups.value.delete(major)
282+
} else {
283+
expandedMajorGroups.value.add(major)
284284
}
285285
}
286286
@@ -497,20 +497,24 @@ function getTagVersions(tag: string): VersionDisplay[] {
497497

498498
<!-- Major version groups (untagged versions) -->
499499
<template v-if="otherMajorGroups.length > 0">
500-
<div v-for="(group, groupIndex) in otherMajorGroups" :key="group.major">
500+
<div v-for="group in otherMajorGroups" :key="group.major">
501501
<!-- Major group header -->
502502
<button
503503
v-if="group.versions.length > 1"
504504
type="button"
505505
class="w-full text-left py-1"
506-
:aria-expanded="group.expanded"
506+
:aria-expanded="expandedMajorGroups.has(group.major)"
507507
:title="group.versions[0]?.version"
508-
@click="toggleMajorGroup(groupIndex)"
508+
@click="toggleMajorGroup(group.major)"
509509
>
510510
<div class="flex items-center gap-2">
511511
<span
512512
class="w-3 h-3 transition-transform duration-200 text-fg-subtle"
513-
:class="group.expanded ? 'i-carbon-chevron-down' : 'i-carbon-chevron-right'"
513+
:class="
514+
expandedMajorGroups.has(group.major)
515+
? 'i-carbon-chevron-down'
516+
: 'i-carbon-chevron-right'
517+
"
514518
/>
515519
<span
516520
class="font-mono text-xs truncate"
@@ -567,7 +571,10 @@ function getTagVersions(tag: string): VersionDisplay[] {
567571
</div>
568572

569573
<!-- Major group versions -->
570-
<div v-if="group.expanded && group.versions.length > 1" class="ml-5 space-y-0.5">
574+
<div
575+
v-if="expandedMajorGroups.has(group.major) && group.versions.length > 1"
576+
class="ml-5 space-y-0.5"
577+
>
571578
<div v-for="v in group.versions.slice(1)" :key="v.version" class="py-1">
572579
<div class="flex items-center justify-between gap-2">
573580
<NuxtLink

cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
],
2828
"scripts": {
2929
"build": "tsdown",
30-
"dev": "node --experimental-strip-types src/cli.ts",
30+
"dev": "NPMX_CLI_DEV=true node --experimental-strip-types src/cli.ts",
3131
"test:types": "tsc --noEmit"
3232
},
3333
"dependencies": {

cli/src/cli.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import { getNpmUser } from './npm-client.ts'
1010
import { initLogger, showToken, logInfo, logWarning, logError } from './logger.ts'
1111

1212
const DEFAULT_PORT = 31415
13+
const DEFAULT_FRONTEND_URL = 'https://npmx.dev/'
14+
const DEV_FRONTEND_URL = 'http://localhost:3000/'
1315

1416
async function runNpmLogin(): Promise<boolean> {
1517
return new Promise(resolve => {
@@ -43,6 +45,8 @@ const main = defineCommand({
4345
},
4446
async run({ args }) {
4547
const port = Number.parseInt(args.port as string, 10) || DEFAULT_PORT
48+
const frontendUrl =
49+
process.env.NPMX_CLI_DEV === 'true' ? DEV_FRONTEND_URL : DEFAULT_FRONTEND_URL
4650

4751
initLogger()
4852

@@ -90,7 +94,7 @@ const main = defineCommand({
9094
logInfo(`Authenticated as: ${npmUser}`)
9195

9296
const token = generateToken()
93-
showToken(token, port)
97+
showToken(token, port, frontendUrl)
9498

9599
const app = createConnectorApp(token)
96100

cli/src/logger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ export function logMessage(message: string): void {
6363
/**
6464
* Show the connection token in a nice box
6565
*/
66-
export function showToken(token: string, port: number): void {
67-
const connectUrl = `https://npmx.dev/?token=${token}&port=${port}`
66+
export function showToken(token: string, port: number, frontendUrl: string): void {
67+
const connectUrl = `${frontendUrl}?token=${token}&port=${port}`
6868

6969
p.note(
7070
[

shared/types/npm-registry.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ export interface NpmSearchPackage {
147147
author?: NpmPerson
148148
publisher?: NpmSearchPublisher
149149
maintainers?: NpmPerson[]
150+
license?: string
150151
}
151152

152153
export interface NpmSearchScore {

0 commit comments

Comments
 (0)