docs: function _depFinder(ast) {
      const {visit} = require('ast-types');
      const imports = {};
      const exports = {};
      const globals = {};
  
      visit(ast, {
          /************** IMPORT/REQUIRE ***************/
          visitImportDeclaration: function(nodePath) {
              const node = nodePath.value;
              imports[node.source.value] = true;
              return false;
          },
          visitCallExpression: function(nodePath) {
              const node = nodePath.value;
  
              // cjs require syntax support
              if (
                  node.callee.type === 'Identifier' &&
                  node.callee.name === 'require' &&
                  node.arguments[0].type === 'Literal'
              ) {
                  imports[node.arguments[0].value] = true;
              }
  
              return this.traverse(nodePath);
          },
          visitMemberExpression(nodePath) {
              const node = nodePath.value;
              if (node.object.type === 'Identifier' &&
                  !nodePath.scope.lookup(node.object.name) &&
                  GLOBAL_WHITELIST.indexOf(node.object.name) >= 0) {
                  globals[node.object.name] = true;
              }
  
              return this.traverse(nodePath);
          },
          visitExportNamedDeclaration(nodePath) {
              const node = nodePath.value;
  
              let exportName = '';
  
              if (!node.declaration && node.specifiers.length) {
                  node.specifiers
                  .filter(({type}) => type === 'ExportSpecifier')
                  .forEach(({exported}) => exports[exported.name] = []);
              } else if (node.declaration) {
                  if (node.declaration.type === 'FunctionDeclaration') {
                      exportName = node.declaration.id.name;
                  } else if (node.declaration.type === 'VariableDeclaration') {
                      const declarator = node.declaration.declarations
                          .find(({type}) => type === 'VariableDeclarator');
                      exportName = declarator && declarator.id.name;
                  }
  
                  if (exportName) {
                      exports[exportName] = [];
                  }
              }
  
              return this.traverse(nodePath);
          },
          visitExportDefaultDeclaration(nodePath) {
              exports.default = [];
  
              return this.traverse(nodePath);
          },
      });
  
      Object.keys(globals).forEach(use => {
          imports[use] = true;
      });
  
      return {
          imports: Object.keys(imports),
          exports: Object.keys(exports),
      };
  }