{"version":3,"sources":["../ts/modules/time.ts"],"names":["now","performance","Date","Time","wait","milliseconds","Promise","resolve","setTimeout","waitForImpl","fn1","fn2","pollMilliseconds","timeoutMilliseconds","stop","reject","then","poll","result","StopWatch","start","retval","this","_startTime","_elapsed","undefined","pause","_pause","unpause","elapsed","waitFor","fn","waitForElement","selector","ancestor","document","querySelector","b","every","args","apply"],"mappings":"oEAGA,MAAMA,IAA+B,aAAvB,OAAOC,YAAgC,IAAMC,KAAKF,IAAG,EAAK,IAAMC,YAAYD,IAAG,EAE7F,IAAOG,KA4FP,OA5FA,SAAOA,MAuCN,SAAgBC,KAAMC,cACrB,OAAO,IAAIC,QAAeC,UACzBC,WAAY,IAAMD,QAAO,EAAIF,YAAY,CAC1C,CAAC,CACF,CAEA,SAASI,YAAgBC,IAAcC,IAA0BC,iBAAmB,GAAIC,qBACvF,IAAIC,KAAO,CAAA,EAEX,OAAO,IAAIR,QAAY,CAAEC,QAASQ,UACE,UAA/B,OAAOF,qBACVT,KAAMS,mBAAmB,EAAGG,KAAM,KACjCF,KAAO,CAAA,EACPC,OAAQ,IAAI,CACb,CAAC,EAcFX,KAAM,CAAC,EAAGY,KAXV,SAASC,OACR,IAEMC,OAFFJ,OAEEI,OAASR,IAAG,EACdC,IAAKO,MAAM,EACdX,QAASW,MAAM,EAGhBd,KAAMQ,gBAAgB,EAAGI,KAAMC,IAAI,EACpC,CAEoB,CACrB,CAAC,CACF,CApEad,KAAAgB,gBAAAA,UACLC,eACN,IAAMC,OAAS,IAAIF,UAEnB,OADAE,OAAOD,MAAK,EACLC,MACR,CAEOD,QACN,IAAMC,OAASC,KAAKR,KAAI,EAGxB,OAFAQ,KAAKC,WAAavB,IAAG,EACrBsB,KAAKE,SAAWC,KAAAA,EACTJ,MACR,CAEOK,QACNJ,KAAKK,OAAS3B,IAAG,CAClB,CAEO4B,UACFN,KAAKK,SACRL,KAAKC,YAAgBvB,IAAG,EAAKsB,KAAKK,OAClCL,KAAKK,OAASF,KAAAA,EAEhB,CAEAI,cACC,OAAOP,KAAKE,WAAgBF,KAAKK,QAAU3B,IAAG,GAAOsB,KAAKC,UAC3D,CAEOT,OACN,OAAOQ,KAAKE,SAAWF,KAAKO,OAC7B,C,EAOe1B,KAAAC,KAAIA,KAgCJD,KAAA2B,QAAhB,SAAyBC,GAAmBnB,iBAA2BC,qBACtE,OAAOJ,YAAmB,OAAUsB,GAAInB,iBAAkBC,mBAAmB,CAC9E,EAEgBV,KAAA6B,eAAhB,SAAgCC,SAAkBC,SAAgBtB,iBAA2BC,qBAO5F,MANwB,UAApB,OAAOqB,WACVrB,oBAAsBD,iBACtBA,iBAAwBsB,SACxBA,SAAW,MAEPA,SAAAA,UAAsBC,SACpB1B,YAAa,IAAMyB,SAASE,cAAeH,QAAQ,EAAII,GAAK,CAAC,CAACA,EAAGzB,iBAAkBC,mBAAmB,CAC9G,EAEgBV,KAAAmC,MAAhB,SAAgBA,MAAOjC,aAAsB0B,MAAsBQ,MAClEnC,KAAMC,YAAY,EAAGW,KAAM,KACK,CAAA,IAA3Be,GAAGS,MAAO,KAAMD,IAAI,GAAcD,MAAOjC,aAAc0B,GAAI,GAAGQ,IAAI,CACvE,CAAC,CACF,CACA,EA1FMpC,KAAAA,MAAI,EAAA,EA4FFA","file":"time.js","sourcesContent":["/// \r\n\r\n\r\nconst now = ( typeof performance === 'undefined' ) ? () => Date.now() : () => performance.now();\r\n\r\nmodule Time {\r\n\texport class StopWatch {\r\n\t\tpublic static start() {\r\n\t\t\tconst retval = new StopWatch;\r\n\t\t\tretval.start();\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tpublic start() {\r\n\t\t\tconst retval = this.stop();\r\n\t\t\tthis._startTime = now();\r\n\t\t\tthis._elapsed = undefined;\r\n\t\t\treturn retval;\r\n\t\t}\r\n\r\n\t\tpublic pause() {\r\n\t\t\tthis._pause = now();\r\n\t\t}\r\n\r\n\t\tpublic unpause() {\r\n\t\t\tif( this._pause ) {\r\n\t\t\t\tthis._startTime += ( now() - this._pause );\r\n\t\t\t\tthis._pause = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic get elapsed() {\r\n\t\t\treturn this._elapsed || ( ( this._pause || now() ) - this._startTime );\r\n\t\t}\r\n\r\n\t\tpublic stop() {\r\n\t\t\treturn this._elapsed = this.elapsed;\r\n\t\t}\r\n\r\n\t\tprivate _pause: number;\r\n\t\tprivate _startTime: number;\r\n\t\tprivate _elapsed: number;\r\n\t}\r\n\r\n\texport function wait( milliseconds: number ) {\r\n\t\treturn new Promise( resolve => {\r\n\t\t\tsetTimeout( () => resolve(), milliseconds );\r\n\t\t} );\r\n\t}\r\n\r\n\tfunction waitForImpl( fn1: () => T, fn2: ( b: T ) => boolean, pollMilliseconds = 50, timeoutMilliseconds?: number ) {\r\n\t\tvar stop = false;\r\n\r\n\t\treturn new Promise( ( resolve, reject ) => {\r\n\t\t\tif( typeof timeoutMilliseconds === 'number' ) {\r\n\t\t\t\twait( timeoutMilliseconds ).then( () => {\r\n\t\t\t\t\tstop = true;\r\n\t\t\t\t\treject( null );\r\n\t\t\t\t} );\r\n\t\t\t}\r\n\r\n\t\t\tfunction poll() {\r\n\t\t\t\tif( stop ) return;\r\n\r\n\t\t\t\tconst result = fn1();\r\n\t\t\t\tif( fn2( result ) ) {\r\n\t\t\t\t\tresolve( result );\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\twait( pollMilliseconds ).then( poll );\r\n\t\t\t}\r\n\r\n\t\t\twait( 0 ).then( poll );\r\n\t\t} );\r\n\t}\r\n\r\n\texport function waitFor( fn: () => boolean, pollMilliseconds?: number, timeoutMilliseconds?: number ) {\r\n\t\treturn waitForImpl( () => {}, fn, pollMilliseconds, timeoutMilliseconds );\r\n\t}\r\n\r\n\texport function waitForElement( selector: string, ancestor?: any, pollMilliseconds?: number, timeoutMilliseconds?: number ) {\r\n\t\tif( typeof ancestor === 'number' ) {\r\n\t\t\ttimeoutMilliseconds = pollMilliseconds;\r\n\t\t\tpollMilliseconds = ancestor;\r\n\t\t\tancestor = null;\r\n\t\t}\r\n\t\tif( !ancestor ) ancestor = document;\r\n\t\treturn waitForImpl( () => ancestor.querySelector( selector ), b => !!b, pollMilliseconds, timeoutMilliseconds );\r\n\t}\r\n\r\n\texport function every( milliseconds: number, fn: () => boolean, ...args ) {\r\n\t\twait( milliseconds ).then( () => {\r\n\t\t\tif( fn.apply( null, args ) !== true ) every( milliseconds, fn, ...args );\r\n\t\t} );\r\n\t}\r\n}\r\n\r\nexport = Time;"]}