Skip to content

Commit 788b973

Browse files
Flattening the params of the events, setter and notifier. (#283)
* feat: If result is object, add its properties as parameters to the generated notifier and setter * fix: Issues in generated openrpc spec * fix: Store context args * refactor: Rename variale * fix: Filter non-context parameters needed for the event callback * fix: Markdown descripton regression issue * fix: Code clean-up
1 parent e63b170 commit 788b973

File tree

7 files changed

+306
-29
lines changed

7 files changed

+306
-29
lines changed

languages/javascript/src/shared/Events/index.mjs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,16 @@ const getClearArgs = function(...args) {
218218
const module = (args.shift() || '*')
219219
const event = args.shift() || '*'
220220
const context = {}
221-
221+
222+
// populate context based on registered context for this module/event
223+
// if an argument is not registered in validContext, that is ok meaning it is not a context argument
224+
// Needed after introducing x-contextual-params
222225
for (let i = 0; args.length; i++) {
223-
context[validContext[module][event][i]] = args.shift()
226+
let currentArg = args.shift()
227+
if (validContext[module] && validContext[module][event] && validContext[module][event][i]) {
228+
context[validContext[module][event][i]] = currentArg
229+
}
224230
}
225-
226231
return [module, event, context]
227232
}
228233

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
/**
1+
/**
22
* ${method.summary}
33
*
44
* @param {'${event.name}'} event
55
* @param {Function} callback
66
${if.deprecated} * @deprecated ${method.deprecation}
77
${end.if.deprecated} */
8-
function listen(event: '${event.name}'${if.context}, ${event.signature.params}${end.if.context}, callback: (data: ${event.result.type}) => void): Promise<number>
8+
function listen(event: '${event.name}', ${if.context}${event.signature.params},${end.if.context} callback: (${event.result.type}) => void): Promise<number>
99

1010
/**
1111
* ${method.summary}
@@ -15,4 +15,4 @@ function listen(event: '${event.name}'${if.context}, ${event.signature.params}${
1515
* @param {Function} callback
1616
${if.deprecated} * @deprecated ${method.deprecation}
1717
${end.if.deprecated} */
18-
function once(event: '${event.name}'${if.context}, ${event.signature.params}${end.if.context}, callback: (data: ${event.result.type}) => void): Promise<number>
18+
function once(event: '${event.name}', ${if.context}${event.signature.params},${end.if.context} callback: (${event.result.type}) => void): Promise<number>

languages/javascript/templates/declarations/subscriber.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* @param {Function} callback
66
${if.deprecated} * @deprecated ${method.deprecation}
77
${end.if.deprecated} */
8-
function listen(event: '${event.name}'${if.context}, ${event.signature.params}${end.if.context}, callback: (data: ${event.result.type}) => void): Promise<number>
8+
function listen(event: '${event.name}'${if.context}, ${event.signature.params}${end.if.context}, callback: ( ${event.result.type}) => void): Promise<number>
99

1010
/**
1111
* ${method.summary}
@@ -15,4 +15,4 @@ function listen(event: '${event.name}'${if.context}, ${event.signature.params}${
1515
* @param {Function} callback
1616
${if.deprecated} * @deprecated ${method.deprecation}
1717
${end.if.deprecated} */
18-
function once(event: '${event.name}'${if.context}, ${event.signature.params}${end.if.context}, callback: (data: ${event.result.type}) => void): Promise<number>
18+
function once(event: '${event.name}'${if.context}, ${event.signature.params}${end.if.context}, callback: ( ${event.result.type}) => void): Promise<number>

src/macrofier/engine.mjs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1591,9 +1591,28 @@ function insertMethodMacros(template, methodObj, platformApi, appApi, templates,
15911591

15921592

15931593
let eventParams = event.params && event.params.length ? getTemplate('/sections/parameters', templates) + event.params.map(p => insertParameterMacros(getTemplate('/parameters/default', templates), p, event, currentModuleApiForEvent)).join('') : ''
1594-
1594+
const eventForSubscriber = getNotifierForMethod(method, appApi)
1595+
1596+
// Filter parameters to remove context parameters, because only non-context parameters are parameters for the event callback
1597+
let xContextParams = 0
1598+
let eventNonContextualParams = ''
1599+
if (eventForSubscriber) {
1600+
if (eventForSubscriber.tags) {
1601+
const tag = eventForSubscriber.tags.find(tag => tag.name === 'notifier');
1602+
xContextParams = tag['x-contextual-params'] || 0
1603+
}
1604+
1605+
if (eventForSubscriber.params && eventForSubscriber.params.length) {
1606+
if (xContextParams > 0) {
1607+
const nonContextParamsArray = eventForSubscriber.params.slice(xContextParams, eventForSubscriber.params.length)
1608+
eventNonContextualParams = getTemplate('/sections/parameters', templates) + nonContextParamsArray.map(p => insertParameterMacros(getTemplate('/parameters/default', templates), p, eventForSubscriber, appApi)).join(', ')
1609+
} else
1610+
eventNonContextualParams = getTemplate('/sections/parameters', templates) + eventForSubscriber.params.map(p => insertParameterMacros(getTemplate('/parameters/default', templates), p, eventForSubscriber, appApi)).join(', ')
1611+
}
1612+
}
1613+
15951614
if (isGeneratingDocs(languages)) {
1596-
const eventForSubscriber = getNotifierForMethod(method, appApi)
1615+
eventNonContextualParams = isEventMethod(methodObj) && event.result ? Types.getMethodSignatureResult(event, currentModuleApiForEvent, { callback: true, namespace: !config.copySchemasIntoModules }) : ''
15971616
// If there's a notifier for this method, and it has examples, use its params for the eventParams section
15981617
if (eventForSubscriber && eventForSubscriber.examples && eventForSubscriber.examples.length) {
15991618
eventParams = (eventForSubscriber.params && eventForSubscriber.params.length) ?
@@ -1729,7 +1748,6 @@ function insertMethodMacros(template, methodObj, platformApi, appApi, templates,
17291748
}
17301749
}
17311750

1732-
17331751
template = insertExampleMacros(template, examples || [], methodObj, platformApi, templates, appApi, isGeneratingDocs(languages))
17341752

17351753
template = template.replace(/\$\{method\.name\}/g, method.name)
@@ -1799,7 +1817,7 @@ function insertMethodMacros(template, methodObj, platformApi, appApi, templates,
17991817
.replace(/\$\{method\.result\.type\}/g, Types.getSchemaType(result.schema, platformApi, { templateDir: state.typeTemplateDir, title: true, asPath: false, result: true, namespace: false })) //, baseUrl: options.baseUrl
18001818
.replace(/\$\{method\.result\.json\}/g, Types.getSchemaType(result.schema.type === 'null' ? getNonNullSchema(methodObj, event, platformApi, appApi) : result.schema, platformApi, { templateDir: 'json-types', title: true, code: false, link: false, asPath: false, expandEnums: false, namespace: true }))
18011819
// todo: what does prefix do?
1802-
.replace(/\$\{event\.result\.type\}/g, isEventMethod(methodObj) && event.result ? Types.getMethodSignatureResult(event, currentModuleApiForEvent, { callback: true, namespace: !config.copySchemasIntoModules }) : '')
1820+
.replace(/\$\{event\.result\.type\}/g, isEventMethod(methodObj) && eventNonContextualParams ? eventNonContextualParams : '')
18031821
.replace(/\$\{event\.result\.json\.type\}/g, resultJsonType)
18041822
.replace(/\$\{event\.result\.json\.type\}/g, callbackResultJsonType)
18051823
.replace(/\$\{event\.pulls\.param\.name\}/g, pullsEventParamName)

src/macrofier/types.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,7 @@ const isSupportedTuple = schema => {
749749
}
750750

751751
function getSchemaType(schema, module, { templateDir = 'types', link = false, code = false, asPath = false, event = false, result = false, expandEnums = true, baseUrl = '', namespace = true } = {}) {
752+
namespace = false // disable namespace support
752753
const wrap = (str, wrapper) => wrapper + str + wrapper
753754

754755
schema = sanitize(schema)

0 commit comments

Comments
 (0)