Skip to content

Commit

Permalink
feat: add RSocketApolloGraphlQLPlugin (apollographql/apollo-server#6264)
Browse files Browse the repository at this point in the history
  • Loading branch information
viglucci committed Sep 4, 2022
1 parent edf234b commit 16f0113
Show file tree
Hide file tree
Showing 7 changed files with 2,349 additions and 2,108 deletions.
19 changes: 19 additions & 0 deletions lerna-debug.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
0 silly argv {
0 silly argv _: [ 'run' ],
0 silly argv lernaVersion: '4.0.0',
0 silly argv '$0': 'node_modules\\lerna\\cli.js',
0 silly argv script: 'yarn'
0 silly argv }
1 notice cli v4.0.0
2 verbose rootPath C:\dev\kevin\rsocket-js
3 info versioning independent
4 error Error: Invalid package name "apollo-server-plugin-base ": name cannot contain leading or trailing spaces; name can only contain URL-friendly characters
4 error at invalidPackageName (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:84:15)
4 error at Result.setName (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:119:11)
4 error at new Result (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:110:10)
4 error at Function.resolve (C:\dev\kevin\rsocket-js\node_modules\npm-package-arg\npa.js:54:15)
4 error at C:\dev\kevin\rsocket-js\node_modules\@lerna\package-graph\index.js:66:30
4 error at Array.forEach (<anonymous>)
4 error at C:\dev\kevin\rsocket-js\node_modules\@lerna\package-graph\index.js:60:38
4 error at Map.forEach (<anonymous>)
4 error at new PackageGraph (C:\dev\kevin\rsocket-js\node_modules\@lerna\package-graph\index.js:49:10)
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { TcpClientTransport } from "rsocket-tcp-client";
import { TcpServerTransport } from "rsocket-tcp-server";
import { exit } from "process";
import { makeRSocketLink } from "rsocket-graphql-apollo-link";
import { ApolloServer } from "rsocket-graphql-apollo-server";
import { RSocketApolloServer } from "rsocket-graphql-apollo-server";
import {
ApolloClient,
InMemoryCache,
Expand All @@ -30,8 +30,9 @@ import { resolvers } from "./resolvers";
import { DocumentNode } from "@apollo/client";
import * as fs from "fs";
import path from "path";
import { RSocketApolloGraphlQLPlugin } from "rsocket-graphql-apollo-server/src/RSocketApolloGraphlQLPlugin";

let apolloServer: ApolloServer;
let apolloServer: RSocketApolloServer;
let rsocketClient: RSocket;

function readSchema() {
Expand Down Expand Up @@ -66,25 +67,13 @@ function makeRSocketConnector() {
}

function makeApolloServer({ typeDefs, resolvers }) {
const server = new ApolloServer({
const plugin = new RSocketApolloGraphlQLPlugin({ makeRSocketServer });
const server = new RSocketApolloServer({
typeDefs,
resolvers,
plugins: [
{
async serverWillStart() {
let rSocketServer = makeRSocketServer({
handler: server.getHandler(),
});
let closeable = await rSocketServer.bind();
return {
async drainServer() {
closeable.close();
},
};
},
},
],
plugins: [() => plugin],
});
plugin.setApolloServer(server);
return server;
}

Expand Down
1 change: 1 addition & 0 deletions packages/rsocket-graphql-apollo-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"@graphql-tools/schema": "^8.3.5",
"rsocket-composite-metadata": "^1.0.0-alpha.1",
"rsocket-core": "^1.0.0-alpha.1",
"apollo-server-plugin-base": "^3.6.2",
"apollo-server-core": "^3.6.6",
"apollo-server-env": "^4.2.1",
"graphql": "^16.3.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import {
ApolloServerPlugin,
BaseContext,
GraphQLServerListener,
GraphQLServiceContext,
} from "apollo-server-plugin-base";
import { RSocket } from "rsocket-core";
import { RSocketApolloServer } from "./RSocketApolloServer";

type RSocketApolloGraphlQLPluginOptions = {
apolloServer?: RSocketApolloServer;
makeRSocketServer: ({ handler }: { handler: Partial<RSocket> }) => any;
};

export class RSocketApolloGraphlQLPlugin<TContext extends BaseContext>
implements ApolloServerPlugin<TContext>
{
private apolloServer: RSocketApolloServer;
constructor(private options: RSocketApolloGraphlQLPluginOptions) {}

async serverWillStart(
service: GraphQLServiceContext
): Promise<GraphQLServerListener | void> {
if (!this.apolloServer) {
throw new Error(
"serverWillStart called without valid apolloServer reference. Did you forget to call setApolloServer?"
);
}
const handler = this.apolloServer.getHandler();
let rSocketServer = this.options.makeRSocketServer({ handler });
let closeable = await rSocketServer.bind();
return {
async drainServer() {
closeable.close();
},
};
}

setApolloServer(apolloServer: RSocketApolloServer) {
this.apolloServer = apolloServer;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export interface RSocketContext {
payload: Payload;
}

export class ApolloServer<
export class RSocketApolloServer<
ContextFunctionParams = RSocketContext
> extends ApolloServerBase<ContextFunctionParams> {
private readonly schema: GraphQLSchema;
Expand Down
2 changes: 1 addition & 1 deletion packages/rsocket-graphql-apollo-server/src/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export { ApolloServer } from "./ApolloServer";
export { RSocketApolloServer } from "./RSocketApolloServer";
Loading

0 comments on commit 16f0113

Please sign in to comment.