From 4ecc5d66a405c22f98df2eeaee5f9c5cd10858f9 Mon Sep 17 00:00:00 2001 From: David Liu Date: Wed, 26 Feb 2020 21:15:16 +0800 Subject: [PATCH] feat: allow to export names from global class or id (#21) --- src/index.js | 7 ++++++ .../export-global-class/expected.css | 22 ++++++++++++++++++ .../test-cases/export-global-class/options.js | 3 +++ .../test-cases/export-global-class/source.css | 17 ++++++++++++++ test/test-cases/export-global-id/expected.css | 23 +++++++++++++++++++ test/test-cases/export-global-id/options.js | 3 +++ test/test-cases/export-global-id/source.css | 17 ++++++++++++++ 7 files changed, 92 insertions(+) create mode 100644 test/test-cases/export-global-class/expected.css create mode 100644 test/test-cases/export-global-class/options.js create mode 100644 test/test-cases/export-global-class/source.css create mode 100644 test/test-cases/export-global-id/expected.css create mode 100644 test/test-cases/export-global-id/options.js create mode 100644 test/test-cases/export-global-id/source.css diff --git a/src/index.js b/src/index.js index e593bff..0ed854b 100644 --- a/src/index.js +++ b/src/index.js @@ -86,6 +86,7 @@ const processor = postcss.plugin('postcss-modules-scope', function(options) { (options && options.generateScopedName) || processor.generateScopedName; const generateExportEntry = (options && options.generateExportEntry) || processor.generateExportEntry; + const exportGlobals = options && options.exportGlobals; const exports = Object.create(null); @@ -173,6 +174,12 @@ const processor = postcss.plugin('postcss-modules-scope', function(options) { node.each(traverseNode); break; } + case 'id': + case 'class': + if (exportGlobals) { + exports[node.value] = [node.value]; + } + break; } return node; } diff --git a/test/test-cases/export-global-class/expected.css b/test/test-cases/export-global-class/expected.css new file mode 100644 index 0000000..00fbf4e --- /dev/null +++ b/test/test-cases/export-global-class/expected.css @@ -0,0 +1,22 @@ +.exportName { + color: green; +} + +.exportName:hover { + color: red; +} + +@media screen { + body { + background: red; + } +} + +._input__testLocal { + color: blue; +} + +:export { + exportName: exportName; + testLocal: _input__testLocal; +} diff --git a/test/test-cases/export-global-class/options.js b/test/test-cases/export-global-class/options.js new file mode 100644 index 0000000..db683c8 --- /dev/null +++ b/test/test-cases/export-global-class/options.js @@ -0,0 +1,3 @@ +module.exports = { + exportGlobals: true, +}; diff --git a/test/test-cases/export-global-class/source.css b/test/test-cases/export-global-class/source.css new file mode 100644 index 0000000..bf0319b --- /dev/null +++ b/test/test-cases/export-global-class/source.css @@ -0,0 +1,17 @@ +.exportName { + color: green; +} + +.exportName:hover { + color: red; +} + +@media screen { + body { + background: red; + } +} + +:local(.testLocal) { + color: blue; +} diff --git a/test/test-cases/export-global-id/expected.css b/test/test-cases/export-global-id/expected.css new file mode 100644 index 0000000..2939cf8 --- /dev/null +++ b/test/test-cases/export-global-id/expected.css @@ -0,0 +1,23 @@ +#exportName { + color: green; +} + +#exportName:hover { + color: red; +} + +@media screen { + #exportName-2 { + background: red; + } +} + +#_input__exportName-3 { + color: green; +} + +:export { + exportName: exportName; + exportName-2: exportName-2; + exportName-3: _input__exportName-3; +} diff --git a/test/test-cases/export-global-id/options.js b/test/test-cases/export-global-id/options.js new file mode 100644 index 0000000..db683c8 --- /dev/null +++ b/test/test-cases/export-global-id/options.js @@ -0,0 +1,3 @@ +module.exports = { + exportGlobals: true, +}; diff --git a/test/test-cases/export-global-id/source.css b/test/test-cases/export-global-id/source.css new file mode 100644 index 0000000..50843b8 --- /dev/null +++ b/test/test-cases/export-global-id/source.css @@ -0,0 +1,17 @@ +#exportName { + color: green; +} + +#exportName:hover { + color: red; +} + +@media screen { + #exportName-2 { + background: red; + } +} + +:local(#exportName-3) { + color: green; +}