@gmetrixr/rjson
Version:
(R)ecursive Json
96 lines (95 loc) • 3.92 kB
JavaScript
import { r } from "../..";
import { RT } from "../../R";
import { RuleAction } from "./RuleAction";
import { RuleEvent } from "./RuleEvent";
export function isRuleValid(rule) {
const ruleF = r.record(rule);
const whenEvents = ruleF.getRecords(RT.when_event);
const thenActions = ruleF.getRecords(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.on_hover:
case RuleEvent.on_duration_match:
case RuleEvent.on_timermatch:
case RuleEvent.on_set_eq:
case RuleEvent.on_set_gt:
case RuleEvent.on_set_gte:
case RuleEvent.on_set_lt:
case RuleEvent.on_match:
case RuleEvent.on_set_lte:
case RuleEvent.on_is_in_list:
case 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.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.set_to_string:
case RuleAction.set_to_number:
case RuleAction.set_to_formula:
case RuleAction.load_project:
case RuleAction.call_api:
case RuleAction.copy_to_clipboard:
case RuleAction.play_seek:
case RuleAction.talk:
case RuleAction.change_scene: {
const properties = ta.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined) {
return false;
}
break;
}
case RuleAction.award_score:
case RuleAction.set_scorm_score:
case RuleAction.set_scorm_score_max:
case RuleAction.set_scorm_score_min:
case RuleAction.volume:
case RuleAction.timer_seek:
case RuleAction.point_to: {
const properties = ta.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined) {
return false;
}
break;
}
case RuleAction.gltf_preset_start_all:
case RuleAction.add_number: {
const properties = ta.props.properties;
if ((properties === null || properties === void 0 ? void 0 : properties[0]) === undefined) {
return false;
}
break;
}
case RuleAction.gltf_preset_start:
case RuleAction.gltf_preset_stop:
case 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;
}