UNPKG

compodoc

Version:

The missing documentation tool for your Angular application

131 lines (126 loc) 4.36 kB
import * as _ from 'lodash'; import { finderInAngularAPIs } from '../../utils/angular-api'; class DependenciesEngine { private static _instance:DependenciesEngine = new DependenciesEngine(); rawData: Object; modules: Object[]; rawModules: Object[]; components: Object[]; directives: Object[]; injectables: Object[]; interfaces: Object[]; routes: Object[]; pipes: Object[]; classes: Object[]; miscellaneous: Object[]; constructor() { if(DependenciesEngine._instance){ throw new Error('Error: Instantiation failed: Use DependenciesEngine.getInstance() instead of new.'); } DependenciesEngine._instance = this; } public static getInstance():DependenciesEngine { return DependenciesEngine._instance; } cleanModules(modules) { let _m = modules, i = 0, len = modules.length; for(i; i<len; i++) { let j = 0, leng = _m[i].declarations.length; for(j; j<leng; j++) { let k = 0, lengt; if (_m[i].declarations[j].jsdoctags) { lengt = _m[i].declarations[j].jsdoctags.length; for(k; k<lengt; k++) { delete _m[i].declarations[j].jsdoctags[k].parent; } } } } return _m; } init(data: Object) { this.rawData = data; this.modules = _.sortBy(this.rawData.modules, ['name']); this.rawModules = _.sortBy(_.cloneDeep(this.cleanModules(data.modules)), ['name']); this.components = _.sortBy(this.rawData.components, ['name']); this.directives = _.sortBy(this.rawData.directives, ['name']); this.injectables = _.sortBy(this.rawData.injectables, ['name']); this.interfaces = _.sortBy(this.rawData.interfaces, ['name']); this.routes = _.sortBy(_.uniqWith(this.rawData.routes, _.isEqual), ['name']); this.pipes = _.sortBy(this.rawData.pipes, ['name']); this.classes = _.sortBy(this.rawData.classes, ['name']); this.miscellaneous = this.rawData.miscellaneous; } find(type: string) { let finderInCompodocDependencies = function(data) { let _result = { source: 'internal', data: null }, i = 0, len = data.length; for (i; i<len; i++) { if (typeof type !== 'undefined') { if (type.indexOf(data[i].name) !== -1) { _result.data = data[i] } } } return _result; }, resultInCompodocInjectables = finderInCompodocDependencies(this.injectables), resultInCompodocClasses = finderInCompodocDependencies(this.classes), resultInAngularAPIs = finderInAngularAPIs(type) if (resultInCompodocInjectables.data !== null) { return resultInCompodocInjectables } else if (resultInCompodocClasses.data !== null) { return resultInCompodocClasses } else if (resultInAngularAPIs.data !== null) { return resultInAngularAPIs } } findInCompodoc(name: string) { let mergedData = _.concat([], this.modules, this.components, this.directives, this.injectables, this.interfaces, this.pipes, this.classes), result = _.find(mergedData, {'name': name}); return result || false; } getModule(name: string) { return _.find(this.modules, ['name', name]); } getRawModule(name: string) { return _.find(this.rawModules, ['name', name]); } getModules() { return this.modules; } getComponents() { return this.components; } getDirectives() { return this.directives; } getInjectables() { return this.injectables; } getInterfaces() { return this.interfaces; } getRoutes() { return this.routes; } getPipes() { return this.pipes; } getClasses() { return this.classes; } getMiscellaneous() { return this.miscellaneous; } }; export const $dependenciesEngine = DependenciesEngine.getInstance();