Babel codemod to transform require statements
The only problem with this code that jumps out is declaratorKinds = { let: null, var: null } for use with path.node.kind in declaratorKinds. It would be much better to just use an array or set. 

const declaratorKinds = ['let', 'var']
...
if (declaratorKinds.includes(path.node.kind))


As far as I can tell VariableDeclaration is the best way to handle this, I have no experience with babel transforms, so I may be missing something. 

Bugs:


var fs = require('fs'), temp; will be transformed into const fs = require('fs'), temp; which will throw a syntax error. 
var temp = 1, fs = require('fs') will not be transformed.


A better solution would be to check each VariableDeclarator item in path.node.declarations, this could look something like the following. (Note that this rewrites multiple simultaneous declarations into separate declarations - the style I prefer)

export default function({types}) {  
  return {
    visitor: {
      VariableDeclaration(path) {
        const { kind, declarations } = path.node

        if (!['let', 'var'].includes(kind)) {
          return
        }

        const requireDeclarations = declarations.filter(d =&gt; {
          return d.init &amp;&amp; d.init.callee &amp;&amp; d.init.callee.name == 'require'
        })
        const otherDeclarations = declarations.filter(d =&gt; !requireDeclarations.includes(d))

        if (requireDeclarations.length) {
          path.replaceWithMultiple([
            ...requireDeclarations.map(d =&gt; types.VariableDeclaration('const', [d])),
            ...otherDeclarations.map(d =&gt; types.VariableDeclaration(kind, [d])),
          ])
        }
      }
    }
  }
}


Demo here (forked from your demo)