All files / src/utils getClassMemberValuePath.js

100% Statements 4/4
100% Branches 3/3
100% Functions 3/3
100% Lines 4/4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32                              11x                 42x   53x     36x    
/*
 * Copyright (c) 2015, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 *
 * @flow
 *
 */
 
import getNameOrValue from './getNameOrValue';
import recast from 'recast';
 
var {types: {namedTypes: types}} = recast;
 
export default function getClassMemberValuePath(
  classDefinition: NodePath,
  memberName: string
): ?NodePath {
  // Fortunately it seems like that all members of a class body, be it
  // ClassProperty or MethodDefinition, have the same structure: They have a
  // "key" and a "value"
  return classDefinition.get('body', 'body')
    .filter(memberPath => (
      (!memberPath.node.computed || types.Literal.check(memberPath.node.key)) &&
      getNameOrValue(memberPath.get('key')) === memberName
    ))
    .map(memberPath => memberPath.get('value'))[0];
}