c9-core/node_modules/vfs-lint/lint.js

74 wiersze
2.7 KiB
JavaScript
Czysty Zwykły widok Historia

2015-02-10 19:41:24 +00:00
var data = {
// File management
resolve: [ "path", "string", "options", "object" ],
stat: [ "path", "string", "options", "object" ],
readfile: [ "path", "string", "options", "object" ],
readdir: [ "path", "string", "options", "object" ],
mkfile: [ "path", "string", "options", "object" ],
mkdir: [ "path", "string", "options", "object" ],
rmfile: [ "path", "string", "options", "object" ],
rmdir: [ "path", "string", "options", "object" ],
rename: [ "path", "string", "options", "object" ],
copy: [ "path", "string", "options", "object" ],
symlink: [ "path", "string", "options", "object" ],
// Wrapper around fs.watch or fs.watchFile
watch: [ "path", "string", "options", "object" ],
// Network connection
connect: [ "port", "number", "options", "object" ],
// Process Management
spawn: [ "executablePath", "string", "options", "object" ],
execFile: [ "executablePath", "string", "options", "object" ],
// Basic async event emitter style API
on: [ "name", "string", "handler", "function" ],
off: [ "name", "string", "handler", "function" ],
emit: [ "name", "string", "value", "*" ],
// Extending the API
extend: [ "name", "string", "options", "object" ],
use: [ "name", "string", "options", "object" ]
};
module.exports = function lint(vfs) {
Object.keys(data).forEach(function (key) {
var vars = data[key];
var fn = vfs[key];
if (!fn) throw new TypeError("Missing " + key + " function");
if (typeof fn !== "function") throw new TypeError(key + " is not a function");
vfs[key] = function (path, options, callback) {
if (typeof arguments[2] !== "function") {
throw new TypeError(key + ": Please pass in a function for the callback");
}
var errors = [];
for (var i = 0; i < 2; i++) {
var name = vars[i * 2];
var value = arguments[i];
var expectedType = vars[i * 2 + 1];
if (expectedType === "*") continue;
var actualType = value === null ? "null" : Array.isArray(value) ? "array" : typeof value;
if (actualType !== expectedType) {
errors.push("Expected " + name + " to be " + expectedType + " but was " + actualType);
}
}
if (errors.length) {
return callback (new TypeError(key + ": " + errors.join(", ")));
}
try {
return fn.apply(this, arguments);
}
catch (err) {
return callback(err);
}
};
});
return vfs;
};