22 BuildAdapter ,
33 BuildAdapterOptions ,
44 BuildResult ,
5+ EntryPoint ,
6+ logger ,
57} from '@softarc/native-federation/build' ;
68import * as esbuild from 'esbuild' ;
79import { rollup } from 'rollup' ;
@@ -24,10 +26,18 @@ export type ReplacementConfig = {
2426 file : string ;
2527} ;
2628
29+ type EntryPointWithMeta = EntryPoint & {
30+ meta : {
31+ isPkg : boolean ;
32+ originalFileName : string ;
33+ } ;
34+ } ;
35+
2736export interface EsBuildAdapterConfig {
2837 plugins : esbuild . Plugin [ ] ;
2938 fileReplacements ?: Record < string , string | ReplacementConfig > ;
3039 skipRollup ?: boolean ;
40+ /** Identify packages for which compensating missing named exports */
3141 compensateExports ?: RegExp [ ] ;
3242 loader ?: { [ ext : string ] : esbuild . Loader } ;
3343}
@@ -42,11 +52,17 @@ export function createEsBuildAdapter(config: EsBuildAdapterConfig) {
4252
4353 // TODO: Do we need to prepare packages anymore as esbuild has evolved?
4454
45- for ( const entryPoint of entryPoints ) {
55+ const preparedEntryPoints = entryPoints as EntryPointWithMeta [ ] ;
56+ for ( const entryPoint of preparedEntryPoints ) {
4657 const isPkg = entryPoint . fileName . includes ( 'node_modules' ) ;
4758 const pkgName = isPkg ? inferePkgName ( entryPoint . fileName ) : '' ;
4859 const tmpFolder = `node_modules/.tmp/${ pkgName } ` ;
4960
61+ entryPoint . meta = {
62+ originalFileName : entryPoint . fileName ,
63+ isPkg,
64+ } ;
65+
5066 if ( isPkg ) {
5167 await prepareNodePackage (
5268 entryPoint . fileName ,
@@ -55,13 +71,12 @@ export function createEsBuildAdapter(config: EsBuildAdapterConfig) {
5571 config ,
5672 ! ! options . dev
5773 ) ;
58-
5974 entryPoint . fileName = tmpFolder ;
6075 }
6176 }
6277
6378 const ctx = await esbuild . context ( {
64- entryPoints : entryPoints . map ( ( ep ) => ( {
79+ entryPoints : preparedEntryPoints . map ( ( ep ) => ( {
6580 in : ep . fileName ,
6681 out : path . parse ( ep . outName ) . name ,
6782 } ) ) ,
@@ -81,16 +96,18 @@ export function createEsBuildAdapter(config: EsBuildAdapterConfig) {
8196 const result = await ctx . rebuild ( ) ;
8297 const writtenFiles = writeResult ( result , outdir ) ;
8398 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+ } ) ;
84110 return writtenFiles . map ( ( fileName ) => ( { fileName } ) ) ;
85-
86- // const normEntryPoint = entryPoint.replace(/\\/g, '/');
87- // if (
88- // isPkg &&
89- // config?.compensateExports?.find((regExp) => regExp.exec(normEntryPoint))
90- // ) {
91- // logger.verbose('compensate exports for ' + tmpFolder);
92- // compensateExports(tmpFolder, outfile);
93- // }
94111 } ;
95112}
96113
0 commit comments