UNPKG

@o3r/rules-engine

Version:

This module provides a rule engine that can be executed on your Otter application to customize your application (translations, placeholders and configs) based on a json file generated by your CMS.

416 lines (415 loc) • 11.4 kB
{ "$schema": "http://json-schema.org/draft-07/schema", "$id": "RulesEngineRulesets", "type": "object", "properties": { "rulesets": { "type": "array", "items": { "$ref": "#/definitions/RulesEngineRuleset" } } }, "additionalItems": true, "definitions": { "RulesEngineRuleset": { "type": "object", "description": "Interface of a ruleset as it's specified in the json file", "properties": { "id": { "type": "string", "description": "Unique id associated to a ruleset" }, "name": { "type": "string", "description": "Name of the ruleset" }, "description": { "type": "string", "description": "Optional ruleset description" }, "rules": { "type": "array", "description": "List of rules associated to the ruleset", "items": { "$ref": "#/definitions/RulesEngineRule" } }, "validityRange": { "type": "object", "description": "Optional date range where the ruleset will be executed", "properties": { "from": { "type": "string", "description": "Start date of the validity range" }, "to": { "type": "string", "description": "End date of the validity range" } }, "additionalItems": false }, "linkedComponents": { "type": "object", "description": "Components linked to the ruleset. If defined, the rulest is not active by default", "properties": { "or": { "type": "array", "description": "List of components which will activate the ruleset. If at least one component from the list has subscribed, the ruleset will be active", "items": { "$ref": "#/definitions/LinkedComponent" } } }, "additionalItems": true } }, "additionalItems": false, "required": [ "id", "name", "rules" ] }, "RulesEngineRule": { "type": "object", "description": "Base for the Rule definition", "properties": { "id": { "type": "string", "description": "Unique id associated to a rule" }, "inputRuntimeFacts": { "type": "array", "description": "Runtime facts that are needed for the rule execution (sent by the CMS)", "items": { "type": "string" } }, "outputRuntimeFacts": { "type": "array", "description": "Runtime facts that are created/updated by the rule", "items": { "type": "string" } }, "name": { "type": "string", "description": "Name of the rule" }, "rootElement": { "$ref": "#/definitions/RulesEngineAllBlock", "description": "rootElement of the rule, that contains either a block, either an action list" } }, "required": [ "id", "name", "inputRuntimeFacts", "outputRuntimeFacts", "rootElement" ] }, "RulesEngineAllBlock": { "oneOf": [ { "$ref": "#/definitions/RulesEngineActionBlock" }, { "$ref": "#/definitions/RulesEngineIfElseBlock" } ] }, "RulesEngineActionBlock": { "allOf": [ { "type": "object", "properties": { "elementType": { "type": "string", "description": "Type of the block, must be 'ACTION'", "const": "ACTION" } }, "additionalItems": false, "required": [ "elementType" ] }, { "oneOf": [ { "$ref": "#/definitions/RulesActionSetTemporaryFactBlock" }, { "$ref": "https://raw.githubusercontent.com/AmadeusITGroup/otter/main/packages/%40o3r/configuration/schemas/rules-engine.config-action.schema.json" }, { "$ref": "https://raw.githubusercontent.com/AmadeusITGroup/otter/main/packages/%40o3r/dynamic-content/schemas/rules-engine.asset-action.schema.json" }, { "$ref": "https://raw.githubusercontent.com/AmadeusITGroup/otter/main/packages/%40o3r/localization/schemas/rules-engine.localisation-action.schema.json" }, { "$ref": "https://raw.githubusercontent.com/AmadeusITGroup/otter/main/packages/%40o3r/components/schemas/rules-engine.placeholder-action.schema.json" }, { "$ref": "#/definitions/RulesEngineCustomActionBlock" } ] } ] }, "RulesEngineCustomActionBlock": { "type": "object", "description": "Content of a custom action", "properties": { "actionType": { "type": "string", "description": "Action Type", "pattern": "^(?!(?:SET_FACT|UPDATE_PLACEHOLDER|UPDATE_CONFIG|UPDATE_ASSET|UPDATE_LOCALISATION)$).*$" }, "value": {} }, "additionalItems": true, "required": [ "actionType", "value" ] }, "RulesActionSetTemporaryFactBlock": { "type": "object", "description": "Content of action that updates the runtime facts", "properties": { "actionType": { "type": "string", "description": "Action Type", "const": "SET_FACT" }, "fact": { "type": "string", "description": "Fact to update" }, "value": {} }, "additionalItems": false, "required": [ "actionType", "fact", "value" ] }, "RulesEngineIfElseBlock": { "type": "object", "description": "Block representing an 'if else' condition. If no condition specified it will execute success elements onlyk", "properties": { "elementType": { "type": "string", "description": "Type of the element, must be 'RULE_BLOCK'", "const": "RULE_BLOCK" }, "blockType": { "type": "string", "description": "Type of the block, must be 'IF_ELSE'", "const": "IF_ELSE" }, "condition": { "$ref": "#/definitions/RulesEngineCondition", "description": "Condition to be evaluated by the rule engine" }, "successElements": { "type": "array", "items": { "$ref": "#/definitions/RulesEngineAllBlock" }, "description": "Block to be executed if the condition is true" }, "failureElements": { "type": "array", "items": { "$ref": "#/definitions/RulesEngineAllBlock" }, "description": "Block to be executed if the condition is false" } }, "additionalItems": false, "required": [ "elementType", "blockType", "successElements", "failureElements" ] }, "RulesEngineCondition": { "anyOf": [ { "type": "object", "description": "All Condition", "properties": { "all": { "type": "array", "items": { "$ref": "#/definitions/RulesEngineNestedCondition" } } }, "additionalItems": false, "required": [ "all" ] }, { "type": "object", "description": "Any Condition", "properties": { "any": { "type": "array", "items": { "$ref": "#/definitions/RulesEngineNestedCondition" } } }, "additionalItems": false, "required": [ "any" ] }, { "type": "object", "description": "Not Condition", "properties": { "not": { "$ref": "#/definitions/RulesEngineNestedCondition" } }, "additionalItems": false, "required": [ "not" ] } ] }, "RulesEngineNestedCondition": { "anyOf": [ { "$ref": "#/definitions/RulesEngineCondition" }, { "$ref": "#/definitions/RulesEngineOperation" } ] }, "RulesEngineOperation": { "type": "object", "properties": { "operator": { "type": "string", "description": "Operator" }, "lhs": { "$ref": "#/definitions/RulesEnginOperand" }, "rhs": { "$ref": "#/definitions/RulesEnginOperand" } }, "additionalItems": false, "required": [ "operator", "lhs" ] }, "RulesEnginOperand": { "anyOf": [ { "type": "object", "description": "Fact Operand", "properties": { "type": { "type": "string", "const": "FACT" }, "value": { "type": "string" }, "path": { "description": "JSONPath to deep read the fact value", "type": "string" } }, "additionalItems": false, "required": [ "type", "value" ] }, { "type": "object", "description": "Runtime Fact Operand", "properties": { "type": { "type": "string", "const": "RUNTIME_FACT" }, "value": { "type": "string" } }, "additionalItems": false, "required": [ "type", "value" ] }, { "type": "object", "description": "Literal Operand", "properties": { "type": { "type": "string", "const": "LITERAL" }, "value": { "anyOf": [ { "type": ["string", "number", "boolean"] }, { "type": "array", "items": { "type": ["string", "number", "boolean"] } } ] } }, "additionalItems": false, "required": [ "type", "value" ] } ] }, "LinkedComponent": { "type": "object", "description": "Component linked to the ruleset, if set it will disable the ruleset execution per default, waiting to a subscription", "properties": { "library": { "type": "string", "description": "Name of the component library" }, "name": { "type": "string", "description": "Name of the component" } }, "additionalItems": false, "required": [ "library", "name" ] } } }