Skip to content

Commit ff78f69

Browse files
committed
fix: use rollupConfig and externals for deno doc module resolution
1 parent 791dc8f commit ff78f69

4 files changed

Lines changed: 67 additions & 56 deletions

File tree

nuxt.config.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ export default defineNuxtConfig({
9797
'@shikijs/engine-javascript',
9898
'@shikijs/core',
9999
],
100+
external: ['@deno/doc'],
101+
},
102+
rollupConfig: {
103+
output: {
104+
paths: {
105+
'@deno/doc': '@jsr/deno__doc',
106+
},
107+
},
100108
},
101109
},
102110

shared/utils/npm.ts

Lines changed: 3 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,9 @@
11
import { createError } from 'h3'
22
import validatePackageName from 'validate-npm-package-name'
33

4-
/**
5-
* Parsed package parameters from URL path segments.
6-
*/
7-
export interface ParsedPackageParams {
8-
/** The npm package name (e.g., "vue", "@nuxt/kit") */
9-
packageName: string
10-
/** The version if specified (e.g., "3.4.0"), undefined otherwise */
11-
version: string | undefined
12-
/** Remaining path segments after the version (e.g., for file paths) */
13-
rest: string[]
14-
}
15-
16-
/**
17-
* Parse package name, optional version, and remaining path from URL segments.
18-
*
19-
* Supports these URL patterns:
20-
* - `/pkg` → { packageName: "pkg", version: undefined, rest: [] }
21-
* - `/pkg/v/1.2.3` → { packageName: "pkg", version: "1.2.3", rest: [] }
22-
* - `/pkg/v/1.2.3/src/index.ts` → { packageName: "pkg", version: "1.2.3", rest: ["src", "index.ts"] }
23-
* - `/@scope/pkg` → { packageName: "@scope/pkg", version: undefined, rest: [] }
24-
* - `/@scope/pkg/v/1.2.3` → { packageName: "@scope/pkg", version: "1.2.3", rest: [] }
25-
*
26-
* @param pkgParam - The raw package parameter from the URL (e.g., "vue/v/3.4.0/src/index.ts")
27-
* @returns Parsed package name, optional version, and remaining path segments
28-
*
29-
* @example
30-
* ```ts
31-
* parsePackageParam('vue')
32-
* // { packageName: 'vue', version: undefined, rest: [] }
33-
*
34-
* parsePackageParam('vue/v/3.4.0')
35-
* // { packageName: 'vue', version: '3.4.0', rest: [] }
36-
*
37-
* parsePackageParam('@nuxt/kit/v/1.0.0/src/index.ts')
38-
* // { packageName: '@nuxt/kit', version: '1.0.0', rest: ['src', 'index.ts'] }
39-
* ```
40-
*/
41-
export function parsePackageParam(pkgParam: string): ParsedPackageParams {
42-
const segments = pkgParam.split('/')
43-
const vIndex = segments.indexOf('v')
44-
45-
if (vIndex !== -1 && vIndex < segments.length - 1) {
46-
return {
47-
packageName: segments.slice(0, vIndex).join('/'),
48-
version: segments[vIndex + 1],
49-
rest: segments.slice(vIndex + 2),
50-
}
51-
}
52-
53-
return {
54-
packageName: segments.join('/'),
55-
version: undefined,
56-
rest: [],
57-
}
58-
}
4+
// Re-export from separate file (avoids h3 dependency for unit tests)
5+
export { parsePackageParam } from './parse-package-param'
6+
export type { ParsedPackageParams } from './parse-package-param'
597

608
/**
619
* Validate an npm package name and throw an HTTP error if invalid.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* Parsed package parameters from URL path segments.
3+
*/
4+
export interface ParsedPackageParams {
5+
/** The npm package name (e.g., "vue", "@nuxt/kit") */
6+
packageName: string
7+
/** The version if specified (e.g., "3.4.0"), undefined otherwise */
8+
version: string | undefined
9+
/** Remaining path segments after the version (e.g., for file paths) */
10+
rest: string[]
11+
}
12+
13+
/**
14+
* Parse package name, optional version, and remaining path from URL segments.
15+
*
16+
* Supports these URL patterns:
17+
* - `/pkg` → { packageName: "pkg", version: undefined, rest: [] }
18+
* - `/pkg/v/1.2.3` → { packageName: "pkg", version: "1.2.3", rest: [] }
19+
* - `/pkg/v/1.2.3/src/index.ts` → { packageName: "pkg", version: "1.2.3", rest: ["src", "index.ts"] }
20+
* - `/@scope/pkg` → { packageName: "@scope/pkg", version: undefined, rest: [] }
21+
* - `/@scope/pkg/v/1.2.3` → { packageName: "@scope/pkg", version: "1.2.3", rest: [] }
22+
*
23+
* @param pkgParam - The raw package parameter from the URL (e.g., "vue/v/3.4.0/src/index.ts")
24+
* @returns Parsed package name, optional version, and remaining path segments
25+
*
26+
* @example
27+
* ```ts
28+
* parsePackageParam('vue')
29+
* // { packageName: 'vue', version: undefined, rest: [] }
30+
*
31+
* parsePackageParam('vue/v/3.4.0')
32+
* // { packageName: 'vue', version: '3.4.0', rest: [] }
33+
*
34+
* parsePackageParam('@nuxt/kit/v/1.0.0/src/index.ts')
35+
* // { packageName: '@nuxt/kit', version: '1.0.0', rest: ['src', 'index.ts'] }
36+
* ```
37+
*/
38+
export function parsePackageParam(pkgParam: string): ParsedPackageParams {
39+
const segments = pkgParam.split('/')
40+
const vIndex = segments.indexOf('v')
41+
42+
if (vIndex !== -1 && vIndex < segments.length - 1) {
43+
return {
44+
packageName: segments.slice(0, vIndex).join('/'),
45+
version: segments[vIndex + 1],
46+
rest: segments.slice(vIndex + 2),
47+
}
48+
}
49+
50+
return {
51+
packageName: segments.join('/'),
52+
version: undefined,
53+
rest: [],
54+
}
55+
}

test/unit/parse-package-param.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it } from 'vitest'
2-
import { parsePackageParam } from '../../shared/utils/npm'
2+
import { parsePackageParam } from '../../shared/utils/parse-package-param'
33

44
describe('parsePackageParam', () => {
55
describe('unscoped packages', () => {

0 commit comments

Comments
 (0)