@@ -4,6 +4,8 @@ import gulp from 'gulp';
44import { memoizeTask } from './memoize-task.js' ;
55import { EMPTY as ObservableEmpty , forkJoin as ObservableForkJoin } from 'rxjs' ;
66import gulpJsonTransform from 'gulp-json-transform' ;
7+ import { sync as globSync } from 'glob' ;
8+ import path from 'node:path' ;
79
810export const packageTask = ( ( cache ) => memoizeTask ( cache , function bundle ( target , format ) {
911 if ( target === `src` ) return ObservableEmpty ( ) ;
@@ -20,6 +22,27 @@ export const packageTask = ((cache) => memoizeTask(cache, function bundle(target
2022
2123export default packageTask ;
2224
25+ function createSideEffectsList ( ) {
26+ const patterns = [ 'add/**/*.ts' , 'asynciterable/todomstream.ts' ] ;
27+
28+ const tsFilePaths = globSync ( patterns . map ( ( p ) => `./src/${ p } ` ) ) ;
29+
30+ // Generate .mjs and .js paths for each .ts file
31+ const sideEffectPaths = [ ] ;
32+ for ( const filePath of tsFilePaths ) {
33+ // Get the relative path from srcDir to the file
34+ const relativePath = path . relative ( './src' , filePath ) ;
35+ // Normalize path separators to forward slashes
36+ const normalizedPath = relativePath . replace ( / \\ / g, '/' ) ;
37+ // Remove the .ts extension and add .mjs and .js
38+ const basePath = normalizedPath . replace ( / \. t s $ / , '' ) ;
39+ sideEffectPaths . push ( `./${ basePath } .mjs` ) ;
40+ sideEffectPaths . push ( `./${ basePath } .js` ) ;
41+ }
42+
43+ return sideEffectPaths ;
44+ }
45+
2346const createMainPackageJson = ( target , format ) => ( orig ) => ( {
2447 ...createTypeScriptPackageJson ( target , format ) ( orig ) ,
2548 bin : orig . bin ,
@@ -48,7 +71,7 @@ const createMainPackageJson = (target, format) => (orig) => ({
4871 } ,
4972 './*' : createDualExport ( '*' ) ,
5073 } ,
51- sideEffects : false ,
74+ sideEffects : createSideEffectsList ( ) ,
5275 esm : { mode : `all` , sourceMap : true }
5376} ) ;
5477
@@ -60,7 +83,7 @@ const createTypeScriptPackageJson = (target, format) => (orig) => ({
6083 types : `node.ts` ,
6184 browser : `dom.ts` ,
6285 type : 'module' ,
63- sideEffects : false ,
86+ sideEffects : createSideEffectsList ( ) ,
6487 esm : { mode : `auto` , sourceMap : true } ,
6588 dependencies : {
6689 '@types/node' : '*' ,
@@ -88,7 +111,7 @@ const createScopedPackageJSON = (target, format) => (({ name, ...orig }) =>
88111 // set "module" if building scoped ESM target
89112 module : format === 'esm' || format === 'cls' ? `node.js` : undefined ,
90113 // 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 ,
114+ sideEffects : format === 'esm' || format === 'cls' ? createSideEffectsList ( ) : undefined ,
92115 // include "esm" settings for https://www.npmjs.com/package/esm if building scoped ESM target
93116 esm : format === `esm` ? { mode : `auto` , sourceMap : true } : undefined ,
94117 // set "types" to "dom" if building scoped UMD target, otherwise "node"
0 commit comments