diff --git a/src/index.js b/src/index.js index 4152ace..c33f0ec 100644 --- a/src/index.js +++ b/src/index.js @@ -130,10 +130,30 @@ export default ({ return false; }; + const includeForPlugin = (path: Object, stats: Object) => { + stats.opts.filetypes = stats.opts.filetypes || {}; + + const extension = path.node.source.value.lastIndexOf('.') > -1 ? path.node.source.value.substr(path.node.source.value.lastIndexOf('.')) : null; + + if (extension !== '.css' && Object.keys(stats.opts.filetypes).indexOf(extension) < 0) { + return false; + } + + if (stats.opts.include && getTargetResourcePath(path, stats).match(new RegExp(stats.opts.include))) { + return true; + } + + return false; + }; + return { inherits: babelPluginJsxSyntax, visitor: { ImportDeclaration (path: Object, stats: Object): void { + if (!includeForPlugin(path, stats)) { + return; + } + if (notForPlugin(path, stats)) { return; } diff --git a/src/schemas/optionsSchema.json b/src/schemas/optionsSchema.json index 440a1d5..287f10d 100644 --- a/src/schemas/optionsSchema.json +++ b/src/schemas/optionsSchema.json @@ -7,6 +7,9 @@ "exclude": { "type": "string" }, + "include": { + "type": "string" + }, "filetypes": { "additionalProperties": false, "patternProperties": { @@ -39,4 +42,4 @@ } }, "type": "object" -} \ No newline at end of file +} diff --git a/test/fixtures/react-css-modules/include styles from react-css-modules/actual.js b/test/fixtures/react-css-modules/include styles from react-css-modules/actual.js new file mode 100644 index 0000000..f16529d --- /dev/null +++ b/test/fixtures/react-css-modules/include styles from react-css-modules/actual.js @@ -0,0 +1,4 @@ +import './bar.css'; +import './is_me.css'; + +
; diff --git a/test/fixtures/react-css-modules/include styles from react-css-modules/bar.css b/test/fixtures/react-css-modules/include styles from react-css-modules/bar.css new file mode 100644 index 0000000..477ee5c --- /dev/null +++ b/test/fixtures/react-css-modules/include styles from react-css-modules/bar.css @@ -0,0 +1 @@ +.other {} diff --git a/test/fixtures/react-css-modules/include styles from react-css-modules/expected.js b/test/fixtures/react-css-modules/include styles from react-css-modules/expected.js new file mode 100644 index 0000000..cf4c318 --- /dev/null +++ b/test/fixtures/react-css-modules/include styles from react-css-modules/expected.js @@ -0,0 +1,4 @@ +import './bar.css'; +import './is_me.css'; + +; diff --git a/test/fixtures/react-css-modules/include styles from react-css-modules/is_me.css b/test/fixtures/react-css-modules/include styles from react-css-modules/is_me.css new file mode 100644 index 0000000..5512dae --- /dev/null +++ b/test/fixtures/react-css-modules/include styles from react-css-modules/is_me.css @@ -0,0 +1 @@ +.a {} diff --git a/test/fixtures/react-css-modules/include styles from react-css-modules/options.json b/test/fixtures/react-css-modules/include styles from react-css-modules/options.json new file mode 100644 index 0000000..b183e96 --- /dev/null +++ b/test/fixtures/react-css-modules/include styles from react-css-modules/options.json @@ -0,0 +1,11 @@ +{ + "plugins": [ + [ + "../../../../src", + { + "generateScopedName": "[name]__[local]", + "include": "is_me" + } + ] + ] +}