diff --git a/bin/injectServer.js b/bin/injectServer.js index 5236338..ca19e5b 100644 --- a/bin/injectServer.js +++ b/bin/injectServer.js @@ -1,19 +1,53 @@ var fs = require('fs'); var path = require('path'); +var semver = require('semver'); var name = 'remotedev-server'; var startFlag = '/* ' + name + ' start */'; var endFlag = '/* ' + name + ' end */'; -var serverFlag = ' _server(argv, config, resolve, reject);'; +var serverFlags = { + 'react-native': { + '0.0.1': ' _server(argv, config, resolve, reject);', + '0.31.0': " runServer(args, config, () => console.log('\\nReact packager ready.\\n'));", + }, + 'react-native-desktop': { + '0.0.1': ' _server(argv, config, resolve, reject);', + }, +}; + +function getModuleVersion(modulePath) { + return JSON.parse( + fs.readFileSync( + path.join(modulePath, 'package.json'), + 'utf-8' + ) + ).version; +} + +function getServerFlag(moduleName, version) { + var flags = serverFlags[moduleName || 'react-native']; + var versions = Object.keys(flags); + var flag; + for (var i = 0; i < versions.length; i++) { + if (semver.gt(version, versions[i])) { + flag = flags[versions[i]]; + } + } + return flag; +} exports.dir = 'local-cli/server'; exports.file = 'server.js'; exports.fullPath = path.join(exports.dir, exports.file); -exports.inject = function(modulePath, options) { +exports.inject = function(modulePath, options, moduleName) { var filePath = path.join(modulePath, exports.fullPath); if (!fs.existsSync(filePath)) return false; + var serverFlag = getServerFlag( + moduleName, + getModuleVersion(modulePath) + ); var code = [ startFlag, ' require("' + name + '")(' + JSON.stringify(options) + ')', @@ -40,10 +74,14 @@ exports.inject = function(modulePath, options) { return true; }; -exports.revert = function(modulePath) { +exports.revert = function(modulePath, moduleName) { var filePath = path.join(modulePath, exports.fullPath); if (!fs.existsSync(filePath)) return false; + var serverFlag = getServerFlag( + moduleName, + getModuleVersion(modulePath) + ); var serverCode = fs.readFileSync(filePath, 'utf-8'); var start = serverCode.indexOf(startFlag); // already injected ? var end = serverCode.indexOf(endFlag) + endFlag.length; diff --git a/bin/remotedev.js b/bin/remotedev.js index d16df6f..ff843fd 100755 --- a/bin/remotedev.js +++ b/bin/remotedev.js @@ -31,13 +31,16 @@ function getModuleName(type) { } } -function getModulePath(type) { - var moduleName = getModuleName(type); +function getModulePath(moduleName) { return path.join(process.cwd(), 'node_modules', moduleName); } if (argv.revert) { - var pass = injectServer.revert(getModulePath(argv.revert)); + var moduleName = getModuleName(argv.revert); + var pass = injectServer.revert( + getModulePath(moduleName), + moduleName + ); var msg = 'Revert injection of RemoteDev server from React Native local server'; log(pass, msg + (!pass ? ', the file `' + injectServer.fullPath + '` not found.' : '.')); @@ -46,7 +49,12 @@ if (argv.revert) { if (argv.injectserver) { var options = getOptions(argv); - var pass = injectServer.inject(getModulePath(argv.injectserver), options); + var moduleName = getModuleName(argv.injectserver) + var pass = injectServer.inject( + getModulePath(moduleName), + options, + moduleName + ); var msg = 'Inject RemoteDev server into React Native local server'; log(pass, msg + (pass ? '.' : ', the file `' + injectServer.fullPath + '` not found.')); diff --git a/package.json b/package.json index 35644e5..29b2d12 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "minimist": "^1.2.0", "object-assign": "^4.1.0", "repeat-string": "^1.5.4", + "semver": "^5.3.0", "socketcluster": "^4.3.1" } }