compeller
compeller copied to clipboard
feat: plugs and adapters
When need to allow for different request/response formats.
In general, we could have two scenario's:
- [ ] #34
- [x] #35
Adapters
Option 1
We could configure the response adapter like:
const api = compeller(spec, {
adapter: 'apigateway'
});
const { request, response } = api('/api/v1/line-items/{id}', 'get')
Option 2
Design an interface.
If we will hand off the interfaces of statusCode, body?, headers? then we can allow for an adapter to be written like:
const responder = (
statusCode: number,
body: Record<string, unknown> = {},
headers: Record<string, unknown> = {}
) => ({
statusCode,
body: JSON.stringify(body),
headers
})
const api = compeller(spec, {
responder,
});
const { request, response } = api('/api/v1/line-items/{id}', 'get')
The interface option was added in #27
Its stable enough for now, but types are not propagated out of the responder, and this needs to be improved so that schema types from responder can then we passed on e.g.
const response = responder('200', { name: 'simon'})
return {
// Currently response is not typed :cry:
...response,
headers: {
'x-additional-header': 'not-worth-injection'
}
}