2
2
BuildAdapter ,
3
3
BuildAdapterOptions ,
4
4
BuildResult ,
5
+ EntryPoint ,
6
+ logger ,
5
7
} from '@softarc/native-federation/build' ;
6
8
import * as esbuild from 'esbuild' ;
7
9
import { rollup } from 'rollup' ;
@@ -25,10 +27,18 @@ export type ReplacementConfig = {
25
27
file : string ;
26
28
} ;
27
29
30
+ type EntryPointWithMeta = EntryPoint & {
31
+ meta : {
32
+ isPkg : boolean ;
33
+ originalFileName : string ;
34
+ } ;
35
+ } ;
36
+
28
37
export interface EsBuildAdapterConfig {
29
38
plugins : esbuild . Plugin [ ] ;
30
39
fileReplacements ?: Record < string , string | ReplacementConfig > ;
31
40
skipRollup ?: boolean ;
41
+ /** Identify packages for which compensating missing named exports */
32
42
compensateExports ?: RegExp [ ] ;
33
43
loader ?: { [ ext : string ] : esbuild . Loader } ;
34
44
}
@@ -43,7 +53,8 @@ export function createEsBuildAdapter(config: EsBuildAdapterConfig) {
43
53
44
54
// TODO: Do we need to prepare packages anymore as esbuild has evolved?
45
55
46
- for ( const entryPoint of entryPoints ) {
56
+ const preparedEntryPoints = entryPoints as EntryPointWithMeta [ ] ;
57
+ for ( const entryPoint of preparedEntryPoints ) {
47
58
const isPkg = entryPoint . fileName . includes ( 'node_modules' ) ;
48
59
const pkgName = isPkg ? inferePkgName ( entryPoint . fileName ) : '' ;
49
60
const tmpFolder = `node_modules/.tmp/${ pkgName } ` ;
@@ -56,13 +67,16 @@ export function createEsBuildAdapter(config: EsBuildAdapterConfig) {
56
67
config ,
57
68
! ! options . dev
58
69
) ;
59
-
70
+ entryPoint . meta = {
71
+ originalFileName : entryPoint . fileName ,
72
+ isPkg,
73
+ } ;
60
74
entryPoint . fileName = tmpFolder ;
61
75
}
62
76
}
63
77
64
78
const ctx = await esbuild . context ( {
65
- entryPoints : entryPoints . map ( ( ep ) => ( {
79
+ entryPoints : preparedEntryPoints . map ( ( ep ) => ( {
66
80
in : ep . fileName ,
67
81
out : path . parse ( ep . outName ) . name ,
68
82
} ) ) ,
@@ -82,16 +96,18 @@ export function createEsBuildAdapter(config: EsBuildAdapterConfig) {
82
96
const result = await ctx . rebuild ( ) ;
83
97
const writtenFiles = writeResult ( result , outdir ) ;
84
98
ctx . dispose ( ) ;
99
+ preparedEntryPoints . forEach ( ( entryPoint ) => {
100
+ const { meta, fileName, outName } = entryPoint ;
101
+ const normEntryPoint = meta . originalFileName . replace ( / \\ / g, '/' ) ;
102
+ if (
103
+ meta . isPkg &&
104
+ config ?. compensateExports ?. find ( ( regExp ) => regExp . exec ( normEntryPoint ) )
105
+ ) {
106
+ logger . verbose ( 'compensate exports for ' + meta . originalFileName ) ;
107
+ compensateExports ( fileName , path . join ( outdir , outName ) ) ;
108
+ }
109
+ } ) ;
85
110
return writtenFiles . map ( ( fileName ) => ( { fileName } ) ) ;
86
-
87
- // const normEntryPoint = entryPoint.replace(/\\/g, '/');
88
- // if (
89
- // isPkg &&
90
- // config?.compensateExports?.find((regExp) => regExp.exec(normEntryPoint))
91
- // ) {
92
- // logger.verbose('compensate exports for ' + tmpFolder);
93
- // compensateExports(tmpFolder, outfile);
94
- // }
95
111
} ;
96
112
}
97
113
0 commit comments