File tree Expand file tree Collapse file tree 2 files changed +31
-5
lines changed
packages/runtime-internal/src/interactive Expand file tree Collapse file tree 2 files changed +31
-5
lines changed Original file line number Diff line number Diff line change @@ -50,11 +50,26 @@ if (!bundle) {
5050 await navigator . serviceWorker . register ( './worker.js' , {
5151 scope : './'
5252 } ) ;
53- await navigator . serviceWorker . ready . then ( ( registration ) => {
54- registration . active ?. postMessage ( {
55- staticAssets : instrument . content . staticAssets ,
56- type : 'STATIC_ASSETS'
53+ const registration = await navigator . serviceWorker . ready ;
54+ if ( ! navigator . serviceWorker . controller ) {
55+ await new Promise ( ( resolve ) => {
56+ navigator . serviceWorker . addEventListener ( 'controllerchange' , resolve , { once : true } ) ;
5757 } ) ;
58+ }
59+ const { port1, port2 } = new MessageChannel ( ) ;
60+ await new Promise ( ( resolve ) => {
61+ port1 . onmessage = ( event ) => {
62+ if ( event . data ?. type === 'STATIC_ASSETS_READY' ) {
63+ resolve ( undefined ) ;
64+ }
65+ } ;
66+ registration . active ?. postMessage (
67+ {
68+ staticAssets : instrument . content . staticAssets ,
69+ type : 'STATIC_ASSETS'
70+ } ,
71+ [ port2 ]
72+ ) ;
5873 } ) ;
5974 }
6075
Original file line number Diff line number Diff line change 11/// <reference lib="webworker" />
22
3+ const worker = /** @type {ServiceWorkerGlobalScope } */ ( /** @type {unknown } */ ( self ) ) ;
4+
35/** @type {Map<string, string> } */
46const staticAssets = new Map ( ) ;
57
8+ worker . addEventListener ( 'install' , ( ) => {
9+ worker . skipWaiting ( ) ;
10+ } ) ;
11+
12+ worker . addEventListener ( 'activate' , ( event ) => {
13+ event . waitUntil ( worker . clients . claim ( ) ) ;
14+ } ) ;
15+
616/**
717 * Converts a data URL (base64 or plain) into a Fetch API Response object.
818 *
@@ -49,9 +59,10 @@ addEventListener('message', (event) => {
4959 Object . entries ( data . staticAssets ) . forEach ( ( [ key , value ] ) => {
5060 staticAssets . set ( key , value ) ;
5161 } ) ;
62+ event . ports [ 0 ] ?. postMessage ( { type : 'STATIC_ASSETS_READY' } ) ;
5263} ) ;
5364
54- self . addEventListener ( 'fetch' , ( _event ) => {
65+ worker . addEventListener ( 'fetch' , ( _event ) => {
5566 if ( ! staticAssets ) {
5667 console . error ( 'staticAssets is not defined' ) ;
5768 return ;
You can’t perform that action at this time.
0 commit comments