diff --git a/index.js b/index.js index cb9577c0..d77495bf 100755 --- a/index.js +++ b/index.js @@ -11,6 +11,7 @@ function AtImport(options) { root: process.cwd(), path: [], skipDuplicates: true, + resolve: resolveId, load: loadContent, }, options) @@ -221,14 +222,12 @@ function resolveImportId( processor ) { var atRule = stmt.node - var resolve = options.resolve ? options.resolve : resolveId var base = atRule.source && atRule.source.input && atRule.source.input.file ? path.dirname(atRule.source.input.file) : options.root - return Promise.resolve().then(function() { - return resolve(stmt.uri, base, options) - }).then(function(resolved) { + return Promise.resolve(options.resolve(stmt.uri, base, options)) + .then(function(resolved) { if (!Array.isArray(resolved)) { resolved = [ resolved ] } @@ -242,7 +241,8 @@ function resolveImportId( processor ) })) - }).then(function(result) { + }) + .then(function(result) { // Merge loaded statements stmt.children = result.reduce(function(result, statements) { if (statements) { @@ -250,7 +250,8 @@ function resolveImportId( } return result }, []) - }).catch(function(err) { + }) + .catch(function(err) { result.warn(err.message, { node: atRule }) }) } diff --git a/test/custom-resolve.js b/test/custom-resolve.js new file mode 100644 index 00000000..aeee94f2 --- /dev/null +++ b/test/custom-resolve.js @@ -0,0 +1,45 @@ +import test from "ava" +import compareFixtures from "./lib/compare-fixtures" +import path from "path" + +test("should accept file", t => { + return compareFixtures(t, "custom-resolve-file", { + resolve: () => { + return path.resolve("fixtures/imports/custom-resolve-1.css") + }, + }) +}) + +test("should accept promised file", t => { + return compareFixtures(t, "custom-resolve-file", { + resolve: () => { + return Promise.resolve( + path.resolve("fixtures/imports/custom-resolve-1.css") + ) + }, + }) +}) + +test("should accept array of files", t => { + return compareFixtures(t, "custom-resolve-array", { + resolve: () => { + return [ + path.resolve("fixtures/imports/custom-resolve-1.css"), + path.resolve("fixtures/imports/custom-resolve-2.css"), + path.resolve("fixtures/imports/custom-resolve-1.css"), + ] + }, + }) +}) + +test("should accept promised array of files", t => { + return compareFixtures(t, "custom-resolve-array", { + resolve: () => { + return Promise.resolve([ + path.resolve("fixtures/imports/custom-resolve-1.css"), + path.resolve("fixtures/imports/custom-resolve-2.css"), + path.resolve("fixtures/imports/custom-resolve-1.css"), + ]) + }, + }) +}) diff --git a/test/fixtures/custom-resolve-array.expected.css b/test/fixtures/custom-resolve-array.expected.css index 01ac44bf..a21c4ad8 100644 --- a/test/fixtures/custom-resolve-array.expected.css +++ b/test/fixtures/custom-resolve-array.expected.css @@ -1,2 +1,2 @@ -.custom-array-1 {} -.custom-array-2 {} +custom-resolve-1 {} +custom-resolve-2 {} diff --git a/test/fixtures/custom-resolve-file.css b/test/fixtures/custom-resolve-file.css new file mode 100644 index 00000000..f611628b --- /dev/null +++ b/test/fixtures/custom-resolve-file.css @@ -0,0 +1 @@ +@import "any-path"; diff --git a/test/fixtures/custom-resolve-file.expected.css b/test/fixtures/custom-resolve-file.expected.css new file mode 100644 index 00000000..aed3f77d --- /dev/null +++ b/test/fixtures/custom-resolve-file.expected.css @@ -0,0 +1 @@ +custom-resolve-1 {} diff --git a/test/fixtures/custom-resolve-modules.css b/test/fixtures/custom-resolve-modules.css deleted file mode 100644 index fe166c6e..00000000 --- a/test/fixtures/custom-resolve-modules.css +++ /dev/null @@ -1,3 +0,0 @@ -@import "sass-module"; - -content{} diff --git a/test/fixtures/custom-resolve-modules.expected.css b/test/fixtures/custom-resolve-modules.expected.css deleted file mode 100644 index 2922e174..00000000 --- a/test/fixtures/custom-resolve-modules.expected.css +++ /dev/null @@ -1,3 +0,0 @@ -.sass-module{} - -content{} diff --git a/test/fixtures/imports/custom-array-1.css b/test/fixtures/imports/custom-array-1.css deleted file mode 100644 index bbeb6133..00000000 --- a/test/fixtures/imports/custom-array-1.css +++ /dev/null @@ -1 +0,0 @@ -.custom-array-1 {} diff --git a/test/fixtures/imports/custom-array-2.css b/test/fixtures/imports/custom-array-2.css deleted file mode 100644 index 7ced963a..00000000 --- a/test/fixtures/imports/custom-array-2.css +++ /dev/null @@ -1 +0,0 @@ -.custom-array-2 {} diff --git a/test/fixtures/imports/custom-resolve-1.css b/test/fixtures/imports/custom-resolve-1.css new file mode 100644 index 00000000..aed3f77d --- /dev/null +++ b/test/fixtures/imports/custom-resolve-1.css @@ -0,0 +1 @@ +custom-resolve-1 {} diff --git a/test/fixtures/imports/custom-resolve-2.css b/test/fixtures/imports/custom-resolve-2.css new file mode 100644 index 00000000..d46e6fba --- /dev/null +++ b/test/fixtures/imports/custom-resolve-2.css @@ -0,0 +1 @@ +custom-resolve-2 {} diff --git a/test/fixtures/imports/sass-module/main.scss b/test/fixtures/imports/sass-module/main.scss deleted file mode 100644 index f31ea4d8..00000000 --- a/test/fixtures/imports/sass-module/main.scss +++ /dev/null @@ -1 +0,0 @@ -.sass-module{} diff --git a/test/fixtures/imports/sass-module/package.json b/test/fixtures/imports/sass-module/package.json deleted file mode 100644 index 6f24fdbb..00000000 --- a/test/fixtures/imports/sass-module/package.json +++ /dev/null @@ -1,2 +0,0 @@ -{"sass": "main"} - diff --git a/test/import.js b/test/import.js index 9fe1cd7a..57cc4663 100644 --- a/test/import.js +++ b/test/import.js @@ -143,36 +143,3 @@ test("should work with no styles without throwing an error", t => { t.is(result.warnings().length, 0) }) }) - -test("should be able to consume modules in the custom-resolve way", t => { - const resolve = require("resolve") - const sassResolve = (id, base, opts) => { - return resolve.sync(id, { - basedir: base, - extensions: [ ".scss", ".css" ], - paths: opts.path, - packageFilter: pkg => { - pkg.main = pkg.sass || pkg.style || "index" - return pkg - }, - }) - } - return compareFixtures(t, "custom-resolve-modules", { - root: ".", - path: "fixtures/imports", - resolve: sassResolve, - }) -}) - -test("should be able to process array of files in the custom-resolve way", t => { - const arrayResolve = () => { - return [ - path.resolve("fixtures/imports/custom-array-1.css"), - path.resolve("fixtures/imports/custom-array-2.css"), - path.resolve("fixtures/imports/custom-array-1.css"), - ] - } - return compareFixtures(t, "custom-resolve-array", { - resolve: arrayResolve, - }) -})