npm package diff
Package: @forge/resolver
Versions: 1.6.17-next.0 - 1.7.0-next.1
Added: package/out/shared/index.js
Added: package/out/shared/index.d.ts.map
Added: package/out/shared/index.d.ts
Modified: package/out/index.js
Index: package/out/index.js
===================================================================
--- package/out/index.js
+++ package/out/index.js
@@ -1,35 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-const api_1 = require("@forge/api");
-const isRequestPayload = (request) => {
- return typeof request.payload === 'object' && request.payload.product && request.payload.fetchUrl;
-};
-const defaultFunctions = {
- __request: async (request) => {
- if (!isRequestPayload(request)) {
- throw new Error('Invalid payload specified for request');
- }
- const { payload } = request;
- const productApis = {
- jira: (0, api_1.asUser)().requestJira,
- confluence: (0, api_1.asUser)().requestConfluence
- };
- const response = await productApis[payload.product]((0, api_1.assumeTrustedRoute)(payload.fetchUrl), payload.fetchOptions);
- let body = await response.text();
- try {
- body = JSON.parse(body);
- }
- catch (e) { }
- return { ...response, body };
- }
-};
+exports.makeResolver = void 0;
class Resolver {
functions;
constructor() {
- this.functions = {
- ...defaultFunctions
- };
+ this.functions = {};
}
define(functionKey, cb) {
if (!cb || typeof cb !== 'function') {
throw new Error(`Resolver definition '${functionKey}' callback must be a 'function'. Received '${typeof cb}'.`);
@@ -49,12 +25,12 @@
sanitizeObject(object) {
return JSON.parse(JSON.stringify(object));
}
getDefinitions() {
- const resolve = async ({ call: { functionKey, payload: callPayload, jobId }, context }, backendRuntimePayload) => {
+ return async ({ call: { functionKey, payload, jobId }, context }, backendRuntimePayload) => {
const cb = this.getFunction(functionKey);
const result = await cb({
- payload: callPayload || {},
+ payload: payload || {},
context: {
...context,
installContext: backendRuntimePayload?.installContext,
accountId: backendRuntimePayload?.principal?.accountId,
@@ -67,8 +43,15 @@
return this.sanitizeObject(result);
}
return result;
};
- return resolve;
}
}
exports.default = Resolver;
+function makeResolver(handlers) {
+ const resolver = new Resolver();
+ for (const key of Object.keys(handlers)) {
+ resolver.define(key, handlers[key]);
+ }
+ return resolver.getDefinitions();
+}
+exports.makeResolver = makeResolver;
Modified: package/package.json
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,20 +1,23 @@
{
"name": "@forge/resolver",
- "version": "1.6.17-next.0",
+ "version": "1.7.0-next.1",
"description": "Forge function resolver",
"author": "Atlassian",
"license": "SEE LICENSE IN LICENSE.txt",
"main": "out/index.js",
"types": "out/index.d.ts",
+ "exports": {
+ "./shared": {
+ "types": "./out/shared/index.d.ts",
+ "default": "./out/shared/index.js"
+ }
+ },
"scripts": {
"build": "yarn run clean && yarn run compile",
"clean": "rm -rf ./out && rm -f tsconfig.tsbuildinfo",
"compile": "tsc -b -v"
},
- "dependencies": {
- "@forge/api": "6.1.0-next.0"
- },
"publishConfig": {
"registry": "https://packages.atlassian.com/api/npm/npm-public/"
}
}
Modified: package/out/index.d.ts.map
Index: package/out/index.d.ts.map
===================================================================
--- package/out/index.d.ts.map
+++ package/out/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE;aAAG,GAAG,IAAI,MAAM,GAAG,MAAM,GAAG,GAAG;SAAE,CAAC;QAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE;QACP,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE;SACN,GAAG,IAAI,MAAM,GAAG,MAAM,GAAG,GAAG;KAC9B,CAAC;IACF,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC;AAED,UAAU,cAAc;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,oBAAY,QAAQ,GAAG,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC;AAEtD,oBAAY,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElF,aAAK,kBAAkB,GAAG,CACxB,OAAO,EAAE,aAAa,EACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KACvC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAsC3C,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,OAAO,CAAC,SAAS,CAAmC;;IAQ7C,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,GAAG,IAAI;IAW9D,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAIf,cAAc,IAAI,kBAAkB;CA2B5C"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEtF,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,aAAK,aAAa,CAAC,QAAQ,IAAI;IAC7B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAAC;AAE9D,oBAAY,gBAAgB,CAAC,QAAQ,GAAG,GAAG,EAAE,MAAM,GAAG,QAAQ,IAAI,CAChE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,KACvB,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAE9B,aAAK,kBAAkB,GAAG,CACxB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACxC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,OAAO,CAAC,SAAS,CAAqD;;IAM/D,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI;IAa9E,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAIf,cAAc,IAAI,kBAAkB;CAyB5C;AAOD,oBAAY,QAAQ,CAAC,CAAC,SAAS,WAAW,IAAI;KAC3C,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;CACpF,CAAC;AAQF,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAM7F"}
\ No newline at end of file
Modified: package/CHANGELOG.md
Index: package/CHANGELOG.md
===================================================================
--- package/CHANGELOG.md
+++ package/CHANGELOG.md
@@ -1,6 +1,12 @@
# @forge/resolver
+## 1.7.0-next.1
+
+### Minor Changes
+
+- 1a5bad3: Typed interface for invoking resolvers
+
## 1.6.17-next.0
### Patch Changes
Modified: package/out/index.d.ts
Index: package/out/index.d.ts
===================================================================
--- package/out/index.d.ts
+++ package/out/index.d.ts
@@ -1,34 +1,28 @@
-interface InvokePayload {
+import type { Context, DefArgument, DefResult, Definitions, Request } from './shared';
+export { Request };
+declare type InvokePayload<Argument> = {
call: {
functionKey: string;
- payload?: {
- [key in number | string]: any;
- };
+ payload?: Argument;
jobId?: string;
};
- context: {
- [key: string]: any;
- };
-}
-export interface Request {
- payload: {
- [key in number | string]: any;
- };
- context: InvokePayload['context'];
-}
-interface ResponseObject {
+ context: Context;
+};
+export declare type Response = {
[key: string]: any;
-}
-export declare type Response = ResponseObject | string | void;
-export declare type ResolverFunction = (request: Request) => Promise<Response> | Response;
-declare type DefinitionsHandler = (payload: InvokePayload, backendRuntimePayload?: Request['payload']) => Promise<ReturnType<ResolverFunction>>;
+} | string | void;
+export declare type ResolverFunction<Argument = any, Result = Response> = (request: Request<Argument>) => Promise<Result> | Result;
+declare type DefinitionsHandler = (payload: InvokePayload<unknown>, backendRuntimePayload?: Record<string, any>) => Promise<unknown>;
export default class Resolver {
private functions;
constructor();
- define(functionKey: string, cb: ResolverFunction): this;
+ define(functionKey: string, cb: ResolverFunction<never, unknown>): this;
private getFunction;
private sanitizeObject;
getDefinitions(): DefinitionsHandler;
}
-export {};
+export declare type Handlers<D extends Definitions> = {
+ [Def in keyof D & string]: ResolverFunction<DefArgument<D, Def>, DefResult<D, Def>>;
+};
+export declare function makeResolver<D extends Definitions>(handlers: Handlers<D>): DefinitionsHandler;
//# sourceMappingURL=index.d.ts.map
\ No newline at end of file