mirror of https://github.com/status-im/metro.git
Fix DependencyResolver to support ES6 multiline imports
Summary: *This is a PR to fix #1939 (DependencyResolver fails to handle ES6 modules import statements with new lines)* **This PR includes:** - A fix to the problematic regular expression - Updated tests that support the new line style. **Summary:** We found out that while the packager does its module wrapping thing for lines like this: ```js import theDefault, { named1, named2 } from 'src/mylib'; ``` It fails to do the same for multi line imports: ```js import theDefault, { named1, named2 } from 'src/mylib'; ``` We've tracked done the issue to a [faulty regular expression in replacePatterns.js](https://github.com/facebook/react-native/blob/master/packager/react-packager/src/DependencyResolver/replacePatterns.js#L12) You can see various import statements with the problematic regular expression [here](http://regexr.com/3bc8m) We've figure out a better regular expression (you can play around with it [here](http://regexr.com/3bd3s))Closes https://github.com/facebook/react-native/pull/1940 Reviewed By: @svcscm Differential Revision: D2498519 Pulled By: @vjeux
This commit is contained in:
parent
f45eaaaa1e
commit
e5f2e03af2
|
@ -218,6 +218,7 @@ describe('HasteDependencyResolver', function() {
|
||||||
|
|
||||||
/*eslint-disable */
|
/*eslint-disable */
|
||||||
var code = [
|
var code = [
|
||||||
|
// single line import
|
||||||
"import'x';",
|
"import'x';",
|
||||||
"import 'x';",
|
"import 'x';",
|
||||||
"import 'x' ;",
|
"import 'x' ;",
|
||||||
|
@ -350,6 +351,63 @@ describe('HasteDependencyResolver', function() {
|
||||||
'import Default, { Foo as Bar, Baz as Qux, Norf as Enuf, } from "x";',
|
'import Default, { Foo as Bar, Baz as Qux, Norf as Enuf, } from "x";',
|
||||||
'import Default from "y";',
|
'import Default from "y";',
|
||||||
'import * as All from \'z\';',
|
'import * as All from \'z\';',
|
||||||
|
// import with support for new lines
|
||||||
|
"import { Foo,\n Bar }\n from 'x';",
|
||||||
|
"import { \nFoo,\nBar,\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz\n }\n from 'x';",
|
||||||
|
"import { \nFoo as Bar,\n Baz\n, }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar as Baz\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar,\n Baz }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar,\n Baz,\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux,\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux,\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar,\n Baz as Qux\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar,\n Baz as Qux,\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf,\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux as Norf\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux as Norf,\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux as Norf\n }\n from 'x';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux as Norf,\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf as Enuf\n }\n from 'x';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf as Enuf,\n }\n from 'x';",
|
||||||
|
"import Default,\n * as All from 'x';",
|
||||||
|
"import Default,\n { } from 'x';",
|
||||||
|
"import Default,\n { Foo\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar\n } from\n 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n } from\n 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz,\n Qux\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz,\n Qux,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz as Qux\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz as Qux,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf,\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux as Norf }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux as Norf, }\n from 'x';",
|
||||||
|
"import Default,\n { Foo, Bar as Baz,\n Qux as Norf }\n from 'x';",
|
||||||
|
"import Default,\n { Foo, Bar as Baz,\n Qux as Norf, }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf as NoMore\n }\n from 'x';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf as NoMore,\n }\n from 'x';",
|
||||||
|
"import Default\n , { } from 'x';",
|
||||||
|
// require
|
||||||
'require("x")',
|
'require("x")',
|
||||||
'require("y")',
|
'require("y")',
|
||||||
'require( \'z\' )',
|
'require( \'z\' )',
|
||||||
|
@ -381,6 +439,7 @@ describe('HasteDependencyResolver', function() {
|
||||||
expect(processedCode).toEqual([
|
expect(processedCode).toEqual([
|
||||||
'__d(\'test module\',["changed","Y"],function(global, require,' +
|
'__d(\'test module\',["changed","Y"],function(global, require,' +
|
||||||
' module, exports) { ' +
|
' module, exports) { ' +
|
||||||
|
// single line import
|
||||||
"import'x';",
|
"import'x';",
|
||||||
"import 'changed';",
|
"import 'changed';",
|
||||||
"import 'changed' ;",
|
"import 'changed' ;",
|
||||||
|
@ -513,6 +572,63 @@ describe('HasteDependencyResolver', function() {
|
||||||
'import Default, { Foo as Bar, Baz as Qux, Norf as Enuf, } from "changed";',
|
'import Default, { Foo as Bar, Baz as Qux, Norf as Enuf, } from "changed";',
|
||||||
'import Default from "Y";',
|
'import Default from "Y";',
|
||||||
'import * as All from \'z\';',
|
'import * as All from \'z\';',
|
||||||
|
// import with support for new lines
|
||||||
|
"import { Foo,\n Bar }\n from 'changed';",
|
||||||
|
"import { \nFoo,\nBar,\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz\n }\n from 'changed';",
|
||||||
|
"import { \nFoo as Bar,\n Baz\n, }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar as Baz\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar,\n Baz }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar,\n Baz,\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux,\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux,\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar,\n Baz as Qux\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar,\n Baz as Qux,\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf,\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux as Norf\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz,\n Qux as Norf,\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux as Norf\n }\n from 'changed';",
|
||||||
|
"import { Foo,\n Bar as Baz,\n Qux as Norf,\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf as Enuf\n }\n from 'changed';",
|
||||||
|
"import { Foo as Bar,\n Baz as Qux,\n Norf as Enuf,\n }\n from 'changed';",
|
||||||
|
"import Default,\n * as All from 'changed';",
|
||||||
|
"import Default,\n { } from 'changed';",
|
||||||
|
"import Default,\n { Foo\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar\n } from\n 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n } from\n 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz,\n Qux\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar as Baz,\n Qux,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz as Qux\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo,\n Bar,\n Baz as Qux,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf,\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux as Norf }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz,\n Qux as Norf, }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo, Bar as Baz,\n Qux as Norf }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo, Bar as Baz,\n Qux as Norf, }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf as NoMore\n }\n from 'changed';",
|
||||||
|
"import Default,\n { Foo as Bar,\n Baz as Qux,\n Norf as NoMore,\n }\n from 'changed';",
|
||||||
|
"import Default\n , { } from 'changed';",
|
||||||
|
// require
|
||||||
'require("changed")',
|
'require("changed")',
|
||||||
'require("Y")',
|
'require("Y")',
|
||||||
'require( \'z\' )',
|
'require( \'z\' )',
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
exports.IMPORT_RE = /(\bimport\s+?(?:.+\s+?from\s+?)?)(['"])([^'"]+)(\2)/g;
|
exports.IMPORT_RE = /(\bimport\s+(?:[^'"]+\s+from\s+)??)(['"])([^'"]+)(\2)/g;
|
||||||
exports.REQUIRE_RE = /(\brequire\s*?\(\s*?)(['"])([^'"]+)(\2\s*?\))/g;
|
exports.REQUIRE_RE = /(\brequire\s*?\(\s*?)(['"])([^'"]+)(\2\s*?\))/g;
|
||||||
exports.SYSTEM_IMPORT_RE = /(\bSystem\.import\s*?\(\s*?)(['"])([^'"]+)(\2\s*?\))/g;
|
exports.SYSTEM_IMPORT_RE = /(\bSystem\.import\s*?\(\s*?)(['"])([^'"]+)(\2\s*?\))/g;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue