@@ -16,6 +16,8 @@ import { getReplVersion } from './repl-version';
16
16
import { updateReplOutput } from './repl-output-update' ;
17
17
import { QWIK_PKG_NAME , bundled , getNpmCdnUrl } from './bundled' ;
18
18
import { isServer } from '@builder.io/qwik' ;
19
+ import { loadDependencies } from './worker/repl-dependencies-main' ;
20
+ import { appBundleClient , appBundleSsr , appSsrHtml } from './worker/repl-builder' ;
19
21
20
22
export const Repl = component$ ( ( props : ReplProps ) => {
21
23
useStyles$ ( styles ) ;
@@ -189,15 +191,15 @@ const getDependencies = (input: ReplAppInput) => {
189
191
return out ;
190
192
} ;
191
193
192
- export const sendUserUpdateToReplServer = ( input : ReplAppInput , store : ReplStore ) => {
194
+ export const sendUserUpdateToReplServer = async ( input : ReplAppInput , store : ReplStore ) => {
193
195
if ( isServer ) {
194
196
return ;
195
197
}
196
198
if ( input . version && store . serverWindow ) {
197
- const msg : ReplUpdateMessage = {
198
- type : 'update' ,
199
- clientId : store . clientId ,
200
- options : {
199
+ try {
200
+ // Load dependencies in main thread
201
+ const deps = getDependencies ( input ) ;
202
+ await loadDependencies ( {
201
203
buildId : input . buildId ,
202
204
debug : input . debug ,
203
205
srcInputs : input . files ,
@@ -207,13 +209,133 @@ export const sendUserUpdateToReplServer = (input: ReplAppInput, store: ReplStore
207
209
} ,
208
210
version : input . version ,
209
211
serverUrl : store . serverUrl ,
210
- deps : getDependencies ( input ) ,
211
- } ,
212
- } ;
212
+ deps,
213
+ } ) ;
214
+
215
+ // Create build result
216
+ const result : any = {
217
+ type : 'result' ,
218
+ clientId : store . clientId ,
219
+ buildId : input . buildId ,
220
+ html : '' ,
221
+ transformedModules : [ ] ,
222
+ clientBundles : [ ] ,
223
+ manifest : undefined ,
224
+ ssrModules : [ ] ,
225
+ diagnostics : [ ] ,
226
+ events : [ ] ,
227
+ } ;
228
+
229
+ // Run build process in main thread
230
+ await appBundleClient (
231
+ {
232
+ buildId : input . buildId ,
233
+ debug : input . debug ,
234
+ srcInputs : input . files ,
235
+ buildMode : input . buildMode as any ,
236
+ entryStrategy : {
237
+ type : input . entryStrategy as any ,
238
+ } ,
239
+ version : input . version ,
240
+ serverUrl : store . serverUrl ,
241
+ deps,
242
+ } ,
243
+ result
244
+ ) ;
245
+
246
+ await appBundleSsr (
247
+ {
248
+ buildId : input . buildId ,
249
+ debug : input . debug ,
250
+ srcInputs : input . files ,
251
+ buildMode : input . buildMode as any ,
252
+ entryStrategy : {
253
+ type : input . entryStrategy as any ,
254
+ } ,
255
+ version : input . version ,
256
+ serverUrl : store . serverUrl ,
257
+ deps,
258
+ } ,
259
+ result
260
+ ) ;
261
+
262
+ await appSsrHtml (
263
+ {
264
+ buildId : input . buildId ,
265
+ debug : input . debug ,
266
+ srcInputs : input . files ,
267
+ buildMode : input . buildMode as any ,
268
+ entryStrategy : {
269
+ type : input . entryStrategy as any ,
270
+ } ,
271
+ version : input . version ,
272
+ serverUrl : store . serverUrl ,
273
+ deps,
274
+ } ,
275
+ result
276
+ ) ;
277
+
278
+ // Update the store with results
279
+ updateReplOutput ( store , result ) ;
280
+
281
+ // Send build results to service worker
282
+ if ( navigator . serviceWorker . controller ) {
283
+ navigator . serviceWorker . controller . postMessage ( {
284
+ type : 'update-build' ,
285
+ clientId : store . clientId ,
286
+ buildId : input . buildId ,
287
+ html : result . html ,
288
+ clientBundles : result . clientBundles ,
289
+ ssrModules : result . ssrModules ,
290
+ } ) ;
291
+ }
213
292
214
- if ( msg . options . srcInputs && msg . options . srcInputs . length > 0 ) {
215
- // using JSON.stringify() to remove proxies
216
- store . serverWindow . postMessage ( JSON . stringify ( msg ) ) ;
293
+ // Send result to server window for iframe communication
294
+ const msg : ReplUpdateMessage = {
295
+ type : 'update' ,
296
+ clientId : store . clientId ,
297
+ options : {
298
+ buildId : input . buildId ,
299
+ debug : input . debug ,
300
+ srcInputs : input . files ,
301
+ buildMode : input . buildMode as any ,
302
+ entryStrategy : {
303
+ type : input . entryStrategy as any ,
304
+ } ,
305
+ version : input . version ,
306
+ serverUrl : store . serverUrl ,
307
+ deps,
308
+ } ,
309
+ } ;
310
+
311
+ if ( msg . options . srcInputs && msg . options . srcInputs . length > 0 ) {
312
+ store . serverWindow . postMessage ( JSON . stringify ( msg ) ) ;
313
+ }
314
+ } catch ( e : any ) {
315
+ console . error ( 'Build error:' , e ) ;
316
+ const errorResult : any = {
317
+ type : 'result' ,
318
+ clientId : store . clientId ,
319
+ buildId : input . buildId ,
320
+ html : '' ,
321
+ transformedModules : [ ] ,
322
+ clientBundles : [ ] ,
323
+ manifest : undefined ,
324
+ ssrModules : [ ] ,
325
+ diagnostics : [
326
+ {
327
+ scope : 'runtime' ,
328
+ message : String ( e . stack || e ) ,
329
+ category : 'error' ,
330
+ file : '' ,
331
+ highlights : [ ] ,
332
+ suggestions : null ,
333
+ code : 'runtime error' ,
334
+ } ,
335
+ ] ,
336
+ events : [ ] ,
337
+ } ;
338
+ updateReplOutput ( store , errorResult ) ;
217
339
}
218
340
}
219
341
} ;
0 commit comments