Had a bunch of calls with @pawan and @mrjn.
I think we might tweak the way the javascript is written, and try to look a little bit more like a webworker, so that we can make use of existing tools like webpack to include libraries.
A simple Javascript will look like this:
async getVirtualName({parent, graphql, args}) {
const [arg1, arg2] = args;
const data1 = await fetch(`https://external-data.com/some-data/${parent.id}`);
const data2 = await graphql(`query { foo { bar } }`);
return {...data1, ...data2 }
}
self.addEventListener("Query.getFullName", event => event.respondWith(getFullName(event)))
self.addEventListener("Mutation.updateName", event => event.respondWith(getFullName(event)))
self.addEventListener("User.virtualName", event => event.respondWith(getVirtualName(event)))
Alternatively, we can provide a function to get rid of the boiler plate at the end, but typescript will complain a bit
self.addGraphQLResolvers({
"Query.getFullName": getFullName,
"Mutation.updateName": updateName,
"User.virtualName": virtualName,
})