@@ -118,36 +118,40 @@ const bundle = await bundle_code(
118118 ) . js . code
119119) ;
120120
121- if ( ! bundle . includes ( 'hydrate_node' ) && ! bundle . includes ( 'hydrate_next' ) ) {
122- // eslint-disable-next-line no-console
123- console . error ( `✅ Hydration code treeshakeable` ) ;
124- } else {
125- failed = true ;
126- // eslint-disable-next-line no-console
127- console . error ( `❌ Hydration code not treeshakeable` ) ;
128- }
121+ /**
122+ * @param {string } case_name
123+ * @param {string[] } strings
124+ */
125+ function check_bundle ( case_name , ...strings ) {
126+ for ( const string of strings ) {
127+ const index = bundle . indexOf ( string ) ;
128+ if ( index >= 0 ) {
129+ // eslint-disable-next-line no-console
130+ console . error ( `❌ ${ case_name } not treeshakeable` ) ;
131+ failed = true ;
129132
130- if ( ! bundle . includes ( 'component_context.l' ) ) {
131- // eslint-disable-next-line no-console
132- console . error ( `✅ Legacy code treeshakeable` ) ;
133- } else {
134- failed = true ;
133+ let lines = bundle . slice ( index - 500 , index + 500 ) . split ( '\n' ) ;
134+ const target_line = lines . findIndex ( ( line ) => line . includes ( string ) ) ;
135+ // mark the failed line
136+ lines = lines
137+ . map ( ( line , i ) => ( i === target_line ? `> ${ line } ` : `| ${ line } ` ) )
138+ . slice ( target_line - 5 , target_line + 6 ) ;
139+ // eslint-disable-next-line no-console
140+ console . error ( 'The first failed line:\n' + lines . join ( '\n' ) ) ;
141+ return ;
142+ }
143+ }
135144 // eslint-disable-next-line no-console
136- console . error ( `❌ Legacy code not treeshakeable` ) ;
145+ console . error ( `✅ ${ case_name } treeshakeable` ) ;
137146}
138147
139- if ( ! bundle . includes ( `'CreatedAt'` ) ) {
140- // eslint-disable-next-line no-console
141- console . error ( `✅ $inspect.trace code treeshakeable` ) ;
142- } else {
143- failed = true ;
144- // eslint-disable-next-line no-console
145- console . error ( `❌ $inspect.trace code not treeshakeable` ) ;
146- }
148+ check_bundle ( 'Hydration code' , 'hydrate_node' , 'hydrate_next' ) ;
149+ check_bundle ( 'Legacy code' , 'component_context.l' ) ;
150+ check_bundle ( '$inspect.trace' , `'CreatedAt'` ) ;
147151
148152if ( failed ) {
149153 // eslint-disable-next-line no-console
150- console . error ( bundle ) ;
154+ console . error ( 'Full bundle at' , path . resolve ( 'scripts/_bundle.js' ) ) ;
151155 fs . writeFileSync ( 'scripts/_bundle.js' , bundle ) ;
152156}
153157
0 commit comments