Skip to content

Commit 16f0113

Browse files
committed
feat: add RSocketApolloGraphlQLPlugin (apollographql/apollo-server#6264)
1 parent edf234b commit 16f0113

File tree

7 files changed

+2349
-2108
lines changed

7 files changed

+2349
-2108
lines changed

lerna-debug.log

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
0 silly argv {
2+
0 silly argv _: [ 'run' ],
3+
0 silly argv lernaVersion: '4.0.0',
4+
0 silly argv '$0': 'node_modules\\lerna\\cli.js',
5+
0 silly argv script: 'yarn'
6+
0 silly argv }
7+
1 notice cli v4.0.0
8+
2 verbose rootPath C:\dev\kevin\rsocket-js
9+
3 info versioning independent
10+
4 error Error: Invalid package name "apollo-server-plugin-base ": name cannot contain leading or trailing spaces; name can only contain URL-friendly characters
11+
4 error at invalidPackageName (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:84:15)
12+
4 error at Result.setName (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:119:11)
13+
4 error at new Result (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:110:10)
14+
4 error at Function.resolve (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:54:15)
15+
4 error at C:\dev\kevin\rsocket-js\node_modules\@lerna\package-graph\index.js:66:30
16+
4 error at Array.forEach (<anonymous>)
17+
4 error at C:\dev\kevin\rsocket-js\node_modules\@lerna\package-graph\index.js:60:38
18+
4 error at Map.forEach (<anonymous>)
19+
4 error at new PackageGraph (C:\dev\kevin\rsocket-js\node_modules\@lerna\package-graph\index.js:49:10)

packages/rsocket-examples/src/graphql/apollo/client-server/example.ts

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { TcpClientTransport } from "rsocket-tcp-client";
1919
import { TcpServerTransport } from "rsocket-tcp-server";
2020
import { exit } from "process";
2121
import { makeRSocketLink } from "rsocket-graphql-apollo-link";
22-
import { ApolloServer } from "rsocket-graphql-apollo-server";
22+
import { RSocketApolloServer } from "rsocket-graphql-apollo-server";
2323
import {
2424
ApolloClient,
2525
InMemoryCache,
@@ -30,8 +30,9 @@ import { resolvers } from "./resolvers";
3030
import { DocumentNode } from "@apollo/client";
3131
import * as fs from "fs";
3232
import path from "path";
33+
import { RSocketApolloGraphlQLPlugin } from "rsocket-graphql-apollo-server/src/RSocketApolloGraphlQLPlugin";
3334

34-
let apolloServer: ApolloServer;
35+
let apolloServer: RSocketApolloServer;
3536
let rsocketClient: RSocket;
3637

3738
function readSchema() {
@@ -66,25 +67,13 @@ function makeRSocketConnector() {
6667
}
6768

6869
function makeApolloServer({ typeDefs, resolvers }) {
69-
const server = new ApolloServer({
70+
const plugin = new RSocketApolloGraphlQLPlugin({ makeRSocketServer });
71+
const server = new RSocketApolloServer({
7072
typeDefs,
7173
resolvers,
72-
plugins: [
73-
{
74-
async serverWillStart() {
75-
let rSocketServer = makeRSocketServer({
76-
handler: server.getHandler(),
77-
});
78-
let closeable = await rSocketServer.bind();
79-
return {
80-
async drainServer() {
81-
closeable.close();
82-
},
83-
};
84-
},
85-
},
86-
],
74+
plugins: [() => plugin],
8775
});
76+
plugin.setApolloServer(server);
8877
return server;
8978
}
9079

packages/rsocket-graphql-apollo-server/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"@graphql-tools/schema": "^8.3.5",
2222
"rsocket-composite-metadata": "^1.0.0-alpha.1",
2323
"rsocket-core": "^1.0.0-alpha.1",
24+
"apollo-server-plugin-base": "^3.6.2",
2425
"apollo-server-core": "^3.6.6",
2526
"apollo-server-env": "^4.2.1",
2627
"graphql": "^16.3.0",
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
ApolloServerPlugin,
3+
BaseContext,
4+
GraphQLServerListener,
5+
GraphQLServiceContext,
6+
} from "apollo-server-plugin-base";
7+
import { RSocket } from "rsocket-core";
8+
import { RSocketApolloServer } from "./RSocketApolloServer";
9+
10+
type RSocketApolloGraphlQLPluginOptions = {
11+
apolloServer?: RSocketApolloServer;
12+
makeRSocketServer: ({ handler }: { handler: Partial<RSocket> }) => any;
13+
};
14+
15+
export class RSocketApolloGraphlQLPlugin<TContext extends BaseContext>
16+
implements ApolloServerPlugin<TContext>
17+
{
18+
private apolloServer: RSocketApolloServer;
19+
constructor(private options: RSocketApolloGraphlQLPluginOptions) {}
20+
21+
async serverWillStart(
22+
service: GraphQLServiceContext
23+
): Promise<GraphQLServerListener | void> {
24+
if (!this.apolloServer) {
25+
throw new Error(
26+
"serverWillStart called without valid apolloServer reference. Did you forget to call setApolloServer?"
27+
);
28+
}
29+
const handler = this.apolloServer.getHandler();
30+
let rSocketServer = this.options.makeRSocketServer({ handler });
31+
let closeable = await rSocketServer.bind();
32+
return {
33+
async drainServer() {
34+
closeable.close();
35+
},
36+
};
37+
}
38+
39+
setApolloServer(apolloServer: RSocketApolloServer) {
40+
this.apolloServer = apolloServer;
41+
}
42+
}

packages/rsocket-graphql-apollo-server/src/ApolloServer.ts renamed to packages/rsocket-graphql-apollo-server/src/RSocketApolloServer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export interface RSocketContext {
2424
payload: Payload;
2525
}
2626

27-
export class ApolloServer<
27+
export class RSocketApolloServer<
2828
ContextFunctionParams = RSocketContext
2929
> extends ApolloServerBase<ContextFunctionParams> {
3030
private readonly schema: GraphQLSchema;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { ApolloServer } from "./ApolloServer";
1+
export { RSocketApolloServer } from "./RSocketApolloServer";

0 commit comments

Comments
 (0)