@coorpacademy/progression-engine
Version:
13 lines (11 loc) • 3.75 kB
Flow
// @flow
import checkCondition from "./condition-operators";
import type {ChapterRule} from "./types";
import type {Content, State} from "../types";
import sortBy from "lodash/fp/sortBy";
import filter from "lodash/fp/filter";
import isEqual from "lodash/fp/isEqual";
import head from "lodash/fp/head";
import get from "lodash/fp/get";
declare export var DEFAULT_SOURCE: {ref: string, type: string};
declare export default function(rules: Array<{conditions: Array<{operator: $Keys<{BETWEEN: <T>(expectedValues: Array<T>, value: T) => boolean, EQUALS: <T>(expectedValues: Array<T>, value: T) => boolean, GT: <T>(expectedValues: Array<T>, value: T) => boolean, GTE: <T>(expectedValues: Array<T>, value: T) => boolean, IN: <T>(expectedValues: Array<T>, value: T) => boolean, LT: <T>(expectedValues: Array<T>, value: T) => boolean, LTE: <T>(expectedValues: Array<T>, value: T) => boolean, NOT_BETWEEN: <T>(expectedValues: Array<T>, value: T) => boolean, NOT_EQUALS: <T>(expectedValues: Array<T>, value: T) => boolean, NOT_IN: <T>(expectedValues: Array<T>, value: T) => boolean}>, target: {field: "lives" | "stars" | string, scope: "variable"} | {field: "isCorrect" | "answer", ref: string, scope: "slide"}, values: Array<number | boolean | string | Array<string>>}>, destination: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}, instructions: Array<{field: string, type: "add" | "set", value: number | boolean | string}>, priority: number, ref?: string, source: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}}>, state: {content?: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}, nextContent: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}} & {allAnswers: Array<{answer: Array<string>, isCorrect: ?boolean, slideRef: string}>, content?: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}, hasViewedAResourceAtThisStep: boolean, isCorrect: ?boolean, lives: number, livesDisabled?: boolean, nextContent?: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}, remainingLifeRequests: number, requestedClues: Array<string>, slides: Array<string>, stars: number, step: {current: number}, variables: {[_: string]: string | boolean | number}, viewedResources: Array<{ref: string, resources: Array<string>, type: mixed /* UNEXPECTED TYPE: EvalT */}>} | null): {conditions: Array<{operator: $Keys<{BETWEEN: <T>(expectedValues: Array<T>, value: T) => boolean, EQUALS: <T>(expectedValues: Array<T>, value: T) => boolean, GT: <T>(expectedValues: Array<T>, value: T) => boolean, GTE: <T>(expectedValues: Array<T>, value: T) => boolean, IN: <T>(expectedValues: Array<T>, value: T) => boolean, LT: <T>(expectedValues: Array<T>, value: T) => boolean, LTE: <T>(expectedValues: Array<T>, value: T) => boolean, NOT_BETWEEN: <T>(expectedValues: Array<T>, value: T) => boolean, NOT_EQUALS: <T>(expectedValues: Array<T>, value: T) => boolean, NOT_IN: <T>(expectedValues: Array<T>, value: T) => boolean}>, target: {field: "lives" | "stars" | string, scope: "variable"} | {field: "isCorrect" | "answer", ref: string, scope: "slide"}, values: Array<number | boolean | string | Array<string>>}>, destination: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}, instructions: Array<{field: string, type: "add" | "set", value: number | boolean | string}>, priority: number, ref?: string, source: {ref: string, type: string, version?: string} | {ref: string, type: "video" | "pdf", version?: string}} | null;