diff --git a/bower.json b/bower.json index b3ae302..4ecf30b 100644 --- a/bower.json +++ b/bower.json @@ -2,11 +2,24 @@ "name": "debowerify-test", "verision": "0.0.0", "dependencies": { - "js-base64": "~2.1.2" + "js-base64": "~2.1.2", + "test-package-d": "./test/fixtures/test-package-d", + "test-package-e": "./test/fixtures/test-package-e" }, "devDependencies": { "base62": "~0.4.0", "test-package-a": "./test/fixtures/test-package-a", "test-package-c": "./test/fixtures/test-package-c" + }, + "overrides": { + "test-package-d": { + "main": "main.js" + }, + "test-package-e": { + "main": { + "production": "main.min.js", + "development": "main.js" + } + } } } diff --git a/bower_components/test-package-d/.bower.json b/bower_components/test-package-d/.bower.json new file mode 100644 index 0000000..36f742b --- /dev/null +++ b/bower_components/test-package-d/.bower.json @@ -0,0 +1,9 @@ +{ + "name": "test-package-d", + "main": [ + "./unknownfile.js" + ], + "_source": "/Users/lincoln/Work/Checkouts/debowerify/test/fixtures/test-package-d", + "_target": "*", + "_originalSource": "./test/fixtures/test-package-d" +} \ No newline at end of file diff --git a/bower_components/test-package-d/bower.json b/bower_components/test-package-d/bower.json new file mode 100644 index 0000000..d9b4b79 --- /dev/null +++ b/bower_components/test-package-d/bower.json @@ -0,0 +1,6 @@ +{ + "name": "test-package-d", + "main": [ + "./unknownfile.js" + ] +} diff --git a/bower_components/test-package-d/main.js b/bower_components/test-package-d/main.js new file mode 100644 index 0000000..ce12406 --- /dev/null +++ b/bower_components/test-package-d/main.js @@ -0,0 +1 @@ +loaded = true; diff --git a/bower_components/test-package-e/.bower.json b/bower_components/test-package-e/.bower.json new file mode 100644 index 0000000..5a51e6c --- /dev/null +++ b/bower_components/test-package-e/.bower.json @@ -0,0 +1,10 @@ +{ + "name": "test-package-e", + "main": [ + "./main.js", + "./main.min.js" + ], + "_source": "/Users/lincoln/Work/Checkouts/debowerify/test/fixtures/test-package-e", + "_target": "*", + "_originalSource": "./test/fixtures/test-package-e" +} \ No newline at end of file diff --git a/bower_components/test-package-e/bower.json b/bower_components/test-package-e/bower.json new file mode 100644 index 0000000..61ecc00 --- /dev/null +++ b/bower_components/test-package-e/bower.json @@ -0,0 +1,7 @@ +{ + "name": "test-package-e", + "main": [ + "./main.js", + "./main.min.js" + ] +} diff --git a/bower_components/test-package-e/main.js b/bower_components/test-package-e/main.js new file mode 100644 index 0000000..ecb847d --- /dev/null +++ b/bower_components/test-package-e/main.js @@ -0,0 +1 @@ +notMinified = true; diff --git a/bower_components/test-package-e/main.min.js b/bower_components/test-package-e/main.min.js new file mode 100644 index 0000000..74d8030 --- /dev/null +++ b/bower_components/test-package-e/main.min.js @@ -0,0 +1 @@ +minified = true; diff --git a/index.js b/index.js index 4bbd5ce..7c5def5 100644 --- a/index.js +++ b/index.js @@ -112,8 +112,10 @@ module.exports = function (file, options) { var requiredFilePaths = moduleSubPath; if (!requiredFilePaths){ - if (pkgMeta && pkgMeta.main) { - requiredFilePaths = Array.isArray(pkgMeta.main) ? pkgMeta.main.filter(function (file) { return /\.js$/.test(file); }) : [ pkgMeta.main ]; + var pkg = (bowerModules.pkgMeta.overrides[moduleName] || {}).main || pkgMeta.main; + if (pkgMeta && pkg) { + pkg = pkg[process.env.NODE_ENV] || pkg; + requiredFilePaths = Array.isArray(pkg) ? pkg.filter(function (file) { return /\.(js|coffee)$/.test(file); }) : [ pkg ]; } else { // if 'main' wasn't specified by this component, let's try // guessing that the main file is moduleName.js @@ -141,9 +143,9 @@ module.exports = function (file, options) { for (var i = node.range[0] + 1; i < node.range[1]; i++) { chunks[i] = ''; } - paths.forEach(function (p, i) { + paths.forEach(function (p) { var st = '\nrequire(' + p + ')' - chunks[node.range[1] + (i + 1)] = st + chunks[node.range[1] + 1] = st }) } diff --git a/public/overrides.js b/public/overrides.js new file mode 100644 index 0000000..3439552 --- /dev/null +++ b/public/overrides.js @@ -0,0 +1 @@ +require('test-package-d') diff --git a/public/overrides2.js b/public/overrides2.js new file mode 100644 index 0000000..50993b8 --- /dev/null +++ b/public/overrides2.js @@ -0,0 +1 @@ +require('test-package-e') diff --git a/test/fixtures/test-package-d/bower.json b/test/fixtures/test-package-d/bower.json new file mode 100644 index 0000000..d9b4b79 --- /dev/null +++ b/test/fixtures/test-package-d/bower.json @@ -0,0 +1,6 @@ +{ + "name": "test-package-d", + "main": [ + "./unknownfile.js" + ] +} diff --git a/test/fixtures/test-package-d/main.js b/test/fixtures/test-package-d/main.js new file mode 100644 index 0000000..ce12406 --- /dev/null +++ b/test/fixtures/test-package-d/main.js @@ -0,0 +1 @@ +loaded = true; diff --git a/test/fixtures/test-package-e/bower.json b/test/fixtures/test-package-e/bower.json new file mode 100644 index 0000000..61ecc00 --- /dev/null +++ b/test/fixtures/test-package-e/bower.json @@ -0,0 +1,7 @@ +{ + "name": "test-package-e", + "main": [ + "./main.js", + "./main.min.js" + ] +} diff --git a/test/fixtures/test-package-e/main.js b/test/fixtures/test-package-e/main.js new file mode 100644 index 0000000..ecb847d --- /dev/null +++ b/test/fixtures/test-package-e/main.js @@ -0,0 +1 @@ +notMinified = true; diff --git a/test/fixtures/test-package-e/main.min.js b/test/fixtures/test-package-e/main.min.js new file mode 100644 index 0000000..74d8030 --- /dev/null +++ b/test/fixtures/test-package-e/main.min.js @@ -0,0 +1 @@ +minified = true; diff --git a/test/index.js b/test/index.js index 74995c9..434c570 100644 --- a/test/index.js +++ b/test/index.js @@ -72,7 +72,7 @@ describe('debowerify', function() { }); }); - it.only('should be able to debowerify a module with multiple main entries', function(done) { + it('should be able to debowerify a module with multiple main entries', function(done) { var b = browserify(); b.add(path.join(__dirname, '..', 'public', 'multiple_main_entries.js')); b.transform(debowerify); @@ -85,4 +85,31 @@ describe('debowerify', function() { }); }); + it('should be able to debowerify a module with a broken `main` section with overrides', function(done) { + var b = browserify(); + b.add(path.join(__dirname, '..', 'public', 'overrides.js')); + b.transform(debowerify); + b.bundle(function (err, src) { + if (err) return done(err); + var sandbox = { loaded: false }; + vm.runInNewContext(src, sandbox); + expect(sandbox.loaded).to.equal(true); + done(); + }); + }); + + it('should be able to use NODE_ENV to choose which file to debowerify', function(done) { + process.env.NODE_ENV = 'production' + var b = browserify(); + b.add(path.join(__dirname, '..', 'public', 'overrides2.js')); + b.transform(debowerify); + b.bundle(function (err, src) { + if (err) return done(err); + var sandbox = { minified: null, notMinified: null }; + vm.runInNewContext(src, sandbox); + expect(sandbox.minified).to.equal(true); + expect(sandbox.notMinified).to.equal(null); + done(); + }); + }); });