@@ -118,36 +118,40 @@ const bundle = await bundle_code(
118
118
) . js . code
119
119
) ;
120
120
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 ;
129
132
130
- if ( ! bundle . includes ( 'component_context.l' ) ) {
131
- // eslint-disable-next-line no-console
132
- console . error ( `✅ Legacy code treeshakeable` ) ;
133
- } else
8000
{
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
+ }
135
144
// eslint-disable-next-line no-console
136
- console . error ( `❌ Legacy code not treeshakeable` ) ;
145
+ console . error ( `✅ ${ case_name } treeshakeable` ) ;
137
146
}
138
147
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'` ) ;
147
151
148
152
if ( failed ) {
149
153
// eslint-disable-next-line no-console
150
- console . error ( bundle ) ;
154
+ console . error ( 'Full bundle at' , path . resolve ( 'scripts/_bundle.js' ) ) ;
151
155
fs . writeFileSync ( 'scripts/_bundle.js' , bundle ) ;
152
156
}
153
157
0 commit comments