[READ-ONLY] a fast, modern browser for the npm registry
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: vlt package manager

+34 -39
+5 -10
app/utils/install-command.ts
··· 6 6 { id: 'yarn', label: 'yarn', action: 'add' }, 7 7 { id: 'bun', label: 'bun', action: 'add' }, 8 8 { id: 'deno', label: 'deno', action: 'add' }, 9 - { id: 'jsr', label: 'jsr', action: 'add' }, 9 + { id: 'vlt', label: 'vlt', action: 'install' }, 10 10 ] as const 11 11 12 12 export type PackageManagerId = (typeof packageManagers)[number]['id'] ··· 20 20 21 21 /** 22 22 * Get the package specifier for a given package manager. 23 - * Handles npm: prefix for deno and jsr (when not native). 23 + * Handles jsr: prefix for deno (when available on JSR). 24 24 */ 25 25 export function getPackageSpecifier(options: InstallCommandOptions): string { 26 26 const { packageName, packageManager, jsrInfo } = options 27 27 28 28 if (packageManager === 'deno') { 29 - // deno add npm:package 30 - return `npm:${packageName}` 31 - } 32 - 33 - if (packageManager === 'jsr') { 34 29 if (jsrInfo?.exists && jsrInfo.scope && jsrInfo.name) { 35 - // Native JSR package: @scope/name 36 - return `@${jsrInfo.scope}/${jsrInfo.name}` 30 + // Native JSR package: jsr:@scope/name 31 + return `jsr:@${jsrInfo.scope}/${jsrInfo.name}` 37 32 } 38 33 // npm compatibility: npm:package 39 34 return `npm:${packageName}` 40 35 } 41 36 42 - // Standard package managers (npm, pnpm, yarn, bun) 37 + // Standard package managers (npm, pnpm, yarn, bun, vlt) 43 38 return packageName 44 39 } 45 40
+29 -29
test/unit/install-command.spec.ts
··· 31 31 ['yarn', 'lodash'], 32 32 ['bun', 'lodash'], 33 33 ['deno', 'npm:lodash'], 34 - ['jsr', 'npm:lodash'], 34 + ['vlt', 'lodash'], 35 35 ] as const)('%s → %s', (pm, expected) => { 36 36 expect( 37 37 getPackageSpecifier({ ··· 49 49 ['pnpm', '@trpc/server'], 50 50 ['yarn', '@trpc/server'], 51 51 ['bun', '@trpc/server'], 52 - ['deno', 'npm:@trpc/server'], 53 - ['jsr', '@trpc/server'], // Native JSR specifier 52 + ['deno', 'jsr:@trpc/server'], // Native JSR specifier preferred 53 + ['vlt', '@trpc/server'], 54 54 ] as const)('%s → %s', (pm, expected) => { 55 55 expect( 56 56 getPackageSpecifier({ ··· 68 68 ['pnpm', '@vue/shared'], 69 69 ['yarn', '@vue/shared'], 70 70 ['bun', '@vue/shared'], 71 - ['deno', 'npm:@vue/shared'], 72 - ['jsr', 'npm:@vue/shared'], // Falls back to npm: compat 71 + ['deno', 'npm:@vue/shared'], // Falls back to npm: compat 72 + ['vlt', '@vue/shared'], 73 73 ] as const)('%s → %s', (pm, expected) => { 74 74 expect( 75 75 getPackageSpecifier({ ··· 90 90 ['yarn', 'yarn add lodash'], 91 91 ['bun', 'bun add lodash'], 92 92 ['deno', 'deno add npm:lodash'], 93 - ['jsr', 'jsr add npm:lodash'], 93 + ['vlt', 'vlt install lodash'], 94 94 ] as const)('%s → %s', (pm, expected) => { 95 95 expect( 96 96 getInstallCommand({ ··· 109 109 ['yarn', 'yarn add lodash@4.17.21'], 110 110 ['bun', 'bun add lodash@4.17.21'], 111 111 ['deno', 'deno add npm:lodash@4.17.21'], 112 - ['jsr', 'jsr add npm:lodash@4.17.21'], 112 + ['vlt', 'vlt install lodash@4.17.21'], 113 113 ] as const)('%s → %s', (pm, expected) => { 114 114 expect( 115 115 getInstallCommand({ ··· 128 128 ['pnpm', 'pnpm add @trpc/server'], 129 129 ['yarn', 'yarn add @trpc/server'], 130 130 ['bun', 'bun add @trpc/server'], 131 - ['deno', 'deno add npm:@trpc/server'], 132 - ['jsr', 'jsr add @trpc/server'], // Native JSR 131 + ['deno', 'deno add jsr:@trpc/server'], // Native JSR preferred 132 + ['vlt', 'vlt install @trpc/server'], 133 133 ] as const)('%s → %s', (pm, expected) => { 134 134 expect( 135 135 getInstallCommand({ ··· 147 147 ['pnpm', 'pnpm add @trpc/server@10.0.0'], 148 148 ['yarn', 'yarn add @trpc/server@10.0.0'], 149 149 ['bun', 'bun add @trpc/server@10.0.0'], 150 - ['deno', 'deno add npm:@trpc/server@10.0.0'], 151 - ['jsr', 'jsr add @trpc/server@10.0.0'], // Native JSR with version 150 + ['deno', 'deno add jsr:@trpc/server@10.0.0'], // Native JSR with version 151 + ['vlt', 'vlt install @trpc/server@10.0.0'], 152 152 ] as const)('%s → %s', (pm, expected) => { 153 153 expect( 154 154 getInstallCommand({ ··· 167 167 ['pnpm', 'pnpm add @vue/shared'], 168 168 ['yarn', 'yarn add @vue/shared'], 169 169 ['bun', 'bun add @vue/shared'], 170 - ['deno', 'deno add npm:@vue/shared'], 171 - ['jsr', 'jsr add npm:@vue/shared'], // Falls back to npm: compat 170 + ['deno', 'deno add npm:@vue/shared'], // Falls back to npm: compat 171 + ['vlt', 'vlt install @vue/shared'], 172 172 ] as const)('%s → %s', (pm, expected) => { 173 173 expect( 174 174 getInstallCommand({ ··· 201 201 expect(parts).toEqual(['npm', 'install', 'lodash@4.17.21']) 202 202 }) 203 203 204 - it('returns correct parts for deno with npm: prefix', () => { 204 + it('returns correct parts for deno with jsr: prefix when available', () => { 205 205 const parts = getInstallCommandParts({ 206 206 packageName: '@trpc/server', 207 207 packageManager: 'deno', 208 208 jsrInfo: jsrAvailable, 209 209 }) 210 - expect(parts).toEqual(['deno', 'add', 'npm:@trpc/server']) 210 + expect(parts).toEqual(['deno', 'add', 'jsr:@trpc/server']) 211 211 }) 212 212 213 - it('returns correct parts for jsr with native package', () => { 213 + it('returns correct parts for deno with npm: prefix when not on JSR', () => { 214 214 const parts = getInstallCommandParts({ 215 - packageName: '@trpc/server', 216 - packageManager: 'jsr', 217 - jsrInfo: jsrAvailable, 215 + packageName: 'lodash', 216 + packageManager: 'deno', 217 + jsrInfo: jsrNotAvailable, 218 218 }) 219 - expect(parts).toEqual(['jsr', 'add', '@trpc/server']) 219 + expect(parts).toEqual(['deno', 'add', 'npm:lodash']) 220 220 }) 221 221 222 - it('returns correct parts for jsr with npm compat', () => { 222 + it('returns correct parts for vlt', () => { 223 223 const parts = getInstallCommandParts({ 224 224 packageName: 'lodash', 225 - packageManager: 'jsr', 225 + packageManager: 'vlt', 226 226 jsrInfo: jsrNotAvailable, 227 227 }) 228 - expect(parts).toEqual(['jsr', 'add', 'npm:lodash']) 228 + expect(parts).toEqual(['vlt', 'install', 'lodash']) 229 229 }) 230 230 231 231 it('joined parts match getInstallCommand output', () => { ··· 242 242 }) 243 243 244 244 describe('edge cases', () => { 245 - it('handles null jsrInfo same as not available', () => { 245 + it('handles null jsrInfo same as not available for deno', () => { 246 246 expect( 247 247 getPackageSpecifier({ 248 248 packageName: 'lodash', 249 - packageManager: 'jsr', 249 + packageManager: 'deno', 250 250 jsrInfo: null, 251 251 }), 252 252 ).toBe('npm:lodash') 253 253 }) 254 254 255 - it('handles undefined jsrInfo same as not available', () => { 255 + it('handles undefined jsrInfo same as not available for deno', () => { 256 256 expect( 257 257 getPackageSpecifier({ 258 258 packageName: 'lodash', 259 - packageManager: 'jsr', 259 + packageManager: 'deno', 260 260 jsrInfo: undefined, 261 261 }), 262 262 ).toBe('npm:lodash') 263 263 }) 264 264 265 - it('handles jsrInfo with exists:true but missing scope/name', () => { 265 + it('handles jsrInfo with exists:true but missing scope/name for deno', () => { 266 266 const partialJsr: JsrPackageInfo = { 267 267 exists: true, 268 268 // Missing scope and name ··· 270 270 expect( 271 271 getPackageSpecifier({ 272 272 packageName: '@foo/bar', 273 - packageManager: 'jsr', 273 + packageManager: 'deno', 274 274 jsrInfo: partialJsr, 275 275 }), 276 276 ).toBe('npm:@foo/bar')