diff --git a/index.js b/index.js index b0a159a..17d73e3 100644 --- a/index.js +++ b/index.js @@ -373,8 +373,10 @@ Deps.prototype.walk = function (id, parent, cb) { }); function fromSource (file, src, pkg) { - var deps = rec.noparse ? [] : self.parseDeps(file, src); - if (deps) fromDeps(file, src, pkg, deps); + var deps; + if (opts.parseFilter && !opts.parseFilter(id, file, pkg)) deps = []; + else deps = self.parseDeps(file, src); + fromDeps(file, src, pkg, deps); } function fromDeps (file, src, pkg, deps) { @@ -423,14 +425,8 @@ Deps.prototype.walk = function (id, parent, cb) { }; Deps.prototype.parseDeps = function (file, src, cb) { - if (this.options.noParse === true) return []; if (/\.json$/.test(file)) return []; - if (Array.isArray(this.options.noParse) - && this.options.noParse.indexOf(file) >= 0) { - return []; - } - try { var deps = detective(src) } catch (ex) { var message = ex && ex.message ? ex.message : ex; diff --git a/readme.markdown b/readme.markdown index 7cd280e..edc5927 100644 --- a/readme.markdown +++ b/readme.markdown @@ -76,6 +76,10 @@ package.json at all. If defined, `opts.filter(id)` should return truthy for all the ids to include and falsey for all the ids to skip. +* `opts.parseFilter` - a function (id, file, pkg) to skip parsing for +dependencies. Use this for large dependencies like jquery or threejs +which take forever to parse. + * `opts.postFilter` - a function (id, file, pkg) that gets called after `id` has been resolved. Return false to skip this file. @@ -83,9 +87,6 @@ been resolved. Return false to skip this file. the values. `opts.packageFilter(pkg, dir)` should return the new `pkg` object to use. -* `opts.noParse` - an array of absolute paths to not parse for dependencies. Use -this for large dependencies like jquery or threejs which take forever to parse. - * `opts.cache` - an object mapping filenames to file objects to skip costly io * `opts.packageCache` - an object mapping filenames to their parent package.json @@ -102,7 +103,6 @@ Input objects should be string filenames or objects with these parameters: * `row.file` - filename * `row.expose` - name to be exposed as -* `row.noparse` when true, don't parse the file contents for dependencies or objects can specify transforms: diff --git a/test/noparse_row.js b/test/noparse_row.js deleted file mode 100644 index e114ad7..0000000 --- a/test/noparse_row.js +++ /dev/null @@ -1,39 +0,0 @@ -var parser = require('../'); -var test = require('tape'); -var fs = require('fs'); -var concat = require('concat-stream'); -var path = require('path'); - -var files = { - main: path.join(__dirname, '/files/main.js'), - foo: path.join(__dirname, '/files/foo.js'), - bar: path.join(__dirname, '/files/bar.js') -}; - -var sources = Object.keys(files).reduce(function (acc, file) { - acc[file] = fs.readFileSync(files[file], 'utf8'); - return acc; -}, {}); - -test('noParse row', function (t) { - t.plan(1); - var p = parser(); - p.end({ file: files.main, noparse: true }); - var rows = []; - - p.on('data', function (row) { rows.push(row) }); - p.on('end', function () { - t.deepEqual(rows.sort(cmp), [ - { - id: files.main, - file: files.main, - source: sources.main, - entry: true, - noparse: true, - deps: {} - } - ].sort(cmp)); - }); -}); - -function cmp (a, b) { return a.id < b.id ? -1 : 1 } diff --git a/test/noparse.js b/test/parse_filter.js similarity index 86% rename from test/noparse.js rename to test/parse_filter.js index 50fd566..4786228 100644 --- a/test/noparse.js +++ b/test/parse_filter.js @@ -14,9 +14,13 @@ var sources = Object.keys(files).reduce(function (acc, file) { return acc; }, {}); -test('noParse', function (t) { +test('parse filter', function (t) { t.plan(1); - var p = parser({ noParse: [ files.foo ] }); + var p = parser({ + parseFilter: function (id, file, pkg) { + return file !== files.foo; + } + }); p.end(files.main); var rows = [];