UNPKG

1.86 kBJavaScriptView Raw
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 */
6function 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
18 var requiresEventStream = false;
19 if (inputShapeName && hasEventStream(model.shapes[inputShapeName], model)) {
20 requiresEventStream = true;
21 }
22
23 if (requiresEventStream) {
24 modifiedModel = true;
25 // remove the operation from the model
26 console.log('Removing ' + operationName + ' because it depends on event streams on input.');
27 delete model.operations[operationName];
28 }
29 }
30 return modifiedModel;
31}
32
33function hasEventStream(shape, model) {
34 if (shape.eventstream) {
35 return true;
36 } else {
37 // check each member shape
38 var memberNames = Object.keys(shape.members);
39 for (var i = 0; i < memberNames.length; i++) {
40 var member = shape.members[memberNames[i]];
41 if (member.eventstream) {
42 return true;
43 }
44 var memberShape = model.shapes[member.shape];
45 if (memberShape.eventstream) {
46 return true;
47 }
48 }
49 }
50}
51
52module.exports = {
53 removeEventStreamOperations: removeEventStreamOperations
54};
\No newline at end of file