/* eslint-disable import/no-commonjs */ /** * @fileoverview * Inlines option params from typedefs */ const properties = {}; exports.handlers = { /** * Collects all typedefs, keyed by longname * @param {Object} e Event object. */ newDoclet: function (e) { if (e.doclet.kind == 'typedef' && e.doclet.properties) { properties[e.doclet.longname] = e.doclet.properties; } }, /** * Adds `options.*` params for options that match the longname of one of the * collected typedefs. * @param {Object} e Event object. */ parseComplete: function (e) { const doclets = e.doclets; for (let i = 0, ii = doclets.length; i < ii; ++i) { const doclet = doclets[i]; if (doclet.params) { const params = doclet.params; for (let j = 0, jj = params.length; j < jj; ++j) { const param = params[j]; if (param.type && param.type.names) { const type = param.type.names[0]; if (type in properties) { param.type.names[0] = type; params.push.apply( params, properties[type].map((p) => { const property = Object.assign({}, p); property.name = `${param.name}.${property.name}`; return property; }) ); } } } } } }, };