collect-inputs-outputs.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. module.exports = function collectInputsOutputs() {
  2. return {
  3. $runBefore: ['rendering-docs'],
  4. $process: function(docs) {
  5. docs.forEach(function(doc) {
  6. if (doc.members && doc.members.length) {
  7. var members = [];
  8. var inputs = [];
  9. var outputs = [];
  10. memberLoop:
  11. for (var i in doc.members) {
  12. // identify properties to differentiate from methods
  13. if (typeof doc.members[i].parameters == 'undefined') {
  14. doc.members[i].isProperty = true;
  15. }
  16. if (doc.members[i].decorators && doc.members[i].decorators.length) {
  17. decoratorLoop:
  18. for (var ii in doc.members[i].decorators) {
  19. if (doc.members[i].decorators[ii].name == 'Input') {
  20. inputs.push(parseMember(doc.members[i]));
  21. continue memberLoop;
  22. }
  23. if (doc.members[i].decorators[ii].name == 'Output') {
  24. outputs.push(parseMember(doc.members[i]));
  25. continue memberLoop;
  26. }
  27. }
  28. // not an input or output, must be a plain member
  29. members.push(doc.members[i]);
  30. } else {
  31. members.push(doc.members[i]);
  32. };
  33. }
  34. // update doc with pruned members list and add inputs and outputs
  35. doc.members = members.sort(alphabetize);
  36. doc.inputs = inputs.sort(alphabetize);
  37. doc.outputs = outputs.sort(alphabetize);
  38. }
  39. function alphabetize(a, b) {
  40. if (!a.name) {
  41. return 1;
  42. } else if (!b.name) {
  43. return -1;
  44. } else if (a.name < b.name) {
  45. return -1;
  46. } else if (a.name > b.name) {
  47. return 1;
  48. }
  49. return 0;
  50. }
  51. function parseMember(member) {
  52. member.type = member.content.substring(
  53. member.content.indexOf('{') + 1,
  54. member.content.indexOf('}')
  55. );
  56. member.description = member.content.substring(
  57. member.content.indexOf('}') + 1,
  58. member.content.length
  59. );
  60. return member;
  61. }
  62. });
  63. }
  64. };
  65. };