function addPropTypesImport()

in transforms/React-PropTypes-to-prop-types.js [90:139]


  function addPropTypesImport(j, root) {
    if (useImportSyntax(j, root)) {
      // Handle cases where 'prop-types' already exists;
      // eg the file has already been codemodded but more React.PropTypes were added.
      if (hasPropTypesImport(j, root)) {
        return;
      }

      const path = findImportAfterPropTypes(j, root);
      if (path) {
        const importStatement = j.importDeclaration(
          [j.importDefaultSpecifier(j.identifier(localPropTypesName))],
          j.literal(MODULE_NAME)
        );

        // If there is a leading comment, retain it
        // https://github.com/facebook/jscodeshift/blob/master/recipes/retain-first-comment.md
        const firstNode = root.find(j.Program).get('body', 0).node;
        const { comments } = firstNode;
        if (comments) {
          delete firstNode.comments;
          importStatement.comments = comments;
        }

        j(path).insertBefore(importStatement);
        return;
      }
    }

    // Handle cases where 'prop-types' already exists;
    // eg the file has already been codemodded but more React.PropTypes were added.
    if (hasPropTypesRequire(j, root)) {
      return;
    }

    const path = findRequireAfterPropTypes(j, root);
    if (path) {
      const requireStatement = useVar(j, root)
        ? j.template.statement([
          `var ${localPropTypesName} = require('${MODULE_NAME}');\n`
        ])
        : j.template.statement([
          `const ${localPropTypesName} = require('${MODULE_NAME}');\n`
        ]);
      j(path.parent.parent).insertBefore(requireStatement);
      return;
    }

    throw new Error('No PropTypes import found!');
  }