Skip to content

Commit b158799

Browse files
committed
Fix bug preventing import of files with dots in their name
Closes #11
1 parent fb49d19 commit b158799

File tree

8 files changed

+53
-21
lines changed

8 files changed

+53
-21
lines changed

.eslintrc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,3 @@ rules:
152152
- always
153153
- propertyName: false
154154
singleValue: false
155-

index.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ var importOnce = function importOnce(data, done) {
4242
* they leave off the partial prefix and the suffix.
4343
* This code creates the possible extensions, whether it is a partial
4444
* and whether it is a directory index file having those
45-
* same possible variations. If the import contains an extension,
45+
* same possible variations. If the import contains a valid extension,
4646
* then it is left alone.
4747
*
4848
**/
@@ -51,6 +51,8 @@ var getFileNames = function getFileNames(abstractName) {
5151
directory,
5252
basename;
5353

54+
// If the name has a Sass extension, treat it as a path to a real file, and as a fallback
55+
// look for the same file with a prefix.
5456
if ([ '.scss', '.sass' ].indexOf(path.extname(abstractName)) !== -1) {
5557
directory = path.dirname(abstractName);
5658
basename = path.basename(abstractName);
@@ -59,9 +61,11 @@ var getFileNames = function getFileNames(abstractName) {
5961
names.push(path.join(directory, prefix + basename));
6062
});
6163
}
62-
else if (path.extname(abstractName)) {
64+
// If the name has a different valid extension, treat it as a path to a real file.
65+
else if ([ '.css', '.json', '.yaml' ].indexOf(path.extname(abstractName)) !== -1) {
6366
names.push(abstractName);
6467
}
68+
// Otherwise, the name is abstract and all variants should be searched.
6569
else {
6670
directory = path.dirname(abstractName);
6771
basename = path.basename(abstractName);
@@ -308,7 +312,7 @@ var importer = function importer(uri, prev, done) {
308312
file = path.resolve(path.dirname(prev), makeFsPath(uri));
309313
raf(uri, file, function (err, data) {
310314
if (err) {
311-
console.log(err.toString());
315+
console.log(err.toString()); // eslint-disable-line no-console
312316
done({});
313317
}
314318
else {
@@ -319,7 +323,7 @@ var importer = function importer(uri, prev, done) {
319323
else {
320324
raf(uri, process.cwd(), function (err, data) {
321325
if (err) {
322-
console.log(err.toString());
326+
console.log(err.toString()); // eslint-disable-line no-console
323327
done({});
324328
}
325329
else {

test/css/import-with-dot.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.some-class-in-dotted-file {
2+
color: blue; }
File renamed without changes.

test/main.js

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,28 +38,28 @@ describe('import-once', function () {
3838
});
3939
});
4040

41-
it.only('should resolve import with Sass extensions', function(done) {
41+
it('should resolve import with Sass extensions', function(done) {
4242
var file = filePath('import-scss.scss'),
4343
expectedIncludes = [
4444
file,
4545
filePath('foo/_index.scss')
4646
];
4747

48-
sass.render({
49-
'file': file,
50-
'importer': importer
51-
}, function (err, result) {
52-
if (err) {
53-
throw err;
54-
}
55-
should.exist(result);
56-
result.stats.includedFiles.should.eql(expectedIncludes);
57-
String(result.css).should.equal(
58-
fs.readFileSync(path.join(__dirname, 'css/imported-scss.css'), 'utf8')
59-
);
60-
done();
61-
});
62-
})
48+
sass.render({
49+
'file': file,
50+
'importer': importer
51+
}, function (err, result) {
52+
if (err) {
53+
throw err;
54+
}
55+
should.exist(result);
56+
result.stats.includedFiles.should.eql(expectedIncludes);
57+
String(result.css).should.equal(
58+
fs.readFileSync(path.join(__dirname, 'css/imported-scss.css'), 'utf8')
59+
);
60+
done();
61+
});
62+
});
6363

6464
it('should import `index` files from a folder', function (done) {
6565
var file = filePath('import-index.scss'),
@@ -290,4 +290,27 @@ describe('import-once', function () {
290290
done();
291291
});
292292
});
293+
294+
it('should import a file with dots in its name', function(done) {
295+
var file = filePath('import-with-dot.scss'),
296+
expectedIncludes = [
297+
file,
298+
filePath('file.with.dot.scss')
299+
];
300+
301+
sass.render({
302+
'file': file,
303+
'importer': importer
304+
}, function(err, result) {
305+
if (err) {
306+
throw err;
307+
}
308+
should.exist(result);
309+
result.stats.includedFiles.should.eql(expectedIncludes);
310+
String(result.css).should.equal(
311+
fs.readFileSync(path.join(__dirname, 'css/import-with-dot.css'), 'utf8')
312+
);
313+
done();
314+
});
315+
});
293316
});

test/sass/file.with.dot.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.some-class-in-dotted-file {
2+
color: blue;
3+
}
File renamed without changes.

test/sass/import-with-dot.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@import "file.with.dot";

0 commit comments

Comments
 (0)