diff --git a/languages/markdown/templates/codeblocks/provider.md b/languages/markdown/templates/codeblocks/provider.md
index e30d3a19..6865d717 100644
--- a/languages/markdown/templates/codeblocks/provider.md
+++ b/languages/markdown/templates/codeblocks/provider.md
@@ -23,7 +23,7 @@ import { ${info.title} } from '${package.name}'
class My${provider} {
${provider.interface.start}
async ${provider.interface.name}(parameters, session) {
- return ${provider.interface.example.result}
+ ${if.provider.interface.example.result}return ${provider.interface.example.result}${end.if.provider.interface.example.result}
}
${provider.interface.end}
}
diff --git a/languages/markdown/templates/methods/rpc-only.md b/languages/markdown/templates/methods/rpc-only.md
index fdca6d05..e23ff102 100644
--- a/languages/markdown/templates/methods/rpc-only.md
+++ b/languages/markdown/templates/methods/rpc-only.md
@@ -1,6 +1,6 @@
### ${method.name}
-*This is an private RPC method.*
+*This is a private RPC method.*
${method.summary}
diff --git a/languages/markdown/templates/modules/index.md b/languages/markdown/templates/modules/index.md
index 152cde30..5ef99353 100644
--- a/languages/markdown/templates/modules/index.md
+++ b/languages/markdown/templates/modules/index.md
@@ -23,8 +23,12 @@ ${end.if.public}
/* ${METHODS} */
+/* ${PRIVATE_METHODS} */
+
/* ${EVENTS} */
+/* ${PRIVATE_EVENTS} */
+
/* ${PROVIDERS} */
/* ${SCHEMAS} */
diff --git a/languages/markdown/templates/sections/private-events.md b/languages/markdown/templates/sections/private-events.md
new file mode 100644
index 00000000..6e275023
--- /dev/null
+++ b/languages/markdown/templates/sections/private-events.md
@@ -0,0 +1,6 @@
+## Private Events
+
+ View
+
+ ${event.list}
+
diff --git a/languages/markdown/templates/sections/private-methods.md b/languages/markdown/templates/sections/private-methods.md
new file mode 100644
index 00000000..9d3eb565
--- /dev/null
+++ b/languages/markdown/templates/sections/private-methods.md
@@ -0,0 +1,6 @@
+## Private Methods
+
+ View
+
+ ${method.list}
+
diff --git a/src/macrofier/engine.mjs b/src/macrofier/engine.mjs
index 51f469a8..f8e7cffb 100644
--- a/src/macrofier/engine.mjs
+++ b/src/macrofier/engine.mjs
@@ -535,21 +535,28 @@ const generateMacros = (obj, templates, languages, options = {}) => {
const allMethodsArray = generateMethods(obj, examples, templates, languages, options.type)
Array.from(new Set(['methods'].concat(config.additionalMethodTemplates))).filter(dir => dir).forEach(dir => {
-
if (dir.includes('declarations')) {
const declarationsArray = allMethodsArray.filter(m => m.declaration[dir] && (!config.excludeDeclarations || (!options.hideExcluded || !m.excluded)))
macros.methods[dir] = declarationsArray.length ? getTemplate('/sections/declarations', templates).replace(/\$\{declaration\.list\}/g, declarationsArray.map(m => m.declaration[dir]).join('\n')) : ''
}
else if (dir.includes('methods')) {
- const methodsArray = allMethodsArray.filter(m => m.body[dir] && !m.event && (!options.hideExcluded || !m.excluded))
- macros.methods[dir] = methodsArray.length ? getTemplate('/sections/methods', templates).replace(/\$\{method.list\}/g, methodsArray.map(m => m.body[dir]).join('\n')) : ''
+ const publicMethodsArray = allMethodsArray.filter(m => m.body[dir] && !m.event && (!options.hideExcluded || !m.excluded) && !m.private)
+ const privateMethodsArray = allMethodsArray.filter(m => m.body[dir] && !m.event && (!options.hideExcluded || !m.excluded) && m.private)
+ const methodSection = (template, arr) => {
+ const regex = template.endsWith('events') ? /\$\{event.list\}/g : /\$\{method.list\}/g
+ return arr.length ? getTemplate('/sections/' + template, templates).replace(regex, arr.map(m => m.body[dir]).join('\n')) : ''
+ }
+ macros.methods.methods = methodSection('methods', publicMethodsArray)
+ macros.methods.private = methodSection('private-methods', privateMethodsArray)
- const eventsArray = allMethodsArray.filter(m => m.body[dir] && m.event && (!options.hideExcluded || !m.excluded))
- macros.events[dir] = eventsArray.length ? getTemplate('/sections/events', templates).replace(/\$\{event.list\}/g, eventsArray.map(m => m.body[dir]).join('\n')) : ''
+ const publicEventsArray = allMethodsArray.filter(m => m.body[dir] && m.event && (!options.hideExcluded || !m.excluded) && !m.private)
+ const privateEventsArray = allMethodsArray.filter(m => m.body[dir] && m.event && (!options.hideExcluded || !m.excluded && m.private))
+ macros.events.methods = methodSection('events', publicEventsArray)
+ macros.events.private = methodSection('private-events', privateEventsArray)
if (dir === 'methods') {
- macros.methodList = methodsArray.filter(m => m.body).map(m => m.name)
- macros.eventList = eventsArray.map(m => makeEventName(m))
+ macros.methodList = publicMethodsArray.filter(m => m.body).map(m => m.name)
+ macros.eventList = publicEventsArray.map(m => makeEventName(m))
}
}
})
@@ -640,8 +647,10 @@ const insertMacros = (fContents = '', macros = {}) => {
// Output the originally supported non-configurable methods & events macros
fContents = fContents.replace(/[ \t]*\/\* \$\{METHODS\} \*\/[ \t]*\n/, macros.methods.methods)
+ fContents = fContents.replace(/[ \t]*\/\* \$\{PRIVATE_METHODS\} \*\/[ \t]*\n/, macros.methods.private)
fContents = fContents.replace(/[ \t]*\/\* \$\{METHOD_LIST\} \*\/[ \t]*\n/, macros.methodList.join(',\n'))
fContents = fContents.replace(/[ \t]*\/\* \$\{EVENTS\} \*\/[ \t]*\n/, macros.events.methods)
+ fContents = fContents.replace(/[ \t]*\/\* \$\{PRIVATE_EVENTS\} \*\/[ \t]*\n/, macros.events.private)
fContents = fContents.replace(/[ \t]*\/\* \$\{EVENT_LIST\} \*\/[ \t]*\n/, macros.eventList.join(','))
fContents = fContents.replace(/[ \t]*\/\* \$\{EVENTS_ENUM\} \*\/[ \t]*\n/, macros.eventsEnum)
@@ -713,12 +722,18 @@ function insertTableofContents(content) {
let toc = ''
const count = {}
const slugger = title => title.toLowerCase().replace(/ /g, '-').replace(/-+/g, '-').replace(/[^a-zA-Z-]/g, '')
+ let collapsedContentLevel = null
content.split('\n').filter(line => line.match(/^\#/)).map(line => {
const match = line.match(/^(\#+) (.*)/)
if (match) {
const level = match[1].length
if (level > 1 && level < 4) {
+ if (collapsedContentLevel === level) {
+ // we are back to the level we started the collapsed content, end the collapse
+ toc += ' ' + ' '.repeat(collapsedContentLevel) + '\n'
+ collapsedContentLevel = null
+ }
const title = match[2]
const slug = slugger(title)
if (count.hasOwnProperty(slug)) {
@@ -728,7 +743,13 @@ function insertTableofContents(content) {
count[slug] = 0
}
const link = '#' + slug + (count[slug] ? `-${count[slug]}` : '')
- toc += ' ' + ' '.repeat(level - 1) + `- [${title}](${link})\n`
+ toc += ' ' + ' '.repeat(level - 1) + `- [${title}](${link})`
+ if (title === 'Private Methods' || title === 'Private Events') {
+ toc += 'Show
\n'
+ collapsedContentLevel = level
+ } else {
+ toc += '\n'
+ }
}
}
}).join('\n')
@@ -1158,7 +1179,8 @@ function generateMethods(json = {}, examples = {}, templates = {}, languages = [
body: {},
declaration: {},
excluded: methodObj.tags.find(t => t.name === 'exclude-from-sdk'),
- event: isEventMethod(methodObj)
+ event: isEventMethod(methodObj),
+ private: isRPCOnlyMethod(methodObj)
}
@@ -1931,9 +1953,9 @@ function insertProviderInterfaceMacros(template, capability, moduleJson = {}, te
let i = 1
iface.forEach(method => {
-
methodsBlock += match[0].replace(/\$\{provider\.interface\.name\}/g, method.name)
.replace(/\$\{provider\.interface\.Name\}/g, method.name.charAt(0).toUpperCase() + method.name.substr(1))
+ .replace(/\$\{if\.provider\.interface\.example\.result\}(.*?)\$\{end\.if\.provider\.interface\.example\.result\}/gms, method.examples[0].result.value == null ? '' : '$1')
// first check for indented lines, and do the fancy indented replacement
.replace(/^([ \t]+)(.*?)\$\{provider\.interface\.example\.result\}/gm, '$1$2' + indent(JSON.stringify(method.examples[0].result.value, null, ' '), '$1'))
@@ -1948,7 +1970,6 @@ function insertProviderInterfaceMacros(template, capability, moduleJson = {}, te
.replace(/\$\{provider\.interface\.i\}/g, i)
.replace(/\$\{provider\.interface\.j\}/g, (i + iface.length))
.replace(/\$\{provider\.interface\.k\}/g, (i + 2 * iface.length))
-
i++
})
methodsBlock = methodsBlock.replace(/\$\{provider\.interface\.[a-zA-Z]+\}/g, '')