@@ -11,42 +11,54 @@ const FAKE_PACKAGE_JSON = {
1111}
1212
1313describe ( 'generateExports' , ( ) => {
14- test ( 'no entries' , ( ) => {
15- const results = generateExports ( FAKE_PACKAGE_JSON , cwd , { } )
16- expect ( results ) . toMatchInlineSnapshot ( `
14+ test ( 'no entries' , async ( ) => {
15+ const results = generateExports ( FAKE_PACKAGE_JSON , cwd , { } , { } )
16+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
1717 {
1818 "exports": {
1919 "./package.json": "./package.json",
2020 },
2121 "main": undefined,
2222 "module": undefined,
23+ "publishExports": undefined,
2324 "types": undefined,
2425 }
2526 ` )
2627 } )
2728
28- test ( 'only one entry' , ( ) => {
29- const results = generateExports ( FAKE_PACKAGE_JSON , cwd , {
30- es : [ genChunk ( 'main.js' ) ] ,
31- } )
32- expect ( results ) . toMatchInlineSnapshot ( `
29+ test ( 'only one entry' , async ( ) => {
30+ const results = generateExports (
31+ FAKE_PACKAGE_JSON ,
32+ cwd ,
33+ {
34+ es : [ genChunk ( 'main.js' ) ] ,
35+ } ,
36+ { } ,
37+ )
38+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
3339 {
3440 "exports": {
3541 ".": "./main.js",
3642 "./package.json": "./package.json",
3743 },
3844 "main": "./main.js",
3945 "module": "./main.js",
46+ "publishExports": undefined,
4047 "types": undefined,
4148 }
4249 ` )
4350 } )
4451
45- test ( 'index entry' , ( ) => {
46- const results = generateExports ( FAKE_PACKAGE_JSON , cwd , {
47- es : [ genChunk ( 'index.js' ) , genChunk ( 'foo.js' ) ] ,
48- } )
49- expect ( results ) . toMatchInlineSnapshot ( `
52+ test ( 'index entry' , async ( ) => {
53+ const results = generateExports (
54+ FAKE_PACKAGE_JSON ,
55+ cwd ,
56+ {
57+ es : [ genChunk ( 'index.js' ) , genChunk ( 'foo.js' ) ] ,
58+ } ,
59+ { } ,
60+ )
61+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
5062 {
5163 "exports": {
5264 ".": "./index.js",
@@ -55,16 +67,22 @@ describe('generateExports', () => {
5567 },
5668 "main": "./index.js",
5769 "module": "./index.js",
70+ "publishExports": undefined,
5871 "types": undefined,
5972 }
6073 ` )
6174 } )
6275
63- test ( 'multiple entries' , ( ) => {
64- const results = generateExports ( FAKE_PACKAGE_JSON , cwd , {
65- es : [ genChunk ( 'foo.js' ) , genChunk ( 'bar.js' ) ] ,
66- } )
67- expect ( results ) . toMatchInlineSnapshot ( `
76+ test ( 'multiple entries' , async ( ) => {
77+ const results = generateExports (
78+ FAKE_PACKAGE_JSON ,
79+ cwd ,
80+ {
81+ es : [ genChunk ( 'foo.js' ) , genChunk ( 'bar.js' ) ] ,
82+ } ,
83+ { } ,
84+ )
85+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
6886 {
6987 "exports": {
7088 "./bar": "./bar.js",
@@ -73,17 +91,23 @@ describe('generateExports', () => {
7391 },
7492 "main": undefined,
7593 "module": undefined,
94+ "publishExports": undefined,
7695 "types": undefined,
7796 }
7897 ` )
7998 } )
8099
81- test ( 'dual formats' , ( ) => {
82- const results = generateExports ( FAKE_PACKAGE_JSON , cwd , {
83- es : [ genChunk ( 'foo.js' ) ] ,
84- cjs : [ genChunk ( 'foo.cjs' ) ] ,
85- } )
86- expect ( results ) . toMatchInlineSnapshot ( `
100+ test ( 'dual formats' , async ( ) => {
101+ const results = generateExports (
102+ FAKE_PACKAGE_JSON ,
103+ cwd ,
104+ {
105+ es : [ genChunk ( 'foo.js' ) ] ,
106+ cjs : [ genChunk ( 'foo.cjs' ) ] ,
107+ } ,
108+ { } ,
109+ )
110+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
87111 {
88112 "exports": {
89113 ".": {
@@ -94,17 +118,23 @@ describe('generateExports', () => {
94118 },
95119 "main": "./foo.cjs",
96120 "module": "./foo.js",
121+ "publishExports": undefined,
97122 "types": undefined,
98123 }
99124 ` )
100125 } )
101126
102- test ( 'dts' , ( ) => {
103- const results = generateExports ( FAKE_PACKAGE_JSON , cwd , {
104- es : [ genChunk ( 'foo.js' ) , genChunk ( 'foo.d.ts' ) ] ,
105- cjs : [ genChunk ( 'foo.cjs' ) , genChunk ( 'foo.d.cts' ) ] ,
106- } )
107- expect ( results ) . toMatchInlineSnapshot ( `
127+ test ( 'dts' , async ( ) => {
128+ const results = generateExports (
129+ FAKE_PACKAGE_JSON ,
130+ cwd ,
131+ {
132+ es : [ genChunk ( 'foo.js' ) , genChunk ( 'foo.d.ts' ) ] ,
133+ cjs : [ genChunk ( 'foo.cjs' ) , genChunk ( 'foo.d.cts' ) ] ,
134+ } ,
135+ { } ,
136+ )
137+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
108138 {
109139 "exports": {
110140 ".": {
@@ -115,17 +145,23 @@ describe('generateExports', () => {
115145 },
116146 "main": "./foo.cjs",
117147 "module": "./foo.js",
148+ "publishExports": undefined,
118149 "types": "./foo.d.cts",
119150 }
120151 ` )
121152 } )
122153
123- test ( 'fixed extension' , ( ) => {
124- const results = generateExports ( FAKE_PACKAGE_JSON , cwd , {
125- es : [ genChunk ( 'index.mjs' ) , genChunk ( 'index.d.mts' ) ] ,
126- cjs : [ genChunk ( 'index.cjs' ) , genChunk ( 'index.d.cts' ) ] ,
127- } )
128- expect ( results ) . toMatchInlineSnapshot ( `
154+ test ( 'fixed extension' , async ( ) => {
155+ const results = generateExports (
156+ FAKE_PACKAGE_JSON ,
157+ cwd ,
158+ {
159+ es : [ genChunk ( 'index.mjs' ) , genChunk ( 'index.d.mts' ) ] ,
160+ cjs : [ genChunk ( 'index.cjs' ) , genChunk ( 'index.d.cts' ) ] ,
161+ } ,
162+ { } ,
163+ )
164+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
129165 {
130166 "exports": {
131167 ".": {
@@ -136,13 +172,136 @@ describe('generateExports', () => {
136172 },
137173 "main": "./index.cjs",
138174 "module": "./index.mjs",
175+ "publishExports": undefined,
139176 "types": "./index.d.cts",
140177 }
141178 ` )
142179 } )
180+
181+ test ( 'dev exports: dev condition' , async ( ) => {
182+ const results = await generateExports (
183+ FAKE_PACKAGE_JSON ,
184+ cwd ,
185+ { es : [ genChunk ( 'index.js' ) ] , cjs : [ genChunk ( 'index.cjs' ) ] } ,
186+ { devExports : 'dev' } ,
187+ )
188+ // key order matters
189+ expect ( JSON . stringify ( results , undefined , 2 ) ) . toMatchInlineSnapshot ( `
190+ "{
191+ "main": "./index.cjs",
192+ "module": "./index.js",
193+ "exports": {
194+ ".": {
195+ "dev": "./SRC/index.js",
196+ "import": "./index.js",
197+ "require": "./index.cjs"
198+ },
199+ "./package.json": "./package.json"
200+ },
201+ "publishExports": {
202+ ".": {
203+ "import": "./index.js",
204+ "require": "./index.cjs"
205+ },
206+ "./package.json": "./package.json"
207+ }
208+ }"
209+ ` )
210+ } )
211+
212+ test ( 'dev exports: all conditions' , async ( ) => {
213+ const results = generateExports (
214+ FAKE_PACKAGE_JSON ,
215+ cwd ,
216+ { es : [ genChunk ( 'index.js' ) ] , cjs : [ genChunk ( 'index.cjs' ) ] } ,
217+ { devExports : true } ,
218+ )
219+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
220+ {
221+ "exports": {
222+ ".": "./SRC/index.js",
223+ "./package.json": "./package.json",
224+ },
225+ "main": "./index.cjs",
226+ "module": "./index.js",
227+ "publishExports": {
228+ ".": {
229+ "import": "./index.js",
230+ "require": "./index.cjs",
231+ },
232+ "./package.json": "./package.json",
233+ },
234+ "types": undefined,
235+ }
236+ ` )
237+ } )
238+
239+ test ( 'customExports' , async ( ) => {
240+ const results = await generateExports (
241+ FAKE_PACKAGE_JSON ,
242+ cwd ,
243+ { es : [ genChunk ( 'index.js' ) ] } ,
244+ {
245+ devExports : 'dev' ,
246+ customExports ( exports ) {
247+ exports [ './TEST' ] = './TEST'
248+ return Promise . resolve ( exports )
249+ } ,
250+ } ,
251+ )
252+ // key order matters
253+ expect ( JSON . stringify ( results , undefined , 2 ) ) . toMatchInlineSnapshot ( `
254+ "{
255+ "main": "./index.js",
256+ "module": "./index.js",
257+ "exports": {
258+ ".": {
259+ "dev": "./SRC/index.js",
260+ "default": "./index.js"
261+ },
262+ "./package.json": "./package.json",
263+ "./TEST": "./TEST"
264+ },
265+ "publishExports": {
266+ ".": "./index.js",
267+ "./package.json": "./package.json",
268+ "./TEST": "./TEST"
269+ }
270+ }"
271+ ` )
272+ } )
273+
274+ test ( 'export all' , async ( ) => {
275+ const results = generateExports (
276+ FAKE_PACKAGE_JSON ,
277+ cwd ,
278+ { es : [ genChunk ( 'index.js' ) ] , cjs : [ genChunk ( 'index.cjs' ) ] } ,
279+ { all : true } ,
280+ )
281+ await expect ( results ) . resolves . toMatchInlineSnapshot ( `
282+ {
283+ "exports": {
284+ ".": {
285+ "import": "./index.js",
286+ "require": "./index.cjs",
287+ },
288+ "./*": "./*",
289+ },
290+ "main": "./index.cjs",
291+ "module": "./index.js",
292+ "publishExports": undefined,
293+ "types": undefined,
294+ }
295+ ` )
296+ } )
143297} )
144298
145299function genChunk ( fileName : string ) {
146300 // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
147- return { type : 'chunk' , fileName, isEntry : true } as OutputChunk
301+ return {
302+ type : 'chunk' ,
303+ fileName,
304+ isEntry : true ,
305+ facadeModuleId : `./SRC/${ fileName } ` ,
306+ } as OutputChunk
148307}
0 commit comments