/
build.spec.ts
116 lines (99 loc) · 2.74 KB
/
build.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
import { describe, expect, test } from 'vitest'
import type { LibraryFormats, LibraryOptions } from '../build'
import { resolveLibFilename } from '../build'
const __dirname = resolve(fileURLToPath(import.meta.url), '..')
type FormatsToFileNames = [LibraryFormats, string][]
const baseLibOptions: LibraryOptions = {
fileName: 'my-lib',
entry: 'mylib.js'
}
describe('resolveLibFilename', () => {
test('custom filename function', () => {
const filename = resolveLibFilename(
{
fileName: (format) => `custom-filename-function.${format}.js`,
entry: 'mylib.js'
},
'es',
resolve(__dirname, 'packages/name')
)
expect(filename).toBe('custom-filename-function.es.js')
})
test('custom filename string', () => {
const filename = resolveLibFilename(
{
fileName: 'custom-filename',
entry: 'mylib.js'
},
'es',
resolve(__dirname, 'packages/name')
)
expect(filename).toBe('custom-filename.mjs')
})
test('package name as filename', () => {
const filename = resolveLibFilename(
{
entry: 'mylib.js'
},
'es',
resolve(__dirname, 'packages/name')
)
expect(filename).toBe('mylib.mjs')
})
test('custom filename and no package name', () => {
const filename = resolveLibFilename(
{
fileName: 'custom-filename',
entry: 'mylib.js'
},
'es',
resolve(__dirname, 'packages/noname')
)
expect(filename).toBe('custom-filename.mjs')
})
test('missing filename', () => {
expect(() => {
resolveLibFilename(
{
entry: 'mylib.js'
},
'es',
resolve(__dirname, 'packages/noname')
)
}).toThrow()
})
test('commonjs package extensions', () => {
const formatsToFilenames: FormatsToFileNames = [
['es', 'my-lib.mjs'],
['umd', 'my-lib.umd.js'],
['cjs', 'my-lib.js'],
['iife', 'my-lib.iife.js']
]
for (const [format, expectedFilename] of formatsToFilenames) {
const filename = resolveLibFilename(
baseLibOptions,
format,
resolve(__dirname, 'packages/noname')
)
expect(filename).toBe(expectedFilename)
}
})
test('module package extensions', () => {
const formatsToFilenames: FormatsToFileNames = [
['es', 'my-lib.js'],
['umd', 'my-lib.umd.cjs'],
['cjs', 'my-lib.cjs'],
['iife', 'my-lib.iife.js']
]
for (const [format, expectedFilename] of formatsToFilenames) {
const filename = resolveLibFilename(
baseLibOptions,
format,
resolve(__dirname, 'packages/module')
)
expect(expectedFilename).toBe(filename)
}
})
})