mirror of
https://github.com/status-im/metro.git
synced 2025-01-09 18:45:41 +00:00
b2002609c1
Summary: Resolves https://github.com/facebook/metro-bundler/issues/27 **Summary** There is an edge case where tools like react-primitives need to assign to `Platform.OS`, but the inline transformation results in an invalid AST. When Platform.OS is unconditionally inlined, the following scenario: ```` Platform.OS = 'ios'; ```` Is transformed to: ``` "ios"="ios" ```` And results in error `Property left of AssignmentExpression expected node to be of a type ["LVal"] but instead got "StringLiteral"**`. See issue in react-primitives: https://github.com/lelandrichardson/react-primitives/issues/79 This patch checks whether the current node is on the left hand side of an AssignmentExpression and skips the inlining when this is the case. It also does the same for `process.env.NODE_ENV`, which suffers from the same problem. See related closed issue https://github.com/facebook/react-native/issues/7607#issuecomment-221425153 which was resolved by using bracket notation `process.env["NODE_ENV"]` instead. **Test plan** Unit tests included. **Notes** This is my first contribution to Metro, and haven't worked with Babel AST a lot, so constructive feedback on the implementation is welcome. Closes https://github.com/facebook/metro-bundler/pull/45 Reviewed By: cpojer Differential Revision: D5974615 Pulled By: mjesun fbshipit-source-id: 224e63cef24f450b33e17ff9c0e0c0cea46bc70e