@forge/resolver 1.7.1 → 1.8.0-experimental-04cc2b9

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,23 @@
1
1
  # @forge/resolver
2
2
 
3
+ ## 1.8.0-experimental-04cc2b9
4
+
5
+ ### Major Changes
6
+
7
+ - d9ef926: Adds support for TypeScript 5
8
+
9
+ ## 1.8.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 6b848cf: Added response and payload types and jsdoc to Resolver.define
14
+
15
+ ## 1.8.0-next.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 6b848cf: Added response and payload types and jsdoc to Resolver.define
20
+
3
21
  ## 1.7.1
4
22
 
5
23
  ### Patch Changes
package/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2025 Atlassian
1
+ Copyright (c) 2026 Atlassian
2
2
  Permission is hereby granted to use this software in accordance with the terms
3
3
  and conditions outlined in the Atlassian Developer Terms, which can be found
4
4
  at the following URL:
package/out/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Context, DefArgument, DefResult, Definitions, Request } from './shared';
2
2
  export { Request };
3
- declare type InvokePayload<Argument> = {
3
+ type InvokePayload<Argument> = {
4
4
  call: {
5
5
  functionKey: string;
6
6
  payload?: Argument;
@@ -8,21 +8,55 @@ declare type InvokePayload<Argument> = {
8
8
  };
9
9
  context: Context;
10
10
  };
11
- export declare type Response = {
11
+ export type Response = {
12
12
  [key: string]: any;
13
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>;
14
+ export type ResolverFunction<Argument = any, Result = Response> = (request: Request<Argument>) => Promise<Result> | Result;
15
+ type DefinitionsHandler = (payload: InvokePayload<unknown>, backendRuntimePayload?: Record<string, any>) => Promise<unknown>;
16
16
  export default class Resolver {
17
17
  private functions;
18
18
  constructor();
19
- define(functionKey: string, cb: ResolverFunction<never, unknown>): this;
19
+ define(functionKey: string, cb: ResolverFunction<any, any>): this;
20
+ /**
21
+ * Defines a resolver with explicit payload and return types.
22
+ *
23
+ * The first generic is the payload shape and the second generic is the return type.
24
+ *
25
+ * @example
26
+ * type Payload = { name: string };
27
+ * type Response = { message: string };
28
+ * resolver.define<Payload, Response>('greet', ({ payload }) => ({
29
+ * message: `Hello ${payload.name}`
30
+ * }));
31
+ */
32
+ define<Payload, Result = Response>(functionKey: string, cb: ResolverFunction<Payload, Result>): this;
33
+ /**
34
+ * Defines a resolver using the return-only generic form.
35
+ *
36
+ * The single type argument is the return type.
37
+ *
38
+ * @example
39
+ * type Response = { message: string };
40
+ * resolver.define<Response>('greet', () => ({ message: 'ok' }));
41
+ */
42
+ define<Result = Response>(functionKey: string, cb: ResolverFunction<any, Result>): this;
20
43
  private getFunction;
21
44
  private sanitizeObject;
22
45
  getDefinitions(): DefinitionsHandler;
23
46
  }
24
- export declare type Handlers<D extends Definitions> = {
47
+ /**
48
+ * Given a type specialising Definitions shared between frontend and backend,
49
+ * Handlers will return a type for a record of resolver functions that are
50
+ * needed to implement this on the backend.
51
+ */
52
+ export type Handlers<D extends Definitions> = {
25
53
  [Def in keyof D & string]: ResolverFunction<DefArgument<D, Def>, DefResult<D, Def>>;
26
54
  };
55
+ /**
56
+ * Creates resolver definitions corresponding to a given Definitions type.
57
+ *
58
+ * @param handlers Resolver functions implementing the definitions
59
+ * @returns Resolver definitions
60
+ */
27
61
  export declare function makeResolver<D extends Definitions>(handlers: Handlers<D>): DefinitionsHandler;
28
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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"}
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,KAAK,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,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAAC;AAE9D,MAAM,MAAM,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,KAAK,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,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAExE;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI;IAE3G;;;;;;;;OAQG;IACI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI;IAe9F,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAIf,cAAc,IAAI,kBAAkB;CAyB5C;AAED;;;;GAIG;AACH,MAAM,MAAM,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;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAM7F"}
package/out/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeResolver = void 0;
3
+ exports.makeResolver = makeResolver;
4
4
  class Resolver {
5
5
  functions;
6
6
  constructor() {
@@ -13,6 +13,8 @@ class Resolver {
13
13
  if (functionKey in this.functions) {
14
14
  throw new Error(`Resolver definition '${functionKey}' already exists.`);
15
15
  }
16
+ // Individual resolver functions are not type-checked inside the array. The
17
+ // types are only checked when adding them via makeResolver.
16
18
  this.functions[functionKey] = cb;
17
19
  return this;
18
20
  }
@@ -47,6 +49,12 @@ class Resolver {
47
49
  }
48
50
  }
49
51
  exports.default = Resolver;
52
+ /**
53
+ * Creates resolver definitions corresponding to a given Definitions type.
54
+ *
55
+ * @param handlers Resolver functions implementing the definitions
56
+ * @returns Resolver definitions
57
+ */
50
58
  function makeResolver(handlers) {
51
59
  const resolver = new Resolver();
52
60
  for (const key of Object.keys(handlers)) {
@@ -54,4 +62,3 @@ function makeResolver(handlers) {
54
62
  }
55
63
  return resolver.getDefinitions();
56
64
  }
57
- exports.makeResolver = makeResolver;
@@ -1,12 +1,15 @@
1
- export declare type Context = {
1
+ /**
2
+ * Internal types shared between @forge/resolver and @forge/bridge.
3
+ */
4
+ export type Context = {
2
5
  [key: string]: any;
3
6
  };
4
- export declare type Request<Argument = any> = {
7
+ export type Request<Argument = any> = {
5
8
  payload: Argument;
6
9
  context: Context;
7
10
  };
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]>>;
11
+ export type Definitions = Record<string, (i: never) => unknown>;
12
+ export type DefArguments<D extends Definitions, Def extends keyof D & string> = Parameters<D[Def]> extends [] ? [] : [Parameters<D[Def]>[0]];
13
+ export type DefArgument<D extends Definitions, Def extends keyof D & string> = DefArguments<D, Def>[0];
14
+ export type DefResult<D extends Definitions, Def extends keyof D & string> = Awaited<ReturnType<D[Def]>>;
12
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,QAAQ,GAAG,GAAG,IAAI;IACpC,OAAO,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAIF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC;AAIhE,MAAM,MAAM,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,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvG,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,SAAS,MAAM,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC"}
@@ -1,2 +1,5 @@
1
1
  "use strict";
2
+ /**
3
+ * Internal types shared between @forge/resolver and @forge/bridge.
4
+ */
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/resolver",
3
- "version": "1.7.1",
3
+ "version": "1.8.0-experimental-04cc2b9",
4
4
  "description": "Forge function resolver",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -23,5 +23,16 @@
23
23
  },
24
24
  "publishConfig": {
25
25
  "registry": "https://packages.atlassian.com/api/npm/npm-public/"
26
+ },
27
+ "peerDependencies": {
28
+ "typescript": ">=5.0.0"
29
+ },
30
+ "peerDependenciesMeta": {
31
+ "typescript": {
32
+ "optional": true
33
+ }
34
+ },
35
+ "devDependencies": {
36
+ "typescript": "5.9.2"
26
37
  }
27
38
  }