1- import { metadataFiles , packageJSONFields , npmPkgName , npmOrgName , targetDir , packageName , observableFromStreams } from './util.js' ;
1+ import {
2+ metadataFiles ,
3+ npmOrgName ,
4+ npmPkgName ,
5+ observableFromStreams ,
6+ packageJSONFields ,
7+ packageName ,
8+ targetDir ,
9+ } from './util.js' ;
210
311import gulp from 'gulp' ;
412import { memoizeTask } from './memoize-task.js' ;
513import { EMPTY as ObservableEmpty , forkJoin as ObservableForkJoin } from 'rxjs' ;
614import gulpJsonTransform from 'gulp-json-transform' ;
15+ import { sync as globSync } from 'glob' ;
16+ import path from 'node:path' ;
717
8- export const packageTask = ( ( cache ) => memoizeTask ( cache , function bundle ( target , format ) {
18+ export const packageTask = ( ( cache ) =>
19+ memoizeTask ( cache , function bundle ( target , format ) {
920 if ( target === `src` ) return ObservableEmpty ( ) ;
1021 const out = targetDir ( target , format ) ;
11- const jsonTransform = gulpJsonTransform ( target === npmPkgName ? createMainPackageJson ( target , format ) :
12- target === `ts` ? createTypeScriptPackageJson ( target , format )
13- : createScopedPackageJSON ( target , format ) ,
14- 2 ) ;
22+ const jsonTransform = gulpJsonTransform (
23+ target === npmPkgName
24+ ? createMainPackageJson ( target , format )
25+ : target === `ts`
26+ ? createTypeScriptPackageJson ( target , format )
27+ : createScopedPackageJSON ( target , format ) ,
28+ 2
29+ ) ;
1530 return ObservableForkJoin ( [
16- observableFromStreams ( gulp . src ( metadataFiles ) , gulp . dest ( out ) ) , // copy metadata files
17- observableFromStreams ( gulp . src ( `package.json` ) , jsonTransform , gulp . dest ( out ) ) // write packageJSONs
31+ observableFromStreams ( gulp . src ( metadataFiles ) , gulp . dest ( out ) ) , // copy metadata files
32+ observableFromStreams ( gulp . src ( `package.json` ) , jsonTransform , gulp . dest ( out ) ) , // write packageJSONs
1833 ] ) . toPromise ( ) ;
19- } ) ) ( { } ) ;
34+ } ) ) ( { } ) ;
2035
2136export default packageTask ;
2237
38+ function createSideEffectsList ( ) {
39+ const patterns = [ 'add/**/*.ts' , 'asynciterable/todomstream.ts' ] ;
40+
41+ const tsFilePaths = globSync ( patterns . map ( ( p ) => `./src/${ p } ` ) ) ;
42+
43+ // Generate .mjs and .js paths for each .ts file
44+ const sideEffectPaths = [ ] ;
45+ for ( const filePath of tsFilePaths ) {
46+ // Get the relative path from srcDir to the file
47+ const relativePath = path . relative ( './src' , filePath ) ;
48+ // Normalize path separators to forward slashes
49+ const normalizedPath = relativePath . replace ( / \\ / g, '/' ) ;
50+ // Remove the .ts extension and add .mjs and .js
51+ const basePath = normalizedPath . replace ( / \. t s $ / , '' ) ;
52+ sideEffectPaths . push ( `./${ basePath } .mjs` ) ;
53+ sideEffectPaths . push ( `./${ basePath } .js` ) ;
54+ }
55+
56+ return sideEffectPaths ;
57+ }
58+
2359const createMainPackageJson = ( target , format ) => ( orig ) => ( {
2460 ...createTypeScriptPackageJson ( target , format ) ( orig ) ,
2561 bin : orig . bin ,
@@ -48,7 +84,7 @@ const createMainPackageJson = (target, format) => (orig) => ({
4884 } ,
4985 './*' : createDualExport ( '*' ) ,
5086 } ,
51- sideEffects : false ,
87+ sideEffects : createSideEffectsList ( ) ,
5288 esm : { mode : `all` , sourceMap : true }
5389} ) ;
5490
@@ -60,7 +96,7 @@ const createTypeScriptPackageJson = (target, format) => (orig) => ({
6096 types : `node.ts` ,
6197 browser : `dom.ts` ,
6298 type : 'module' ,
63- sideEffects : false ,
99+ sideEffects : createSideEffectsList ( ) ,
64100 esm : { mode : `auto` , sourceMap : true } ,
65101 dependencies : {
66102 '@types/node' : '*' ,
@@ -88,7 +124,7 @@ const createScopedPackageJSON = (target, format) => (({ name, ...orig }) =>
88124 // set "module" if building scoped ESM target
89125 module : format === 'esm' || format === 'cls' ? `node.js` : undefined ,
90126 // set "sideEffects" to false as a hint to Webpack that it's safe to tree-shake the ESM target
91- sideEffects : format === 'esm' || format === 'cls' ? false : undefined ,
127+ sideEffects : format === 'esm' || format === 'cls' ? createSideEffectsList ( ) : undefined ,
92128 // include "esm" settings for https://www.npmjs.com/package/esm if building scoped ESM target
93129 esm : format === `esm` ? { mode : `auto` , sourceMap : true } : undefined ,
94130 // set "types" to "dom" if building scoped UMD target, otherwise "node"
0 commit comments