- From: Jimmy Wärting <notifications@github.com>
- Date: Tue, 04 Jul 2023 16:42:03 -0700
- To: w3c/ServiceWorker <ServiceWorker@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/ServiceWorker/issues/1685@github.com>
when i import something from a script that has assertion type
aka:
```js
import style from './style.css' assert { type: 'css' }
import config from './config.json' assert { type: 'json' }
import util from './util.js'
```
then i want to know what i'm dealing with when i'm listening to fetch events...
only using `event.request.destination` is not enough...
```js
onfetch = event => {
console.log(event.request.destination)
}
```
I wanna know about what kind of thing i'm dealing with.
On a bonus point. i would like to be able to polyfill unsupported assertion types if possible.
for instance... safari don't support `assert { type: 'css' }` so i would like to fetch the content of the code. construct a own stylesheet and return it as a normal script.
cuz right now it dose not support it...
```js
import('./fe.css', {assert: {type: 'css'}})
[Error] Unhandled Promise Rejection: TypeError: Import assertion type "css" is not valid
```
if i could polyfill it with service worker then i could fetch the source and convert it with something like this:
```js
onfetch = evt => {
if (
evt.request.destination === 'script' &&
evt.request.assertion?.type === 'css' &&
and_not_natively_supported
) {
evt.waitUntil(async function () {
const { request } = evt
const css = await fetch(request).then(res => res.text())
return new Response(`
const sheet = new CSSStyleSheet()
await sheet.replace(${JSON.stringify(css)}, {
baseURL: ${JSON.stringify(ctx.request.url)}
})
export default sheet
`, {
headers: { 'content-type': 'text/javascript' }
})
})
}
}
```
but currently i can't do that... instead i have to omit the hole `{assert: {type: 'css'}})` thing and only look at the url pathname.
i can only imagine more and more types being supported like:
```js
import wasm from './xyz.wasm' assert { type: 'wasm' }
import uint8array from './cat.png' assert { type: 'uint8array' }
import file from './cat.png' assert { type: 'file' }
import webWorker from './havy.js' assert { type: 'worker' }
file.arrayBuffer()
```
and more to come...
so there need to be a way to polyfill stuff even if they are not supported.
--
Reply to this email directly or view it on GitHub:
https://github.com/w3c/ServiceWorker/issues/1685
You are receiving this because you are subscribed to this thread.
Message ID: <w3c/ServiceWorker/issues/1685@github.com>
Received on Tuesday, 4 July 2023 23:42:09 UTC