1
1
import { resolve } from 'node:path'
2
2
import { fileURLToPath } from 'node:url'
3
3
import type { Logger } from 'vite'
4
- import { describe , expect , test } from 'vitest'
4
+ import { describe , expect , test , vi } from 'vitest'
5
+ import type { OutputOptions } from 'rollup'
5
6
import type { LibraryFormats , LibraryOptions } from '../build'
6
7
import { resolveBuildOutputs , resolveLibFilename } from '../build'
8
+ import { createLogger } from '../logger'
7
9
8
10
const __dirname = resolve ( fileURLToPath ( import . meta. url ) , '..' )
9
11
@@ -13,6 +15,101 @@ const baseLibOptions: LibraryOptions = {
13
15
entry : 'mylib.js'
14
16
}
15
17
18
+ describe ( 'resolveBuildOutputs' , ( ) => {
19
+ test ( 'resolves outputs correctly' , ( ) => {
20
+ const logger = createLogger ( )
21
+ const libOptions : LibraryOptions = { ...baseLibOptions }
22
+ const outputs : OutputOptions [ ] = [ { format : 'es' } ]
23
+ const resolvedOutputs = resolveBuildOutputs ( outputs , libOptions , logger )
24
+
25
+ expect ( resolvedOutputs ) . toEqual ( [
26
+ {
27
+ format : 'es'
28
+ }
29
+ ] )
30
+ } )
31
+
32
+ test ( 'resolves outputs from lib options' , ( ) => {
33
+ const logger = createLogger ( )
34
+ const libOptions : LibraryOptions = { ...baseLibOptions , name : 'lib' }
35
+ const resolvedOutputs = resolveBuildOutputs ( void 0 , libOptions , logger )
36
+
37
+ expect ( resolvedOutputs ) . toEqual ( [
38
+ {
39
+ format : 'es'
40
+ } ,
41
+ {
42
+ format : 'umd'
43
+ }
44
+ ] )
45
+ } )
46
+
47
+ test ( 'does not change outputs when lib options are missing' , ( ) => {
48
+ const logger = createLogger ( )
49
+ const outputs : OutputOptions [ ] = [ { format : 'es' } ]
50
+ const resolvedOutputs = resolveBuildOutputs ( outputs , false , logger )
51
+
52
+ expect ( resolvedOutputs ) . toEqual ( outputs )
53
+ } )
54
+
55
+ test ( 'logs a warning when outputs is an array and formats are specified' , ( ) => {
56
+ const logger = createLogger ( )
57
+ const loggerSpy = vi . spyOn ( logger , 'warn' ) . mockImplementation ( ( ) => { } )
58
+ const libOptions : LibraryOptions = {
59
+ ...baseLibOptions ,
60
+ formats : [ 'iife' ]
61
+ }
62
+ const outputs : OutputOptions [ ] = [ { format : 'es' } ]
63
+
64
+ resolveBuildOutputs ( outputs , libOptions , logger )
65
+
66
+ expect ( loggerSpy ) . toHaveBeenCalledWith (
67
+ expect . stringContaining ( '"build.lib.formats" will be ignored because' )
68
+ )
69
+ } )
70
+
71
+ test ( 'throws an error when lib.name is missing on iife format' , ( ) => {
72
+ const logger = createLogger ( )
73
+ const libOptions : LibraryOptions = {
74
+ ...baseLibOptions ,
75
+ formats : [ 'iife' ]
76
+ }
77
+ const resolveBuild = ( ) => resolveBuildOutputs ( void 0 , libOptions , logger )
78
+
79
+ expect ( resolveBuild ) . toThrowError ( / O p t i o n " b u i l d \. l i b \. n a m e " i s r e q u i r e d / )
80
+ } )
81
+
82
+ test ( 'throws an error when lib.name is missing on umd format' , ( ) => {
83
+ const logger = createLogger ( )
84
+ const libOptions : LibraryOptions = { ...baseLibOptions , formats : [ 'umd' ] }
85
+ const resolveBuild = ( ) => resolveBuildOutputs ( void 0 , libOptions , logger )
86
+
87
+ expect ( resolveBuild ) . toThrowError ( / O p t i o n " b u i l d \. l i b \. n a m e " i s r e q u i r e d / )
88
+ } )
89
+
90
+ test ( 'throws an error when output.name is missing on iife format' , ( ) => {
91
+ const logger = createLogger ( )
92
+ const libOptions : LibraryOptions = { ...baseLibOptions }
93
+ const outputs : OutputOptions [ ] = [ { format : 'iife' } ]
94
+ const resolveBuild = ( ) => resolveBuildOutputs ( outputs , libOptions , logger )
95
+
96
+ expect ( resolveBuild ) . toThrowError (
97
+ / E n t r i e s i n " b u i l d \. r o l l u p O p t i o n s \. o u t p u t " m u s t s p e c i f y " n a m e " /
98
+ )
99
+ } )
100
+
101
+ test ( 'throws an error when output.name is missing on umd format' , ( ) => {
102
+ const logger = createLogger ( )
103
+ const libOptions : LibraryOptions = { ...baseLibOptions }
104
+ const outputs : OutputOptions [ ] = [ { format : 'umd' } ]
105
+ const resolveBuild = ( ) => resolveBuildOutputs ( outputs , libOptions , logger )
106
+
107
+ expect ( resolveBuild ) . toThrowError (
108
+ / E n t r i e s i n " b u i l d \. r o l l u p O p t i o n s \. o u t p u t " m u s t s p e c i f y " n a m e " /
109
+ )
110
+ } )
111
+ } )
112
+
16
113
describe ( 'resolveLibFilename' , ( ) => {
17
114
test ( 'custom filename function' , ( ) => {
18
115
const filename = resolveLibFilename (
0 commit comments