Skip to content

Commit b95715b

Browse files
committed
test: import-resolver
1 parent 5d9b1bb commit b95715b

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

test/unit/import-resolver.spec.ts

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { describe, expect, it } from 'vitest'
2+
import type { PackageFileTree } from '../../shared/types'
3+
import {
4+
createImportResolver,
5+
flattenFileTree,
6+
resolveRelativeImport,
7+
} from '../../server/utils/import-resolver'
8+
9+
describe('flattenFileTree', () => {
10+
it('flattens nested trees into a file set', () => {
11+
const tree: PackageFileTree[] = [
12+
{
13+
name: 'dist',
14+
path: 'dist',
15+
type: 'directory',
16+
children: [
17+
{ name: 'index.js', path: 'dist/index.js', type: 'file', size: 10 },
18+
{
19+
name: 'utils',
20+
path: 'dist/utils',
21+
type: 'directory',
22+
children: [{ name: 'format.js', path: 'dist/utils/format.js', type: 'file', size: 5 }],
23+
},
24+
],
25+
},
26+
]
27+
28+
const files = flattenFileTree(tree)
29+
30+
expect(files.has('dist/index.js')).toBe(true)
31+
expect(files.has('dist/utils/format.js')).toBe(true)
32+
expect(files.has('dist/utils')).toBe(false)
33+
})
34+
})
35+
36+
describe('resolveRelativeImport', () => {
37+
it('resolves a relative import with extension priority for JS files', () => {
38+
const files = new Set<string>(['dist/utils.js', 'dist/utils.ts'])
39+
const resolved = resolveRelativeImport('./utils', 'dist/index.js', files)
40+
41+
expect(resolved?.path).toBe('dist/utils.js')
42+
})
43+
44+
it('resolves directory imports to index files', () => {
45+
const files = new Set<string>(['dist/components/index.js'])
46+
const resolved = resolveRelativeImport('./components', 'dist/index.js', files)
47+
48+
expect(resolved?.path).toBe('dist/components/index.js')
49+
})
50+
51+
it('resolves parent directory paths', () => {
52+
const files = new Set<string>(['dist/shared/helpers.js'])
53+
const resolved = resolveRelativeImport('../shared/helpers', 'dist/pages/home.js', files)
54+
55+
expect(resolved?.path).toBe('dist/shared/helpers.js')
56+
})
57+
58+
it('returns null for non-relative imports', () => {
59+
const files = new Set<string>(['dist/utils.js'])
60+
const resolved = resolveRelativeImport('react', 'dist/index.js', files)
61+
62+
expect(resolved).toBeNull()
63+
})
64+
65+
it('returns null when no matching file is found', () => {
66+
const files = new Set<string>(['dist/utils.js'])
67+
const resolved = resolveRelativeImport('./missing', 'dist/index.js', files)
68+
69+
expect(resolved).toBeNull()
70+
})
71+
})
72+
73+
describe('createImportResolver', () => {
74+
it('creates a resolver that returns code browser URLs', () => {
75+
const files = new Set<string>(['dist/utils.js'])
76+
const resolver = createImportResolver(files, 'dist/index.js', 'pkg-name', '1.2.3')
77+
78+
const url = resolver('./utils')
79+
80+
expect(url).toBe('/code/pkg-name/v/1.2.3/dist/utils.js')
81+
})
82+
})

0 commit comments

Comments
 (0)