diff --git a/lib/extract.js b/lib/extract.js index 9801636..0b8475e 100644 --- a/lib/extract.js +++ b/lib/extract.js @@ -20,12 +20,22 @@ function extract(opts) { "No extractor found for file '%s'", filename)); } - return results.concat(extractor(_.extend({}, opts, { - filename: filename, - source: fs - .readFileSync(path.resolve(filename)) - .toString() - }))); + var result = []; + try { + result = extractor( + _.extend({}, opts, { + filename: filename, + source: fs.readFileSync(path.resolve(filename)).toString(), + }) + ); + } catch (err) { + console.error('Cannot extract for', filename); + if (!opts.catchExtractError) { + throw err; + } + } + + return results.concat(result); }, []); var pots = pot({ diff --git a/test/extract.test.js b/test/extract.test.js index 575eb21..d920c1b 100644 --- a/test/extract.test.js +++ b/test/extract.test.js @@ -107,4 +107,14 @@ describe("jspot.extract", function() { }, /No extractor found for file 'a.custom'/); }); + + it("should not throw an error for unsupported formats if catchExtractError is set", function() { + jspot.extract({ + catchExtractError: true, + target: tmpdir, + source: ['./test/fixtures/extract/wrong/input/a.js'] + }); + + helpers.assert_file_not_exists(path.join(tmpdir, 'messages.pot')); + }); }); diff --git a/test/fixtures/extract/wrong/input/a.js b/test/fixtures/extract/wrong/input/a.js new file mode 100644 index 0000000..9d38418 --- /dev/null +++ b/test/fixtures/extract/wrong/input/a.js @@ -0,0 +1,11 @@ +import {withRoute} from 'some/injector' + +@withRoute +export class A extends React.Component { + + render() { + return ( +