Skip to content

⬅️ Back to Table of Contents

📄 sw.js

📊 Analysis Summary

Metric Count
🔧 Functions 1
📊 Variables & Constants 8
⚡ Async/Await Patterns 1

📚 Table of Contents

🛠️ File Location:

📂 editor/sw.js

Variables & Constants

Name Type Kind Value Exported
cacheName "threejs-editor" let/var 'threejs-editor'
assets string[] let/var [ './', './manifest.json', './images/icon.png', '../files/favicon.ico', '../b...
cache Cache let/var await caches.open( cacheName )
request any let/var event.request
response Response let/var await fetch( request )
newHeaders Headers let/var new Headers( response.headers )
cache Cache let/var await caches.open( cacheName )
cachedResponse Response let/var await caches.match( request )

Async/Await Patterns

Type Function Await Expressions Promise Chains
async-function networkFirst fetch( request ), caches.open( cacheName ), caches.match( request ) none

Functions

networkFirst(request: any): Promise<Response>

Parameters:

  • request any

Returns: Promise<Response>

Calls:

  • fetch
  • request.url.endsWith
  • newHeaders.set
  • caches.open
  • cache.put
  • response.clone
  • caches.match
  • console.warn
Code
async function networkFirst( request ) {

    try {

        let response = await fetch( request );

        if ( request.url.endsWith( 'editor/' ) || request.url.endsWith( 'editor/index.html' ) ) { // copied from coi-serviceworker

            const newHeaders = new Headers( response.headers );
            newHeaders.set( 'Cross-Origin-Embedder-Policy', 'require-corp' );
            newHeaders.set( 'Cross-Origin-Opener-Policy', 'same-origin' );

            response = new Response( response.body, { status: response.status, statusText: response.statusText, headers: newHeaders } );

        }

        if ( request.method === 'GET' ) {

            const cache = await caches.open( cacheName );
            cache.put( request, response.clone() );

        }

        return response;

    } catch {

        const cachedResponse = await caches.match( request );

        if ( cachedResponse === undefined ) {

            console.warn( '[SW] Not cached:', request.url );

        }

        return cachedResponse;

    }

}