From c99737471d623c49e028497c62d706a1a395c121 Mon Sep 17 00:00:00 2001 From: Sam Sudar Date: Mon, 2 Dec 2024 12:54:00 -0800 Subject: [PATCH] add top level require check --- index.js | 10 ++++++---- test/test.js | 9 +++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 6ad8c92..2e5f336 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,7 @@ const Walker = require('node-source-walk'); * @param {String|Object} content - A file's string content or its AST * @return {String[]} The file's dependencies */ -module.exports = function(content) { +module.exports = function(content, options = {}) { const walker = new Walker(); const dependencies = []; @@ -17,9 +17,11 @@ module.exports = function(content) { } if (types.isPlainRequire(node)) { - const result = extractDependencyFromRequire(node); - if (result) { - dependencies.push(result); + if (!options.skipLazyLoaded || (options.skipLazyLoaded && types.isTopLevelRequire(node))) { + const result = extractDependencyFromRequire(node); + if (result) { + dependencies.push(result); + } } } else if (types.isMainScopedRequire(node)) { dependencies.push(extractDependencyFromMainRequire(node)); diff --git a/test/test.js b/test/test.js index 9c8b6dd..7944981 100644 --- a/test/test.js +++ b/test/test.js @@ -70,6 +70,15 @@ describe('detective-cjs', () => { }); }); + it('skipLazyLoaded only counts top-level requires', () => { + const fnWithDynamicRequire = 'function foo() { const a = require("./a"); }'; + const deps1 = detective(fnWithDynamicRequire); + assert.equal(deps1.length, 1); + + const deps2 = detective(fnWithDynamicRequire, { skipLazyLoaded: true }); + assert.equal(deps2.length, 0); + }); + describe('es6', () => { it('supports es6 syntax', () => { const deps = detective('const a = require("./a");\n let b = require("./b");');