diff --git a/.changeset/silly-scissors-bow.md b/.changeset/silly-scissors-bow.md new file mode 100644 index 00000000000..8a10eadcb4c --- /dev/null +++ b/.changeset/silly-scissors-bow.md @@ -0,0 +1,5 @@ +--- +'@graphiql/toolkit': patch +--- + +Subscriptions async iterator completes and better error handling diff --git a/packages/graphiql-toolkit/package.json b/packages/graphiql-toolkit/package.json index c230142eea5..0b6f127cb4f 100644 --- a/packages/graphiql-toolkit/package.json +++ b/packages/graphiql-toolkit/package.json @@ -20,7 +20,7 @@ "typings": "dist/index.d.ts", "scripts": {}, "dependencies": { - "@n1ru4l/push-pull-async-iterable-iterator": "^2.0.1", + "@n1ru4l/push-pull-async-iterable-iterator": "^2.1.4", "graphql-ws": "^4.3.2", "meros": "^1.1.4" }, diff --git a/packages/graphiql-toolkit/src/create-fetcher/lib.ts b/packages/graphiql-toolkit/src/create-fetcher/lib.ts index e37c79a16f7..3f21b67e5e4 100644 --- a/packages/graphiql-toolkit/src/create-fetcher/lib.ts +++ b/packages/graphiql-toolkit/src/create-fetcher/lib.ts @@ -1,4 +1,4 @@ -import { DocumentNode, visit } from 'graphql'; +import { DocumentNode, visit, GraphQLError } from 'graphql'; import { meros } from 'meros'; import { createClient, Client, ClientOptions } from 'graphql-ws'; import { SubscriptionClient } from 'subscriptions-transport-ws'; @@ -94,7 +94,26 @@ export const createWebsocketsFetcherFromClient = (wsClient: Client) => ( graphQLParams: FetcherParams, ) => makeAsyncIterableIteratorFromSink(sink => - wsClient!.subscribe(graphQLParams, sink), + wsClient!.subscribe(graphQLParams, { + ...sink, + error: err => { + if (err instanceof Error) { + sink.error(err); + } else if (err instanceof CloseEvent) { + sink.error( + new Error( + `Socket closed with event ${err.code} ${err.reason || ''}`.trim(), + ), + ); + } else { + sink.error( + new Error( + (err as GraphQLError[]).map(({ message }) => message).join(', '), + ), + ); + } + }, + }), ); export const createLegacyWebsocketsFetcher = ( diff --git a/yarn.lock b/yarn.lock index 8f54a5a01b4..a5262792b87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2683,10 +2683,10 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@n1ru4l/push-pull-async-iterable-iterator@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-2.0.1.tgz#8fc68e0e9e8bd3826d727b96ddd2afba2a7f26c7" - integrity sha512-3nDfpI/4WZgdocw75cxG4Qwmi3yp5zOleaT23EpVUhwVwlYzb4kDojl0nCZKB5lCGcTqT5wFlKepShs4Q+hymw== +"@n1ru4l/push-pull-async-iterable-iterator@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-2.1.4.tgz#a90225474352f9f159bff979905f707b9c6bcf04" + integrity sha512-qLIvoOUJ+zritv+BlzcBMePKNjKQzH9Rb2i9W98YXxf/M62Lye8qH0peyiU8yJ1tL0kfulWi31BoK10E6BKJeA== "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": version "2.1.8-no-fsevents"