mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2026-08-05 02:18:55 +00:00
Add check for unknown parameters
This commit is contained in:
@@ -95,8 +95,8 @@ Commander.prototype.executeNextCommand = function() {
|
||||
this.streams.output.write("Executing command: " + commandName + " " + params.join(" ") + "\n");
|
||||
}
|
||||
// Parse named parameters if required
|
||||
if(command.info.namedParameters) {
|
||||
params = this.extractNamedParameters(params,command.info.namedParameters);
|
||||
if(command.info.namedParameterMode) {
|
||||
params = this.extractNamedParameters(params,command.info.mandatoryParameters,command.info.optionalParameters);
|
||||
if(typeof params === "string") {
|
||||
return this.callback(params);
|
||||
}
|
||||
@@ -130,23 +130,35 @@ Commander.prototype.executeNextCommand = function() {
|
||||
};
|
||||
|
||||
/*
|
||||
Given an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error
|
||||
Given an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, and an array of optional parameters in
|
||||
`optionalParameter`, returns a hashmap of values or a string if error
|
||||
*/
|
||||
Commander.prototype.extractNamedParameters = function(params,mandatoryParameters) {
|
||||
Commander.prototype.extractNamedParameters = function(params,mandatoryParameters,optionalParameters) {
|
||||
mandatoryParameters = mandatoryParameters || [];
|
||||
optionalParameters = optionalParameters || [];
|
||||
var errors = [],
|
||||
paramsByName = Object.create(null);
|
||||
// Extract the parameters
|
||||
$tw.utils.each(params,function(param) {
|
||||
var index = param.indexOf(":");
|
||||
var index = param.indexOf("=");
|
||||
if(index < 1) {
|
||||
errors.push("malformed named parameter: '" + param + "'");
|
||||
}
|
||||
paramsByName[param.slice(0,index)] = param.slice(index+1);
|
||||
});
|
||||
// Check the mandatory parameters are present
|
||||
$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {
|
||||
if(!$tw.utils.hop(paramsByName,mandatoryParameter)) {
|
||||
errors.push("missing mandatory parameter: '" + mandatoryParameter + "'");
|
||||
}
|
||||
});
|
||||
// Check there no parameters that are not mandatory or optional
|
||||
$tw.utils.each(paramsByName,function(value,name) {
|
||||
if(mandatoryParameters.indexOf(name) === -1 && optionalParameters.indexOf(name) === -1) {
|
||||
errors.push("unknown parameter: '" + name + "'");
|
||||
}
|
||||
});
|
||||
// Return any errors
|
||||
if(errors.length > 0) {
|
||||
return errors.join(" and\n");
|
||||
} else {
|
||||
|
||||
@@ -17,7 +17,9 @@ var Server = require("$:/core/modules/server.js").Server;
|
||||
exports.info = {
|
||||
name: "listen",
|
||||
synchronous: true,
|
||||
namedParameters: [] // Use named parameters, but none of them are mandatory
|
||||
namedParameterMode: true,
|
||||
mandatoryParameters: [],
|
||||
optionalParameters: ["port","host","rootTiddler","renderType","serveType","username","password","pathprefix","debugLevel"]
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
@@ -25,7 +27,6 @@ var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
this.knownParameters = ["port","host","rootTiddler","renderType","serveType","username","password","pathprefix","debugLevel"];
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
@@ -35,7 +36,7 @@ Command.prototype.execute = function() {
|
||||
}
|
||||
// Set up server
|
||||
var variables = Object.create(null);
|
||||
$tw.utils.each(this.knownParameters,function(name) {
|
||||
$tw.utils.each(exports.info.optionalParameters,function(name) {
|
||||
if($tw.utils.hop(self.params,name)) {
|
||||
variables[name] = self.params[name];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user