@forge/resolver
Advanced tools
Comparing version 0.1.0-next.4 to 0.1.0-next.5
# @forge/resolver | ||
## 0.1.0-next.5 | ||
### Patch Changes | ||
- e7a1e4f: Remove non-transferable objects before return | ||
- 7425057: Add error case for duplicate resolver definitions | ||
## 0.1.0-next.4 | ||
@@ -4,0 +11,0 @@ |
@@ -41,2 +41,8 @@ "use strict"; | ||
}); | ||
resolver.define('nonTransferableReturn', () => { | ||
const obj = Object.create(null); | ||
obj.foo = 'bar'; | ||
obj.baz = () => 'toto'; | ||
return obj; | ||
}); | ||
const invoke = async (functionKey, payload) => { | ||
@@ -63,2 +69,13 @@ const handler = resolver.getDefinitions(); | ||
}); | ||
it('should throw an error if there is already a definition for a function key', async () => { | ||
const testResolver = new __1.default(); | ||
testResolver.define('test', () => { }); | ||
expect(() => testResolver.define('test', () => { })).toThrowError(new Error(`Resolver definition 'test' already exists.`)); | ||
}); | ||
it('removes non transferable return values', async () => { | ||
const result = await invoke('nonTransferableReturn'); | ||
expect(result.constructor.name).toBe('Object'); | ||
expect(result.foo).toEqual('bar'); | ||
expect(result.baz).toBeUndefined(); | ||
}); | ||
}); |
@@ -22,2 +22,3 @@ interface InvokePayload { | ||
declare type ResolverFunction = (request: Request) => Promise<Response | void> | Response | void; | ||
declare type DefinitionsHandler = ({ call: { functionKey, payload: callPayload }, context }: InvokePayload, backendRuntimePayload?: Request['payload']) => Promise<ReturnType<ResolverFunction>>; | ||
export default class Resolver { | ||
@@ -28,5 +29,6 @@ private functions; | ||
private getFunction; | ||
getDefinitions(): ({ call: { functionKey, payload: callPayload }, context }: InvokePayload, backendRuntimePayload?: Record<string, any> | undefined) => Promise<ReturnType<ResolverFunction>>; | ||
private sanitizeObject; | ||
getDefinitions(): DefinitionsHandler; | ||
} | ||
export {}; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -11,2 +11,5 @@ "use strict"; | ||
} | ||
if (functionKey in this.functions) { | ||
throw new Error(`Resolver definition '${functionKey}' already exists.`); | ||
} | ||
this.functions[functionKey] = cb; | ||
@@ -21,2 +24,5 @@ return this; | ||
} | ||
sanitizeObject(object) { | ||
return JSON.parse(JSON.stringify(object)); | ||
} | ||
getDefinitions() { | ||
@@ -30,2 +36,5 @@ const resolve = async ({ call: { functionKey, payload: callPayload }, context }, backendRuntimePayload) => { | ||
}); | ||
if (typeof result === 'object') { | ||
return this.sanitizeObject(result); | ||
} | ||
return result; | ||
@@ -32,0 +41,0 @@ }; |
{ | ||
"name": "@forge/resolver", | ||
"version": "0.1.0-next.4", | ||
"version": "0.1.0-next.5", | ||
"description": "Forge function resolver", | ||
@@ -5,0 +5,0 @@ "author": "Atlassian", |
Sorry, the diff of this file is not supported yet
9124
153