Closed6
urql で MSW が使えるようにしたい
起こっていること
-
localhost:3000
- GraphQL client に urql を使用
- MSW が intercept していない
-
localhost:3000/apollo
- GraphQL client に apollo/client を使用
- MSW が intercept している
再現方法
$ pnpm install
$ pnpm dev
query の名前が間違ってた。修正しても挙動は変わらなかった。
urql と apollo、それぞれの通信の request headers を確認すると accept が違うらしい
urql
accept: application/graphql-response+json, application/graphql+json, application/json, text/event-stream, multipart/mixed
apollo
accept: */*
試しに、 urql client の fetchOption
で request header の accept を変更してみると MSW で intercept されるようになった。
const client = new Client({
url: 'https://beta.pokeapi.co/graphql/v1beta',
exchanges: [cacheExchange, fetchExchange],
+ fetchOptions: {
+ headers: {
+ Accept: '*/*'
+ }
+ }
});
urql の request header の accept を 'text/event-stream'
とすると MSW で intercept ができないらしい
コード上でも確認できる
MSW が SourceEvent を回避しているのは、 Service Worker 自体が技術的な難しさから SourceEvent を回避しているかららしい。
EventSource is designed with the idea that the connection will be held open and lines will be flushed across the connection to trigger events. This is quite difficult to do today with synthetic responses.
EventSource は接続を保持してイベントを流すように設計されていて、これに intercept するのは難しい(ということらしい)
EventSource だけでなく、 WebSocket も使えないのか
実装する予定はあるらしいけど、Service Worker のほうで解決しないと無理そう?知らんけど
このスクラップは2023/04/15にクローズされました