zeysdk
Version:
SDK for ZeyOS
322 lines (270 loc) • 8.19 kB
JavaScript
var mod = {};
var fs = require('fs');
var help = require('./_help.js');
var path = require('path');
var val = require('agraddy.validate');
mod.appExists = function(item, name, message, type) {
var passed;
try {
let stat = fs.lstatSync(item[0]);
passed = !(stat.isFile() || stat.isDirectory());
} catch(err) {
passed = true;
}
return val.result(passed, message, type);
};
mod.appInside = function(item, name, message, type) {
var passed;
try {
let stat = fs.lstatSync('.zeysdk.package.json');
passed = !stat.isFile()
} catch(err) {
passed = true;
}
return val.result(passed, message, type);
};
mod.appInsideSubdirectory = function(item, name, message, type) {
var passed;
try {
let stat = fs.lstatSync(path.join('..', '.zeysdk.package.json'));
passed = !stat.isFile()
} catch(err) {
passed = true;
}
return val.result(passed, message, type);
};
mod.assetKeyExists = function(item, name, message, type) {
let passed;
try {
let json = require(path.join(process.cwd(), '.zeysdk.assets.json'));
let file_without_extension = help.getBaseNameFromFile(item[1]);
passed = !(json[item[0] + 's'] && json[item[0] + 's'][file_without_extension]);
} catch(err) {
passed = true;
}
return val.result(passed, message, type);
};
mod.badAssetJSON = function(item, name, message, type) {
var passed;
try {
require(path.join(process.cwd(), '.zeysdk.assets.json'));
passed = true;
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.badFileCharacters = function(item, name, message, type) {
let passed = !!item && /^[\w.:-]+$/.test(item)
return val.result(passed, message, type);
};
mod.badProperties = function(item, name, message, type) {
let passed = true;
let service_types = ['timing', 'remotecall', 'after_creation', 'before_modification', 'after_modifivation', 'after_creation_modification', 'before_deletion', 'after_deletion'];
let weblet_types = ['integrated', 'standalone', 'detached', 'popup_framed', 'popup_plain', 'embedded_framed', 'embedded_collapsed', 'embedded_plain'];
if (item.parts[0] == 'service') {
if (item.args.type !== undefined && service_types.indexOf(item.args.type) == -1) {
passed = false;
message = '';
message += 'The property "type" must be one of the following values:\n* ';
message += service_types.join('\n* ');
}
if (item.args.interval !== undefined && !(item.args.interval > 0)) {
passed = false;
message = '';
message += 'The property "interval" must be a number > 0!';
}
} else if(item.parts[0] == 'weblet') {
if (item.args.type !== undefined && weblet_types.indexOf(item.args.type) == -1) {
passed = false;
message = '';
message += 'The property "type" must be one of the following values:\n* ';
message += weblet_types.join('\n* ');
}
} else if (item.parts[0] === 'resource') {
if (item.args.public !== undefined && item.args.public != 0 && item.args.public != 1) {
passed = false;
message = '';
message += 'The property "public" must be 0 or 1';
}
}
return val.result(passed, message, type);
};
mod.destinationKeyExist = function(item, name, message, type) {
var passed;
var json;
var file_without_extension;
try {
json = require(path.join(process.cwd(), '.zeysdk.assets.json'));
file_without_extension = help.getBaseNameFromFile(item[2]);
passed = !(
json[item[0] + 's'] && json[item[0] + 's'][file_without_extension] !== undefined &&
item[0] === item[3] &&
item[1] === item[2]
)
} catch(err) {
// console.error(err);
passed = true;
}
return val.result(passed, message, type);
};
mod.everything = function(item, name, message, type) {
var passed = false;
return val.result(passed, message, type);
}
mod.invalidAssetClass = function(item, name, message, type) {
let passed = item && help.asset_classes.indexOf(item.toLowerCase()) != -1;
return val.result(passed, message, type);
};
mod.invalidCreateOptions = function(items, name, message, type) {
passed = !items.some(item => !['name', 'version', 'vendor'].includes(item));
return val.result(passed, message, type);
};
mod.invalidMimetype = function(item, name, message, type) {
let extension = help.getExtensionFromFile(item);
let passed = !!help.getMimetype(extension)
return val.result(passed, message, type);
};
mod.invalidPackageJSON = function(item, name, message, type) {
let passed;
let json;
try {
json = require(path.join(process.cwd(), '.zeysdk.package.json'));
passed = !!(json.identifier && json.name)
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.invalidResourceMimetype = function(item, name, message, type) {
var extension;
var passed;
try {
extension = help.getExtensionFromFile(item);
if(help.asset_resource_extensions.indexOf(extension) != -1) {
passed = true;
} else {
passed = false;
}
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.invalidScriptMimetype = function(item, name, message, type) {
let extension = help.getExtensionFromFile(item);
let passed = help.asset_script_extensions.indexOf(extension) != -1
return val.result(passed, message, type);
};
mod.invalidSyncJSON = function(item, name, message, type) {
let passed;
try {
let json = require(path.join(process.cwd(), '.zeysdk.sync.json'));
passed = !!(json.id && json.url);
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.lessThan = function(input) {
return function(item, name, message, type) {
return val.result(item >= input, message, type);
}
}
mod.missingAssetFile = function(item, name, message, type) {
let passed;
try {
let stat = fs.lstatSync(item[0] + 's' + '/' + item[1]);
passed = stat.isFile();
} catch(err) {
passed = false;
}
// .zeysdk.package.json only compares properties and not the file
if (item[1] == '.zeysdk.package.json') {
passed = true;
}
return val.result(passed, message, type);
};
mod.missingAssetJSON = function(item, name, message, type) {
let passed;
try {
let stat = fs.lstatSync('.zeysdk.assets.json');
passed = stat.isFile();
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.missingAssetKey = function(item, name, message, type) {
var passed;
var json;
var file_without_extension;
try {
json = require(path.join(process.cwd(), '.zeysdk.assets.json'));
file_without_extension = help.getBaseNameFromFile(item[1]);
passed = json[item[0] + 's'] && json[item[0] + 's'][file_without_extension] !== undefined
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.missingSettingFile = mod.missingAssetFile;
mod.missingSyncInstanceFile = function(item, name, message, type) {
var json;
var passed;
var stat;
var try_instance_file = false;
try {
stat = fs.lstatSync('.zeysdk.sync.json');
if (stat.isFile()) {
json = require(path.join(process.cwd(), '.zeysdk.sync.json'));
if(json.id == item[0]) {
passed = true;
} else {
try_instance_file = true;
}
} else {
passed = false;
}
if(try_instance_file) {
stat = fs.lstatSync('.zeysdk.sync.' + item[0] + '.json');
if(stat.isFile()) {
passed = true;
} else {
passed = false;
}
}
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.missingSyncFile = function(item, name, message, type) {
var passed;
var stat;
try {
let stat = fs.lstatSync('.zeysdk.sync.json');
passed = stat.isFile();
} catch(err) {
passed = false;
}
return val.result(passed, message, type);
};
mod.nonInteger = function(item, name, message, type) {
return val.result(Number.isInteger(Number(item)), message, type);
};
mod.nonZeyURL = function(item, name, message, type) {
let passed = typeof item !== 'string' || /^https?:\/\/cloud\.zeyos\.com\//.test(item);
return val.result(passed, message, type);
};
mod.syncActive = function(item, name, message, type) {
var passed;
try {
let json = require(path.join(process.cwd(), '.zeysdk.sync.json'));
passed = json.id != item[0]
} catch(err) {
passed = true;
}
return val.result(passed, message, type);
};
module.exports = mod;