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' ;
2
10
3
11
import gulp from 'gulp' ;
4
12
import { memoizeTask } from './memoize-task.js' ;
5
13
import { EMPTY as ObservableEmpty , forkJoin as ObservableForkJoin } from 'rxjs' ;
6
14
import gulpJsonTransform from 'gulp-json-transform' ;
15
+ import { sync as globSync } from 'glob' ;
16
+ import path from 'node:path' ;
7
17
8
- export const packageTask = ( ( cache ) => memoizeTask ( cache , function bundle ( target , format ) {
18
+ export const packageTask = ( ( cache ) =>
19
+ memoizeTask ( cache , function bundle ( target , format ) {
9
20
if ( target === `src` ) return ObservableEmpty ( ) ;
10
21
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
+ ) ;
15
30
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
18
33
] ) . toPromise ( ) ;
19
- } ) ) ( { } ) ;
34
+ } ) ) ( { } ) ;
20
35
21
36
export default packageTask ;
22
37
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
+
23
59
const createMainPackageJson = ( target , format ) => ( orig ) => ( {
24
60
...createTypeScriptPackageJson ( target , format ) ( orig ) ,
25
61
bin : orig . bin ,
@@ -48,7 +84,7 @@ const createMainPackageJson = (target, format) => (orig) => ({
48
84
} ,
49
85
'./*' : createDualExport ( '*' ) ,
50
86
} ,
51
- sideEffects : false ,
87
+ sideEffects : createSideEffectsList ( ) ,
52
88
esm : { mode : `all` , sourceMap : true }
53
89
} ) ;
54
90
@@ -60,7 +96,7 @@ const createTypeScriptPackageJson = (target, format) => (orig) => ({
60
96
types : `node.ts` ,
61
97
browser : `dom.ts` ,
62
98
type : 'module' ,
63
- sideEffects : false ,
99
+ sideEffects : createSideEffectsList ( ) ,
64
100
esm : { mode : `auto` , sourceMap : true } ,
65
101
dependencies : {
66
102
'@types/node' : '*' ,
@@ -88,7 +124,7 @@ const createScopedPackageJSON = (target, format) => (({ name, ...orig }) =>
88
124
// set "module" if building scoped ESM target
89
125
module : format === 'esm' || format === 'cls' ? `node.js` : undefined ,
90
126
// 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 ,
92
128
// include "esm" settings for https://www.npmjs.com/package/esm if building scoped ESM target
93
129
esm : format === `esm` ? { mode : `auto` , sourceMap : true } : undefined ,
94
130
// set "types" to "dom" if building scoped UMD target, otherwise "node"
0 commit comments