{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-core/src/client/reactive/active-expression-convention/active-expression-frame-based.js"],"names":["BaseActiveExpression","check","setExpressionOptionsForConventionStrategies","PausableLoop","__unload__","aexpr","FrameBasedActiveExpression","constructor","func","args","meta","strategy","enabled","new","target","addToRegistry","onChange","result","_isDisposed","FRAME_BASED_AEXPRS","add","checkLoop","ensureRunning","offChange","hasCallbacks","revoke","dispose","delete","size","pause","setExpression","params","Set"],"mappings":";;;;;;AAASA,0B,qBAAAA,oB;;AACAC,W,8BAAAA,K;AAAOC,iD,8BAAAA,2C;;AACPC,kB,UAAAA,Y;;;;;;;;;;;gCAmEOC,2C;;;;;;;;;;;;;;2BATAC,sC;;;;;;;;;;;;;;AA5DPL,+D;;;;;;;;;;;;;AACOE,sF;;;;;;;;;;;;;AAAPD,gD;;;;;;;;;;;;;AACAE,uD;;;;;;;AAEF,YAAMG,0BAAN,SAAyCN,oBAAzC,CAA8D;AACnEO,oBAAYC,IAAZ,EAAkB,GAAGC,IAArB,EAA2B;AACzB,gBAAMD,IAAN,EAAY,GAAGC,IAAf;AACA,eAAKC,IAAL,CAAU,EAAEC,UAAU,aAAZ,EAAV;;AAEA;AACA,eAAKC,OAAL,GAAe,IAAf;;AAEA,cAAGC,IAAIC,MAAJ,KAAeR,0BAAlB,EAA8C;AAC5C,iBAAKS,aAAL;AACD;AACF;;AAEDC,iBAAS,GAAGP,IAAZ,EAAkB;AAChB,gBAAMQ,SAAS,MAAMD,QAAN,CAAe,GAAGP,IAAlB,CAAf;;AAEA,cAAG,CAAC,KAAKS,WAAT,EAAsB;AACpBC,+BAAmBC,GAAnB,CAAuB,IAAvB;AACAC,sBAAUC,aAAV;AACD;;AAED,iBAAOL,MAAP;AACD;;AAEDM,kBAAU,GAAGd,IAAb,EAAmB;AACjB,gBAAMQ,SAAS,MAAMM,SAAN,CAAgB,GAAGd,IAAnB,CAAf;;AAEA,cAAG,CAAC,KAAKe,YAAL,EAAJ,EAAyB;AACvB,iBAAKC,MAAL;AACD;;AAED,iBAAOR,MAAP;AACD;;AAEDS,gBAAQ,GAAGjB,IAAX,EAAiB;AACf,gBAAMQ,SAAS,MAAMS,OAAN,CAAc,GAAGjB,IAAjB,CAAf;AACA,eAAKgB,MAAL;;AAEA,iBAAOR,MAAP;AACD;;AAED;AACAQ,iBAAS;AACPN,6BAAmBQ,MAAnB,CAA0B,IAA1B;AACA,cAAGR,mBAAmBS,IAAnB,KAA4B,CAA/B,EAAkC;AAChCP,sBAAUQ,KAAV;AACD;AACF;;AAED;AACAC,sBAAc,GAAGC,MAAjB,EAAyB;AACvB,iBAAO,MAAMD,aAAN,CAAoB,GAAG5B,4CAA4C,GAAG6B,MAA/C,CAAvB,CAAP;AACD;;AApDkE;;;;;;;;;;gDAAxDzB,2D;;;;;;;;AAwDN,eAASD,KAAT,CAAeG,IAAf,EAAqB,GAAGC,IAAxB,EAA8B;AACnC,eAAO,IAAIH,0BAAJ,CAA+BE,IAA/B,EAAqC,GAAGC,IAAxC,CAAP;AACD;;;;AAED,YAAMU,qBAAqB,IAAIa,GAAJ,EAA3B;;AAEA;;;;;;;AAFMb,6D;;;;;;;AAGN,YAAME,YAAY,IAAIlB,YAAJ,CAAiB,MAAMF,MAAMkB,kBAAN,CAAvB,CAAlB;;;;;;;;AAAME,oD;;;;;;;AAEC,eAASjB,UAAT,GAAsB;AAC3BiB,kBAAUQ,KAAV;AACD","file":"active-expression-frame-based.js","sourcesContent":["import { BaseActiveExpression } from 'active-expression';\nimport { check, setExpressionOptionsForConventionStrategies } from \"./active-expression-ticking.js\";\nimport { PausableLoop } from 'utils';\n\nexport class FrameBasedActiveExpression extends BaseActiveExpression {\n  constructor(func, ...args) {\n    super(func, ...args);\n    this.meta({ strategy: 'Frame-based' });\n\n    // needed for check function for aexpr-ticking\n    this.enabled = true;\n\n    if(new.target === FrameBasedActiveExpression) {\n      this.addToRegistry();\n    }\n  }\n\n  onChange(...args) {\n    const result = super.onChange(...args);\n\n    if(!this._isDisposed) {\n      FRAME_BASED_AEXPRS.add(this);\n      checkLoop.ensureRunning();\n    }\n    \n    return result;\n  }\n\n  offChange(...args) {\n    const result = super.offChange(...args);\n\n    if(!this.hasCallbacks()) {\n      this.revoke();\n    }\n    \n    return result;\n  }\n\n  dispose(...args) {\n    const result = super.dispose(...args);\n    this.revoke();\n    \n    return result;\n  }\n\n  // #TODO: unused!\n  revoke() {\n    FRAME_BASED_AEXPRS.delete(this);\n    if(FRAME_BASED_AEXPRS.size === 0) {\n      checkLoop.pause();\n    }\n  }\n\n  /** the parameter `checkImmediately` is by default false for convention strategies */\n  setExpression(...params) {\n    return super.setExpression(...setExpressionOptionsForConventionStrategies(...params))\n  }\n\n}\n\nexport function aexpr(func, ...args) {\n  return new FrameBasedActiveExpression(func, ...args);\n}\n\nconst FRAME_BASED_AEXPRS = new Set();\n\n// update Active Expressions once per frame\nconst checkLoop = new PausableLoop(() => check(FRAME_BASED_AEXPRS));\n\nexport function __unload__() {\n  checkLoop.pause();\n}\n"]}