@@ -1116,6 +1116,84 @@ describe('generateExports', () => {
11161116 ` )
11171117 } )
11181118
1119+ test ( 'bin: implicit auto-detect with single shebang' , async ( { expect } ) => {
1120+ const results = generateExports (
1121+ {
1122+ es : [
1123+ genChunk (
1124+ 'cli.js' ,
1125+ true ,
1126+ undefined ,
1127+ '#!/usr/bin/env node\nconsole.log("hello")' ,
1128+ ) ,
1129+ ] ,
1130+ } ,
1131+ { exports : { } } ,
1132+ )
1133+ await expect ( results ) . resolves . toMatchObject ( {
1134+ bin : { 'fake-pkg' : './cli.js' } ,
1135+ } )
1136+ } )
1137+
1138+ test ( 'bin: implicit auto-detect with multiple shebangs warns' , async ( {
1139+ expect,
1140+ } ) => {
1141+ const warnings : string [ ] = [ ]
1142+ const logger = {
1143+ ...globalLogger ,
1144+ warn : ( ...msgs : any [ ] ) => {
1145+ warnings . push ( msgs . join ( ' ' ) )
1146+ } ,
1147+ }
1148+ const results = await generateExports (
1149+ {
1150+ es : [
1151+ genChunk ( 'cli.js' , true , undefined , '#!/usr/bin/env node\n' ) ,
1152+ genChunk ( 'tool.js' , true , undefined , '#!/usr/bin/env node\n' ) ,
1153+ ] ,
1154+ } ,
1155+ { exports : { } , logger } ,
1156+ )
1157+ expect ( results . bin ) . toBeUndefined ( )
1158+ expect (
1159+ warnings . some ( ( w ) =>
1160+ w . includes ( 'Multiple entry chunks with shebangs found' ) ,
1161+ ) ,
1162+ ) . toBe ( true )
1163+ } )
1164+
1165+ test ( 'bin: implicit auto-detect with no shebangs silently skips' , async ( {
1166+ expect,
1167+ } ) => {
1168+ const warnings : string [ ] = [ ]
1169+ const logger = {
1170+ ...globalLogger ,
1171+ warn : ( ...msgs : any [ ] ) => {
1172+ warnings . push ( msgs . join ( ' ' ) )
1173+ } ,
1174+ }
1175+ const results = await generateExports (
1176+ {
1177+ es : [ genChunk ( 'index.js' , true , undefined , 'console.log("hello")' ) ] ,
1178+ } ,
1179+ { exports : { } , logger } ,
1180+ )
1181+ expect ( results . bin ) . toBeUndefined ( )
1182+ expect ( warnings . filter ( ( w ) => w . includes ( 'bin' ) ) ) . toHaveLength ( 0 )
1183+ } )
1184+
1185+ test ( 'bin: false disables auto-detection' , async ( { expect } ) => {
1186+ const results = generateExports (
1187+ {
1188+ es : [ genChunk ( 'cli.js' , true , undefined , '#!/usr/bin/env node\n' ) ] ,
1189+ } ,
1190+ { exports : { bin : false } } ,
1191+ )
1192+ await expect ( results ) . resolves . toMatchObject ( {
1193+ bin : undefined ,
1194+ } )
1195+ } )
1196+
11191197 test ( 'generate css publish exports' , async ( { expect } ) => {
11201198 const results = generateExports (
11211199 { es : [ genChunk ( 'index.js' ) , genAsset ( 'style.css' ) ] } ,
0 commit comments