@gmetrixr/rjson
Version:
(R)ecursive Json
100 lines (99 loc) • 4.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isRuleValid = void 0;
const __1 = require("../..");
const R_1 = require("../../R");
const RuleAction_1 = require("./RuleAction");
const RuleEvent_1 = require("./RuleEvent");
function isRuleValid(rule) {
const ruleF = __1.r.record(rule);
const whenEvents = ruleF.getRecords(R_1.RT.when_event);
const thenActions = ruleF.getRecords(R_1.RT.then_action);
// wI and tI should never be true
const wI = whenEvents.findIndex((w) => w.props.event === "");
const tI = thenActions.findIndex((t) => t.props.action === "");
if (wI !== -1 || tI !== -1)
return false;
if (whenEvents.length === 0 || thenActions.length === 0) {
return false;
}
for (const w of whenEvents) {
switch (w.props.event) {
case RuleEvent_1.RuleEvent.on_hover:
case RuleEvent_1.RuleEvent.on_duration_match:
case RuleEvent_1.RuleEvent.on_timermatch:
case RuleEvent_1.RuleEvent.on_set_eq:
case RuleEvent_1.RuleEvent.on_set_gt:
case RuleEvent_1.RuleEvent.on_set_gte:
case RuleEvent_1.RuleEvent.on_set_lt:
case RuleEvent_1.RuleEvent.on_match:
case RuleEvent_1.RuleEvent.on_set_lte:
case RuleEvent_1.RuleEvent.on_is_in_list:
case RuleEvent_1.RuleEvent.on_is_not_in_list: {
const properties = w.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined) {
return false;
}
break;
}
case RuleEvent_1.RuleEvent.on_set_between: {
const properties = w.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined || (properties === null || properties === void 0 ? void 0 : properties[1]) === undefined) {
return false;
}
break;
}
}
}
for (const ta of thenActions) {
switch (ta.props.action) {
case RuleAction_1.RuleAction.set_to_string:
case RuleAction_1.RuleAction.set_to_number:
case RuleAction_1.RuleAction.set_to_formula:
case RuleAction_1.RuleAction.load_project:
case RuleAction_1.RuleAction.call_api:
case RuleAction_1.RuleAction.copy_to_clipboard:
case RuleAction_1.RuleAction.play_seek:
case RuleAction_1.RuleAction.talk:
case RuleAction_1.RuleAction.change_scene: {
const properties = ta.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined) {
return false;
}
break;
}
case RuleAction_1.RuleAction.award_score:
case RuleAction_1.RuleAction.set_scorm_score:
case RuleAction_1.RuleAction.set_scorm_score_max:
case RuleAction_1.RuleAction.set_scorm_score_min:
case RuleAction_1.RuleAction.volume:
case RuleAction_1.RuleAction.timer_seek:
case RuleAction_1.RuleAction.point_to: {
const properties = ta.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined) {
return false;
}
break;
}
case RuleAction_1.RuleAction.gltf_preset_start_all:
case RuleAction_1.RuleAction.add_number: {
const properties = ta.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined) {
return false;
}
break;
}
case RuleAction_1.RuleAction.gltf_preset_start:
case RuleAction_1.RuleAction.gltf_preset_stop:
case RuleAction_1.RuleAction.open_url: {
const properties = ta.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined || (properties === null || properties === void 0 ? void 0 : properties[1]) === undefined) {
return false;
}
break;
}
}
}
return true;
}
exports.isRuleValid = isRuleValid;