{"version":3,"sources":["webpack://casperEventHub/./src/journey.ts"],"names":["Journey","getState","isValid","this","validate","pages","comparePage","isPredicate","expectedPage","visitedPage","identifier","addExpectedJourney","visIdx","visited","expected","expIdx","addExpectedTime","expectedTime","seconds","callback","time","SessionTime","toValidatePages","page","off","Rule"],"mappings":"uhBAOqBA,E,4SAEZC,SAAP,WACE,MAAO,CACLC,QAASC,KAAKC,SADT,KAELC,Y,EAGIC,YAAR,cAIE,OAAIC,YAAJ,GAEIC,EAAa,CAACC,EAAdD,YAAwCA,EAAa,CAACC,EADxD,MAIO,CAACA,EAAD,SAAuBA,EAAvB,WACL,mBACEC,wBAAiCF,EAAjCE,gBADF,M,EAKCC,mBAAP,YAA2D,WACzD,oCAAoB,CACjB,YACC,IACE,IAAIC,EADN,EAEEA,EAASC,SAAiBC,EAAjBD,OAFX,EAGED,IAEA,IAAK,IAAIG,EAAT,EAAqBA,EAASD,EAA9B,QACO,cAAiBD,EAAQD,EAAzB,GAA2CE,EAAhD,IAD6CC,IAGtC,GAAIA,IAAWD,SAAf,EACL,SAIN,a,EAICE,gBAAP,cAIE,IAAMC,EAAN,IAAqBC,EACrBf,KAAA,qBAA4B,CAC1BgB,SAD0B,EAE1BC,KAAMH,GAERI,0CAAkDlB,KAAlDkB,sBACA,oCAAoB,CACjB,YACC,OACEJ,GACAK,EAAA,QAAuB,qBAAiBF,EAAQG,EAAzB,OAAvB,GACEF,kBAHJ,uB,EAQCG,IAAP,WACMrB,KAAJ,sBACEkB,6CACElB,KADFkB,uB,GAjE+BI","file":"Journey.js","sourcesContent":["import Rule, { IRule } from './rule'\nimport { pages } from './store'\nimport { ITargetingRulesEvaluationResult } from './experience'\nimport { Predicate, IUnknownObject } from './types'\nimport { isPredicate } from './predicates'\nimport SessionTime, { ITimeEllapsedCallback } from './session-time'\n\nexport default class Journey extends Rule implements IRule {\n  private timeEllapsedCallback?: ITimeEllapsedCallback\n  public getState(): JourneyState {\n    return {\n      isValid: this.validate(pages),\n      pages,\n    }\n  }\n  private comparePage(\n    visitedPage: IJourneyPage,\n    expectedPage: PageCondition\n  ): boolean {\n    if (isPredicate(expectedPage)) {\n      return (\n        expectedPage([visitedPage.pageName]) || expectedPage([visitedPage.url])\n      )\n    } else {\n      return [visitedPage.pageName, visitedPage.url].some(\n        (identifier) =>\n          identifier.toLowerCase().indexOf(expectedPage.toLowerCase()) > -1\n      )\n    }\n  }\n  public addExpectedJourney(expected: PageCondition[]): void {\n    super.addPredicates([\n      ((visited: IJourneyPage[]) => {\n        for (\n          let visIdx = 0;\n          visIdx < visited.length - expected.length + 1;\n          visIdx++\n        ) {\n          for (let expIdx = 0; expIdx < expected.length; expIdx++) {\n            if (!this.comparePage(visited[visIdx + expIdx], expected[expIdx])) {\n              break\n            } else if (expIdx === expected.length - 1) {\n              return true\n            }\n          }\n        }\n        return false\n      }) as Predicate,\n    ])\n  }\n  public addExpectedTime(\n    seconds: number,\n    callback: () => Promise<ITargetingRulesEvaluationResult>\n  ): void {\n    const expectedTime = seconds * 1000\n    this.timeEllapsedCallback = {\n      callback,\n      time: expectedTime,\n    }\n    SessionTime.getInstance().addTimeEllapsedCallback(this.timeEllapsedCallback)\n    super.addPredicates([\n      ((toValidatePages: IJourneyPage[]) => {\n        return (\n          expectedTime <=\n          toValidatePages.reduce((time, page) => (time += page.time), 0) +\n            SessionTime.getInstance().timeInMilliseconds\n        )\n      }) as Predicate,\n    ])\n  }\n  public off(): void {\n    if (this.timeEllapsedCallback) {\n      SessionTime.getInstance().removeTimeEllapsedCallback(\n        this.timeEllapsedCallback\n      )\n    }\n  }\n}\n\nexport type PageCondition = string | Predicate\n\nexport interface IJourneyPage extends IUnknownObject {\n  url: string\n  time: number\n  pageName: string\n}\n\ninterface JourneyState {\n  isValid: boolean\n  pages: IJourneyPage[]\n}\n"],"sourceRoot":""}