[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.

chore: add Knip config (#266)

Co-authored-by: Daniel Roe <daniel@roe.dev>

authored by

Vincent Taverna
Daniel Roe
and committed by
GitHub
6174d8f6 2cef7ff3

+430 -103
+17
.github/workflows/ci.yml
··· 98 98 run: ./scripts/lighthouse-a11y.sh 99 99 env: 100 100 LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }} 101 + 102 + knip: 103 + runs-on: ubuntu-latest 104 + 105 + steps: 106 + - uses: actions/checkout@v6 107 + - run: corepack enable 108 + - uses: actions/setup-node@v6 109 + with: 110 + node-version: lts/* 111 + cache: pnpm 112 + 113 + - name: 📦 Install dependencies 114 + run: pnpm install 115 + 116 + - name: 🔍 Check for unused code 117 + run: pnpm knip:production
+1 -27
app/composables/useCachedFetch.ts
··· 1 - import type { H3Event } from 'h3' 2 - 3 1 /** 4 2 * Type for the cachedFetch function attached to event context. 5 3 */ ··· 32 30 * ) 33 31 * } 34 32 * ``` 33 + * @public 35 34 */ 36 35 export function useCachedFetch(): CachedFetchFunction { 37 36 // On client, return a function that just uses $fetch ··· 72 71 return (await $fetch(url, options as Parameters<typeof $fetch>[1])) as T 73 72 } 74 73 } 75 - 76 - /** 77 - * Create a cachedFetch function from an H3Event. 78 - * Useful when you have direct access to the event. 79 - */ 80 - export function getCachedFetchFromEvent(event: H3Event | undefined): CachedFetchFunction { 81 - const serverCachedFetch = event?.context?.cachedFetch 82 - 83 - if (serverCachedFetch) { 84 - return serverCachedFetch as CachedFetchFunction 85 - } 86 - 87 - // Fallback to regular $fetch 88 - return async <T = unknown>( 89 - url: string, 90 - options: { 91 - method?: string 92 - body?: unknown 93 - headers?: Record<string, string> 94 - } = {}, 95 - _ttl?: number, 96 - ): Promise<T> => { 97 - return (await $fetch(url, options as Parameters<typeof $fetch>[1])) as T 98 - } 99 - }
+1
app/composables/useCharts.ts
··· 286 286 return versionDates[0] ?? null 287 287 } 288 288 289 + /** @public */ 289 290 export function useCharts() { 290 291 function resolveDateRange( 291 292 downloadEvolutionOptions: PackageDownloadEvolutionOptions,
+1
app/composables/useConnector.ts
··· 55 55 const STORAGE_KEY = 'npmx-connector' 56 56 const DEFAULT_PORT = 31415 57 57 58 + /** @public */ 58 59 export const useConnector = createSharedComposable(function useConnector() { 59 60 // Persisted connection config 60 61 const config = useState<{ token: string; port: number } | null>('connector-config', () => null)
+1
app/composables/useFileTreeState.ts
··· 1 + /** @public */ 1 2 export function useFileTreeState(baseUrl: string) { 2 3 const stateKey = computed(() => `npmx-file-tree${baseUrl}`) 3 4
+1
app/composables/useInstallCommand.ts
··· 3 3 /** 4 4 * Composable for generating install commands with support for 5 5 * multiple package managers, @types packages, and JSR. 6 + * @public 6 7 */ 7 8 export function useInstallCommand( 8 9 packageName: MaybeRefOrGetter<string | null>,
+8 -65
app/composables/useNpmRegistry.ts
··· 108 108 } 109 109 } 110 110 111 + /** @public */ 111 112 export function usePackage( 112 113 name: MaybeRefOrGetter<string>, 113 114 requestedVersion?: MaybeRefOrGetter<string | null>, ··· 147 148 return resolved 148 149 } 149 150 151 + /** @public */ 150 152 export function usePackageDownloads( 151 153 name: MaybeRefOrGetter<string>, 152 154 period: MaybeRefOrGetter<'last-day' | 'last-week' | 'last-month' | 'last-year'> = 'last-week', ··· 174 176 /** 175 177 * Fetch download range data from npm API. 176 178 * Exported for external use (e.g., in components). 179 + * @public 177 180 */ 178 181 export async function fetchNpmDownloadsRange( 179 182 packageName: string, ··· 186 189 ) 187 190 } 188 191 189 - export function usePackageWeeklyDownloadEvolution( 190 - name: MaybeRefOrGetter<string>, 191 - options: MaybeRefOrGetter<{ 192 - weeks?: number 193 - endDate?: string 194 - }> = {}, 195 - ) { 196 - const cachedFetch = useCachedFetch() 197 - 198 - return useLazyAsyncData( 199 - () => `downloads-weekly-evolution:${toValue(name)}:${JSON.stringify(toValue(options))}`, 200 - async () => { 201 - const packageName = toValue(name) 202 - const { weeks = 12, endDate } = toValue(options) ?? {} 203 - 204 - const today = new Date() 205 - const yesterday = new Date( 206 - Date.UTC(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate() - 1), 207 - ) 208 - 209 - const end = endDate ? new Date(`${endDate}T00:00:00.000Z`) : yesterday 210 - 211 - const start = addDays(end, -(weeks * 7) + 1) 212 - const startIso = toIsoDateString(start) 213 - const endIso = toIsoDateString(end) 214 - 215 - const encodedName = encodePackageName(packageName) 216 - const range = await cachedFetch<NpmDownloadsRangeResponse>( 217 - `${NPM_API}/downloads/range/${startIso}:${endIso}/${encodedName}`, 218 - ) 219 - const sortedDaily = [...range.downloads].sort((a, b) => a.day.localeCompare(b.day)) 220 - return buildWeeklyEvolutionFromDaily(sortedDaily) 221 - }, 222 - ) 223 - } 224 - 225 192 const emptySearchResponse = { 226 193 objects: [], 227 194 total: 0, 228 195 time: new Date().toISOString(), 229 196 } satisfies NpmSearchResponse 230 197 198 + /** @public */ 231 199 export function useNpmSearch( 232 200 query: MaybeRefOrGetter<string>, 233 201 options: MaybeRefOrGetter<{ ··· 305 273 /** 306 274 * Fetch all packages for an npm organization 307 275 * Returns search-result-like objects for compatibility with PackageList 276 + * @public 308 277 */ 309 278 export function useOrgPackages(orgName: MaybeRefOrGetter<string>) { 310 279 const cachedFetch = useCachedFetch() ··· 418 387 return promise 419 388 } 420 389 421 - /** 422 - * Composable to fetch all versions of a package. 423 - * Uses SWR caching on the server. 424 - */ 425 - export function useAllPackageVersions(packageName: MaybeRefOrGetter<string>) { 426 - const cachedFetch = useCachedFetch() 427 - 428 - return useLazyAsyncData( 429 - () => `all-versions:${toValue(packageName)}`, 430 - async () => { 431 - const encodedName = encodePackageName(toValue(packageName)) 432 - const data = await cachedFetch<{ 433 - versions: Record<string, { deprecated?: string }> 434 - time: Record<string, string> 435 - }>(`${NPM_REGISTRY}/${encodedName}`) 436 - 437 - return Object.entries(data.versions) 438 - .filter(([v]) => data.time[v]) 439 - .map(([version, versionData]) => ({ 440 - version, 441 - time: data.time[version], 442 - hasProvenance: false, // Would need to check dist.attestations for each version 443 - deprecated: versionData.deprecated, 444 - })) 445 - .sort((a, b) => compare(b.version, a.version)) as PackageVersionInfo[] 446 - }, 447 - ) 448 - } 449 - 450 390 // ============================================================================ 451 391 // Outdated Dependencies 452 392 // ============================================================================ ··· 567 507 /** 568 508 * Composable to check for outdated dependencies. 569 509 * Returns a reactive map of dependency name to outdated info. 510 + * @public 570 511 */ 571 512 export function useOutdatedDependencies( 572 513 dependencies: MaybeRefOrGetter<Record<string, string> | undefined>, ··· 616 557 617 558 /** 618 559 * Get tooltip text for an outdated dependency 560 + * @public 619 561 */ 620 562 export function getOutdatedTooltip(info: OutdatedDependencyInfo): string { 621 563 if (info.majorsBehind > 0) { ··· 631 573 632 574 /** 633 575 * Get CSS class for a dependency version based on outdated status 576 + * @public 634 577 */ 635 578 export function getVersionClass(info: OutdatedDependencyInfo | undefined): string { 636 579 if (!info) return 'text-fg-subtle'
+1
app/composables/usePackageAnalysis.ts
··· 14 14 15 15 /** 16 16 * Composable for fetching package analysis data (module format, types info, etc.) 17 + * @public 17 18 */ 18 19 export function usePackageAnalysis( 19 20 packageName: MaybeRefOrGetter<string>,
+1
app/composables/usePackageRoute.ts
··· 8 8 * /@nuxt/kit/v/1.0.0 → packageName: "@nuxt/kit", requestedVersion: "1.0.0" 9 9 * /axios@1.13.3 → packageName: "axios", requestedVersion: "1.13.3" 10 10 * /@nuxt/kit@1.0.0 → packageName: "@nuxt/kit", requestedVersion: "1.0.0" 11 + * @public 11 12 */ 12 13 export function usePackageRoute() { 13 14 const route = useRoute('package')
+1
app/composables/useRepoMeta.ts
··· 760 760 761 761 const parseRepoFromUrl = parseRepoUrl 762 762 763 + /** @public */ 763 764 export function useRepoMeta(repositoryUrl: MaybeRefOrGetter<string | null | undefined>) { 764 765 // Get cachedFetch in setup context (outside async handler) 765 766 const cachedFetch = useCachedFetch()
+1
app/composables/useSelectedPackageManager.ts
··· 1 + /** @public */ 1 2 export function useSelectedPackageManager() { 2 3 return useLocalStorage<PackageManagerId>('npmx-pm', 'npm') 3 4 }
+2
app/composables/useSettings.ts
··· 46 46 /** 47 47 * Composable for accessing just the relative dates setting. 48 48 * Useful for components that only need to read this specific setting. 49 + * @public 49 50 */ 50 51 export function useRelativeDates() { 51 52 const { settings } = useSettings() ··· 84 85 /** 85 86 * Applies accent color before hydration to prevent flash of default color. 86 87 * Call this from app.vue to ensure accent color is applied on every page. 88 + * @public 87 89 */ 88 90 export function initAccentOnPrehydrate() { 89 91 // Callback is stringified by Nuxt - external variables won't be available.
+1
app/composables/useVirtualInfiniteScroll.ts
··· 34 34 * Composable for handling infinite scroll with virtua's WindowVirtualizer 35 35 * Detects when user scrolls near the end and triggers loading more items 36 36 * Also tracks current visible page for URL persistence 37 + * @public 37 38 */ 38 39 export function useVirtualInfiniteScroll(options: UseVirtualInfiniteScrollOptions) { 39 40 const {
+2
app/utils/charts.ts
··· 10 10 return result 11 11 } 12 12 13 + /** @public */ 13 14 export function buildWeeklyEvolutionFromDaily( 14 15 daily: Array<{ day: string; downloads: number }>, 15 16 ): Array<{ weekStart: string; weekEnd: string; downloads: number }> { ··· 22 23 }) 23 24 } 24 25 26 + /** @public */ 25 27 export function addDays(date: Date, days: number): Date { 26 28 const d = new Date(date) 27 29 d.setUTCDate(d.getUTCDate() + days)
+2
app/utils/colors.ts
··· 38 38 * Used to create light tints of accent colors for better visibility in light mode. 39 39 * @param hex - The hex color to lighten (e.g., "#ff0000") 40 40 * @param factor - Lighten factor from 0 to 1 (0.5 = 50% lighter, mixed with white) 41 + * @public 41 42 */ 42 43 export function lightenHex(hex: string, factor: number = 0.5): string { 43 44 const rgb = hexToRgb(hex) ··· 48 49 return rgbToHex(...lightened) 49 50 } 50 51 52 + /** @public */ 51 53 export function oklchToHex(color: string | undefined | null): string | undefined | null { 52 54 if (color == null) return color 53 55
+3
app/utils/formatters.ts
··· 1 + /** @public */ 1 2 export function formatNumber(num: number, _locale?: string): string { 2 3 // TODO: Support different locales (needs care to ensure hydration works correctly) 3 4 return new Intl.NumberFormat('en-US').format(num) 4 5 } 5 6 7 + /** @public */ 6 8 export function toIsoDateString(date: Date): string { 7 9 const year = date.getUTCFullYear() 8 10 const month = String(date.getUTCMonth() + 1).padStart(2, '0') ··· 10 12 return `${year}-${month}-${day}` 11 13 } 12 14 15 + /** @public */ 13 16 export function formatCompactNumber( 14 17 value: number, 15 18 options?: { decimals?: number; space?: boolean },
+1
app/utils/input.ts
··· 1 + /** @public */ 1 2 export const noCorrect = { 2 3 autocapitalize: 'off', 3 4 autocomplete: 'off',
+2
app/utils/install-command.ts
··· 90 90 91 91 /** 92 92 * Generate the full install command for a package. 93 + * @public 93 94 */ 94 95 export function getInstallCommand(options: InstallCommandOptions): string { 95 96 return getInstallCommandParts(options).join(' ') ··· 117 118 isCreatePackage?: boolean 118 119 } 119 120 121 + /** @public */ 120 122 export function getExecuteCommand(options: ExecuteCommandOptions): string { 121 123 return getExecuteCommandParts(options).join(' ') 122 124 }
+4
app/utils/run-command.ts
··· 21 21 * - Name starts with "create-" (e.g., create-vite) 22 22 * - Scoped name contains "/create-" (e.g., @vue/create-app) 23 23 * - Has bin field but no main, module, or exports fields 24 + * @public 24 25 */ 25 26 export function isBinaryOnlyPackage(pkg: PackageMetadata): boolean { 26 27 const baseName = pkg.name.startsWith('@') ? pkg.name.split('/')[1] : pkg.name ··· 40 41 41 42 /** 42 43 * Check if a package uses the create-* naming convention. 44 + * @public 43 45 */ 44 46 export function isCreatePackage(packageName: string): boolean { 45 47 const baseName = packageName.startsWith('@') ? packageName.split('/')[1] : packageName ··· 61 63 /** 62 64 * Extract executable command information from a package's bin field. 63 65 * Handles both string format ("bin": "./cli.js") and object format ("bin": { "cmd": "./cli.js" }). 66 + * @public 64 67 */ 65 68 export function getExecutableInfo( 66 69 packageName: string, ··· 147 150 148 151 /** 149 152 * Generate the full run command for a package. 153 + * @public 150 154 */ 151 155 export function getRunCommand(options: RunCommandOptions): string { 152 156 return getRunCommandParts(options).join(' ')
+2
app/utils/versions.ts
··· 55 55 * Sort tags with 'latest' first, then alphabetically 56 56 * @param tags - Array of tag names 57 57 * @returns New sorted array 58 + * @public 58 59 */ 59 60 export function sortTags(tags: string[]): string[] { 60 61 return [...tags].sort((a, b) => { ··· 111 112 * Each unique version appears once with all its tags 112 113 * @param distTags - Object mapping tag names to version strings 113 114 * @returns Array of rows sorted by version (descending) 115 + * @public 114 116 */ 115 117 export function buildTaggedVersionRows(distTags: Record<string, string>): TaggedVersionRow[] { 116 118 const versionToTags = buildVersionToTagsMap(distTags)
+3
cli/src/logger.ts
··· 55 55 56 56 /** 57 57 * Log a message (generic) 58 + * @public 58 59 */ 59 60 export function logMessage(message: string): void { 60 61 p.log.message(message) ··· 78 79 79 80 /** 80 81 * Show outro message 82 + * @public 81 83 */ 82 84 export function showOutro(message: string): void { 83 85 p.outro(message) ··· 85 87 86 88 /** 87 89 * Create a spinner for async operations 90 + * @public 88 91 */ 89 92 export function createSpinner() { 90 93 return p.spinner()
+13
cli/src/schemas.ts
··· 59 59 60 60 /** 61 61 * Validates a team name (without scope prefix) 62 + * @public 62 63 */ 63 64 export const TeamNameSchema = v.pipe( 64 65 v.string(), ··· 330 331 // Type Exports 331 332 // ============================================================================ 332 333 334 + /** @public */ 333 335 export type PackageName = v.InferOutput<typeof PackageNameSchema> 336 + /** @public */ 334 337 export type NewPackageName = v.InferOutput<typeof NewPackageNameSchema> 338 + /** @public */ 335 339 export type Username = v.InferOutput<typeof UsernameSchema> 340 + /** @public */ 336 341 export type OrgName = v.InferOutput<typeof OrgNameSchema> 342 + /** @public */ 337 343 export type ScopeTeam = v.InferOutput<typeof ScopeTeamSchema> 344 + /** @public */ 338 345 export type OrgRole = v.InferOutput<typeof OrgRoleSchema> 346 + /** @public */ 339 347 export type Permission = v.InferOutput<typeof PermissionSchema> 348 + /** @public */ 340 349 export type OperationType = v.InferOutput<typeof OperationTypeSchema> 350 + /** @public */ 341 351 export type OperationStatus = v.InferOutput<typeof OperationStatusSchema> 352 + /** @public */ 342 353 export type ConnectBody = v.InferOutput<typeof ConnectBodySchema> 354 + /** @public */ 343 355 export type ExecuteBody = v.InferOutput<typeof ExecuteBodySchema> 356 + /** @public */ 344 357 export type CreateOperationBody = v.InferOutput<typeof CreateOperationBodySchema>
+1
cli/src/types.ts
··· 1 + /** @public */ 1 2 export interface ConnectorConfig { 2 3 port: number 3 4 host: string
+59
knip.json
··· 1 + { 2 + "$schema": "https://unpkg.com/knip@5/schema.json", 3 + "includeEntryExports": true, 4 + "ignoreExportsUsedInFile": true, 5 + "ignoreBinaries": ["simple-git-hooks", "lint-staged"], 6 + "workspaces": { 7 + ".": { 8 + "entry": [ 9 + "scripts/*.sh", 10 + "lunaria/**/*.ts!", 11 + "modules/**/*.ts!", 12 + "i18n/i18n.config.ts!", 13 + "app/app.vue!", 14 + "app/error.vue!", 15 + "app/pages/**/*.vue!", 16 + "app/middleware/**/*.ts!", 17 + "app/composables/**/*.ts!", 18 + "app/utils/**/*.ts!", 19 + "app/plugins/**/*.ts!", 20 + "app/components/**/*.vue!", 21 + "server/utils/**/*.ts!", 22 + "shared/**/*.ts!" 23 + ], 24 + "project": [ 25 + "app/**/*.{ts,vue}!", 26 + "server/**/*.ts!", 27 + "shared/**/*.ts!", 28 + "test/**/*.ts", 29 + "tests/**/*.ts", 30 + "lunaria/**/*.ts", 31 + "modules/**/*.ts!", 32 + "i18n/**/*.ts!" 33 + ], 34 + "ignoreDependencies": [ 35 + "@iconify-json/carbon", 36 + "@iconify-json/lucide", 37 + "@iconify-json/simple-icons", 38 + "@iconify-json/solar", 39 + "@iconify-json/svg-spinners", 40 + "@iconify-json/vscode-icons", 41 + "@voidzero-dev/vite-plus-core", 42 + "h3", 43 + "ohash", 44 + "unplugin-vue-router", 45 + "vue-router" 46 + ], 47 + "ignoreUnresolved": ["#components"] 48 + }, 49 + "cli": { 50 + "entry": ["src/index.ts!"], 51 + "project": ["src/**/*.ts!"], 52 + "ignoreDependencies": ["h3-next", "obug", "valibot", "validate-npm-package-name"] 53 + }, 54 + "docs": { 55 + "entry": ["app/app.config.ts"], 56 + "ignoreDependencies": ["docus", "better-sqlite3", "nuxt"] 57 + } 58 + } 59 + }
+2 -1
lunaria/components.ts
··· 378 378 ` 379 379 380 380 /** 381 - * Build an SVG file showing a summary of each language’s translation progress. 381 + * Build an SVG file showing a summary of each language's translation progress. 382 + * @public 382 383 */ 383 384 export const SvgSummary = (config: LunariaConfig, status: LunariaStatus): string => { 384 385 const localeHeight = 56 // Each locale’s summary is 56px high.
+6 -1
package.json
··· 13 13 "build:lunaria": "node --experimental-transform-types ./lunaria/lunaria.ts", 14 14 "dev": "nuxt dev", 15 15 "dev:docs": "pnpm run --filter npmx-docs dev --port=3001", 16 + "knip": "knip", 17 + "knip:fix": "knip --fix", 18 + "knip:production": "knip --production", 16 19 "lint": "vite lint && vite fmt --check", 17 20 "lint:fix": "vite lint --fix && vite fmt", 18 21 "generate": "nuxt generate", ··· 52 55 "semver": "^7.7.3", 53 56 "shiki": "^3.21.0", 54 57 "ufo": "^1.6.3", 55 - "unplugin-vue-router": "^0.19.2", 56 58 "valibot": "^1.2.0", 57 59 "validate-npm-package-name": "^7.0.2", 58 60 "virtua": "^0.48.3", ··· 80 82 "@vue/test-utils": "2.4.6", 81 83 "axe-core": "^4.11.1", 82 84 "happy-dom": "20.3.5", 85 + "knip": "^5.82.1", 83 86 "lint-staged": "16.2.7", 84 87 "marked": "17.0.1", 85 88 "playwright-core": "1.57.0", ··· 88 91 "std-env": "3.10.0", 89 92 "typescript": "5.9.3", 90 93 "unocss": "66.6.0", 94 + "unplugin-vue-router": "^0.19.2", 91 95 "vite-plus": "latest", 92 96 "vitest": "npm:@voidzero-dev/vite-plus-test@latest", 97 + "vitest-environment-nuxt": "^1.0.1", 93 98 "vue-tsc": "3.2.2" 94 99 }, 95 100 "simple-git-hooks": {
+264 -9
pnpm-lock.yaml
··· 92 92 ufo: 93 93 specifier: ^1.6.3 94 94 version: 1.6.3 95 - unplugin-vue-router: 96 - specifier: ^0.19.2 97 - version: 0.19.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 98 95 valibot: 99 96 specifier: ^1.2.0 100 97 version: 1.2.0(typescript@5.9.3) ··· 171 168 happy-dom: 172 169 specifier: 20.3.5 173 170 version: 20.3.5 171 + knip: 172 + specifier: ^5.82.1 173 + version: 5.82.1(@types/node@24.10.9)(typescript@5.9.3) 174 174 lint-staged: 175 175 specifier: 16.2.7 176 176 version: 16.2.7 ··· 195 195 unocss: 196 196 specifier: 66.6.0 197 197 version: 66.6.0(@unocss/webpack@66.6.0(webpack@5.104.1(esbuild@0.27.2)))(postcss@8.5.6)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2)) 198 + unplugin-vue-router: 199 + specifier: ^0.19.2 200 + version: 0.19.2(@vue/compiler-sfc@3.5.27)(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 198 201 vite-plus: 199 202 specifier: latest 200 203 version: 0.0.0-ffb4d08a8edafe855c59736c0a38ee85a2373ebb(@types/node@24.10.9)(esbuild@0.27.2)(happy-dom@20.3.5)(jiti@2.6.1)(terser@5.46.0)(typescript@5.9.3)(yaml@2.8.2) 201 204 vitest: 202 205 specifier: npm:@voidzero-dev/vite-plus-test@latest 203 206 version: '@voidzero-dev/vite-plus-test@0.0.0-ffb4d08a8edafe855c59736c0a38ee85a2373ebb(@types/node@24.10.9)(esbuild@0.27.2)(happy-dom@20.3.5)(jiti@2.6.1)(terser@5.46.0)(typescript@5.9.3)(yaml@2.8.2)' 207 + vitest-environment-nuxt: 208 + specifier: ^1.0.1 209 + version: 1.0.1(@playwright/test@1.57.0)(@voidzero-dev/vite-plus-test@0.0.0-ffb4d08a8edafe855c59736c0a38ee85a2373ebb(@types/node@24.10.9)(esbuild@0.27.2)(happy-dom@20.3.5)(jiti@2.6.1)(terser@5.46.0)(typescript@5.9.3)(yaml@2.8.2))(@vue/test-utils@2.4.6)(happy-dom@20.3.5)(magicast@0.5.1)(playwright-core@1.57.0)(typescript@5.9.3) 204 210 vue-tsc: 205 211 specifier: 3.2.2 206 212 version: 3.2.2(typescript@5.9.3) ··· 240 246 version: 4.0.2 241 247 tsdown: 242 248 specifier: 0.20.1 243 - version: 0.20.1(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)) 249 + version: 0.20.1(oxc-resolver@11.16.4)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)) 244 250 typescript: 245 251 specifier: 5.9.3 246 252 version: 5.9.3 ··· 2241 2247 '@oxc-project/types@0.95.0': 2242 2248 resolution: {integrity: sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==} 2243 2249 2250 + '@oxc-resolver/binding-android-arm-eabi@11.16.4': 2251 + resolution: {integrity: sha512-6XUHilmj8D6Ggus+sTBp64x/DUQ7LgC/dvTDdUOt4iMQnDdSep6N1mnvVLIiG+qM5tRnNHravNzBJnUlYwRQoA==} 2252 + cpu: [arm] 2253 + os: [android] 2254 + 2255 + '@oxc-resolver/binding-android-arm64@11.16.4': 2256 + resolution: {integrity: sha512-5ODwd1F5mdkm6JIg1CNny9yxIrCzrkKpxmqas7Alw23vE0Ot8D4ykqNBW5Z/nIZkXVEo5VDmnm0sMBBIANcpeQ==} 2257 + cpu: [arm64] 2258 + os: [android] 2259 + 2260 + '@oxc-resolver/binding-darwin-arm64@11.16.4': 2261 + resolution: {integrity: sha512-egwvDK9DMU4Q8F4BG74/n4E22pQ0lT5ukOVB6VXkTj0iG2fnyoStHoFaBnmDseLNRA4r61Mxxz8k940CIaJMDg==} 2262 + cpu: [arm64] 2263 + os: [darwin] 2264 + 2265 + '@oxc-resolver/binding-darwin-x64@11.16.4': 2266 + resolution: {integrity: sha512-HMkODYrAG4HaFNCpaYzSQFkxeiz2wzl+smXwxeORIQVEo1WAgUrWbvYT/0RNJg/A8z2aGMGK5KWTUr2nX5GiMw==} 2267 + cpu: [x64] 2268 + os: [darwin] 2269 + 2270 + '@oxc-resolver/binding-freebsd-x64@11.16.4': 2271 + resolution: {integrity: sha512-mkcKhIdSlUqnndD928WAVVFMEr1D5EwHOBGHadypW0PkM0h4pn89ZacQvU7Qs/Z2qquzvbyw8m4Mq3jOYI+4Dw==} 2272 + cpu: [x64] 2273 + os: [freebsd] 2274 + 2275 + '@oxc-resolver/binding-linux-arm-gnueabihf@11.16.4': 2276 + resolution: {integrity: sha512-ZJvzbmXI/cILQVcJL9S2Fp7GLAIY4Yr6mpGb+k6LKLUSEq85yhG+rJ9eWCqgULVIf2BFps/NlmPTa7B7oj8jhQ==} 2277 + cpu: [arm] 2278 + os: [linux] 2279 + 2280 + '@oxc-resolver/binding-linux-arm-musleabihf@11.16.4': 2281 + resolution: {integrity: sha512-iZUB0W52uB10gBUDAi79eTnzqp1ralikCAjfq7CdokItwZUVJXclNYANnzXmtc0Xr0ox+YsDsG2jGcj875SatA==} 2282 + cpu: [arm] 2283 + os: [linux] 2284 + 2285 + '@oxc-resolver/binding-linux-arm64-gnu@11.16.4': 2286 + resolution: {integrity: sha512-qNQk0H6q1CnwS9cnvyjk9a+JN8BTbxK7K15Bb5hYfJcKTG1hfloQf6egndKauYOO0wu9ldCMPBrEP1FNIQEhaA==} 2287 + cpu: [arm64] 2288 + os: [linux] 2289 + 2290 + '@oxc-resolver/binding-linux-arm64-musl@11.16.4': 2291 + resolution: {integrity: sha512-wEXSaEaYxGGoVSbw0i2etjDDWcqErKr8xSkTdwATP798efsZmodUAcLYJhN0Nd4W35Oq6qAvFGHpKwFrrhpTrA==} 2292 + cpu: [arm64] 2293 + os: [linux] 2294 + 2295 + '@oxc-resolver/binding-linux-ppc64-gnu@11.16.4': 2296 + resolution: {integrity: sha512-CUFOlpb07DVOFLoYiaTfbSBRPIhNgwc/MtlYeg3p6GJJw+kEm/vzc9lohPSjzF2MLPB5hzsJdk+L/GjrTT3UPw==} 2297 + cpu: [ppc64] 2298 + os: [linux] 2299 + 2300 + '@oxc-resolver/binding-linux-riscv64-gnu@11.16.4': 2301 + resolution: {integrity: sha512-d8It4AH8cN9ReK1hW6ZO4x3rMT0hB2LYH0RNidGogV9xtnjLRU+Y3MrCeClLyOSGCibmweJJAjnwB7AQ31GEhg==} 2302 + cpu: [riscv64] 2303 + os: [linux] 2304 + 2305 + '@oxc-resolver/binding-linux-riscv64-musl@11.16.4': 2306 + resolution: {integrity: sha512-d09dOww9iKyEHSxuOQ/Iu2aYswl0j7ExBcyy14D6lJ5ijQSP9FXcJYJsJ3yvzboO/PDEFjvRuF41f8O1skiPVg==} 2307 + cpu: [riscv64] 2308 + os: [linux] 2309 + 2310 + '@oxc-resolver/binding-linux-s390x-gnu@11.16.4': 2311 + resolution: {integrity: sha512-lhjyGmUzTWHduZF3MkdUSEPMRIdExnhsqv8u1upX3A15epVn6YVwv4msFQPJl1x1wszkACPeDHGOtzHsITXGdw==} 2312 + cpu: [s390x] 2313 + os: [linux] 2314 + 2315 + '@oxc-resolver/binding-linux-x64-gnu@11.16.4': 2316 + resolution: {integrity: sha512-ZtqqiI5rzlrYBm/IMMDIg3zvvVj4WO/90Dg/zX+iA8lWaLN7K5nroXb17MQ4WhI5RqlEAgrnYDXW+hok1D9Kaw==} 2317 + cpu: [x64] 2318 + os: [linux] 2319 + 2320 + '@oxc-resolver/binding-linux-x64-musl@11.16.4': 2321 + resolution: {integrity: sha512-LM424h7aaKcMlqHnQWgTzO+GRNLyjcNnMpqm8SygEtFRVW693XS+XGXYvjORlmJtsyjo84ej1FMb3U2HE5eyjg==} 2322 + cpu: [x64] 2323 + os: [linux] 2324 + 2325 + '@oxc-resolver/binding-openharmony-arm64@11.16.4': 2326 + resolution: {integrity: sha512-8w8U6A5DDWTBv3OUxSD9fNk37liZuEC5jnAc9wQRv9DeYKAXvuUtBfT09aIZ58swaci0q1WS48/CoMVEO6jdCA==} 2327 + cpu: [arm64] 2328 + os: [openharmony] 2329 + 2330 + '@oxc-resolver/binding-wasm32-wasi@11.16.4': 2331 + resolution: {integrity: sha512-hnjb0mDVQOon6NdfNJ1EmNquonJUjoYkp7UyasjxVa4iiMcApziHP4czzzme6WZbp+vzakhVv2Yi5ACTon3Zlw==} 2332 + engines: {node: '>=14.0.0'} 2333 + cpu: [wasm32] 2334 + 2335 + '@oxc-resolver/binding-win32-arm64-msvc@11.16.4': 2336 + resolution: {integrity: sha512-+i0XtNfSP7cfnh1T8FMrMm4HxTeh0jxKP/VQCLWbjdUxaAQ4damho4gN9lF5dl0tZahtdszXLUboBFNloSJNOQ==} 2337 + cpu: [arm64] 2338 + os: [win32] 2339 + 2340 + '@oxc-resolver/binding-win32-ia32-msvc@11.16.4': 2341 + resolution: {integrity: sha512-ePW1islJrv3lPnef/iWwrjrSpRH8kLlftdKf2auQNWvYLx6F0xvcnv9d+r/upnVuttoQY9amLnWJf+JnCRksTw==} 2342 + cpu: [ia32] 2343 + os: [win32] 2344 + 2345 + '@oxc-resolver/binding-win32-x64-msvc@11.16.4': 2346 + resolution: {integrity: sha512-qnjQhjHI4TDL3hkidZyEmQRK43w2NHl6TP5Rnt/0XxYuLdEgx/1yzShhYidyqWzdnhGhSPTM/WVP2mK66XLegA==} 2347 + cpu: [x64] 2348 + os: [win32] 2349 + 2244 2350 '@oxc-transform/binding-android-arm-eabi@0.110.0': 2245 2351 resolution: {integrity: sha512-sE9dxvqqAax1YYJ3t7j+h5ZSI9jl6dYuDfngl6ieZUrIy5P89/8JKVgAzgp8o3wQSo7ndpJvYsi1K4ZqrmbP7w==} 2246 2352 engines: {node: ^20.19.0 || >=22.12.0} ··· 5282 5388 fastq@1.20.1: 5283 5389 resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} 5284 5390 5391 + fd-package-json@2.0.0: 5392 + resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} 5393 + 5285 5394 fdir@6.5.0: 5286 5395 resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 5287 5396 engines: {node: '>=12.0.0'} ··· 5363 5472 foreground-child@3.3.1: 5364 5473 resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 5365 5474 engines: {node: '>=14'} 5475 + 5476 + formatly@0.3.0: 5477 + resolution: {integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==} 5478 + engines: {node: '>=18.3.0'} 5479 + hasBin: true 5366 5480 5367 5481 forwarded@0.2.0: 5368 5482 resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} ··· 6133 6247 resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} 6134 6248 engines: {node: '>= 8'} 6135 6249 6250 + knip@5.82.1: 6251 + resolution: {integrity: sha512-1nQk+5AcnkqL40kGQXfouzAEXkTR+eSrgo/8m1d0BMei4eAzFwghoXC4gOKbACgBiCof7hE8wkBVDsEvznf85w==} 6252 + engines: {node: '>=18.18.0'} 6253 + hasBin: true 6254 + peerDependencies: 6255 + '@types/node': '>=18' 6256 + typescript: '>=5.0.4 <7' 6257 + 6136 6258 knitwork@1.3.0: 6137 6259 resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==} 6138 6260 ··· 6909 7031 oxc-parser@0.95.0: 6910 7032 resolution: {integrity: sha512-Te8fE/SmiiKWIrwBwxz5Dod87uYvsbcZ9JAL5ylPg1DevyKgTkxCXnPEaewk1Su2qpfNmry5RHoN+NywWFCG+A==} 6911 7033 engines: {node: ^20.19.0 || >=22.12.0} 7034 + 7035 + oxc-resolver@11.16.4: 7036 + resolution: {integrity: sha512-nvJr3orFz1wNaBA4neRw7CAn0SsjgVaEw1UHpgO/lzVW12w+nsFnvU/S6vVX3kYyFaZdxZheTExi/fa8R8PrZA==} 6912 7037 6913 7038 oxc-transform@0.110.0: 6914 7039 resolution: {integrity: sha512-/fymQNzzUoKZweH0nC5yvbI2eR0yWYusT9TEKDYVgOgYrf9Qmdez9lUFyvxKR9ycx+PTHi/reIOzqf3wkShQsw==} ··· 7822 7947 7823 7948 smob@1.5.0: 7824 7949 resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} 7950 + 7951 + smol-toml@1.6.0: 7952 + resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==} 7953 + engines: {node: '>= 18'} 7825 7954 7826 7955 socket.io-client@4.8.3: 7827 7956 resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==} ··· 7968 8097 resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 7969 8098 engines: {node: '>=8'} 7970 8099 8100 + strip-json-comments@5.0.3: 8101 + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} 8102 + engines: {node: '>=14.16'} 8103 + 7971 8104 strip-literal@3.1.0: 7972 8105 resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 7973 8106 ··· 8756 8889 8757 8890 w3c-keyname@2.2.8: 8758 8891 resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} 8892 + 8893 + walk-up-path@4.0.0: 8894 + resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} 8895 + engines: {node: 20 || >=22} 8759 8896 8760 8897 watchpack@2.5.1: 8761 8898 resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} ··· 11565 11702 11566 11703 '@oxc-project/types@0.95.0': {} 11567 11704 11705 + '@oxc-resolver/binding-android-arm-eabi@11.16.4': 11706 + optional: true 11707 + 11708 + '@oxc-resolver/binding-android-arm64@11.16.4': 11709 + optional: true 11710 + 11711 + '@oxc-resolver/binding-darwin-arm64@11.16.4': 11712 + optional: true 11713 + 11714 + '@oxc-resolver/binding-darwin-x64@11.16.4': 11715 + optional: true 11716 + 11717 + '@oxc-resolver/binding-freebsd-x64@11.16.4': 11718 + optional: true 11719 + 11720 + '@oxc-resolver/binding-linux-arm-gnueabihf@11.16.4': 11721 + optional: true 11722 + 11723 + '@oxc-resolver/binding-linux-arm-musleabihf@11.16.4': 11724 + optional: true 11725 + 11726 + '@oxc-resolver/binding-linux-arm64-gnu@11.16.4': 11727 + optional: true 11728 + 11729 + '@oxc-resolver/binding-linux-arm64-musl@11.16.4': 11730 + optional: true 11731 + 11732 + '@oxc-resolver/binding-linux-ppc64-gnu@11.16.4': 11733 + optional: true 11734 + 11735 + '@oxc-resolver/binding-linux-riscv64-gnu@11.16.4': 11736 + optional: true 11737 + 11738 + '@oxc-resolver/binding-linux-riscv64-musl@11.16.4': 11739 + optional: true 11740 + 11741 + '@oxc-resolver/binding-linux-s390x-gnu@11.16.4': 11742 + optional: true 11743 + 11744 + '@oxc-resolver/binding-linux-x64-gnu@11.16.4': 11745 + optional: true 11746 + 11747 + '@oxc-resolver/binding-linux-x64-musl@11.16.4': 11748 + optional: true 11749 + 11750 + '@oxc-resolver/binding-openharmony-arm64@11.16.4': 11751 + optional: true 11752 + 11753 + '@oxc-resolver/binding-wasm32-wasi@11.16.4': 11754 + dependencies: 11755 + '@napi-rs/wasm-runtime': 1.1.1 11756 + optional: true 11757 + 11758 + '@oxc-resolver/binding-win32-arm64-msvc@11.16.4': 11759 + optional: true 11760 + 11761 + '@oxc-resolver/binding-win32-ia32-msvc@11.16.4': 11762 + optional: true 11763 + 11764 + '@oxc-resolver/binding-win32-x64-msvc@11.16.4': 11765 + optional: true 11766 + 11568 11767 '@oxc-transform/binding-android-arm-eabi@0.110.0': 11569 11768 optional: true 11570 11769 ··· 14216 14415 14217 14416 dotenv@17.2.3: {} 14218 14417 14219 - dts-resolver@2.1.3: {} 14418 + dts-resolver@2.1.3(oxc-resolver@11.16.4): 14419 + optionalDependencies: 14420 + oxc-resolver: 11.16.4 14220 14421 14221 14422 dunder-proto@1.0.1: 14222 14423 dependencies: ··· 14696 14897 dependencies: 14697 14898 reusify: 1.1.0 14698 14899 14900 + fd-package-json@2.0.0: 14901 + dependencies: 14902 + walk-up-path: 4.0.0 14903 + 14699 14904 fdir@6.5.0(picomatch@4.0.3): 14700 14905 optionalDependencies: 14701 14906 picomatch: 4.0.3 ··· 14827 15032 dependencies: 14828 15033 cross-spawn: 7.0.6 14829 15034 signal-exit: 4.1.0 15035 + 15036 + formatly@0.3.0: 15037 + dependencies: 15038 + fd-package-json: 2.0.0 14830 15039 14831 15040 forwarded@0.2.0: {} 14832 15041 ··· 15690 15899 15691 15900 klona@2.0.6: {} 15692 15901 15902 + knip@5.82.1(@types/node@24.10.9)(typescript@5.9.3): 15903 + dependencies: 15904 + '@nodelib/fs.walk': 1.2.8 15905 + '@types/node': 24.10.9 15906 + fast-glob: 3.3.3 15907 + formatly: 0.3.0 15908 + jiti: 2.6.1 15909 + js-yaml: 4.1.1 15910 + minimist: 1.2.8 15911 + oxc-resolver: 11.16.4 15912 + picocolors: 1.1.1 15913 + picomatch: 4.0.3 15914 + smol-toml: 1.6.0 15915 + strip-json-comments: 5.0.3 15916 + typescript: 5.9.3 15917 + zod: 4.3.6 15918 + 15693 15919 knitwork@1.3.0: {} 15694 15920 15695 15921 launch-editor@2.12.0: ··· 16927 17153 '@oxc-parser/binding-win32-arm64-msvc': 0.95.0 16928 17154 '@oxc-parser/binding-win32-x64-msvc': 0.95.0 16929 17155 17156 + oxc-resolver@11.16.4: 17157 + optionalDependencies: 17158 + '@oxc-resolver/binding-android-arm-eabi': 11.16.4 17159 + '@oxc-resolver/binding-android-arm64': 11.16.4 17160 + '@oxc-resolver/binding-darwin-arm64': 11.16.4 17161 + '@oxc-resolver/binding-darwin-x64': 11.16.4 17162 + '@oxc-resolver/binding-freebsd-x64': 11.16.4 17163 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.16.4 17164 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.16.4 17165 + '@oxc-resolver/binding-linux-arm64-gnu': 11.16.4 17166 + '@oxc-resolver/binding-linux-arm64-musl': 11.16.4 17167 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.16.4 17168 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.16.4 17169 + '@oxc-resolver/binding-linux-riscv64-musl': 11.16.4 17170 + '@oxc-resolver/binding-linux-s390x-gnu': 11.16.4 17171 + '@oxc-resolver/binding-linux-x64-gnu': 11.16.4 17172 + '@oxc-resolver/binding-linux-x64-musl': 11.16.4 17173 + '@oxc-resolver/binding-openharmony-arm64': 11.16.4 17174 + '@oxc-resolver/binding-wasm32-wasi': 11.16.4 17175 + '@oxc-resolver/binding-win32-arm64-msvc': 11.16.4 17176 + '@oxc-resolver/binding-win32-ia32-msvc': 11.16.4 17177 + '@oxc-resolver/binding-win32-x64-msvc': 11.16.4 17178 + 16930 17179 oxc-transform@0.110.0: 16931 17180 optionalDependencies: 16932 17181 '@oxc-transform/binding-android-arm-eabi': 0.110.0 ··· 17753 18002 17754 18003 rfdc@1.4.1: {} 17755 18004 17756 - rolldown-plugin-dts@0.21.7(rolldown@1.0.0-rc.1)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)): 18005 + rolldown-plugin-dts@0.21.7(oxc-resolver@11.16.4)(rolldown@1.0.0-rc.1)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)): 17757 18006 dependencies: 17758 18007 '@babel/generator': 8.0.0-beta.4 17759 18008 '@babel/parser': 8.0.0-beta.4 17760 18009 '@babel/types': 8.0.0-beta.4 17761 18010 ast-kit: 3.0.0-beta.1 17762 18011 birpc: 4.0.0 17763 - dts-resolver: 2.1.3 18012 + dts-resolver: 2.1.3(oxc-resolver@11.16.4) 17764 18013 get-tsconfig: 4.13.0 17765 18014 obug: 2.1.1 17766 18015 rolldown: 1.0.0-rc.1 ··· 18117 18366 slugify@1.6.6: {} 18118 18367 18119 18368 smob@1.5.0: {} 18369 + 18370 + smol-toml@1.6.0: {} 18120 18371 18121 18372 socket.io-client@4.8.3: 18122 18373 dependencies: ··· 18284 18535 18285 18536 strip-json-comments@3.1.1: {} 18286 18537 18538 + strip-json-comments@5.0.3: {} 18539 + 18287 18540 strip-literal@3.1.0: 18288 18541 dependencies: 18289 18542 js-tokens: 9.0.1 ··· 18456 18709 dependencies: 18457 18710 typescript: 5.9.3 18458 18711 18459 - tsdown@0.20.1(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)): 18712 + tsdown@0.20.1(oxc-resolver@11.16.4)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)): 18460 18713 dependencies: 18461 18714 ansis: 4.2.0 18462 18715 cac: 6.7.14 ··· 18467 18720 obug: 2.1.1 18468 18721 picomatch: 4.0.3 18469 18722 rolldown: 1.0.0-rc.1 18470 - rolldown-plugin-dts: 0.21.7(rolldown@1.0.0-rc.1)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)) 18723 + rolldown-plugin-dts: 0.21.7(oxc-resolver@11.16.4)(rolldown@1.0.0-rc.1)(typescript@5.9.3)(vue-tsc@3.2.2(typescript@5.9.3)) 18471 18724 semver: 7.7.3 18472 18725 tinyexec: 1.0.2 18473 18726 tinyglobby: 0.2.15 ··· 19130 19383 typescript: 5.9.3 19131 19384 19132 19385 w3c-keyname@2.2.8: {} 19386 + 19387 + walk-up-path@4.0.0: {} 19133 19388 19134 19389 watchpack@2.5.1: 19135 19390 dependencies:
+2
server/utils/code-highlight.ts
··· 79 79 80 80 /** 81 81 * Determine the language for syntax highlighting based on file path 82 + * @public 82 83 */ 83 84 export function getLanguageFromPath(filePath: string): string { 84 85 const filename = filePath.split('/').pop() || '' ··· 251 252 /** 252 253 * Highlight code using Shiki with line-by-line output for line highlighting. 253 254 * Each line is wrapped in a span.line for individual line highlighting. 255 + * @public 254 256 */ 255 257 export async function highlightCode( 256 258 code: string,
+1
server/utils/error-handler.ts
··· 5 5 /** 6 6 * Generic error handler for Nitro routes 7 7 * Handles H3 errors, Valibot, and fallbacks in that order 8 + * @public 8 9 */ 9 10 export function handleApiError(error: unknown, fallback: ErrorOptions): never { 10 11 // If already a known Nuxt/H3 Error, re-throw
+1
server/utils/file-tree.ts
··· 69 69 /** 70 70 * Fetch and convert file tree for a package version. 71 71 * Returns the full response including tree and metadata. 72 + * @public 72 73 */ 73 74 export async function getPackageFileTree( 74 75 packageName: string,
+2
server/utils/import-resolver.ts
··· 8 8 9 9 /** 10 10 * Flatten a nested file tree into a set of file paths for quick lookups. 11 + * @public 11 12 */ 12 13 export function flattenFileTree(tree: PackageFileTree[]): FileSet { 13 14 const files = new Set<string>() ··· 202 203 203 204 /** 204 205 * Create a resolver function bound to a specific file tree and current file. 206 + * @public 205 207 */ 206 208 export function createImportResolver( 207 209 files: FileSet,
+1
server/utils/install-size.ts
··· 31 31 * No filesystem operations - safe for serverless environments. 32 32 * 33 33 * Dependencies are resolved for linux-x64-glibc as a representative platform. 34 + * @public 34 35 */ 35 36 export const calculateInstallSize = defineCachedFunction( 36 37 async (name: string, version: string): Promise<InstallSizeResult> => {
+1
server/utils/jsr.ts
··· 14 14 * 15 15 * @param npmPackageName - The npm package name (e.g., "@hono/hono") 16 16 * @returns JsrPackageInfo with existence status and metadata 17 + * @public 17 18 */ 18 19 export const fetchJsrPackageInfo = defineCachedFunction( 19 20 async (npmPackageName: string): Promise<JsrPackageInfo> => {
+1
server/utils/npm.ts
··· 64 64 /** 65 65 * Resolve multiple dependency constraints to their best matching versions. 66 66 * Returns a map of package name to resolved version. 67 + * @public 67 68 */ 68 69 export async function resolveDependencyVersions( 69 70 dependencies: Record<string, string>,
+1
server/utils/parse-package-params.ts
··· 1 1 /** 2 2 * Parses Nitro router segments into packageName and an optional version 3 3 * Handles patterns: [pkg], [pkg, 'v', version], [@scope, pkg], [@scope, pkg, 'v', version] 4 + * @public 4 5 */ 5 6 export function parsePackageParams(segments: string[]): { 6 7 rawPackageName: string
+1
server/utils/readme.ts
··· 246 246 return resolved 247 247 } 248 248 249 + /** @public */ 249 250 export async function renderReadmeHtml( 250 251 content: string, 251 252 packageName: string,
+1
server/utils/vulnerability-tree.ts
··· 109 109 110 110 /** 111 111 * Analyze entire dependency tree for vulnerabilities. 112 + * @public 112 113 */ 113 114 export const analyzeVulnerabilityTree = defineCachedFunction( 114 115 async (name: string, version: string): Promise<VulnerabilityTreeResult> => {
+3
shared/schemas/package.ts
··· 73 73 /** 74 74 * Automatically infer types for routes 75 75 * Usage - prefer this over manually defining interfaces 76 + * @public 76 77 */ 77 78 export type PackageRouteParams = v.InferOutput<typeof PackageRouteParamsSchema> 79 + /** @public */ 78 80 export type PackageVersionQuery = v.InferOutput<typeof PackageVersionQuerySchema> 81 + /** @public */ 79 82 export type PackageFileQuery = v.InferOutput<typeof PackageFileQuerySchema>
+1
shared/types/docs.ts
··· 10 10 message?: string 11 11 } 12 12 13 + /** @public */ 13 14 export interface DocsSearchResponse { 14 15 package: string 15 16 version: string
+5
shared/types/npm-registry.ts
··· 204 204 package: string 205 205 } 206 206 207 + /** @public */ 207 208 export interface NpmDownloadRange { 208 209 downloads: Array<{ 209 210 downloads: number ··· 218 219 * Organization API types 219 220 * These require authentication 220 221 * Note: Not covered by @npm/types 222 + * @public 221 223 */ 222 224 export interface NpmOrgMember { 223 225 user: string 224 226 role: 'developer' | 'admin' | 'owner' 225 227 } 226 228 229 + /** @public */ 227 230 export interface NpmTeam { 228 231 name: string 229 232 description?: string 230 233 members?: string[] 231 234 } 232 235 236 + /** @public */ 233 237 export interface NpmPackageAccess { 234 238 permissions: 'read-only' | 'read-write' 235 239 } ··· 237 241 /** 238 242 * Trusted Publishing types 239 243 * Note: Not covered by @npm/types 244 + * @public 240 245 */ 241 246 export interface NpmTrustedPublisher { 242 247 type: 'github-actions' | 'gitlab-ci'
+1
shared/types/osv.ts
··· 75 75 76 76 /** 77 77 * Package vulnerability response returned by our API 78 + * @public 78 79 */ 79 80 export interface PackageVulnerabilities { 80 81 package: string
+2
shared/utils/constants.ts
··· 8 8 export const NPM_REGISTRY = 'https://registry.npmjs.org' 9 9 export const ERROR_PACKAGE_ANALYSIS_FAILED = 'Failed to analyze package.' 10 10 export const ERROR_PACKAGE_VERSION_AND_FILE_FAILED = 'Version and file path are required.' 11 + /** @public */ 11 12 export const ERROR_PACKAGE_REQUIREMENTS_FAILED = 12 13 'Package name, version, and file path are required.' 13 14 export const ERROR_FILE_LIST_FETCH_FAILED = 'Failed to fetch file list.' ··· 15 16 export const NPM_MISSING_README_SENTINEL = 'ERROR: No README data found!' 16 17 export const ERROR_JSR_FETCH_FAILED = 'Failed to fetch package from JSR registry.' 17 18 export const ERROR_NPM_FETCH_FAILED = 'Failed to fetch package from npm registry.' 19 + /** @public */ 18 20 export const ERROR_SUGGESTIONS_FETCH_FAILED = 'Failed to fetch suggestions.' 19 21 20 22 // Theming
+3
shared/utils/git-providers.ts
··· 320 320 /** 321 321 * Parse repository field from package.json into repository info. 322 322 * Supports both full objects and shorthand strings. 323 + * @public 323 324 */ 324 325 export function parseRepositoryInfo( 325 326 repository?: { type?: string; url?: string; directory?: string } | string, ··· 351 352 } 352 353 } 353 354 355 + /** @public */ 354 356 export function getProviderConfig(providerId: ProviderId): ProviderConfig | undefined { 355 357 return providers.find(p => p.id === providerId) 356 358 } ··· 363 365 return url 364 366 } 365 367 368 + /** @public */ 366 369 export function isKnownGitProvider(url: string): boolean { 367 370 return parseRepoUrl(url) !== null 368 371 }
+1
shared/utils/severity.ts
··· 25 25 26 26 /** 27 27 * Badge color classes for severity levels 28 + * @public 28 29 */ 29 30 export const SEVERITY_BADGE_COLORS: Record<OsvSeverityLevel, string> = { 30 31 critical: 'bg-bg-muted border border-border text-fg',
+1
shared/utils/spdx.ts
··· 21 21 * Generate an SPDX license URL for the given license identifier. 22 22 * Returns null if the license is not a valid SPDX identifier. 23 23 * @see https://spdx.org/licenses/ 24 + * @public 24 25 */ 25 26 export function getSpdxLicenseUrl(license: string | undefined): string | null { 26 27 if (!license) return null