Skip to content

Commit

Permalink
feat: add ability to traverse manually too
Browse files Browse the repository at this point in the history
  • Loading branch information
adrians5j committed Oct 13, 2019
1 parent 0bc687e commit f648166
Showing 1 changed file with 23 additions and 17 deletions.
40 changes: 23 additions & 17 deletions src/utils/parse.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const parser = require("@babel/parser");
const { default: traverse } = require("@babel/traverse");
const name = require("require-package-name");
const { default: babelTraverse } = require("@babel/traverse");
const getPackageName = require("require-package-name");
const relative = require("relative-require-regex");
const isRelative = value => relative().test(value);
const get = require("lodash.get");
Expand All @@ -13,28 +13,34 @@ module.exports = ({ src, config = {} }) => {
...config.parser
});

const imports = {};
traverse(ast, {
const dependencies = {};
const push = value => {
if (value && !isRelative(value)) {
dependencies[getPackageName(value)] = true;
}
};

const traverse = get(config, "traverse");

babelTraverse(ast, {
enter(path) {
const { node } = path;
if (STD_NODE_TYPES.includes(node.type)) {
const value = get(node, "source.value");
if (value && !isRelative(value)) {
imports[name(value)] = true;
}
return;
return push(get(node, "source.value"));
}

if (node.type === "CallExpression") {
if (get(node, "callee.name") === "require") {
let value = get(node, "arguments.0.value");
if (value && !isRelative(value)) {
imports[name(value)] = true;
}
}
if (node.type === "CallExpression" && get(node, "callee.name") === "require") {
return push(get(node, "arguments.0.value"));
}

typeof traverse === "function" &&
traverse({
path,
isRelative,
push
});
}
});

return Object.keys(imports);
return Object.keys(dependencies);
};

0 comments on commit f648166

Please sign in to comment.