module.exports = function (babel) {
  var t = babel.types;

  return new babel.Plugin("protect-internal-apis", {
    visitor: {
      Program: function (node, parent, scope, file) {
        if (file.opts.filename.indexOf("tools/protect") >= 0) return;
        if (file.opts.filename.indexOf("templates") >= 0) return;

        this.unshiftContainer("body", [
          t.expressionStatement(t.callExpression(file.addImport("babel-core/lib/babel/tools/protect"), [t.identifier("module")]))
        ]);
      }
    }
  });
}

var path = require("path");

module.exports = function (babel) {
  var t = babel.types;

  return new babel.Plugin("protect-internal-apis", {
    visitor: {
      Program: function (node, parent, scope, file) {
        if (file.opts.filename.indexOf("tools/protect") >= 0) return;
        if (file.opts.filename.indexOf("templates") >= 0) return;

        var from = "/" + path.dirname(file.opts.filename.replace(/^src/, "lib"));
        var to   = "/lib/babel/tools";

        var protectLoc = "./" + path.relative(from, to) + "/protect.js";

        this.unshiftContainer("body", [
          t.expressionStatement(t.callExpression(file.addImport(protectLoc), [t.identifier("module")]))
        ]);
      }
    }
  });
}

use relative tools/protect.js filenames