kopia lustrzana https://github.com/c9/core
Merge branch 'master' of github.com:c9/newclient into sdk-market
Conflicts: npm-shrinkwrap.jsonpull/85/head
commit
b688512225
|
@ -112,7 +112,8 @@ return [
|
||||||
hosted: false,
|
hosted: false,
|
||||||
local: true,
|
local: true,
|
||||||
home: process.env.HOME,
|
home: process.env.HOME,
|
||||||
setStatus: function(){}
|
setStatus: function(){},
|
||||||
|
location: ""
|
||||||
},
|
},
|
||||||
error_handler: {
|
error_handler: {
|
||||||
log: function(){}
|
log: function(){}
|
||||||
|
|
|
@ -137,6 +137,10 @@ module.exports = function Route(route, options, handler, types) {
|
||||||
var key = keys[i];
|
var key = keys[i];
|
||||||
var param = params[key];
|
var param = params[key];
|
||||||
var type = param.type;
|
var type = param.type;
|
||||||
|
if (param.optional && value == null) {
|
||||||
|
match[key] = value;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
value = type.parse(value);
|
value = type.parse(value);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -157,6 +161,7 @@ module.exports = function Route(route, options, handler, types) {
|
||||||
* the decoded and validated parameters are stored in `req.params`
|
* the decoded and validated parameters are stored in `req.params`
|
||||||
* otherwhise an error is returned.
|
* otherwhise an error is returned.
|
||||||
*/
|
*/
|
||||||
|
this.decodeParams = decodeParams;
|
||||||
function decodeParams(req, res, next) {
|
function decodeParams(req, res, next) {
|
||||||
var urlParams = req.match;
|
var urlParams = req.match;
|
||||||
if (!urlParams) return;
|
if (!urlParams) return;
|
||||||
|
@ -197,10 +202,12 @@ module.exports = function Route(route, options, handler, types) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
value = body[key]; // body is already JSON parsed
|
value = body[key]; // body is already JSON parsed
|
||||||
|
if (param.optional && value == null)
|
||||||
|
break;
|
||||||
isValid = type.check(value);
|
isValid = type.check(value);
|
||||||
break;
|
break;
|
||||||
case "query":
|
case "query":
|
||||||
if (param.optional && !(key in query))
|
if (param.optional && query[key] == null)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -211,7 +218,7 @@ module.exports = function Route(route, options, handler, types) {
|
||||||
isValid = isValid === false ? false : type.check(value);
|
isValid = isValid === false ? false : type.check(value);
|
||||||
break;
|
break;
|
||||||
case "url":
|
case "url":
|
||||||
if (param.optional && !(key in urlParams))
|
if (param.optional && urlParams[key] == null)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
value = urlParams[key]; // is already parsed and checked
|
value = urlParams[key]; // is already parsed and checked
|
||||||
|
|
|
@ -133,7 +133,65 @@ module.exports = {
|
||||||
|
|
||||||
assert.ok(!route.match(req, "/ts/353676299181"));
|
assert.ok(!route.match(req, "/ts/353676299181"));
|
||||||
assert.ok(!route.match(req, "/ts/abc"));
|
assert.ok(!route.match(req, "/ts/abc"));
|
||||||
}
|
},
|
||||||
|
|
||||||
|
"test router: decode parameter in body": function(next) {
|
||||||
|
var route = new Route("/user", {
|
||||||
|
params: {
|
||||||
|
id: {
|
||||||
|
type: "int",
|
||||||
|
optional: true,
|
||||||
|
source: "body"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, sinon.stub());
|
||||||
|
|
||||||
|
var req = {
|
||||||
|
match: "match",
|
||||||
|
parsedUrl: {
|
||||||
|
query: ""
|
||||||
|
},
|
||||||
|
body: { id: 15 }
|
||||||
|
};
|
||||||
|
var res = {};
|
||||||
|
|
||||||
|
// Note: usually optionals would say 'source: "body",'
|
||||||
|
// but this should work
|
||||||
|
route.decodeParams(req, res, function(err, result) {
|
||||||
|
assert.equal(err, null);
|
||||||
|
assert.equal(req.params.id, 15);
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
"test router: optional number argument can be falsy": function(next) {
|
||||||
|
var route = new Route("/user", {
|
||||||
|
params: {
|
||||||
|
id: {
|
||||||
|
type: "int",
|
||||||
|
optional: true,
|
||||||
|
source: "body"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, sinon.stub());
|
||||||
|
|
||||||
|
var req = {
|
||||||
|
match: "match",
|
||||||
|
parsedUrl: {
|
||||||
|
query: ""
|
||||||
|
},
|
||||||
|
body: { id: null }
|
||||||
|
};
|
||||||
|
var res = {};
|
||||||
|
|
||||||
|
// Note: usually optionals would say 'source: "body",'
|
||||||
|
// but this should work
|
||||||
|
route.decodeParams(req, res, function(err, result) {
|
||||||
|
assert.equal(err, null);
|
||||||
|
assert.equal(req.params.id, null);
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
!module.parent && require("asyncjs").test.testcase(module.exports).exec();
|
!module.parent && require("asyncjs").test.testcase(module.exports).exec();
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
"c9.ide.help.support": "#60e88f5680",
|
"c9.ide.help.support": "#60e88f5680",
|
||||||
"c9.ide.imgeditor": "#08bbc53578",
|
"c9.ide.imgeditor": "#08bbc53578",
|
||||||
"c9.ide.immediate": "#6845a93705",
|
"c9.ide.immediate": "#6845a93705",
|
||||||
"c9.ide.installer": "#02e7018bf6",
|
"c9.ide.installer": "#63c3c021e3",
|
||||||
"c9.ide.mount": "#32e79866ee",
|
"c9.ide.mount": "#32e79866ee",
|
||||||
"c9.ide.navigate": "#64156c7f4a",
|
"c9.ide.navigate": "#64156c7f4a",
|
||||||
"c9.ide.newresource": "#f1f0624768",
|
"c9.ide.newresource": "#f1f0624768",
|
||||||
|
|
|
@ -299,7 +299,7 @@ define(function(require, exports, module) {
|
||||||
return callback(new Error("ERROR: Private flag in package.json prevents from installing"));
|
return callback(new Error("ERROR: Private flag in package.json prevents from installing"));
|
||||||
}
|
}
|
||||||
catch(e) {
|
catch(e) {
|
||||||
return callback(new Error("ERROR: Invalid package"));
|
return callback(new Error("ERROR: Invalid package: " + e.message));
|
||||||
}
|
}
|
||||||
|
|
||||||
proc.execFile("bash", { args: ["-c", "cp -a " + join(process.cwd(), "/*") + " " + packagePath] }, function(err){
|
proc.execFile("bash", { args: ["-c", "cp -a " + join(process.cwd(), "/*") + " " + packagePath] }, function(err){
|
||||||
|
|
|
@ -69,7 +69,8 @@ define(function(require, exports, module) {
|
||||||
console.error("ERROR: Could not get list: ", stringifyError(err));
|
console.error("ERROR: Could not get list: ", stringifyError(err));
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
// TODO if tty.isatty(process.stdout) use process.stdout.columns process.stdout.rows
|
||||||
|
// to give nicely wrapped output
|
||||||
if (asJson) {
|
if (asJson) {
|
||||||
console.log(JSON.stringify(list, 4, " "));
|
console.log(JSON.stringify(list, 4, " "));
|
||||||
return callback(null, list);
|
return callback(null, list);
|
||||||
|
@ -87,7 +88,7 @@ define(function(require, exports, module) {
|
||||||
pad(item.name, max[0] + PADDING),
|
pad(item.name, max[0] + PADDING),
|
||||||
pad(item.description.split(".")[0], max[1] + PADDING),
|
pad(item.description.split(".")[0], max[1] + PADDING),
|
||||||
LIGHTBlUE + pad("https://c9.io/profile/packages/" + item.name, max[2] + PADDING) + RESETCOLOR,
|
LIGHTBlUE + pad("https://c9.io/profile/packages/" + item.name, max[2] + PADDING) + RESETCOLOR,
|
||||||
pad(item.website || item.repository.url, max[3]));
|
item.website || item.repository.url); // do not pad last item
|
||||||
});
|
});
|
||||||
return callback(null, list);
|
return callback(null, list);
|
||||||
}
|
}
|
||||||
|
|
|
@ -245,8 +245,8 @@ define(function(require, exports, module) {
|
||||||
if (json.description)
|
if (json.description)
|
||||||
console.warn("WARNING: Description property in package.json will be ignored. README.md will be used.");
|
console.warn("WARNING: Description property in package.json will be ignored. README.md will be used.");
|
||||||
|
|
||||||
var originalDesc = json.description;
|
var description = fs.readFileSync(join(cwd, "README.md"), "utf8")
|
||||||
json.description = fs.readFileSync(join(cwd, "README.md"), "utf8");
|
.replace(/^\#.*\n*/, "");
|
||||||
|
|
||||||
// Validate plugins
|
// Validate plugins
|
||||||
var plugins = {};
|
var plugins = {};
|
||||||
|
@ -309,13 +309,9 @@ define(function(require, exports, module) {
|
||||||
if (!version)
|
if (!version)
|
||||||
return next();
|
return next();
|
||||||
|
|
||||||
// Reset description
|
|
||||||
var pkgJson = Object.create(json);
|
|
||||||
pkgJson.description = originalDesc;
|
|
||||||
|
|
||||||
// Write the package.json file
|
// Write the package.json file
|
||||||
var indent = data.match(/{\n\r?^ {4}"/) ? 4 : 2;
|
var indent = data.match(/{\n\r?^ {4}"/) ? 4 : 2;
|
||||||
var newData = JSON.stringify(pkgJson, null, indent);
|
var newData = JSON.stringify(json, null, indent);
|
||||||
fs.writeFile(cwd + "/.c9/.build/pacage.json", newData, function(){
|
fs.writeFile(cwd + "/.c9/.build/pacage.json", newData, function(){
|
||||||
if (dryRun)
|
if (dryRun)
|
||||||
return next(); // if dry-run is passed only update path in .build
|
return next(); // if dry-run is passed only update path in .build
|
||||||
|
@ -650,7 +646,7 @@ define(function(require, exports, module) {
|
||||||
contentType: "application/json",
|
contentType: "application/json",
|
||||||
body: {
|
body: {
|
||||||
name: json.name,
|
name: json.name,
|
||||||
description: json.description,
|
description: description,
|
||||||
owner_type: "user", // @TODO implement this when adding orgs
|
owner_type: "user", // @TODO implement this when adding orgs
|
||||||
owner_id: parseInt(user.id),
|
owner_id: parseInt(user.id),
|
||||||
permissions: json.permissions || "world",
|
permissions: json.permissions || "world",
|
||||||
|
@ -682,7 +678,7 @@ define(function(require, exports, module) {
|
||||||
repository: json.repository,
|
repository: json.repository,
|
||||||
longname: json.longname,
|
longname: json.longname,
|
||||||
website: json.website,
|
website: json.website,
|
||||||
description: json.description,
|
description: description,
|
||||||
screenshots: json.screenshots,
|
screenshots: json.screenshots,
|
||||||
pricing: json.pricing,
|
pricing: json.pricing,
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
|
@ -29,6 +29,8 @@ define(function(require, module, exports) {
|
||||||
var timeout = options.hasOwnProperty("timeout") ? options.timeout : 10000;
|
var timeout = options.hasOwnProperty("timeout") ? options.timeout : 10000;
|
||||||
var async = options.sync !== true;
|
var async = options.sync !== true;
|
||||||
var parsedUrl = parseUrl(url, options.query);
|
var parsedUrl = parseUrl(url, options.query);
|
||||||
|
if (contentType === "application/json")
|
||||||
|
headers.Accept = headers.Accept || "application/json";
|
||||||
|
|
||||||
if (options.username) {
|
if (options.username) {
|
||||||
headers.Authorization = "Basic " + btoa(options.username + ":" + options.password);
|
headers.Authorization = "Basic " + btoa(options.username + ":" + options.password);
|
||||||
|
|
Ładowanie…
Reference in New Issue