UNPKG

1.18 kBJavaScriptView Raw
1
2/**
3 *
4 * @param {string} startingShape
5 * @param {{[key: string]: any}} shapeMap
6 */
7function visitRelatedShapeNames(startingShape, shapeMap) {
8 var shape = shapeMap[startingShape];
9 if (shape.visited) {
10 // exit early if the shape has been visited
11 return;
12 }
13
14 shape.visited = true;
15
16 if (['structure', 'map', 'list'].indexOf(shape.type) < 0) {
17 // not a complex shape, so it's a terminal shape
18 return;
19 }
20
21 if (shape.type === 'structure') {
22 var members = shape.members;
23 for (var memberName of Object.keys(members)) {
24 var memberShapeName = members[memberName].shape;
25 visitRelatedShapeNames(memberShapeName, shapeMap);
26 }
27 } else if (shape.type === 'map') {
28 var keyShape = shape.key.shape;
29 var valueShape = shape.value.shape;
30 visitRelatedShapeNames(keyShape, shapeMap);
31 visitRelatedShapeNames(valueShape, shapeMap);
32 } else if (shape.type === 'list') {
33 var memberShape = shape.member.shape;
34 visitRelatedShapeNames(memberShape, shapeMap);
35 }
36}
37
38module.exports = {
39 visitRelatedShapeNames: visitRelatedShapeNames
40};
\No newline at end of file