From a96cb2801205df1c98a95ce867523332dde93fc5 Mon Sep 17 00:00:00 2001 From: Jerel Miller Date: Sun, 14 Jun 2020 22:38:43 -0700 Subject: [PATCH] feat: Add method info for api docs --- .../gatsby-source-newrelic-sdk/src/docInfo.js | 7 ++-- .../src/exampleInfo.js | 6 ++-- .../src/methodInfo.js | 32 +++++++++++++++++++ 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 plugins/gatsby-source-newrelic-sdk/src/methodInfo.js diff --git a/plugins/gatsby-source-newrelic-sdk/src/docInfo.js b/plugins/gatsby-source-newrelic-sdk/src/docInfo.js index 54f315b9c..8b3b0aaee 100644 --- a/plugins/gatsby-source-newrelic-sdk/src/docInfo.js +++ b/plugins/gatsby-source-newrelic-sdk/src/docInfo.js @@ -1,6 +1,7 @@ const { getExamples } = require('./exampleInfo'); const { getTypeDefs } = require('./typeDefInfo'); const { getPropTypes } = require('./propTypeInfo'); +const { getMethods } = require('./methodInfo'); exports.getComponentDoc = (name, sdk) => { const component = sdk[name]; @@ -21,8 +22,9 @@ exports.getComponentDoc = (name, sdk) => { name, usage: `import { ${name} } from 'nr1'`, description: component.__docs__.text, - examples: getExamples(component), + examples: getExamples(name, sdk), propTypes: getPropTypes(component), + methods: getMethods(name, sdk), typeDefs: getTypeDefs(properties.concat(propTypes), sdk), }; }; @@ -40,7 +42,8 @@ exports.getApiDoc = (name, sdk) => { name, usage: `import { ${name} } from 'nr1'`, description: api.__docs__.text, - examples: getExamples(api), + examples: getExamples(name, sdk), + methods: getMethods(name, sdk), typeDefs: getTypeDefs(properties, sdk), }; }; diff --git a/plugins/gatsby-source-newrelic-sdk/src/exampleInfo.js b/plugins/gatsby-source-newrelic-sdk/src/exampleInfo.js index 02a49b372..1842af639 100644 --- a/plugins/gatsby-source-newrelic-sdk/src/exampleInfo.js +++ b/plugins/gatsby-source-newrelic-sdk/src/exampleInfo.js @@ -1,11 +1,11 @@ const IGNORED_PREVIEWS = ['Dropdown', 'Modal', 'Tooltip']; -exports.getExamples = (component) => { - return (component.__docs__.tags.examples || []).map( +exports.getExamples = (name, obj) => { + return (obj[name].__docs__.tags.examples || []).map( ({ label, options, sourceCode }) => ({ label, sourceCode, - preview: IGNORED_PREVIEWS.includes(component.name) ? false : options.live, + preview: IGNORED_PREVIEWS.includes(name) ? false : options.live, }) ); }; diff --git a/plugins/gatsby-source-newrelic-sdk/src/methodInfo.js b/plugins/gatsby-source-newrelic-sdk/src/methodInfo.js new file mode 100644 index 000000000..27602aa36 --- /dev/null +++ b/plugins/gatsby-source-newrelic-sdk/src/methodInfo.js @@ -0,0 +1,32 @@ +const { getExamples } = require('./exampleInfo'); + +const IGNORED_METHODS = [ + 'prototype', + 'length', + 'name', + 'propTypes', + 'getDerivedStateFromProps', + 'defaultProps', +]; + +exports.getMethods = (name, sdk) => { + const obj = sdk[name]; + + return Object.getOwnPropertyNames(obj) + .filter( + (member) => + !IGNORED_METHODS.includes(member) && typeof obj[member] === 'function' + ) + .map((member) => { + const methodDocs = obj[member].__docs__ || {}; + const tags = methodDocs.tags || {}; + + return { + name: `${name}.${member}`, + description: methodDocs.text, + returnValue: (tags.return || [])[0] || { type: 'undefined' }, + params: tags.param || [], + examples: getExamples(member, obj), + }; + }); +};