UNPKG

@gmetrixr/rjson

Version:
96 lines (95 loc) 3.92 kB
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; }