@forge/resolver

1.7.11.8.0-next.0
~

Modified (9 files)

Index: package/out/index.js
===================================================================
--- package/out/index.js
+++ package/out/index.js
@@ -12,8 +12,10 @@
         }
         if (functionKey in this.functions) {
             throw new Error(`Resolver definition '${functionKey}' already exists.`);
         }
+        // Individual resolver functions are not type-checked inside the array. The
+        // types are only checked when adding them via makeResolver.
         this.functions[functionKey] = cb;
         return this;
     }
     getFunction(functionKey) {
@@ -46,8 +48,14 @@
         };
     }
 }
 exports.default = Resolver;
+/**
+ * Creates resolver definitions corresponding to a given Definitions type.
+ *
+ * @param handlers Resolver functions implementing the definitions
+ * @returns Resolver definitions
+ */
 function makeResolver(handlers) {
     const resolver = new Resolver();
     for (const key of Object.keys(handlers)) {
         resolver.define(key, handlers[key]);
Index: package/out/shared/index.js
===================================================================
--- package/out/shared/index.js
+++ package/out/shared/index.js
@@ -1,2 +1,5 @@
 "use strict";
+/**
+ * Internal types shared between @forge/resolver and @forge/bridge.
+ */
 Object.defineProperty(exports, "__esModule", { value: true });
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@forge/resolver",
-  "version": "1.7.1",
+  "version": "1.8.0-next.0",
   "description": "Forge function resolver",
   "author": "Atlassian",
   "license": "SEE LICENSE IN LICENSE.txt",
   "main": "out/index.js",
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":"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
+{"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,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,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;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAM7F"}
\ No newline at end of file
Index: package/out/shared/index.d.ts.map
===================================================================
--- package/out/shared/index.d.ts.map
+++ package/out/shared/index.d.ts.map
@@ -1,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"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,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"}
\ No newline at end of file
Index: package/CHANGELOG.md
===================================================================
--- package/CHANGELOG.md
+++ package/CHANGELOG.md
@@ -1,6 +1,12 @@
 # @forge/resolver
 
+## 1.8.0-next.0
+
+### Minor Changes
+
+- 6b848cf: Added response and payload types and jsdoc to Resolver.define
+
 ## 1.7.1
 
 ### Patch Changes
Index: package/out/index.d.ts
===================================================================
--- package/out/index.d.ts
+++ package/out/index.d.ts
@@ -15,14 +15,48 @@
 declare type DefinitionsHandler = (payload: InvokePayload<unknown>, backendRuntimePayload?: Record<string, any>) => Promise<unknown>;
 export default class Resolver {
     private functions;
     constructor();
-    define(functionKey: string, cb: ResolverFunction<never, unknown>): this;
+    define(functionKey: string, cb: ResolverFunction<any, any>): this;
+    /**
+     * Defines a resolver with explicit payload and return types.
+     *
+     * The first generic is the payload shape and the second generic is the return type.
+     *
+     * @example
+     * type Payload = { name: string };
+     * type Response = { message: string };
+     * resolver.define<Payload, Response>('greet', ({ payload }) => ({
+     *   message: `Hello ${payload.name}`
+     * }));
+     */
+    define<Payload, Result = Response>(functionKey: string, cb: ResolverFunction<Payload, Result>): this;
+    /**
+     * Defines a resolver using the return-only generic form.
+     *
+     * The single type argument is the return type.
+     *
+     * @example
+     * type Response = { message: string };
+     * resolver.define<Response>('greet', () => ({ message: 'ok' }));
+     */
+    define<Result = Response>(functionKey: string, cb: ResolverFunction<any, Result>): this;
     private getFunction;
     private sanitizeObject;
     getDefinitions(): DefinitionsHandler;
 }
+/**
+ * Given a type specialising Definitions shared between frontend and backend,
+ * Handlers will return a type for a record of resolver functions that are
+ * needed to implement this on the backend.
+ */
 export declare type Handlers<D extends Definitions> = {
     [Def in keyof D & string]: ResolverFunction<DefArgument<D, Def>, DefResult<D, Def>>;
 };
+/**
+ * Creates resolver definitions corresponding to a given Definitions type.
+ *
+ * @param handlers Resolver functions implementing the definitions
+ * @returns Resolver definitions
+ */
 export declare function makeResolver<D extends Definitions>(handlers: Handlers<D>): DefinitionsHandler;
 //# sourceMappingURL=index.d.ts.map
\ No newline at end of file
Index: package/out/shared/index.d.ts
===================================================================
--- package/out/shared/index.d.ts
+++ package/out/shared/index.d.ts
@@ -1,4 +1,7 @@
+/**
+ * Internal types shared between @forge/resolver and @forge/bridge.
+ */
 export declare type Context = {
     [key: string]: any;
 };
 export declare type Request<Argument = any> = {
Index: package/LICENSE.txt
===================================================================
--- package/LICENSE.txt
+++ package/LICENSE.txt
@@ -1,5 +1,5 @@
-Copyright (c) 2025 Atlassian
+Copyright (c) 2026 Atlassian
 Permission is hereby granted to use this software in accordance with the terms 
 and conditions outlined in the Atlassian Developer Terms, which can be found 
 at the following URL:
 https://developer.atlassian.com/platform/marketplace/atlassian-developer-terms/