diff --git a/packager/package.json b/packager/package.json index 2ea83333e..91de355c3 100644 --- a/packager/package.json +++ b/packager/package.json @@ -1,5 +1,5 @@ { - "version": "0.5.0", + "version": "0.5.1", "name": "react-native-packager", "description": "Build native apps with React!", "repository": { diff --git a/packager/src/JSTransformer/worker/__tests__/inline-test.js b/packager/src/JSTransformer/worker/__tests__/inline-test.js index d2a10f556..a08a242f7 100644 --- a/packager/src/JSTransformer/worker/__tests__/inline-test.js +++ b/packager/src/JSTransformer/worker/__tests__/inline-test.js @@ -306,4 +306,32 @@ describe('inline constants', () => { expect(toString(ast)).toEqual( normalize(code.replace(/require\([^)]+\)\.Platform\.OS/, '"android"'))); }); + + it('works with flow-declared variables', () => { + const stripFlow = require('babel-plugin-transform-flow-strip-types'); + const code = `declare var __DEV__; + const a: boolean = __DEV__;`; + + const transformed = transform( + code, + {...babelOptions, plugins: [stripFlow, [inline.plugin, {dev: false}]]}, + ).code; + + expect(transformed).toEqual('const a=false;'); + }); + + it('works with flow-declared variables in wrapped modules', () => { + const stripFlow = require('babel-plugin-transform-flow-strip-types'); + const code = `__d(() => { + declare var __DEV__; + const a: boolean = __DEV__; + });`; + + const transformed = transform( + code, + {...babelOptions, plugins: [stripFlow, [inline.plugin, {dev: true}]]}, + ).code; + + expect(transformed).toEqual('__d(()=>{const a=true;});'); + }); }); diff --git a/packager/src/JSTransformer/worker/inline.js b/packager/src/JSTransformer/worker/inline.js index 1b14bcdcb..91811a1f8 100644 --- a/packager/src/JSTransformer/worker/inline.js +++ b/packager/src/JSTransformer/worker/inline.js @@ -34,6 +34,12 @@ const importMap = new Map([['ReactNative', 'react-native']]); const isGlobal = binding => !binding; +const isFlowDeclared = binding => + t.isDeclareVariable(binding.path); + +const isGlobalOrFlowDeclared = binding => + isGlobal(binding) || isFlowDeclared(binding); + const isToplevelBinding = (binding, isWrappedModule) => isGlobal(binding) || !binding.scope.parent || @@ -93,7 +99,7 @@ const isReactPlatformSelect = (node, scope, isWrappedModule) => const isDev = (node, parent, scope) => t.isIdentifier(node, dev) && - isGlobal(scope.getBinding(dev.name)) && + isGlobalOrFlowDeclared(scope.getBinding(dev.name)) && !(t.isMemberExpression(parent)); function findProperty(objectExpression, key, fallback) {