diff --git a/docs/api.go b/docs/api.go index ebdf1e9..2addac6 100644 --- a/docs/api.go +++ b/docs/api.go @@ -22,5 +22,7 @@ func main() { } }) + fmt.Println("Calling ServeOnce") + wasmhttp.ServeOnce(nil) } diff --git a/docs/api.wasm b/docs/api.wasm index bde8613..a373d97 100755 Binary files a/docs/api.wasm and b/docs/api.wasm differ diff --git a/docs/sw.js b/docs/sw.js index 73dbf32..d0fe44d 100644 --- a/docs/sw.js +++ b/docs/sw.js @@ -1,3 +1,11 @@ importScripts('https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@048825e2c7dd6b9dcfe3462105f4364ffc70663c/sw.js') +addEventListener('install', (event) => { + event.waitUntil(skipWaiting()) +}) + +addEventListener('activate', event => { + event.waitUntil(clients.claim()) +}) + registerWasmHTTPListener('api.wasm') diff --git a/sw.js b/sw.js index bc9ea0f..4b1ade7 100644 --- a/sw.js +++ b/sw.js @@ -1,29 +1,5 @@ importScripts('https://cdn.jsdelivr.net/gh/golang/go@go1.15.7/misc/wasm/wasm_exec.js') -async function startWasm(wasm, { env, args = [] }) { - const go = new Go() - go.env = env - go.argv = [wasm, ...args] - const { instance } = await WebAssembly.instantiateStreaming(fetch(wasm), go.importObject) - return go.run(instance) -} - -function trimStart(s, c) { - let r = s - while (r.startsWith(c)) r = r.slice(c.length) - return r -} - -function trimEnd(s, c) { - let r = s - while (r.endsWith(c)) r = r.slice(0, -c.length) - return r -} - -// addEventListener('install', (event) => { -// event.waitUntil(skipWaiting()) -// }) - let nextHandlerId = 1 const handlerResolvers = {} const handlers = [] @@ -35,10 +11,6 @@ self.wasmhttp = { }, } -addEventListener('activate', event => { - event.waitUntil(clients.claim()) -}) - function registerWasmHTTPListener(wasm, base, args) { let path = new URL(registration.scope).pathname if (base && base !== '') path = `${trimEnd(path, '/')}/${trimStart(base, '/')}` @@ -59,6 +31,28 @@ function registerWasmHTTPListener(wasm, base, args) { const handler = await handlerPromise + console.log({ handler }) + e.respondWith(handler(e.request)) }) -} \ No newline at end of file +} + +async function startWasm(wasm, { env, args = [] }) { + const go = new Go() + go.env = env + go.argv = [wasm, ...args] + const { instance } = await WebAssembly.instantiateStreaming(fetch(wasm), go.importObject) + return go.run(instance) +} + +function trimStart(s, c) { + let r = s + while (r.startsWith(c)) r = r.slice(c.length) + return r +} + +function trimEnd(s, c) { + let r = s + while (r.endsWith(c)) r = r.slice(0, -c.length) + return r +}