From d1a9ee1a649222f3f39af3ec9bc3350661c4e9fc Mon Sep 17 00:00:00 2001 From: Alexey Litvinov Date: Thu, 3 Sep 2015 00:33:45 +0300 Subject: [PATCH 1/2] dynamic configs --- test/test-cases.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/test-cases.js b/test/test-cases.js index fd6159c..4bcbec1 100644 --- a/test/test-cases.js +++ b/test/test-cases.js @@ -40,9 +40,9 @@ describe("test-cases", function() { return generateScopedName(exportedName, normalizedPath); } }; - if(fs.existsSync(path.join(testDir, testCase, "config.json"))) { - config = JSON.parse(fs.readFileSync(path.join(testDir, testCase, "config.json"), "utf-8")); - } + try { + config = require(path.join(testDir, testCase, "config")); + } catch(e) {} if(fs.existsSync(path.join(testDir, testCase, "options.js"))) { options = require(path.join(testDir, testCase, "options.js")); } From 4650ab2e9422a5edba09c5c43b7f674871524c9d Mon Sep 17 00:00:00 2001 From: Alexey Litvinov Date: Thu, 3 Sep 2015 00:49:12 +0300 Subject: [PATCH 2/2] using real paths for config.from and possibility to provide option.rootDir in order to build shorter generic names --- src/index.js | 15 ++++++++++++--- test/test-cases/options-rootDir/config.js | 5 +++++ test/test-cases/options-rootDir/expected.css | 11 +++++++++++ test/test-cases/options-rootDir/options.js | 5 +++++ test/test-cases/options-rootDir/source.css | 7 +++++++ 5 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 test/test-cases/options-rootDir/config.js create mode 100644 test/test-cases/options-rootDir/expected.css create mode 100644 test/test-cases/options-rootDir/options.js create mode 100644 test/test-cases/options-rootDir/source.css diff --git a/src/index.js b/src/index.js index b2f5856..ad8ac29 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,6 @@ import postcss from 'postcss'; import Tokenizer from 'css-selector-tokenizer'; +import { relative, sep } from 'path'; let hasOwnProperty = Object.prototype.hasOwnProperty; @@ -28,14 +29,22 @@ function getSingleLocalNamesForComposes(selectors) { }); } -const processor = postcss.plugin('postcss-modules-scope', function(options) { +/** + * @param {object} options + * @param {function} options.generateScopedName + * @param {string} options.rootDir + * @return {function} + */ +const processor = postcss.plugin('postcss-modules-scope', function(options = {}) { + const rootDir = options.rootDir || process.cwd(); + return (css) => { - let generateScopedName = options && options.generateScopedName || processor.generateScopedName; + let generateScopedName = options.generateScopedName || processor.generateScopedName; let exports = {}; function exportScopedName(name) { - let scopedName = generateScopedName(name, css.source.input.from, css.source.input.css); + let scopedName = generateScopedName(name, sep + relative(rootDir, css.source.input.from), css.source.input.css); exports[name] = exports[name] || []; if(exports[name].indexOf(scopedName) < 0) { exports[name].push(scopedName); diff --git a/test/test-cases/options-rootDir/config.js b/test/test-cases/options-rootDir/config.js new file mode 100644 index 0000000..4ab97b8 --- /dev/null +++ b/test/test-cases/options-rootDir/config.js @@ -0,0 +1,5 @@ +var path = require('path'); + +module.exports = { + from: path.join(__dirname, 'source.css') +} diff --git a/test/test-cases/options-rootDir/expected.css b/test/test-cases/options-rootDir/expected.css new file mode 100644 index 0000000..70ed28b --- /dev/null +++ b/test/test-cases/options-rootDir/expected.css @@ -0,0 +1,11 @@ +._options_rootDir_source__exportName { + color: green; +} + +._options_rootDir_source__exportName:hover { + color: red; +} + +:export { + exportName: _options_rootDir_source__exportName; +} diff --git a/test/test-cases/options-rootDir/options.js b/test/test-cases/options-rootDir/options.js new file mode 100644 index 0000000..e844d95 --- /dev/null +++ b/test/test-cases/options-rootDir/options.js @@ -0,0 +1,5 @@ +var path = require('path'); + +module.exports = { + rootDir: path.join(__dirname, '..') +}; diff --git a/test/test-cases/options-rootDir/source.css b/test/test-cases/options-rootDir/source.css new file mode 100644 index 0000000..7b0e089 --- /dev/null +++ b/test/test-cases/options-rootDir/source.css @@ -0,0 +1,7 @@ +:local(.exportName) { + color: green; +} + +:local(.exportName):hover { + color: red; +}