remove-event-stream-ops.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /**
  2. * Removes operations from the model if they require event streams.
  3. * Specifically looks at input and output shapes.
  4. * @param {Object} model - JSON parsed API model (*.normal.json)
  5. */
  6. function removeEventStreamOperations(model) {
  7. var modifiedModel = false;
  8. // loop over all operations
  9. var operations = model.operations;
  10. var operationNames = Object.keys(operations);
  11. for (var i = 0; i < operationNames.length; i++) {
  12. var operationName = operationNames[i];
  13. var operation = operations[operationName];
  14. // check input and output shapes
  15. var inputShapeName = operation.input && operation.input.shape;
  16. var outputShapeName = operation.output && operation.output.shape;
  17. var requiresEventStream = false;
  18. if (inputShapeName && hasEventStream(model.shapes[inputShapeName], model)) {
  19. requiresEventStream = true;
  20. }
  21. if (requiresEventStream) {
  22. modifiedModel = true;
  23. // remove the operation from the model
  24. console.log('Removing ' + operationName + ' because it depends on event streams on input.');
  25. delete model.operations[operationName];
  26. }
  27. }
  28. return modifiedModel;
  29. }
  30. function hasEventStream(shape, model) {
  31. if (shape.eventstream) {
  32. return true;
  33. } else {
  34. // check each member shape
  35. var memberNames = Object.keys(shape.members);
  36. for (var i = 0; i < memberNames.length; i++) {
  37. var member = shape.members[memberNames[i]];
  38. if (member.eventstream) {
  39. return true;
  40. }
  41. var memberShape = model.shapes[member.shape];
  42. if (memberShape.eventstream) {
  43. return true;
  44. }
  45. }
  46. }
  47. }
  48. module.exports = {
  49. removeEventStreamOperations: removeEventStreamOperations
  50. };