Skip to content

Commit

Permalink
fix miss import-style when css is required deeply #18
Browse files Browse the repository at this point in the history
  • Loading branch information
popomore committed Oct 13, 2014
1 parent e17ab1f commit 0e95aec
Show file tree
Hide file tree
Showing 30 changed files with 104 additions and 32 deletions.
28 changes: 15 additions & 13 deletions lib/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ var extDeps = {
function getExtra(file, pkg, options) {
var ret = [];
Object.keys(extDeps).filter(function(ext) {
return file.extension === ext || file.hasExt(ext, ignoreCssOutDependency);
return hasExt(file, ext);
}).forEach(function(ext) {
var name = extDeps[ext];
var extraPkg = options.pkg.dependencies[name];
Expand All @@ -275,20 +275,22 @@ function getExtra(file, pkg, options) {
});
return ret;

// return false if css file is not in pkg or pkg.dependencies
function ignoreCssOutDependency(fileInfo) {
var pkg = fileInfo.pkg;
return !(fileInfo.extension === 'css' && !(isSelf(pkg) || isInDeps(pkg)));
}
function hasExt(file, ext) {
if (file.extension === ext) return true;

// test if it is in pkg.dependencies
function isInDeps(pkg_) {
return !!pkg.dependencies[pkg_.name];
}
var deps = file._run();
for (var i in deps) {
var fileInfo = deps[i];
if (fileInfo.extension !== ext ) continue;

// test if pkg is self
function isSelf(pkg_) {
return pkg_.name === pkg.name;
if (ext !== 'css') return true;

if (ext === 'css') {
// ignore css file except for required by js
if (fileInfo.dependent.extension === 'js') return true;
}
}
return false;
}
}

Expand Down
1 change: 0 additions & 1 deletion lib/plugin/include.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ function getFiles(file, options) {

var ignore = getDepsPackage(options.ignore, pkg);
var extra = getExtra(file, pkg, options);

return file.lookup(function(fileInfo) {
var dependent = fileInfo.dependent;

Expand Down
4 changes: 2 additions & 2 deletions test/common.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,14 +138,14 @@ describe('Common', function() {
it('transportDeps do not contain css\'s dependencies', function() {
var pkg = getPackage('js-require-css');
var deps = common.transportDeps('index.js', pkg, {pkg: pkg});
deps.should.eql(['d/1.0.0/index', 'import-style/1.0.0/index']);
deps.should.eql(['d/1.0.0/index', 'f/1.0.0/index', 'import-style/1.0.0/index']);
});


it('transportDeps do not contain css\'s dependencies deep', function() {
var pkg = getPackage('js-require-js-require-css');
var deps = common.transportDeps('index.js', pkg, {pkg: pkg});
deps.should.eql(['b/1.0.0/index']);
deps.should.eql(['b/1.0.0/index', 'import-style/1.0.0/index']);
});

// father will throw now
Expand Down
9 changes: 9 additions & 0 deletions test/expected/transport-include-all-css.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ require("import-style/1.0.0/index")('html,body{margin:0;}div{padding:0;}body{bac
define("d/1.0.0/index", [], function(require, exports, module){
require("d/1.0.0/d.css.js");
require("e/1.0.0/e2.css.js");
require("f/1.0.0/index");

});
define("d/1.0.0/d.css.js", [], function(require, exports, module){
Expand All @@ -21,6 +22,14 @@ require("import-style/1.0.0/index")('div{margin:0;}');
define("e/1.0.0/e2.css.js", [], function(require, exports, module){
require("import-style/1.0.0/index")('.e2{background:#e1e1e1;}');

});
define("f/1.0.0/index", [], function(require, exports, module){
require("f/1.0.0/f.css.js");

});
define("f/1.0.0/f.css.js", [], function(require, exports, module){
require("import-style/1.0.0/index")('.f{padding:0;}');

});
define("a/1.0.0/a.css.js", [], function(require, exports, module){
require("import-style/1.0.0/index")('div{padding:0;}a{color:#000;}');
Expand Down
6 changes: 6 additions & 0 deletions test/expected/transport-include-all-ignore.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,9 @@ require('b/c.js');
console.log('a');

});
define("import-style/1.0.0/index", [], function(require, exports, module){
module.exports = function importStyle(str) {
return '';
};

});
6 changes: 6 additions & 0 deletions test/expected/transport-include-all-ignore2.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,9 @@ define("b/1.0.0/c", [], function(require, exports, module){
console.log('b/c.js');

});
define("import-style/1.0.0/index", [], function(require, exports, module){
module.exports = function importStyle(str) {
return '';
};

});
11 changes: 11 additions & 0 deletions test/expected/transport-include-all.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ require("b/1.0.0/b");
});
define("c/1.0.0/index", [], function(require, exports, module){
require("c/1.0.0/c");
require("c/1.0.0/index.css.js");

});
define("c/1.0.0/c", [], function(require, exports, module){
console.log('c');

});
define("c/1.0.0/index.css.js", [], function(require, exports, module){
require("import-style/1.0.0/index")('body{margin:0;}');

});
define("b/1.0.0/b", [], function(require, exports, module){
console.log('b');
Expand All @@ -29,3 +34,9 @@ define("b/1.0.0/c", [], function(require, exports, module){
console.log('b/c.js');

});
define("import-style/1.0.0/index", [], function(require, exports, module){
module.exports = function importStyle(str) {
return '';
};

});
2 changes: 1 addition & 1 deletion test/expected/transport-include-relative-b.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("b/1.0.0/index", ["c/1.0.0/index"], function(require, exports, module){
define("b/1.0.0/index", ["c/1.0.0/index","import-style/1.0.0/index"], function(require, exports, module){
require("c/1.0.0/index");
require("b/1.0.0/b");

Expand Down
7 changes: 6 additions & 1 deletion test/expected/transport-include-relative-c.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
define("c/1.0.0/index", [], function(require, exports, module){
define("c/1.0.0/index", ["import-style/1.0.0/index"], function(require, exports, module){
require("c/1.0.0/c");
require("c/1.0.0/index.css.js");

});
define("c/1.0.0/c", [], function(require, exports, module){
console.log('c');

});
define("c/1.0.0/index.css.js", ["import-style/1.0.0/index"], function(require, exports, module){
require("import-style/1.0.0/index")('body{margin:0;}');

});
2 changes: 1 addition & 1 deletion test/expected/transport-include-relative-css-ignore.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("a/1.0.0/index", ["d/1.0.0/index","import-style"], function(require, exports, module){
define("a/1.0.0/index", ["d/1.0.0/index","f/1.0.0/index","import-style"], function(require, exports, module){
require("b/1.0.0/index.css.js");
require("d/1.0.0/index");
require("a/1.0.0/a.css.js");
Expand Down
2 changes: 1 addition & 1 deletion test/expected/transport-include-relative-css.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("a/1.0.0/index", ["d/1.0.0/index","import-style/1.0.0/index"], function(require, exports, module){
define("a/1.0.0/index", ["d/1.0.0/index","f/1.0.0/index","import-style/1.0.0/index"], function(require, exports, module){
require("b/1.0.0/index.css.js");
require("d/1.0.0/index");
require("a/1.0.0/a.css.js");
Expand Down
2 changes: 1 addition & 1 deletion test/expected/transport-include-relative-ignore.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("a/1.0.0/src/index", ["b","c"], function(require, exports, module){
define("a/1.0.0/src/index", ["b","c","import-style/1.0.0/index"], function(require, exports, module){
require('b');
require("a/1.0.0/a");

Expand Down
2 changes: 1 addition & 1 deletion test/expected/transport-include-relative.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("a/1.0.0/src/index", ["b/1.0.0/index","c/1.0.0/index","b/1.0.0/c"], function(require, exports, module){
define("a/1.0.0/src/index", ["b/1.0.0/index","c/1.0.0/index","b/1.0.0/c","import-style/1.0.0/index"], function(require, exports, module){
require("b/1.0.0/index");
require("a/1.0.0/a");

Expand Down
2 changes: 1 addition & 1 deletion test/expected/transport-include-self-css.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("a/1.0.0/index", ["d/1.0.0/index","import-style/1.0.0/index"], function(require, exports, module){
define("a/1.0.0/index", ["d/1.0.0/index","f/1.0.0/index","import-style/1.0.0/index"], function(require, exports, module){
require("b/1.0.0/index.css.js");
require("d/1.0.0/index");
require("a/1.0.0/a.css.js");
Expand Down
2 changes: 1 addition & 1 deletion test/expected/transport-include-self-ignore.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("a/1.0.0/src/index", ["b","c","a/1.0.0/a"], function(require, exports, module){
define("a/1.0.0/src/index", ["b","c","a/1.0.0/a","import-style/1.0.0/index"], function(require, exports, module){
require('b');
require("a/1.0.0/a");

Expand Down
2 changes: 1 addition & 1 deletion test/expected/transport-include-self.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
define("a/1.0.0/src/index", ["b/1.0.0/index","c/1.0.0/index","a/1.0.0/a","b/1.0.0/c"], function(require, exports, module){
define("a/1.0.0/src/index", ["b/1.0.0/index","c/1.0.0/index","a/1.0.0/a","b/1.0.0/c","import-style/1.0.0/index"], function(require, exports, module){
require("b/1.0.0/index");
require("a/1.0.0/a");

Expand Down
1 change: 1 addition & 0 deletions test/fixtures/js-require-css/sea-modules/d/1.0.0/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
require('./d.css');
require('e/e2.css');
require('f');
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"spm": {
"dependencies": {
"e": "1.0.0",
"f": "1.0.0",
"import-style": "1.0.0"
}
}
Expand Down
3 changes: 3 additions & 0 deletions test/fixtures/js-require-css/sea-modules/f/1.0.0/f.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.f {
padding: 0;
}
1 change: 1 addition & 0 deletions test/fixtures/js-require-css/sea-modules/f/1.0.0/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
require('./f.css');
4 changes: 4 additions & 0 deletions test/fixtures/js-require-css/sea-modules/f/1.0.0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "f",
"version": "1.0.0"
}
3 changes: 2 additions & 1 deletion test/fixtures/js-require-js-require-css/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"spm": {
"dependencies": {
"handlebars": "1.0.0",
"b": "1.0.0"
"b": "1.0.0",
"import-style": "1.0.0"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = function importStyle(str) {
return '';
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "import-style",
"version": "1.0.0"
}
3 changes: 2 additions & 1 deletion test/fixtures/js-require-js/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"spm": {
"main": "src/index.js",
"dependencies": {
"b": "1.0.0"
"b": "1.0.0",
"import-style": "1.0.0"
}
}
}
3 changes: 3 additions & 0 deletions test/fixtures/js-require-js/sea-modules/c/1.0.0/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
body {
margin: 0;
}
1 change: 1 addition & 0 deletions test/fixtures/js-require-js/sea-modules/c/1.0.0/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
require('./c');
require('./index.css');
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = function importStyle(str) {
return '';
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "import-style",
"version": "1.0.0"
}
14 changes: 9 additions & 5 deletions test/plugin.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -310,15 +310,19 @@ describe('Plugin', function() {
ret[2].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[3].relative.should.equal('sea-modules/c/1.0.0/c.js');
ret[3].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[4].relative.should.equal('sea-modules/b/1.0.0/b.js');
ret[4].relative.should.equal('sea-modules/c/1.0.0/index.css');
ret[4].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[5].relative.should.equal('a.js');
ret[5].relative.should.equal('sea-modules/b/1.0.0/b.js');
ret[5].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[6].relative.should.equal('sea-modules/b/1.0.0/c.js');
ret[6].relative.should.equal('a.js');
ret[6].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[7].relative.should.equal('src/index.js');
ret[7].relative.should.equal('sea-modules/b/1.0.0/c.js');
ret[7].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[7].contents.toString().should.equal('');
ret[8].relative.should.equal('sea-modules/import-style/1.0.0/index.js');
ret[8].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[9].relative.should.equal('src/index.js');
ret[9].dependentPath.should.equal(join(pkg.dest, 'src/index.js'));
ret[9].contents.toString().should.equal('');
done();
});
stream.write(fakeFile);
Expand Down

0 comments on commit 0e95aec

Please sign in to comment.