h2cli
Version:
A command line interface for HTTP/2
92 lines (83 loc) • 2.46 kB
JavaScript
var fs = require('fs');
var url = require('url');
var path = require('path');
var h2 = require('./lib/h2');
var cmd = require('./lib/command');
var homeDir = process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'];
// Load configurations
var config, configData, pref;
try {
configData = fs.readFileSync(homeDir + '/.h2cli/config', 'utf-8');
config = JSON.parse(configData);
} catch (e) {
config = {};
}
var h2client = h2.createClient(config);
// Load commands
cmd.loadCommands(h2client, __dirname + '/lib/cmd');
if (fs.existsSync(homeDir + '/.h2cli/cmd')) {
cmd.loadCommands(h2client, homeDir + '/.h2cli/cmd');
}
// Load extensions
require('./lib/ext/altsvc');
require('./lib/ext/blocked');
var rl = require('readline').createInterface(process.stdin, process.stdout, completer);
if (process.argv.length === 2) {
var completer = function (line) {
return cmd.getCompletions(line);
};
rl.setPrompt('h2> ');
rl.setColor = function (colorAttr) {
this.write("\033[" + colorAttr + "m");
};
rl.clearColor = function () {
this.write("\033[m");
};
var callback = function() { rl.prompt(); };
rl.prompt();
rl.on('line', function(line) {
rl.pause();
var args = line.trim().split(' ');
var c = cmd.getCommand(args[0]);
if (c) {
c.exec(args, callback);
} else {
callback();
}
}).on('close', function() {
process.exit(0);
});
} else {
var args = process.argv;
args.shift();
args.shift();
var parsedUrl = url.parse(args[0]);
var execute = function () {
var c = cmd.getCommand(args[0]);
if (c) {
c.exec(args, function () {
rl.on('line', function () {
rl.close();
cmd.getCommand('close').exec();
});
rl.prompt();
});
}
};
if (parsedUrl.protocol && parsedUrl.protocol.substr(0, 4) === 'http') {
args.shift();
var secure = parsedUrl.protocol === 'https:';
var port = parsedUrl.port ? parsedUrl.port : (secure ? 443 : 80);
h2client.connect(parsedUrl.hostname, port, {
secure: secure,
useNpn: true
}, function (stream, error) {
if (!error) {
execute();
}
});
} else {
execute();
}
}