@forge/resolver 1.6.17-next.0 → 1.7.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @forge/resolver
2
2
 
3
+ ## 1.7.0-next.2
4
+
5
+ ### Patch Changes
6
+
7
+ - f19343f: Fix exports
8
+
9
+ ## 1.7.0-next.1
10
+
11
+ ### Minor Changes
12
+
13
+ - 1a5bad3: Typed interface for invoking resolvers
14
+
3
15
  ## 1.6.17-next.0
4
16
 
5
17
  ### Patch Changes
package/out/index.d.ts CHANGED
@@ -1,34 +1,28 @@
1
- interface InvokePayload {
1
+ import type { Context, DefArgument, DefResult, Definitions, Request } from './shared';
2
+ export { Request };
3
+ declare type InvokePayload<Argument> = {
2
4
  call: {
3
5
  functionKey: string;
4
- payload?: {
5
- [key in number | string]: any;
6
- };
6
+ payload?: Argument;
7
7
  jobId?: string;
8
8
  };
9
- context: {
10
- [key: string]: any;
11
- };
12
- }
13
- export interface Request {
14
- payload: {
15
- [key in number | string]: any;
16
- };
17
- context: InvokePayload['context'];
18
- }
19
- interface ResponseObject {
9
+ context: Context;
10
+ };
11
+ export declare type Response = {
20
12
  [key: string]: any;
21
- }
22
- export declare type Response = ResponseObject | string | void;
23
- export declare type ResolverFunction = (request: Request) => Promise<Response> | Response;
24
- declare type DefinitionsHandler = (payload: InvokePayload, backendRuntimePayload?: Request['payload']) => Promise<ReturnType<ResolverFunction>>;
13
+ } | string | void;
14
+ export declare type ResolverFunction<Argument = any, Result = Response> = (request: Request<Argument>) => Promise<Result> | Result;
15
+ declare type DefinitionsHandler = (payload: InvokePayload<unknown>, backendRuntimePayload?: Record<string, any>) => Promise<unknown>;
25
16
  export default class Resolver {
26
17
  private functions;
27
18
  constructor();
28
- define(functionKey: string, cb: ResolverFunction): this;
19
+ define(functionKey: string, cb: ResolverFunction<never, unknown>): this;
29
20
  private getFunction;
30
21
  private sanitizeObject;
31
22
  getDefinitions(): DefinitionsHandler;
32
23
  }
33
- export {};
24
+ export declare type Handlers<D extends Definitions> = {
25
+ [Def in keyof D & string]: ResolverFunction<DefArgument<D, Def>, DefResult<D, Def>>;
26
+ };
27
+ export declare function makeResolver<D extends Definitions>(handlers: Handlers<D>): DefinitionsHandler;
34
28
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
1
+ {"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"}
package/out/index.js CHANGED
@@ -1,34 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const api_1 = require("@forge/api");
4
- const isRequestPayload = (request) => {
5
- return typeof request.payload === 'object' && request.payload.product && request.payload.fetchUrl;
6
- };
7
- const defaultFunctions = {
8
- __request: async (request) => {
9
- if (!isRequestPayload(request)) {
10
- throw new Error('Invalid payload specified for request');
11
- }
12
- const { payload } = request;
13
- const productApis = {
14
- jira: (0, api_1.asUser)().requestJira,
15
- confluence: (0, api_1.asUser)().requestConfluence
16
- };
17
- const response = await productApis[payload.product]((0, api_1.assumeTrustedRoute)(payload.fetchUrl), payload.fetchOptions);
18
- let body = await response.text();
19
- try {
20
- body = JSON.parse(body);
21
- }
22
- catch (e) { }
23
- return { ...response, body };
24
- }
25
- };
3
+ exports.makeResolver = void 0;
26
4
  class Resolver {
27
5
  functions;
28
6
  constructor() {
29
- this.functions = {
30
- ...defaultFunctions
31
- };
7
+ this.functions = {};
32
8
  }
33
9
  define(functionKey, cb) {
34
10
  if (!cb || typeof cb !== 'function') {
@@ -50,10 +26,10 @@ class Resolver {
50
26
  return JSON.parse(JSON.stringify(object));
51
27
  }
52
28
  getDefinitions() {
53
- const resolve = async ({ call: { functionKey, payload: callPayload, jobId }, context }, backendRuntimePayload) => {
29
+ return async ({ call: { functionKey, payload, jobId }, context }, backendRuntimePayload) => {
54
30
  const cb = this.getFunction(functionKey);
55
31
  const result = await cb({
56
- payload: callPayload || {},
32
+ payload: payload || {},
57
33
  context: {
58
34
  ...context,
59
35
  installContext: backendRuntimePayload?.installContext,
@@ -68,7 +44,14 @@ class Resolver {
68
44
  }
69
45
  return result;
70
46
  };
71
- return resolve;
72
47
  }
73
48
  }
74
49
  exports.default = Resolver;
50
+ function makeResolver(handlers) {
51
+ const resolver = new Resolver();
52
+ for (const key of Object.keys(handlers)) {
53
+ resolver.define(key, handlers[key]);
54
+ }
55
+ return resolver.getDefinitions();
56
+ }
57
+ exports.makeResolver = makeResolver;
@@ -0,0 +1,12 @@
1
+ export declare type Context = {
2
+ [key: string]: any;
3
+ };
4
+ export declare type Request<Argument = any> = {
5
+ payload: Argument;
6
+ context: Context;
7
+ };
8
+ export declare type Definitions = Record<string, (i: never) => unknown>;
9
+ export declare type DefArguments<D extends Definitions, Def extends keyof D & string> = Parameters<D[Def]> extends [] ? [] : [Parameters<D[Def]>[0]];
10
+ export declare type DefArgument<D extends Definitions, Def extends keyof D & string> = DefArguments<D, Def>[0];
11
+ export declare type DefResult<D extends Definitions, Def extends keyof D & string> = Awaited<ReturnType<D[Def]>>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAIA,oBAAY,OAAO,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,oBAAY,OAAO,CAAC,QAAQ,GAAG,GAAG,IAAI;IACpC,OAAO,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAIF,oBAAY,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC;AAIhE,oBAAY,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,IAC1E,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,oBAAY,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvG,oBAAY,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,19 +1,26 @@
1
1
  {
2
2
  "name": "@forge/resolver",
3
- "version": "1.6.17-next.0",
3
+ "version": "1.7.0-next.2",
4
4
  "description": "Forge function resolver",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
7
7
  "main": "out/index.js",
8
8
  "types": "out/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./out/index.d.ts",
12
+ "default": "./out/index.js"
13
+ },
14
+ "./shared": {
15
+ "types": "./out/shared/index.d.ts",
16
+ "default": "./out/shared/index.js"
17
+ }
18
+ },
9
19
  "scripts": {
10
20
  "build": "yarn run clean && yarn run compile",
11
21
  "clean": "rm -rf ./out && rm -f tsconfig.tsbuildinfo",
12
22
  "compile": "tsc -b -v"
13
23
  },
14
- "dependencies": {
15
- "@forge/api": "6.1.0-next.0"
16
- },
17
24
  "publishConfig": {
18
25
  "registry": "https://packages.atlassian.com/api/npm/npm-public/"
19
26
  }