@@ -4,6 +4,8 @@ import gulp from 'gulp';
4
4
import { memoizeTask } from './memoize-task.js' ;
5
5
import { EMPTY as ObservableEmpty , forkJoin as ObservableForkJoin } from 'rxjs' ;
6
6
import gulpJsonTransform from 'gulp-json-transform' ;
7
+ import { sync as globSync } from 'glob' ;
8
+ import path from 'node:path' ;
7
9
8
10
export const packageTask = ( ( cache ) => memoizeTask ( cache , function bundle ( target , format ) {
9
11
if ( target === `src` ) return ObservableEmpty ( ) ;
@@ -20,6 +22,27 @@ export const packageTask = ((cache) => memoizeTask(cache, function bundle(target
20
22
21
23
export default packageTask ;
22
24
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
+
23
46
const createMainPackageJson = ( target , format ) => ( orig ) => ( {
24
47
...createTypeScriptPackageJson ( target , format ) ( orig ) ,
25
48
bin : orig . bin ,
@@ -48,7 +71,7 @@ const createMainPackageJson = (target, format) => (orig) => ({
48
71
} ,
49
72
'./*' : createDualExport ( '*' ) ,
50
73
} ,
51
- sideEffects : false ,
74
+ sideEffects : createSideEffectsList ( ) ,
52
75
esm : { mode : `all` , sourceMap : true }
53
76
} ) ;
54
77
@@ -60,7 +83,7 @@ const createTypeScriptPackageJson = (target, format) => (orig) => ({
60
83
types : `node.ts` ,
61
84
browser : `dom.ts` ,
62
85
type : 'module' ,
63
- sideEffects : false ,
86
+ sideEffects : createSideEffectsList ( ) ,
64
87
esm : { mode : `auto` , sourceMap : true } ,
65
88
dependencies : {
66
89
'@types/node' : '*' ,
@@ -88,7 +111,7 @@ const createScopedPackageJSON = (target, format) => (({ name, ...orig }) =>
88
111
// set "module" if building scoped ESM target
89
112
module : format === 'esm' || format === 'cls' ? `node.js` : undefined ,
90
113
// 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 ,
92
115
// include "esm" settings for https://www.npmjs.com/package/esm if building scoped ESM target
93
116
esm : format === `esm` ? { mode : `auto` , sourceMap : true } : undefined ,
94
117
// set "types" to "dom" if building scoped UMD target, otherwise "node"
0 commit comments