Add injectserver / revert CLI options
This commit is contained in:
parent
342878f787
commit
880e87b987
57
bin/injectServer.js
Normal file
57
bin/injectServer.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
|
||||||
|
var name = 'remotedev-server';
|
||||||
|
var startFlag = '/* ' + name + ' start */';
|
||||||
|
var endFlag = '/* ' + name + ' end */';
|
||||||
|
var serverFlag = ' _server(argv, config, resolve, reject);';
|
||||||
|
|
||||||
|
exports.dir = 'local-cli/server';
|
||||||
|
exports.file = 'server.js';
|
||||||
|
exports.fullPath = path.join(exports.dir, exports.file);
|
||||||
|
|
||||||
|
exports.inject = function(modulePath, options) {
|
||||||
|
var filePath = path.join(modulePath, exports.fullPath);
|
||||||
|
if (!fs.existsSync(filePath)) return false;
|
||||||
|
|
||||||
|
var code = [
|
||||||
|
startFlag,
|
||||||
|
' require("' + name + '")(' + JSON.stringify(options) + ')',
|
||||||
|
' .then(_remotedev =>',
|
||||||
|
' _remotedev.on("ready", () => {',
|
||||||
|
' if (!_remotedev.portAlreadyUsed) console.log("-".repeat(80));',
|
||||||
|
' ' + serverFlag,
|
||||||
|
' })',
|
||||||
|
' );',
|
||||||
|
endFlag,
|
||||||
|
].join('\n');
|
||||||
|
|
||||||
|
var serverCode = fs.readFileSync(filePath, 'utf-8');
|
||||||
|
var start = serverCode.indexOf(startFlag); // already injected ?
|
||||||
|
var end = serverCode.indexOf(endFlag) + endFlag.length;
|
||||||
|
if (start === -1) {
|
||||||
|
start = serverCode.indexOf(serverFlag);
|
||||||
|
end = start + serverFlag.length;
|
||||||
|
}
|
||||||
|
fs.writeFileSync(
|
||||||
|
filePath,
|
||||||
|
serverCode.substr(0, start) + code + serverCode.substr(end, serverCode.length)
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.revert = function(modulePath) {
|
||||||
|
var filePath = path.join(modulePath, exports.fullPath);
|
||||||
|
if (!fs.existsSync(filePath)) return false;
|
||||||
|
|
||||||
|
var serverCode = fs.readFileSync(filePath, 'utf-8');
|
||||||
|
var start = serverCode.indexOf(startFlag); // already injected ?
|
||||||
|
var end = serverCode.indexOf(endFlag) + endFlag.length;
|
||||||
|
if (start !== -1) {
|
||||||
|
fs.writeFileSync(
|
||||||
|
filePath,
|
||||||
|
serverCode.substr(0, start) + serverFlag + serverCode.substr(end, serverCode.length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
@ -2,6 +2,9 @@
|
|||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
var argv = require('minimist')(process.argv.slice(2));
|
var argv = require('minimist')(process.argv.slice(2));
|
||||||
|
var chalk = require('chalk');
|
||||||
|
var getOptions = require('./getOptions');
|
||||||
|
var injectServer = require('./injectServer');
|
||||||
|
|
||||||
function readFile(filePath) {
|
function readFile(filePath) {
|
||||||
return fs.readFileSync(path.resolve(process.cwd(), filePath), 'utf-8');
|
return fs.readFileSync(path.resolve(process.cwd(), filePath), 'utf-8');
|
||||||
@ -12,4 +15,42 @@ if (argv.protocol === 'https') {
|
|||||||
argv.cert = argv.cert ? readFile(argv.cert) : null;
|
argv.cert = argv.cert ? readFile(argv.cert) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function log(pass, msg) {
|
||||||
|
var prefix = pass ? chalk.green.bgBlack('PASS') : chalk.red.bgBlack('FAIL');
|
||||||
|
var color = pass ? chalk.blue : chalk.red;
|
||||||
|
console.log(prefix, color(msg));
|
||||||
|
};
|
||||||
|
|
||||||
|
function getModuleName(type) {
|
||||||
|
switch (type) {
|
||||||
|
case 'desktop':
|
||||||
|
return 'react-native-desktop';
|
||||||
|
case 'reactnative':
|
||||||
|
default:
|
||||||
|
return 'react-native';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getModulePath(type) {
|
||||||
|
var moduleName = getModuleName(type);
|
||||||
|
return path.join(process.cwd(), 'node_modules', moduleName);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.revert) {
|
||||||
|
var pass = injectServer.revert(getModulePath(argv.revert));
|
||||||
|
var msg = 'Revert injection of RemoteDev server from React Native local server';
|
||||||
|
log(pass, msg + (!pass ? ', the file `' + injectServer.fullPath + '` not found.' : '.'));
|
||||||
|
|
||||||
|
process.exit(pass ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.injectserver) {
|
||||||
|
var options = getOptions(argv);
|
||||||
|
var pass = injectServer.inject(getModulePath(argv.injectserver), options);
|
||||||
|
var msg = 'Inject RemoteDev server into React Native local server';
|
||||||
|
log(pass, msg + (pass ? '.' : ', the file `' + injectServer.fullPath + '` not found.'));
|
||||||
|
|
||||||
|
process.exit(pass ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
require('./server')(argv);
|
require('./server')(argv);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
"homepage": "https://github.com/zalmoxisus/remotedev-server",
|
"homepage": "https://github.com/zalmoxisus/remotedev-server",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"body-parser": "^1.15.0",
|
"body-parser": "^1.15.0",
|
||||||
|
"chalk": "^1.1.3",
|
||||||
"cors": "^2.7.1",
|
"cors": "^2.7.1",
|
||||||
"ejs": "^2.4.1",
|
"ejs": "^2.4.1",
|
||||||
"express": "^4.13.3",
|
"express": "^4.13.3",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user