diff --git a/node_modules/awesome-theme/common.css b/node_modules/awesome-theme/common.css new file mode 100644 index 0000000..6f76b69 --- /dev/null +++ b/node_modules/awesome-theme/common.css @@ -0,0 +1,4 @@ +.paragraph +{ + composes: color from './oceanic.css'; +} diff --git a/src/index.js b/src/index.js index bface50..62a4c20 100644 --- a/src/index.js +++ b/src/index.js @@ -66,18 +66,18 @@ export default function setup(opts = {}) { } /** - * @param {string} _newPath Absolute or relative path. Also can be path to the Node.JS module. - * @param {string} _sourcePath Absolute path (relative to root). + * @param {string} _to Absolute or relative path. Also can be path to the Node.JS module. + * @param {string} _from Absolute path (relative to root). * @param {string} _trace * @return {object} */ -function fetch(_newPath, _sourcePath, _trace) { +function fetch(_to, _from, _trace) { const trace = _trace || String.fromCharCode(importNr++); - const newPath = removeQuotes(_newPath); + const newPath = removeQuotes(_to); // getting absolute path to the processing file const filename = /\w/.test(newPath[0]) ? require.resolve(newPath) - : resolve(rootDir + dirname(_sourcePath), newPath); + : resolve(dirname(_from), newPath); // checking cache let tokens = tokensByFile[filename]; @@ -88,7 +88,7 @@ function fetch(_newPath, _sourcePath, _trace) { const rootRelativePath = sep + relative(rootDir, filename); const CSSSource = preProcess(readFileSync(filename, 'utf8')); - const result = postcss(plugins.concat(new Parser({ fetch, trace }))) + const result = postcss(plugins.concat(new Parser({ fetch, filename, trace }))) .process(CSSSource, assign(lazyResultOpts, {from: rootRelativePath})) .root; @@ -102,4 +102,4 @@ function fetch(_newPath, _sourcePath, _trace) { return tokens; } -hook(filename => fetch(filename, sep + relative(rootDir, filename))); +hook(filename => fetch(filename, filename)); diff --git a/src/parser.js b/src/parser.js index 0f3ff36..84c6cdf 100644 --- a/src/parser.js +++ b/src/parser.js @@ -9,7 +9,7 @@ export default plugin('parser', function parser(opts = {}) { const fetchImport = (importNode, relativeTo, depNr) => { const file = importNode.selector.match(importRegexp)[1]; const depTrace = opts.trace + String.fromCharCode(depNr); - const exports = opts.fetch(file, relativeTo, depTrace); + const exports = opts.fetch(file, opts.filename, depTrace); importNode.each(decl => { if (decl.type === 'decl') { diff --git a/test/test-cases/compose-node-module/expected.json b/test/test-cases/compose-node-module/expected.json index 270a28b..c4555ba 100644 --- a/test/test-cases/compose-node-module/expected.json +++ b/test/test-cases/compose-node-module/expected.json @@ -1,3 +1,3 @@ { - "foo": "_compose_node_module_source__foo _node_modules_awesome_theme_oceanic__color" + "foo": "_compose_node_module_source__foo _node_modules_awesome_theme_common__paragraph _node_modules_awesome_theme_oceanic__color" } diff --git a/test/test-cases/compose-node-module/source.css b/test/test-cases/compose-node-module/source.css index 508d779..4d73aec 100644 --- a/test/test-cases/compose-node-module/source.css +++ b/test/test-cases/compose-node-module/source.css @@ -1,3 +1,3 @@ .foo { - composes: color from "awesome-theme/oceanic.css"; + composes: paragraph from "awesome-theme/common.css"; }