UNPKG

@compodoc/compodoc

Version:

The missing documentation tool for your Angular application

138 lines (127 loc) 5.56 kB
import { IHtmlEngineHelper } from './html-engine-helper.interface'; import * as Handlebars from 'handlebars'; import DependenciesEngine from '../dependencies.engine'; import AngularVersionUtil from '../../../utils/angular-version.util'; import BasicTypeUtil from '../../../utils/basic-type.util'; import Configuration from '../../configuration'; export class FunctionSignatureHelper implements IHtmlEngineHelper { constructor() {} private handleFunction(arg): string { if (arg.function.length === 0) { return `${arg.name}${this.getOptionalString(arg)}: () => void`; } let argums = arg.function.map(argu => { let _result = DependenciesEngine.find(argu.type); if (_result) { if (_result.source === 'internal') { let path = _result.data.type; if (_result.data.type === 'class') { path = 'classe'; } return `${argu.name}${this.getOptionalString(arg)}: <a href="../${path}s/${ _result.data.name }.html">${argu.type}</a>`; } else { let path = AngularVersionUtil.getApiLink( _result.data, Configuration.mainData.angularVersion ); return `${argu.name}${this.getOptionalString( arg )}: <a href="${path}" target="_blank">${argu.type}</a>`; } } else if (BasicTypeUtil.isKnownType(argu.type)) { let path = BasicTypeUtil.getTypeUrl(argu.type); return `${argu.name}${this.getOptionalString( arg )}: <a href="${path}" target="_blank">${argu.type}</a>`; } else { if (argu.name && argu.type) { return `${argu.name}${this.getOptionalString(arg)}: ${argu.type}`; } else { if (argu.name) { return `${argu.name.text}`; } else { return ''; } } } }); return `${arg.name}${this.getOptionalString(arg)}: (${argums}) => void`; } private getOptionalString(arg): string { return arg.optional ? '?' : ''; } public helperFunc(context: any, method) { let args = ''; let argDestructuredCounterInitial = 0; let argDestructuredCounterReal = 0; if (method.args) { method.args.forEach(arg => { if (arg.destructuredParameter) { argDestructuredCounterInitial += 1; } }); method.args.forEach((arg, index) => { const _result = DependenciesEngine.find(arg.type); if (arg.destructuredParameter) { if (argDestructuredCounterReal === 0) { args += '__namedParameters: {'; } argDestructuredCounterReal += 1; } if (_result) { if (_result.source === 'internal') { let path = _result.data.type; if (_result.data.type === 'class') { path = 'classe'; } args += `${arg.name}${this.getOptionalString(arg)}: <a href="../${path}s/${ _result.data.name }.html" target="_self">${Handlebars.escapeExpression(arg.type)}</a>`; } else { let path = AngularVersionUtil.getApiLink( _result.data, Configuration.mainData.angularVersion ); args += `${arg.name}${this.getOptionalString( arg )}: <a href="${path}" target="_blank">${Handlebars.escapeExpression( arg.type )}</a>`; } } else if (arg.dotDotDotToken) { args += `...${arg.name}: ${arg.type}`; } else if (arg.function) { args += this.handleFunction(arg); } else if (BasicTypeUtil.isKnownType(arg.type)) { const path = BasicTypeUtil.getTypeUrl(arg.type); args += `${arg.name}${this.getOptionalString( arg )}: <a href="${path}" target="_blank">${Handlebars.escapeExpression( arg.type )}</a>`; } else { if (arg.type) { args += `${arg.name}${this.getOptionalString(arg)}: ${arg.type}`; } else { args += `${arg.name}${this.getOptionalString(arg)}`; } } if (arg.destructuredParameter) { if (argDestructuredCounterReal === argDestructuredCounterInitial) { args += '}'; } } if (index < method.args.length - 1) { args += ', '; } }); } if (method.name) { return `${method.name}(${args})`; } else { return `(${args})`; } } }