/
filesValidator.js
81 lines (68 loc) · 2.79 KB
/
filesValidator.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
watsonPlan = require('./settings').plan;
function validateFile(file) {
var text = JSON.stringify(file);
var isJson = (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, '')));
return isJson;
}
function validateWASkill(skill) {
//Known /common Watson Assistant Skill properties
validSkill = {
hasIntent: skill["intents"],
hasEntity: skill["entities"]
}
//If any of the common properties are missing, then its not a valid Skill
// console.log(validSkill);
for (eachProperty in validSkill) {
if (!validSkill[eachProperty]) {
return false;
}
// console.log(JSON.stringify(validSkill[eachPropery]) );
}
return true;
}
function validateBothFiles(file1, file2) {
// console.log("skill1 intent count: " + file1.intents.length);
// console.log("skill2 intent count: " + file2.intents.length);
var skill1 = file1, skill2 = file2;
console.log("*** Running validator against files!")
try {
if (!validateFile(skill1))
throw new TypeError('skill1 is not a valid JSON');
if (skill2 && !validateFile(skill2))
throw new TypeError('skill2 is not a valid JSON');
if (!validateWASkill(skill1))
throw new TypeError('skill1 is not a valid Watson Assistant Skill');
if (skill2 && !validateWASkill(skill2))
throw new TypeError('skill2 is not a valid Watson Assistant Skill');
if (!isIntentsEntitiesExceeeded(skill1))
throw new TypeError('skill1 intents counts exceeds Watsons limit. Maximum entities limit exceeded.');
if (skill2 && !isIntentsEntitiesExceeeded(skill2))
throw new TypeError('skill2 intents counts exceeds Watsons limit. Maximum entities limit exceeded.');
console.log("*** Validation Check: No Exceptions violated!");
}
catch (error) {
console.log(error);
console.log("\n Validation - Error message: " + error.message);
}
}
function isIntentsEntitiesExceeeded(skill) {
var plan = require('./settings').plan;
var skill1IntentsCount = skill.intents.length;
var skill1EntitiesCount = skill.entities.length;
var entityLimit, intentLimit;
if (plan =="business"){
intentLimit = 2000;
entityLimit = 2000;
}else if (plan =="lite"){
intentLimit = 10;
entityLimit = 25;
}
if (skill1IntentsCount > intentLimit || skill1EntitiesCount > entityLimit) {
console.log("Warning!!! :"+skill.name+ " has intent count: "+ skill1IntentsCount+ " and entity count: "+skill1EntitiesCount);
return false;
}
return true;
}
module.exports = validateBothFiles;