How to split resolvers in multiple files?

That’s brilliant @Alexandr ! Thank you so much.

I have updated your solution for those who don’t use TypeScript (yet :wink: )
And also to provide a way of making sure that there are no collision names.

src/resolvers/jira.js

import Resolver from '@forge/resolver';

const getJiraText = (req) => {
  console.log(req);
  return 'Hello, Jira world!';
}

const getText = (req) => {
  console.log(req);
  return 'Hello, world, from Jira!';
}

export const setDefinitions = (resolver, scope) => {
  resolver.define(scope ? scope + '.getJiraText' : 'getJiraText', getJiraText);
  resolver.define(scope ? scope + '.getText' : 'getText', getText);
};

src/resolvers/slack.js

import Resolver from '@forge/resolver';
import {Lambda} from './constants'

const getSlackText = (req) => {
  console.log(req);
  return 'Hello, Slack world!';
}

export const setDefinitions = (resolver, scope) => {
  resolver.define(scope ? scope + '.getSlackText' : 'getSlackText', getSlackText);
};

src/resolvers/index.js

import Resolver from '@forge/resolver';

import {setDefinitions as setDefinitionsSlack} from './slack';
import {setDefinitions as setDefinitionsJira} from './jira';

const resolver = new Resolver();

setDefinitionsSlack(resolver);
setDefinitionsJira(resolver, 'Jira');

export const handler = resolver.getDefinitions();

src/index.js

export { handler } from './resolvers';

src/frontend/index.jsx

import { invoke } from '@forge/bridge';

invoke('Jira.getJiraText', { example: 'my-invoke-variable' }).then(setData);
invoke('Jira.getText', { example: 'my-invoke-variable' }).then(setData2);
invoke('getSlackText', { example: 'my-invoke-variable' }).then(setData3);
1 Like