@bluelibs/runner 4.5.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +29 -29
- package/dist/index.d.ts +29 -29
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defs.ts","../src/types/symbols.ts","../src/types/event.ts","../src/globals/middleware/cache.middleware.ts","../src/tools/getCallerFile.ts","../src/definers/defineTask.ts","../src/definers/defineHook.ts","../src/errors.ts","../src/definers/defineResource.ts","../src/definers/defineEvent.ts","../src/definers/defineTaskMiddleware.ts","../src/definers/defineResourceMiddleware.ts","../src/definers/defineOverride.ts","../src/definers/defineTag.ts","../src/definers/tools.ts","../src/platform/index.ts","../src/globals/middleware/requireContext.middleware.ts","../src/context.ts","../src/globals/resources/debug/debug.tag.ts","../src/globals/globalTags.ts","../src/globals/globalEvents.ts","../src/models/Queue.ts","../src/globals/resources/queue.resource.ts","../src/globals/globalResources.ts","../src/globals/middleware/retry.middleware.ts","../src/globals/middleware/timeout.middleware.ts","../src/globals/globalMiddleware.ts","../src/models/TaskRunner.ts","../src/models/MiddlewareManager.ts","../src/models/ResourceInitializer.ts","../src/models/utils/safeStringify.ts","../src/models/LogPrinter.ts","../src/models/Logger.ts","../src/models/DependencyProcessor.ts","../src/models/EventManager.ts","../src/models/utils/findCircularDependencies.ts","../src/models/StoreValidator.ts","../src/models/StoreRegistry.ts","../src/models/OverrideManager.ts","../src/models/Store.ts","../src/globals/resources/debug/types.ts","../src/globals/resources/debug/debugConfig.resource.ts","../src/globals/resources/debug/utils.ts","../src/globals/resources/debug/globalEvent.hook.ts","../src/globals/resources/debug/executionTracker.middleware.ts","../src/globals/resources/debug/middleware.hook.ts","../src/globals/resources/debug/hook.hook.ts","../src/globals/resources/debug/debug.resource.ts","../src/processHooks.ts","../src/models/UnhandledError.ts","../src/models/RunResult.ts","../src/run.ts","../src/testing.ts","../src/models/Semaphore.ts","../src/index.ts"],"names":["LRUCache","cacheFactoryTask","err","stack","id","store","systemTag","i","config","globalMiddlewares","_isLocked","debugConfig","event","platform"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,IAAA,YAAA,GAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,cAAA,EAAA,MAAA,cAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,SAAA,EAAA,MAAA,SAAA;AAAA,EAAA,mBAAA,EAAA,MAAA,mBAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,oBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACMO,IAAM,UAAA,GAA4B,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA;AAC1D,IAAM,cAAA,GAAgC,MAAA,CAAO,GAAA,CAAI,iBAAiB,CAAA;AAClE,IAAM,2BAA0C,MAAA,CAAO,GAAA;AAAA,EAC5D;AACF,CAAA;AACO,IAAM,WAAA,GAA6B,MAAA,CAAO,GAAA,CAAI,cAAc,CAAA;AAC5D,IAAM,gBAAA,GAAkC,MAAA,CAAO,GAAA,CAAI,mBAAmB,CAAA;AAEtE,IAAM,uBAAsC,MAAA,CAAO,GAAA;AAAA,EACxD;AACF,CAAA;AACO,IAAM,2BAA0C,MAAA,CAAO,GAAA;AAAA,EAC5D;AACF,CAAA;AACO,IAAM,6BAA4C,MAAA,CAAO,GAAA;AAAA,EAC9D;AACF,CAAA;AAEO,IAAM,UAAA,GAA4B,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA;AAQ1D,IAAM,SAAA,GAA2B,MAAA,CAAO,GAAA,CAAI,YAAY,CAAA;AACxD,IAAM,sBAAqC,MAAA,CAAO,GAAA;AAAA,EACvD;AACF,CAAA;AAGO,IAAM,2BAA0C,MAAA,CAAO,GAAA;AAAA,EAC5D;AACF,CAAA;AAGO,IAAM,cAAA,GAAgC,MAAA,CAAO,GAAA,CAAI,iBAAiB,CAAA;AAElE,IAAM,aAAA,GAA+B,MAAA,CAAO,GAAA,CAAI,gBAAgB,CAAA;AAEhE,IAAM,WAAA,GAA6B,MAAA,CAAO,GAAA,CAAI,cAAc,CAAA;AAG5D,IAAM,sBAAqC,MAAA,CAAO,GAAA;AAAA,EACvD;AACF,CAAA;;;AC1CO,SAAS,WACX,IAAA,EACA;AACH,EAAA,OAAO,IAAA;AACT;AAJgB,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA;AAUT,SAAS,OAAA,CACd,UACA,IAAA,EACkD;AAClD,EAAA,OAAO,KAAK,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,SAAS,EAAE,CAAA;AAC9C;AALgB,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA;ACTT,IAAM,mBAAmB,UAAA,CAAW;AAAA,EACzC,EAAA,EAAI,4BAAA;AAAA,EACJ,GAAA,gCAAY,OAAA,KAAiB;AAC3B,IAAA,OAAO,IAAIA,kBAAS,OAAO,CAAA;AAAA,EAC7B,CAAA,EAFK,KAAA;AAGP,CAAC,CAAA;AAUM,IAAM,gBAAgB,cAAA,CAAe;AAAA,EAC1C,EAAA,EAAI,yBAAA;AAAA,EACJ,QAAA,EAAU,CAAC,gBAAgB,CAAA;AAAA,EAC3B,YAAA,EAAc;AAAA,IACZ;AAAA,GACF;AAAA,EACA,sBAAM,MAAA,CAAA,OAAO,MAAA,EAA6B,EAAE,gBAAA,EAAAC,mBAAiB,KAAM;AACjE,IAAA,OAAO;AAAA,MACL,GAAA,sBAAS,GAAA,EAA4B;AAAA,MACrC,gBAAA,EAAAA,iBAAAA;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,KAAK,EAAA,GAAK,GAAA;AAAA,QACV,GAAA,EAAK,GAAA;AAAA;AAAA,QACL,YAAA,EAAc,IAAA;AAAA;AAAA,QACd,GAAG,MAAA,CAAO;AAAA;AACZ,KACF;AAAA,EACF,CAAA,EAXM,MAAA,CAAA;AAAA,EAYN,OAAA,gCAAgB,KAAA,KAAU;AACxB,IAAA,KAAA,MAAW,aAAA,IAAiB,KAAA,CAAM,GAAA,CAAI,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,cAAc,KAAA,EAAM;AAAA,IAC5B;AAAA,EACF,CAAA,EAJS,SAAA;AAKX,CAAC,CAAA;AAED,IAAM,iBAAA,mBAAoB,MAAA,CAAA,CAAC,MAAA,EAAgB,KAAA,KACzC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA,CAAA,EADV,mBAAA,CAAA;AAGnB,IAAM,kBAAkB,oBAAA,CAAqB;AAAA,EAClD,EAAA,EAAI,0BAAA;AAAA,EACJ,YAAA,EAAc,EAAE,KAAA,EAAO,aAAA,EAAc;AAAA,EACrC,MAAM,GAAA,CAAI,EAAE,MAAM,IAAA,EAAK,EAAG,MAAM,MAAA,EAA+B;AAC7D,IAAA,MAAM,EAAE,OAAM,GAAI,IAAA;AAClB,IAAA,MAAA,GAAS;AAAA,MACP,UAAA,EAAY,iBAAA;AAAA,MACZ,KAAK,EAAA,GAAK,GAAA;AAAA,MACV,GAAA,EAAK,GAAA;AAAA;AAAA,MACL,YAAA,EAAc,IAAA;AAAA;AAAA,MACd,GAAG;AAAA,KACL;AAEA,IAAA,MAAM,MAAA,GAAS,KAAM,UAAA,CAAW,EAAA;AAChC,IAAA,IAAI,kBAAA,GAAqB,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,MAAM,CAAA;AAC7C,IAAA,IAAI,CAAC,kBAAA,EAAoB;AAEvB,MAAA,MAAM,EAAE,UAAA,EAAY,GAAG,UAAA,EAAW,GAAI,MAAA;AACtC,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,GAAG,KAAA,CAAM,cAAA;AAAA,QACT,GAAG;AAAA,OACL;AAGA,MAAA,kBAAA,GAAqB,MAAM,KAAA,CAAM,gBAAA,CAAiB,YAAY,CAAA;AAE9D,MAAA,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,MAAA,EAAQ,kBAAkB,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAY,MAAA,EAAQ,KAAM,KAAK,CAAA;AAElD,IAAA,MAAM,WAAA,GAAc,MAAM,kBAAA,CAAmB,GAAA,CAAI,GAAG,CAAA;AAEpD,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAM,KAAK,CAAA;AAErC,IAAA,MAAM,kBAAA,CAAmB,GAAA,CAAI,GAAA,EAAK,MAAM,CAAA;AAExC,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAC,CAAA;;;ACjGM,SAAS,aAAA,GAAwB;AACtC,EAAA,MAAM,eAAe,KAAA,CAAM,iBAAA;AAE3B,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,EAAM;AACtB,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,WAAA;AAGJ,IAAA,KAAA,CAAM,iBAAA,GAAoB,CAACC,IAAAA,EAAKC,MAAAA,KAAUA,MAAAA;AAE1C,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AASlB,IAAA,KAAA,CAAM,KAAA,EAAM;AAGZ,IAAA,WAAA,GAAc,KAAA,CAAM,KAAA,EAAM,EAAG,WAAA,IAAc;AAG3C,IAAA,UAAA,GAAa,KAAA,CAAM,KAAA,EAAM,EAAG,WAAA,IAAc;AAE1C,IAAA,OAAO,UAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,KAAA,CAAM,iBAAA,GAAoB,YAAA;AAAA,EAC5B;AACF;AAhCgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;;;AC2BT,SAAS,WAQd,UAAA,EACuD;AACvD,EAAA,MAAM,WAAW,aAAA,EAAc;AAC/B,EAAA,MAAMC,MAAK,UAAA,CAAW,EAAA;AACtB,EAAA,OAAO;AAAA,IACL,CAAC,UAAU,GAAG,IAAA;AAAA,IACd,CAAC,cAAc,GAAG,QAAA;AAAA,IAClB,EAAA,EAAAA,GAAAA;AAAA,IACA,YAAA,EAAc,UAAA,CAAW,YAAA,IAAiB,EAAC;AAAA,IAC3C,UAAA,EAAY,UAAA,CAAW,UAAA,IAAe,EAAC;AAAA,IACvC,KAAK,UAAA,CAAW,GAAA;AAAA,IAChB,aAAa,UAAA,CAAW,WAAA;AAAA,IACxB,cAAc,UAAA,CAAW,YAAA;AAAA,IACzB,IAAA,EAAM,UAAA,CAAW,IAAA,IAAS,EAAC;AAAA,IAC3B,IAAA,EAAM,UAAA,CAAW,IAAA,IAAS,EAAC;AAAA;AAAA,IAE3B,QAAA,GAAW;AACT,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,CAAC,wBAAwB,GAAG;AAAA,OAC9B;AAAA,IAGF;AAAA,GACF;AACF;AAjCgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACZT,SAAS,WAOd,OAAA,EAA+D;AAC/D,EAAA,MAAM,WAAW,aAAA,EAAc;AAC/B,EAAA,OAAO;AAAA,IACL,CAAC,UAAU,GAAG,IAAA;AAAA,IACd,CAAC,cAAc,GAAG,QAAA;AAAA,IAClB,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAiB,EAAC;AAAA,IACxC,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAS,EAAC;AAAA,IACxB,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ;AAAC,GACzB;AACF;AApBgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACfhB,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,yBAAA,EAAA,MAAA,yBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,0BAAA,EAAA,MAAA,0BAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,uBAAA,EAAA,MAAA,uBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,4BAAA,EAAA,MAAA,4BAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,eAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAGO,IAAM,aAAA,GAAN,MAAM,aAAA,SAAqB,KAAA,CAAM;AAAA,EACtC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EACd;AACF,CAAA;AALwC,MAAA,CAAA,aAAA,EAAA,cAAA,CAAA;AAAjC,IAAM,YAAA,GAAN,aAAA;AAUA,IAAM,2BAAA,GAAN,MAAM,2BAAA,SAAmC,YAAA,CAAa;AAAA,EAC3D,WAAA,CAAY,MAAcA,GAAAA,EAAY;AACpC,IAAA,KAAA;AAAA,MACE,CAAA,EAAG,IAAI,CAAA,EAAA,EAAKA,GAAAA,CAAG,UAAU,CAAA,sIAAA;AAAA,KAC3B;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AAAA,EACd;AACF,CAAA;AAP6D,MAAA,CAAA,2BAAA,EAAA,4BAAA,CAAA;AAAtD,IAAM,0BAAA,GAAN,2BAAA;AAYA,IAAM,wBAAA,GAAN,MAAM,wBAAA,SAAgC,YAAA,CAAa;AAAA,EACxD,YAAY,GAAA,EAAa;AACvB,IAAA,KAAA;AAAA,MACE,CAAA,WAAA,EAAc,GAAA,CAAI,QAAA,EAAU,CAAA,6DAAA;AAAA,KAC9B;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF,CAAA;AAP0D,MAAA,CAAA,wBAAA,EAAA,yBAAA,CAAA;AAAnD,IAAM,uBAAA,GAAN,wBAAA;AAYA,IAAM,qBAAA,GAAN,MAAM,qBAAA,SAA6B,YAAA,CAAa;AAAA,EACrD,YAAY,IAAA,EAAW;AACrB,IAAA,KAAA;AAAA,MACE,sBAAsB,IAAI,CAAA,0EAAA;AAAA,KAC5B;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AACF,CAAA;AAPuD,MAAA,CAAA,qBAAA,EAAA,sBAAA,CAAA;AAAhD,IAAM,oBAAA,GAAN,qBAAA;AAYA,IAAM,aAAA,GAAN,MAAM,aAAA,SAAqB,KAAA,CAAM;AAAA,EACtC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EACd;AACF,CAAA;AALwC,MAAA,CAAA,aAAA,EAAA,cAAA,CAAA;AAAjC,IAAM,YAAA,GAAN,aAAA;AAUA,IAAM,0BAAA,GAAN,MAAM,0BAAA,SAAkC,YAAA,CAAa;AAAA,EAC1D,YAAY,MAAA,EAAkB;AAC5B,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,YAAO,KAAK,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACpE,IAAA,MAAM,aAAA,GAAgB,OAAO,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,QAAA,CAAS,YAAY,CAAC,CAAA;AAEzE,IAAA,IAAI,QAAA,GAAW,uCAAA;AACf,IAAA,QAAA,IACE,uEAAA;AACF,IAAA,QAAA,IAAY,gEAAA;AAEZ,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,QAAA,IACE,oFAAA;AACF,MAAA,QAAA,IACE,mFAAA;AAAA,IACJ;AAEA,IAAA,KAAA,CAAM,CAAA;AAAA,EAAoC,YAAY,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAA;AACnE,IAAA,IAAA,CAAK,IAAA,GAAO,2BAAA;AAAA,EACd;AACF,CAAA;AApB4D,MAAA,CAAA,0BAAA,EAAA,2BAAA,CAAA;AAArD,IAAM,yBAAA,GAAN,0BAAA;AAyBA,IAAM,mBAAA,GAAN,MAAM,mBAAA,SAA2B,YAAA,CAAa;AAAA,EACnD,YAAYA,GAAAA,EAAY;AACtB,IAAA,KAAA,CAAM,CAAA,OAAA,EAAUA,GAAAA,CAAG,QAAA,EAAU,CAAA,2CAAA,CAA6C,CAAA;AAC1E,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF,CAAA;AALqD,MAAA,CAAA,mBAAA,EAAA,oBAAA,CAAA;AAA9C,IAAM,kBAAA,GAAN,mBAAA;AAUA,IAAM,sBAAA,GAAN,MAAM,sBAAA,SAA8B,YAAA,CAAa;AAAA,EACtD,YAAYA,GAAAA,EAAY;AACtB,IAAA,KAAA;AAAA,MACE,CAAA,UAAA,EAAaA,GAAAA,CAAG,QAAA,EAAU,CAAA,2EAAA;AAAA,KAC5B;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAPwD,MAAA,CAAA,sBAAA,EAAA,uBAAA,CAAA;AAAjD,IAAM,qBAAA,GAAN,sBAAA;AASA,IAAM,6BAAA,GAAN,MAAM,6BAAA,SAAqC,YAAA,CAAa;AAAA,EAC7D,WAAA,CAAY,IAAA,EAA2B,MAAA,EAAgB,YAAA,EAAsB;AAC3E,IAAA,KAAA;AAAA,MACE,CAAA,kBAAA,EAAqB,IAAI,CAAA,EAAA,EAAK,MAAM,iBAAiB,YAAY,CAAA,yDAAA;AAAA,KACnE;AAEA,IAAA,IAAA,CAAK,OAAO,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAA,EAAI,MAAM,IAAI,YAAY,CAAA,CAAA;AAAA,EAC7E;AACF,CAAA;AAR+D,MAAA,CAAA,6BAAA,EAAA,8BAAA,CAAA;AAAxD,IAAM,4BAAA,GAAN,6BAAA;AAaA,IAAM,iBAAA,GAAN,MAAM,iBAAA,SAAyB,YAAA,CAAa;AAAA,EACjD,YAAYA,GAAAA,EAAY;AACtB,IAAA,KAAA;AAAA,MACE,QAAQA,GAAE,CAAA,kEAAA;AAAA,KACZ;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EACd;AACF,CAAA;AAPmD,MAAA,CAAA,iBAAA,EAAA,kBAAA,CAAA;AAA5C,IAAM,gBAAA,GAAN,iBAAA;AAYA,IAAM,YAAA,GAAN,MAAM,YAAA,SAAoB,YAAA,CAAa;AAAA,EAC5C,YAAY,IAAA,EAAc;AACxB,IAAA,KAAA,CAAM,CAAA,kBAAA,EAAqB,IAAA,CAAK,QAAA,EAAU,CAAA,mBAAA,CAAqB,CAAA;AAC/D,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AAAA,EACd;AACF,CAAA;AAL8C,MAAA,CAAA,YAAA,EAAA,aAAA,CAAA;AAAvC,IAAM,WAAA,GAAN,YAAA;AAUA,IAAM,6BAAA,GAAN,MAAM,6BAAA,SAAqC,YAAA,CAAa;AAAA,EAC7D,WAAA,GAAc;AACZ,IAAA,KAAA,CAAM,iDAAiD,CAAA;AACvD,IAAA,IAAA,CAAK,IAAA,GAAO,8BAAA;AAAA,EACd;AACF,CAAA;AAL+D,MAAA,CAAA,6BAAA,EAAA,8BAAA,CAAA;AAAxD,IAAM,4BAAA,GAAN,6BAAA;AAUA,IAAM,gBAAA,GAAN,MAAM,gBAAA,SAAwB,YAAA,CAAa;AAAA,EAChD,WAAA,CAAY,IAAA,EAAcA,GAAAA,EAAY,aAAA,EAA+B;AACnE,IAAA,MAAM,eACJ,aAAA,YAAyB,KAAA,GACrB,aAAA,CAAc,OAAA,GACd,OAAO,aAAa,CAAA;AAC1B,IAAA,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,uBAAA,EAA0BA,GAAAA,CAAG,UAAU,CAAA,EAAA,EAAK,YAAY,CAAA,CAAE,CAAA;AACvE,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF,CAAA;AATkD,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA;AAA3C,IAAM,eAAA,GAAN,gBAAA;AAcA,IAAM,gBAAA,GAAN,MAAM,gBAAA,SAAwB,YAAA,CAAa;AAAA,EAChD,YAAY,IAAA,EAA6C;AACvD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,EAAE,CAAA,MAAA,EAAI,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA,CAAE,KAAK,QAAQ,CAAA;AAClE,IAAA,KAAA;AAAA,MACE,CAAA;AAAA,EAAA,EAAqC,KAAK;;AAAA,yFAAA;AAAA,KAC5C;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF,CAAA;AARkD,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA;AAA3C,IAAM,eAAA,GAAN,gBAAA;AAaA,IAAM,wBAAA,GAAN,MAAM,wBAAA,SAAgC,YAAA,CAAa;AAAA,EACxD,YAAY,MAAA,EAAkB;AAC5B,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,YAAO,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACpD,IAAA,KAAA;AAAA,MACE,CAAA;AAAA,EAA6D,IAAI;;AAAA,gIAAA;AAAA,KACnE;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF,CAAA;AAR0D,MAAA,CAAA,wBAAA,EAAA,yBAAA,CAAA;AAAnD,IAAM,uBAAA,GAAN,wBAAA;AAaA,IAAM,4BAAA,GAAN,MAAM,4BAAA,SAAoC,YAAA,CAAa;AAAA,EAC5D,YAAY,YAAA,EAAsB;AAChC,IAAA,KAAA;AAAA,MACE,wDAAwD,YAAY,CAAA;AAAA,KACtE;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AAAA,EACd;AACF,CAAA;AAP8D,MAAA,CAAA,4BAAA,EAAA,6BAAA,CAAA;AAAvD,IAAM,2BAAA,GAAN,4BAAA;;;AC1KA,SAAS,eASd,WAAA,EAWwE;AAkBxE,EAAA,MAAM,QAAA,GAAmB,WAAA,CAAY,cAAc,CAAA,IAAK,aAAA,EAAc;AACtE,EAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,mBAAmB,CAAA,IAAK,KAAA;AAC5D,EAAA,MAAMA,MAAK,WAAA,CAAY,EAAA;AAEvB,EAAA,OAAO;AAAA,IACL,CAAC,cAAc,GAAG,IAAA;AAAA,IAClB,CAAC,cAAc,GAAG,QAAA;AAAA,IAClB,CAAC,mBAAmB,GAAG,eAAA;AAAA,IACvB,EAAA,EAAAA,GAAAA;AAAA,IACA,cAAc,WAAA,CAAY,YAAA;AAAA,IAC1B,SAAS,WAAA,CAAY,OAAA;AAAA,IACrB,QAAA,EAAU,WAAA,CAAY,QAAA,IAAY,EAAC;AAAA,IACnC,SAAA,EAAW,WAAA,CAAY,SAAA,IAAa,EAAC;AAAA,IACrC,MAAM,WAAA,CAAY,IAAA;AAAA,IAClB,SAAS,WAAA,CAAY,OAAA;AAAA,IACrB,cAAc,WAAA,CAAY,YAAA;AAAA,IAC1B,cAAc,WAAA,CAAY,YAAA;AAAA,IAC1B,IAAA,EAAM,WAAA,CAAY,IAAA,IAAS,EAAC;AAAA,IAC5B,IAAA,kCAAgB,MAAA,EAAiB;AAE/B,MAAA,IAAI,YAAY,YAAA,EAAc;AAC5B,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,WAAA,CAAY,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA;AAAA,QAChD,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,eAAA;AAAA,YACR,iBAAA;AAAA,YACAA,GAAAA;AAAA,YACA,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,WAC1D;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,CAAC,wBAAwB,GAAG,IAAA;AAAA,QAC5B,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,QAAA,EAAU,IAAA;AAAA,QACV;AAAA,OACF;AAAA,IASF,CAAA,EA5BM,MAAA,CAAA;AAAA,IA8BN,IAAA,EAAO,WAAA,CAAY,IAAA,IAAQ,EAAC;AAAA,IAC5B,UAAA,EAAY,WAAA,CAAY,UAAA,IAAe,EAAC;AAAA,IACxC,QAAA,GAAW;AACT,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,CAAC,wBAAwB,GAAG;AAAA,OAC9B;AAAA,IAGF;AAAA,GACF;AACF;AAjGgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;;;ACRT,SAAS,YACd,MAAA,EACkB;AAClB,EAAA,MAAM,iBAAiB,aAAA,EAAc;AACrC,EAAA,MAAM,WAAA,GAAc,MAAA;AACpB,EAAA,OAAO;AAAA,IACL,GAAG,WAAA;AAAA,IACH,IAAI,WAAA,CAAY,EAAA;AAAA,IAChB,CAAC,cAAc,GAAG,cAAA;AAAA,IAClB,CAAC,WAAW,GAAG,IAAA;AAAA;AAAA,IACf,IAAA,EAAM,WAAA,CAAY,IAAA,IAAQ,EAAC;AAAA,IAC3B,QAAA,GAAW;AACT,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,CAAC,wBAAwB,GAAG;AAAA,OAC9B;AAAA,IACF;AAAA,GACF;AACF;AAlBgB,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;;;ACGT,SAAS,qBAMd,aAAA,EAWA;AACA,EAAA,MAAM,WAAW,aAAA,EAAc;AAC/B,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,CAAC,cAAc,GAAG,QAAA;AAAA,IAClB,CAAC,oBAAoB,GAAG,IAAA;AAAA,IACxB,QAAQ,EAAC;AAAA,IACT,cAAc,aAAA,CAAc,YAAA;AAAA,IAC5B,GAAG,aAAA;AAAA,IACH,YAAA,EACG,aAAA,CAAc,YAAA,IAAmC;AAAC,GACvD;AAOA,EAAA,MAAM,IAAA,2BACJ,GAAA,KAaG;AACH,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,IAAA,0BAAO,MAAA,KAAoB;AACzB,QAAA,IAAI,IAAI,YAAA,EAAc;AACpB,UAAA,IAAI;AACF,YAAA,MAAA,GAAS,GAAA,CAAI,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA;AAAA,UACxC,SAAS,KAAA,EAAO;AACd,YAAA,MAAM,IAAI,eAAA;AAAA,cACR,mBAAA;AAAA,cACA,GAAA,CAAI,EAAA;AAAA,cACJ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,aAC1D;AAAA,UACF;AAAA,QACF;AACA,QAAA,OAAO,IAAA,CAAK;AAAA,UACV,GAAG,GAAA;AAAA,UACH,CAAC,0BAA0B,GAAG,IAAA;AAAA,UAC9B,MAAA,EAAQ;AAAA,YACN,GAAI,GAAA,CAAI,MAAA;AAAA,YACR,GAAG;AAAA;AACL,SAC0G,CAAA;AAAA,MAC9G,CAAA,EApBM,MAAA;AAAA,KAqBR;AAAA,EAMF,CAAA,EA5Ca,MAAA,CAAA;AA8Cb,EAAA,OAAO,KAAK,IAAI,CAAA;AAClB;AAjFgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;;;ACDT,SAAS,yBAMd,aAAA,EAWA;AACA,EAAA,MAAM,WAAW,aAAA,EAAc;AAC/B,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,CAAC,cAAc,GAAG,QAAA;AAAA,IAClB,CAAC,wBAAwB,GAAG,IAAA;AAAA,IAC5B,QAAQ,EAAC;AAAA,IACT,cAAc,aAAA,CAAc,YAAA;AAAA,IAC5B,GAAG,aAAA;AAAA,IACH,YAAA,EAAc,aAAA,CAAc,YAAA,IAAiB;AAAC,GAChD;AAOA,EAAA,MAAM,IAAA,2BACJ,GAAA,KAaG;AACH,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,IAAA,0BAAO,MAAA,KAAoB;AACzB,QAAA,IAAI,IAAI,YAAA,EAAc;AACpB,UAAA,IAAI;AACF,YAAA,MAAA,GAAS,GAAA,CAAI,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA;AAAA,UACxC,SAAS,KAAA,EAAO;AACd,YAAA,MAAM,IAAI,eAAA;AAAA,cACR,mBAAA;AAAA,cACA,GAAA,CAAI,EAAA;AAAA,cACJ;AAAA,aACF;AAAA,UACF;AAAA,QACF;AACA,QAAA,OAAO,IAAA,CAAK;AAAA,UACV,GAAG,GAAA;AAAA,UACH,CAAC,0BAA0B,GAAG,IAAA;AAAA,UAC9B,MAAA,EAAQ;AAAA,YACN,GAAI,GAAA,CAAI,MAAA;AAAA,YACR,GAAG;AAAA;AACL,SAC8G,CAAA;AAAA,MAClH,CAAA,EApBM,MAAA;AAAA,KAqBR;AAAA,EAMF,CAAA,EA5Ca,MAAA,CAAA;AA8Cb,EAAA,OAAO,KAAK,IAAI,CAAA;AAClB;AAhFgB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;;;ACsBT,SAAS,cAAA,CACd,MACA,KAAA,EAC2D;AAC3D,EAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAU,GAAG,MAAK,GAAI,KAAA;AAElC,EAAA,OAAO;AAAA,IACL,GAAI,IAAA;AAAA,IACJ,GAAG,IAAA;AAAA,IACH,IAAK,IAAA,CAAa;AAAA,GACpB;AACF;AAXgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;;;ACXT,SAAS,UAKd,UAAA,EAK8D;AAC9D,EAAA,MAAMA,MAAK,UAAA,CAAW,EAAA;AACtB,EAAA,MAAM,WAAW,aAAA,EAAc;AAC/B,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,EAAA,EAAAA,GAAAA;AAAA,IACA,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,cAAc,UAAA,CAAW;AAAA,GAC3B;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,UAAA;AAAA,IACH,CAAC,SAAS,GAAG,IAAA;AAAA,IACb,CAAC,cAAc,GAAG,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMlB,KAAK,SAAA,EAAoB;AACvB,MAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,QAAA,IAAI;AACF,UAAA,SAAA,GAAY,UAAA,CAAW,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA;AAAA,QACrD,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,eAAA,CAAgB,YAAA,EAAc,IAAA,CAAK,IAAI,KAAc,CAAA;AAAA,QACjE;AAAA,MACF;AACA,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,QAAA,IAAI,OAAO,UAAA,CAAW,MAAA,KAAW,QAAA,EAAU;AACzC,UAAA,MAAA,GAAS;AAAA,YACP,GAAG,UAAA,CAAW,MAAA;AAAA,YACd,GAAG;AAAA,WACL;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,SAAA;AAAA,QACX;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,SAAA;AAAA,MACX;AACA,MAAA,OAAO;AAAA,QACL,GAAG,UAAA;AAAA,QACH,CAAC,mBAAmB,GAAG,IAAA;AAAA,QACvB;AAAA,OACF;AAAA,IAKF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO,MAAA,EAAwC;AAC7C,MAAA,IAAI,cAAyB,EAAC;AAC9B,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,WAAA,GAAc,MAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,GAAc,MAAA,CAAO,IAAA;AAAA,MACvB;AAEA,MAAA,KAAA,MAAW,aAAa,WAAA,EAAa;AACnC,QAAA,IAAI,SAAA,CAAU,OAAOA,GAAAA,EAAI;AACvB,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAQ,MAAA,EAAoD;AAC1D,MAAA,IAAI,cAAyB,EAAC;AAC9B,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,WAAA,GAAc,MAAA;AAAA,MAChB,CAAA,MAAO;AACL,QAAA,WAAA,GAAc,MAAA,CAAO,QAAQ,EAAC;AAAA,MAChC;AAEA,MAAA,KAAA,MAAW,aAAa,WAAA,EAAa;AACnC,QAAA,IAAI,SAAA,CAAU,OAAOA,GAAAA,EAAI;AACvB,UAAA,OAAO,SAAA,CAAU,MAAA;AAAA,QACnB;AAAA,MACF;AAEA,MAAA;AAAA,IACF;AAAA,GACF;AACF;AAvGgB,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;;;ACMT,SAAS,OAAO,UAAA,EAAsC;AAC3D,EAAA,OAAO,UAAA,IAAc,WAAW,UAAU,CAAA;AAC5C;AAFgB,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAST,SAAS,WAAW,UAAA,EAA0C;AACnE,EAAA,OAAO,UAAA,IAAc,WAAW,cAAc,CAAA;AAChD;AAFgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AAST,SAAS,qBACd,UAAA,EACmC;AACnC,EAAA,OAAO,UAAA,IAAc,WAAW,wBAAwB,CAAA;AAC1D;AAJgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAWT,SAAS,QAAQ,UAAA,EAAuC;AAC7D,EAAA,OAAO,UAAA,IAAc,WAAW,WAAW,CAAA;AAC7C;AAFgB,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA;AAKT,SAAS,OAAO,UAAA,EAAsC;AAC3D,EAAA,OAAO,UAAA,IAAc,WAAW,UAAU,CAAA;AAC5C;AAFgB,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAST,SAAS,iBACd,UAAA,EAC+B;AAC/B,EAAA,OAAO,UAAA,IAAc,WAAW,oBAAoB,CAAA;AACtD;AAJgB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAMT,SAAS,qBACd,UAAA,EACmC;AACnC,EAAA,OAAO,UAAA,IAAc,WAAW,wBAAwB,CAAA;AAC1D;AAJgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAWT,SAAS,MAAM,UAAA,EAAqC;AACzD,EAAA,OAAO,UAAA,IAAc,WAAW,SAAS,CAAA;AAC3C;AAFgB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA;AAKT,SAAS,WACd,UAAA,EACwC;AACxC,EAAA,OAAO,UAAA,IAAc,WAAW,wBAAwB,CAAA;AAC1D;AAJgB,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;;;ACpFT,SAAS,iBAAA,GAAiC;AAC/C,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,aAAa,WAAA,EAAa;AACpE,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IACE,OAAO,OAAA,KAAY,WAAA,IAClB,QAAgB,QAAA,IAChB,OAAA,CAAgB,SAAS,IAAA,EAC1B;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAA;AACT;AAZgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAcT,IAAM,gBAAA,GAAN,MAAM,gBAAA,CAA4C;AAAA,EAKvD,YAAY,GAAA,EAAmB;AAH/B,IAAA,IAAA,CAAQ,aAAA,GAAgB,KAAA;AACxB,IAAA,IAAA,CAAQ,YAAA,GAA2B,IAAA;AAoLnC;AAAA,IAAA,IAAA,CAAA,UAAA,GAAa,UAAA,CAAW,UAAA;AACxB,IAAA,IAAA,CAAA,YAAA,GAAe,UAAA,CAAW,YAAA;AAlLxB,IAAA,IAAA,CAAK,GAAA,GAAM,OAAO,iBAAA,EAAkB;AAAA,EACtC;AAAA,EAEA,MAAM,IAAA,GAAO;AACX,IAAA,IAAI,IAAA,CAAK,QAAQ,MAAA,EAAQ;AACvB,MAAA,IAAA,CAAK,YAAA,GAAA,CAAgB,MAAM,OAAO,aAAkB,CAAA,EAAG,iBAAA;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,oBAAoB,OAAA,EAA2C;AAC7D,IAAA,QAAQ,KAAK,GAAA;AAAK,MAChB,KAAK,MAAA,EAAQ;AACX,QAAA,OAAA,CAAQ,EAAA,CAAG,qBAAqB,OAAc,CAAA;AAC9C,QAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,mBAAA,EAAqB,OAAc,CAAA;AAAA,MAC9D;AAAA,MACA,KAAK,SAAA,EAAW;AACd,QAAA,MAAM,MAAA,GAAe,WAAmB,MAAA,IAAU,UAAA;AAClD,QAAA,MAAM,oBAAI,MAAA,CAAA,CAAC,CAAA,KAAW,QAAQ,CAAA,EAAG,KAAA,IAAS,CAAC,CAAA,EAAjC,GAAA,CAAA;AACV,QAAA,MAAA,CAAO,gBAAA,GAAmB,SAAS,CAAC,CAAA;AACpC,QAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,GAAsB,OAAA,EAAS,CAAC,CAAA;AAAA,MACtD;AAAA,MACA,SAAS;AACP,QAAA,MAAM,GAAA,GAAW,UAAA;AACjB,QAAA,IAAI,IAAI,gBAAA,EAAkB;AACxB,UAAA,MAAM,oBAAI,MAAA,CAAA,CAAC,CAAA,KAAW,QAAQ,CAAA,EAAG,KAAA,IAAS,CAAC,CAAA,EAAjC,GAAA,CAAA;AACV,UAAA,GAAA,CAAI,gBAAA,CAAiB,SAAS,CAAC,CAAA;AAC/B,UAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,OAAA,EAAS,CAAC,CAAA;AAAA,QACjD;AACA,QAAA,OAAO,MAAM;AAAA,QAAC,CAAA;AAAA,MAChB;AAAA;AACF,EACF;AAAA,EAEA,qBAAqB,OAAA,EAA4C;AAC/D,IAAA,QAAQ,KAAK,GAAA;AAAK,MAChB,KAAK,MAAA,EAAQ;AACX,QAAA,MAAM,CAAA,mBAAI,MAAA,CAAA,CAAC,MAAA,KAAgB,OAAA,CAAQ,MAAM,CAAA,EAA/B,GAAA,CAAA;AACV,QAAA,OAAA,CAAQ,EAAA,CAAG,sBAAsB,CAAC,CAAA;AAClC,QAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,oBAAA,EAAsB,CAAC,CAAA;AAAA,MAClD;AAAA,MACA,KAAK,SAAA,EAAW;AACd,QAAA,MAAM,SAAe,UAAA,CAAmB,MAAA;AACxC,QAAA,MAAM,uBAAO,MAAA,CAAA,CAAC,CAAA,KAAW,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAA,EAA5B,MAAA,CAAA;AACb,QAAA,MAAA,CAAO,gBAAA,GAAmB,sBAAsB,IAAI,CAAA;AACpD,QAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,GAAsB,oBAAA,EAAsB,IAAI,CAAA;AAAA,MACtE;AAAA,MACA,SAAS;AACP,QAAA,MAAM,GAAA,GAAW,UAAA;AACjB,QAAA,IAAI,IAAI,gBAAA,EAAkB;AACxB,UAAA,MAAM,uBAAO,MAAA,CAAA,CAAC,CAAA,KAAW,QAAQ,CAAA,CAAE,MAAA,IAAU,CAAC,CAAA,EAAjC,MAAA,CAAA;AACb,UAAA,GAAA,CAAI,gBAAA,CAAiB,sBAAsB,IAAI,CAAA;AAC/C,UAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,oBAAA,EAAsB,IAAI,CAAA;AAAA,QACjE;AACA,QAAA,OAAO,MAAM;AAAA,QAAC,CAAA;AAAA,MAChB;AAAA;AACF,EACF;AAAA,EAEA,iBAAiB,OAAA,EAAiC;AAChD,IAAA,QAAQ,KAAK,GAAA;AAAK,MAChB,KAAK,MAAA,EAAQ;AACX,QAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,OAAO,CAAA;AAC5B,QAAA,OAAA,CAAQ,EAAA,CAAG,WAAW,OAAO,CAAA;AAC7B,QAAA,OAAO,MAAM;AACX,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,OAAO,CAAA;AAC7B,UAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,OAAO,CAAA;AAAA,QAChC,CAAA;AAAA,MACF;AAAA,MACA,KAAK,SAAA,EAAW;AACd,QAAA,MAAM,GAAA,GAAW,MAAA;AAEjB,QAAA,GAAA,CAAI,gBAAA,GAAmB,gBAAgB,OAAO,CAAA;AAC9C,QAAA,OAAO,MAAM;AACX,UAAA,GAAA,CAAI,mBAAA,GAAsB,gBAAgB,OAAO,CAAA;AAAA,QACnD,CAAA;AAAA,MACF;AAAA,MACA,SAAS;AACP,QAAA,MAAM,GAAA,GAAW,UAAA;AACjB,QAAA,MAAM,UAA6B,EAAC;AACpC,QAAA,IAAI,IAAI,gBAAA,EAAkB;AACxB,UAAA,GAAA,CAAI,gBAAA,CAAiB,gBAAgB,OAAO,CAAA;AAC5C,UAAA,OAAA,CAAQ,IAAA;AAAA,YAAK,MACX,GAAA,CAAI,mBAAA,GAAsB,cAAA,EAAgB,OAAO;AAAA,WACnD;AACA,UAAA,MAAM,sBAAM,MAAA,CAAA,MAAM;AAChB,YAAA,MAAM,MAAY,UAAA,CAAmB,QAAA;AACrC,YAAA,IAAI,GAAA,IAAO,GAAA,CAAI,eAAA,KAAoB,QAAA,EAAU,OAAA,EAAQ;AAAA,UACvD,CAAA,EAHY,KAAA,CAAA;AAIZ,UAAA,GAAA,CAAI,gBAAA,CAAiB,oBAAoB,GAAG,CAAA;AAC5C,UAAA,OAAA,CAAQ,IAAA;AAAA,YAAK,MACX,GAAA,CAAI,mBAAA,GAAsB,kBAAA,EAAoB,GAAG;AAAA,WACnD;AAAA,QACF;AACA,QAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAgB,OAAA,CAAgB,EAAA,EAAI;AACzD,UAAC,OAAA,CAAgB,EAAA,CAAG,QAAA,EAAU,OAAO,CAAA;AACrC,UAAC,OAAA,CAAgB,EAAA,CAAG,SAAA,EAAW,OAAO,CAAA;AACtC,UAAA,OAAA,CAAQ,KAAK,MAAM;AACjB,YAAC,OAAA,CAAgB,GAAA,GAAM,QAAA,EAAU,OAAO,CAAA;AACxC,YAAC,OAAA,CAAgB,GAAA,GAAM,SAAA,EAAW,OAAO,CAAA;AAAA,UAC3C,CAAC,CAAA;AAAA,QACH;AACA,QAAA,OAAO,MAAM,OAAA,CAAQ,OAAA,CAAQ,CAAC,EAAA,KAAO,IAAI,CAAA;AAAA,MAC3C;AAAA;AACF,EACF;AAAA,EAEA,KAAK,IAAA,EAAoB;AACvB,IAAA,QAAQ,KAAK,GAAA;AAAK,MAChB,KAAK,MAAA;AACH,QAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,QAAA;AAAA,MACF;AACE,QAAA,MAAM,IAAI,4BAA4B,MAAM,CAAA;AAAA;AAChD,EACF;AAAA,EAEA,OAAO,GAAA,EAAiC;AACtC,IAAA,QAAQ,KAAK,GAAA;AAAK,MAChB,KAAK,MAAA;AACH,QAAA,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,MACxB,SAAS;AACP,QAAA,MAAM,CAAA,GAAS,UAAA;AACf,QAAA,IAAI,CAAA,CAAE,WAAW,OAAO,CAAA,CAAE,YAAY,QAAA,EAAU,OAAO,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA;AACpE,QAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAgB,OAAA,CAAgB,GAAA;AACrD,UAAA,OAAQ,OAAA,CAAgB,IAAI,GAAG,CAAA;AACjC,QAAA,IAAI,CAAA,CAAE,OAAO,OAAO,CAAA,CAAE,QAAQ,QAAA,EAAU,OAAO,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA;AACxD,QAAA,OAAO,MAAA;AAAA,MACT;AAAA;AACF,EACF;AAAA,EAEA,oBAAA,GAAgC;AAC9B,IAAA,QAAQ,KAAK,GAAA;AAAK,MAChB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA;AAAA;AAAA,MACT,KAAK,SAAA;AAAA,MACL;AACE,QAAA,OAAO,KAAA;AAAA;AACX,EACF;AAAA,EAEA,uBAAA,GAAoD;AAClD,IAAA,QAAQ,KAAK,GAAA;AAAK,MAChB,KAAK,MAAA,EAAQ;AACX,QAAA,IAAI,QAAA;AACJ,QAAA,MAAM,sBAAM,MAAA,CAAA,MAA6B;AACvC,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,cAAA,MAAM,IAAI,2BAAA;AAAA,gBACR;AAAA,eACF;AAAA,YACF;AACA,YAAA,QAAA,GAAW,IAAI,KAAK,YAAA,EAAa;AAAA,UACnC;AAEA,UAAA,OAAO,QAAA;AAAA,QACT,CAAA,EAXY,KAAA,CAAA;AAaZ,QAAA,OAAO;AAAA,UACL,QAAA,kBAAU,MAAA,CAAA,MAAM,GAAA,EAAI,CAAE,UAAS,EAArB,UAAA,CAAA;AAAA,UACV,GAAA,0BAAMC,MAAAA,EAAU,QAAA,KAAwB,KAAI,CAAE,GAAA,CAAIA,MAAAA,EAAO,QAAQ,CAAA,EAA5D,KAAA;AAAA,SACP;AAAA,MACF;AAAA,MACA,KAAK,SAAA;AAAA,MACL;AACE,QAAA,OAAO;AAAA,UACL,0BAAU,MAAA,CAAA,MAAM;AACd,YAAA,MAAM,IAAI,4BAA4B,yBAAyB,CAAA;AAAA,UACjE,CAAA,EAFU,UAAA,CAAA;AAAA,UAGV,qBAAK,MAAA,CAAA,MAAM;AACT,YAAA,MAAM,IAAI,4BAA4B,yBAAyB,CAAA;AAAA,UACjE,CAAA,EAFK,KAAA;AAAA,SAGP;AAAA;AACJ,EACF;AAKF,CAAA;AAzLyD,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA;AAAlD,IAAM,eAAA,GAAN,gBAAA;AA4LP,IAAI,gBAAA,GAA4C,IAAA;AAGzC,SAAS,WAAA,GAAgC;AAC9C,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,MAAM,MAAM,iBAAA,EAAkB;AAE9B,IAAA,gBAAA,GAAmB,IAAI,gBAAgB,GAAG,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,gBAAA;AACT;AAPgB,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;;;AChNT,IAAM,+BAA+B,oBAAA,CAAqB;AAAA,EAC/D,EAAA,EAAI,mCAAA;AAAA,EACJ,MAAM,GAAA,CAAI,EAAE,MAAM,IAAA,EAAK,EAAG,MAAM,MAAA,EAAwC;AACtE,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAGA,IAAY,MAAA,CAAO,OAAA,CAAQ,GAAA;AAE3B,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB;AACF,CAAC,CAAA;;;ACWD,IAAM,WAAW,WAAA,EAAY;AACtB,IAAM,OAAA,GAAU,SAAS,uBAAA,EAA8C;AAG9E,SAAS,eAAA,GAAoD;AAC3D,EAAA,OAAO,QAAQ,QAAA,EAAS;AAC1B;AAFS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAQF,SAAS,aAAA,CAAiB,OAAe,gBAAA,EAA8B;AAC5E,EAAA,IAAI,CAAC,QAAA,CAAS,oBAAA,EAAqB,EAAG;AACpC,IAAA,MAAM,IAAI,2BAAA;AAAA,MACR,kDAAkD,IAAI,CAAA,gDAAA;AAAA,KACxD;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAI,CAAA;AAEzB,EAAA,MAAM,sBAAM,MAAA,CAAA,MAAS;AACnB,IAAA,MAAMA,SAAQ,eAAA,EAAgB;AAC9B,IAAA,IAAI,CAACA,MAAAA,IAAS,CAACA,MAAAA,CAAM,GAAA,CAAI,KAAK,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,YAAA;AAAA,QACR,CAAA,iCAAA,EAAoC,KAAA,CAAM,QAAA,EAAU,CAAA;AAAA,OACtD;AAAA,IACF;AACA,IAAA,OAAOA,MAAAA,CAAM,IAAI,KAAK,CAAA;AAAA,EACxB,CAAA,EARY,KAAA,CAAA;AAUZ,EAAA,MAAM,OAAA,mBAAU,MAAA,CAAA,CAAI,KAAA,EAAU,EAAA,KAA6C;AACzE,IAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,IAAA,MAAM,MAAM,YAAA,GACR,IAAI,IAAI,YAAY,CAAA,uBAChB,GAAA,EAAqB;AAC7B,IAAA,GAAA,CAAI,GAAA,CAAI,OAAO,KAAK,CAAA;AAEpB,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,EAAS,CAAA;AAAA,EACnC,CAAA,EARgB,SAAA,CAAA;AAUhB,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,EAAA,EAAI,KAAA;AAAA,IACJ,GAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,GAAqC;AACnC,MAAA,OAAO,4BAAA,CAA6B,IAAA,CAAK,EAAE,OAAA,EAAS,KAAmB,CAAA;AAAA,IACzE;AAAA,GACF;AAEA,EAAA,OAAO,GAAA;AACT;AAtCgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;;;ACzCT,IAAM,WAAW,SAAA,CAA+B;AAAA,EACrD,EAAA,EAAI,oBAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,WAAA,EACE;AAAA;AAEN,CAAC,CAAA;;;ACNM,IAAM,UAAA,GAAa;AAAA,EACxB,QAAQ,SAAA,CAEL;AAAA,IACD,EAAA,EAAI,qBAAA;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,QAAA;AAAA,MACP,WAAA,EACE;AAAA;AACJ,GACD,CAAA;AAAA,EACD,wBAAwB,SAAA,CAErB;AAAA,IACD,EAAA,EAAI,qCAAA;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,iCAAA;AAAA,MACP,WAAA,EACE;AAAA;AACJ,GACD,CAAA;AAAA,EACD,KAAA,EAAO;AACT,CAAA;;;AChBA,IAAM,YAAY,UAAA,CAAW,MAAA;AAEtB,IAAM,YAAA,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1B,OAAO,WAAA,CAEJ;AAAA,IACD,EAAA,EAAI,sBAAA;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,cAAA;AAAA,MACP,WAAA,EACE;AAAA;AAEJ,GACD,CAAA;AAAA;AAAA;AAAA;AAAA,EAID,gBAAgB,WAAA,CAGb;AAAA,IACD,EAAA,EAAI,+BAAA;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,iBAAA;AAAA,MACP,WAAA,EACE;AAAA,KACJ;AAAA,IACA,IAAA,EAAM,CAAC,SAAA,EAAW,UAAA,CAAW,sBAAsB;AAAA,GACpD;AACH,CAAA;AAEO,IAAM,iBAAA,GAAmC,CAAC,YAAA,CAAa,KAAK,CAAA;;;ACrC5D,IAAM,MAAA,GAAN,MAAM,MAAA,CAAM;AAAA,EAAZ,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,IAAA,GAAyB,QAAQ,OAAA,EAAQ;AACjD,IAAA,IAAA,CAAQ,QAAA,GAAW,KAAA;AACnB,IAAA,IAAA,CAAQ,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAG9C;AAAA,IAAA,IAAA,CAAiB,gBAAA,GACf,WAAA,EAAY,CAAE,uBAAA,EAAiC;AAEjD,IAAA,IAAA,CAAiB,oBAAA,GAAuB,WAAA,EAAY,CAAE,oBAAA,EAAqB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpE,IAAO,IAAA,EAAuD;AAEnE,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,yBAAyB,CAAC,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,IAAA,CAAK,oBAAA,IAAwB,IAAA,CAAK,gBAAA,CAAiB,UAAS,EAAG;AACjE,MAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,QACb,IAAI,KAAA;AAAA,UACF;AAAA;AACF,OACF;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,IAAA,CAAK,eAAA;AAGxB,IAAA,MAAM,MAAA,GAAS,KAAK,IAAA,CAAK,IAAA;AAAA,MAAK,MAC5B,IAAA,CAAK,oBAAA,GACD,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,IAAA,EAAM,MAAM,IAAA,CAAK,MAAM,CAAC,CAAA,GAClD,KAAK,MAAM;AAAA,KACjB;AAGA,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAEjC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,OAAA,CAAQ,OAAA,GAAgC,EAAC,EAAkB;AACtE,IAAA,IAAI,KAAK,QAAA,EAAU;AAEnB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAEhB,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,gBAAgB,KAAA,EAAM;AAAA,IAC7B;AAGA,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,MAAM;AAAA,IAAC,CAAC,CAAA;AAAA,EAChC;AACF,CAAA;AA9DmB,MAAA,CAAA,MAAA,EAAA,OAAA,CAAA;AAAZ,IAAM,KAAA,GAAN;;;ACLA,IAAM,gBAAgB,cAAA,CAAe;AAAA,EAC1C,EAAA,EAAI,yBAAA;AAAA,EACJ,yBAAS,MAAA,CAAA,OAAO;AAAA,IACd,GAAA,sBAAS,GAAA;AAAmB,GAC9B,CAAA,EAFS,SAAA,CAAA;AAAA,EAGT,IAAA,kBAAM,MAAA,CAAA,OAAO,CAAA,EAAG,IAAA,EAAM,OAAA,KAAY;AAChC,IAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;AAEpB,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,GAAA,kBAAK,MAAA,CAAA,CACHD,GAAAA,EACA,IAAA,KACe;AACf,QAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAIA,GAAE,CAAA,EAAG;AAChB,UAAA,GAAA,CAAI,GAAA,CAAIA,GAAAA,EAAI,IAAI,KAAA,EAAO,CAAA;AAAA,QACzB;AAEA,QAAA,OAAO,GAAA,CAAI,GAAA,CAAIA,GAAE,CAAA,CAAG,IAAI,IAAI,CAAA;AAAA,MAC9B,CAAA,EATK,KAAA;AAAA,KAUP;AAAA,EACF,CAAA,EAhBM,MAAA,CAAA;AAAA,EAiBN,OAAA,kBAAS,MAAA,CAAA,OAAO,KAAA,EAAO,CAAA,EAAG,MAAM,OAAA,KAAY;AAC1C,IAAA,OAAA,CAAQ,IAAI,OAAA,CAAQ,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,CAAA;AAAA,EAChD,CAAA,EAFS,SAAA,CAAA;AAAA,EAGT,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,WAAA;AAAA,IACP,WAAA,EACE;AAAA;AAEN,CAAC,CAAA;;;ACvBD,IAAME,aAAY,UAAA,CAAW,MAAA;AAE7B,IAAM,QAAQ,cAAA,CAAqC;AAAA,EACjD,EAAA,EAAI,yBAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,WAAA,EACE;AAAA,GACJ;AAAA,EACA,IAAA,EAAM,CAACA,UAAS;AAClB,CAAC,CAAA;AAEM,IAAM,eAAA,GAAkB;AAAA,EAC7B,KAAA;AAAA,EACA,mBAAmB,cAAA,CAAiD;AAAA,IAClE,EAAA,EAAI,qCAAA;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,oBAAA;AAAA,MACP,WAAA,EAAa;AAAA,KACf;AAAA,IACA,IAAA,EAAM,CAACA,UAAS;AAAA,GACjB,CAAA;AAAA,EACD,cAAc,cAAA,CAA4C;AAAA,IACxD,EAAA,EAAI,gCAAA;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,eAAA;AAAA,MACP,WAAA,EACE;AAAA,KACJ;AAAA,IACA,IAAA,EAAM,CAACA,UAAS;AAAA,GACjB,CAAA;AAAA,EACD,YAAY,cAAA,CAA0C;AAAA,IACpD,EAAA,EAAI,8BAAA;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,aAAA;AAAA,MACP,WAAA,EACE;AAAA,KACJ;AAAA,IACA,IAAA,EAAM,CAACA,UAAS;AAAA,GACjB,CAAA;AAAA,EACD,QAAQ,cAAA,CAAsC;AAAA,IAC5C,EAAA,EAAI,0BAAA;AAAA,IACJ,IAAA,EAAM;AAAA;AAAA,MAEJ,KAAA,EAAO,QAAA;AAAA,MACP,WAAA,EACE;AAAA,KACJ;AAAA,IACA,IAAA,EAAM,CAACA,UAAS;AAAA,GACjB,CAAA;AAAA,EACD,KAAA,EAAO,aAAA;AAAA,EACP,KAAA,EAAO;AACT,CAAA;;;ACxCO,IAAM,sBAAsB,oBAAA,CAAqB;AAAA,EACtD,EAAA,EAAI,+BAAA;AAAA,EACJ,MAAM,GAAA,CAAI,EAAE,MAAM,IAAA,EAAK,EAAG,MAAM,MAAA,EAA+B;AAC7D,IAAA,MAAM,QAAQ,IAAA,EAAM,KAAA;AACpB,IAAA,IAAI,QAAA,GAAW,CAAA;AAGf,IAAA,MAAM,UAAA,GAAa,OAAO,OAAA,IAAW,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,KAAgB,MAAM,KAAA,CAAA;AAEhD,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,KAAK,KAAK,CAAA;AAAA,MACzB,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,GAAA,GAAM,KAAA;AAEZ,QAAA,IAAI,UAAA,CAAW,GAAG,CAAA,IAAK,QAAA,IAAY,UAAA,EAAY;AAC7C,UAAA,MAAM,KAAA;AAAA,QACR;AAGA,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,aAAA,GACjB,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,GAAG,CAAA,GAClC,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAE9B,QAAA,IAAI,QAAQ,CAAA,EAAG;AACb,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,QAC3D;AAEA,QAAA,QAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC,CAAA;AAEM,IAAM,0BAA0B,wBAAA,CAAyB;AAAA,EAC9D,EAAA,EAAI,mCAAA;AAAA,EACJ,MAAM,GAAA,CAAI,EAAE,UAAU,IAAA,EAAK,EAAG,MAAM,MAAA,EAA+B;AACjE,IAAA,MAAM,QAAQ,QAAA,EAAU,MAAA;AACxB,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,MAAM,UAAA,GAAa,OAAO,OAAA,IAAW,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,KAAgB,MAAM,KAAA,CAAA;AAChD,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,KAAK,KAAK,CAAA;AAAA,MACzB,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,GAAA,GAAM,KAAA;AACZ,QAAA,IAAI,UAAA,CAAW,GAAG,CAAA,IAAK,QAAA,IAAY,UAAA,EAAY;AAC7C,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,aAAA,GACjB,MAAA,CAAO,aAAA,CAAc,QAAA,EAAU,GAAG,CAAA,GAClC,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAA;AAC9B,QAAA,IAAI,QAAQ,CAAA,EAAG;AACb,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,QAC3D;AACA,QAAA,QAAA,EAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC,CAAA;;;ACxEM,IAAM,wBAAwB,oBAAA,CAAqB;AAAA,EACxD,EAAA,EAAI,iCAAA;AAAA,EACJ,MAAM,GAAA,CAAI,EAAE,MAAM,IAAA,EAAK,EAAG,OAAO,MAAA,EAAiC;AAChE,IAAA,MAAM,QAAQ,IAAA,EAAM,KAAA;AAEpB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,GAAG,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,6BAA6B,GAAG,CAAA,EAAA,CAAA;AAGhD,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,MAAC,MAAc,IAAA,GAAO,cAAA;AACtB,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AAGvC,IAAA,MAAM,cAAA,GAAiB,IAAI,OAAA,CAAQ,CAAC,GAAG,MAAA,KAAW;AAChD,MAAA,MAAM,SAAA,GAAY,WAAW,MAAM;AACjC,QAAA,UAAA,CAAW,KAAA,EAAM;AACjB,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,QAAC,MAAc,IAAA,GAAO,cAAA;AACtB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd,GAAG,GAAG,CAAA;AAGN,MAAA,UAAA,CAAW,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,MAAM;AAChD,QAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MACxB,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAGD,IAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,KAAK,KAAY,CAAA,EAAG,cAAc,CAAC,CAAA;AAAA,EAC1D;AACF,CAAC,CAAA;AAEM,IAAM,4BAA4B,wBAAA,CAAyB;AAAA,EAChE,EAAA,EAAI,qCAAA;AAAA,EACJ,MAAM,GAAA,CAAI,EAAE,UAAU,IAAA,EAAK,EAAG,OAAO,MAAA,EAAiC;AACpE,IAAA,MAAM,QAAQ,QAAA,EAAU,MAAA;AACxB,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,GAAG,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,6BAA6B,GAAG,CAAA,EAAA,CAAA;AAChD,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,MAAC,MAAc,IAAA,GAAO,cAAA;AACtB,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,cAAA,GAAiB,IAAI,OAAA,CAAQ,CAAC,GAAG,MAAA,KAAW;AAChD,MAAA,MAAM,SAAA,GAAY,WAAW,MAAM;AACjC,QAAA,UAAA,CAAW,KAAA,EAAM;AACjB,QAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,QAAC,MAAc,IAAA,GAAO,cAAA;AACtB,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd,GAAG,GAAG,CAAA;AACN,MAAA,UAAA,CAAW,MAAA,CAAO,gBAAA,CAAiB,OAAA,EAAS,MAAM;AAChD,QAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MACxB,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,OAAO,QAAQ,IAAA,CAAK,CAAC,KAAK,KAAY,CAAA,EAAG,cAAc,CAAC,CAAA;AAAA,EAC1D;AACF,CAAC,CAAA;;;ACzDM,IAAM,iBAAA,GAAoB;AAAA,EAC/B,cAAA,EAAgB,4BAAA;AAAA,EAChB,IAAA,EAAM;AAAA,IACJ,cAAA,EAAgB,4BAAA;AAAA,IAChB,KAAA,EAAO,eAAA;AAAA;AAAA,IAEP,KAAA,EAAO,mBAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,QAAA,EAAU;AAAA,IACR,KAAA,EAAO,uBAAA;AAAA,IACP,OAAA,EAAS;AAAA;AAEb,CAAA;;;ACpBO,IAAM,WAAA,GAAN,MAAM,WAAA,CAAW;AAAA,EAMtB,WAAA,CACqBD,MAAAA,EACA,YAAA,EACA,MAAA,EACnB;AAHmB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AARrB,IAAA,IAAA,CAAmB,WAAA,uBAAkB,GAAA,EAGnC;AASA,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA,CAAK,KAAA,CAAM,oBAAA,EAAqB;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAa,GAAA,CAKX,IAAA,EACA,KAAA,EAC8B;AAC9B,IAAA,IAAI,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,KAAK,EAAE,CAAA;AACzC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAA,GAAS,IAAA,CAAK,2BAAmD,IAAI,CAAA;AAErE,MAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,MAAM,CAAA;AAAA,IACtC;AAEA,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,OAAO,KAAK,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,CAAK,MAAM,gBAAA,CAAiB;AAAA,UAChC,KAAA;AAAA,UACA,IAAA,EAAM,MAAA;AAAA,UACN,QAAQ,IAAA,CAAK;AAAA,SACd,CAAA;AAAA,MACH,SAAS,CAAA,EAAG;AAAA,MAAC;AACb,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,2BAIR,IAAA,EAAqC;AACrC,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,iBAAA,CAAkB,IAAI,CAAA;AAAA,EACtD;AACF,CAAA;AAnEwB,MAAA,CAAA,WAAA,EAAA,YAAA,CAAA;AAAjB,IAAM,UAAA,GAAN;;;ACRP,IAAA,SAAA;AAkDO,IAAM,kBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EAgB7B,WAAA,CACqBA,MAAAA,EACA,YAAA,EACA,MAAA,EACnB;AAHmB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAjBrB;AAAA,IAAA,IAAA,CAAQ,6BAA0D,EAAC;AACnE,IAAA,IAAA,CAAQ,iCAAkE,EAAC;AAG3E;AAAA,IAAA,IAAA,CAAQ,yBAAA,uBACF,GAAA,EAAI;AACV,IAAA,IAAA,CAAQ,iCAAA,uBAGA,GAAA,EAAI;AAGZ;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,SAAA,EAAY,KAAA,CAAA;AAAA,EAMT;AAAA;AAAA;AAAA;AAAA,EAKH,IAAI,QAAA,GAAW;AACb,IAAA,OAAO,YAAA,CAAA,IAAA,EAAK,SAAA,CAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAO;AACL,IAAA,YAAA,CAAA,IAAA,EAAK,SAAA,EAAY,IAAA,CAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAA,GAAY;AAClB,IAAA,IAAI,mBAAK,SAAA,CAAA,EAAW;AAClB,MAAA,MAAM,IAAI,YAAY,mBAAmB,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,SAAA,CACE,MACA,WAAA,EACM;AACN,IAAA,IAAA,CAAK,SAAA,EAAU;AAEf,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,IAAA,CAAK,0BAAA,CAA2B,IAAA;AAAA,QAC9B;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,8BAAA,CAA+B,IAAA;AAAA,QAClC;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,mBAAA,CACE,YAGA,WAAA,EACM;AACN,IAAA,IAAA,CAAK,SAAA,EAAU;AAGf,IAAA,IAAI,gBAAA,CAAiB,UAAU,CAAA,EAAG;AAEhC,MAAA,IAAI,CAAC,IAAA,CAAK,yBAAA,CAA0B,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,EAAG;AACtD,QAAA,IAAA,CAAK,yBAAA,CAA0B,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,EAAE,CAAA;AAAA,MACtD;AACA,MAAA,IAAA,CAAK,0BACF,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,CACjB,KAAK,WAAwC,CAAA;AAAA,IAClD,CAAA,MAAA,IAAW,oBAAA,CAAqB,UAAU,CAAA,EAAG;AAE3C,MAAA,IAAI,CAAC,IAAA,CAAK,iCAAA,CAAkC,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,EAAG;AAC9D,QAAA,IAAA,CAAK,iCAAA,CAAkC,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI,EAAE,CAAA;AAAA,MAC9D;AACA,MAAA,IAAA,CAAK,kCACF,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,CACjB,KAAK,WAA4C,CAAA;AAAA,IACtD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,8BAAA,CACN,UAAA,EACA,gBAAA,EACA,YAAA,EACqC;AACrC,IAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,MAAA,OAAO,gBAAA;AAAA,IACT;AAGA,IAAA,MAAM,oBAAA,GAAuB,CAAC,GAAG,YAAY,EAAE,OAAA,EAAQ;AAEvD,IAAA,IAAI,OAAA,GAAU,gBAAA;AACd,IAAA,KAAA,IAAS,IAAI,oBAAA,CAAqB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACzD,MAAA,MAAM,WAAA,GAAc,qBAAqB,CAAC,CAAA;AAC1C,MAAA,MAAM,YAAA,GAAe,OAAA;AAErB,MAAA,OAAA,iCAAiB,KAAA,KAAkB;AAEjC,QAAA,MAAM,cAAA,GAAqD;AAAA,UACzD,IAAA,EAAM;AAAA,YACJ,UAAA,EAAY,IAAA;AAAA;AAAA,YACZ;AAAA,WACF;AAAA,UACA,IAAA,EAAM;AAAA,SACR;AAGA,QAAA,MAAM,WAAA,2BACJE,EAAAA,KACiB;AACjB,UAAA,OAAO,YAAA,CAAaA,EAAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AAAA,QAClC,CAAA,EAJoB,aAAA,CAAA;AAMpB,QAAA,OAAO,WAAA,CAAY,aAAoB,cAAc,CAAA;AAAA,MACvD,CAAA,EAlBU,SAAA,CAAA;AAAA,IAmBZ;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,sCAAA,CACN,UAAA,EACA,gBAAA,EACA,YAAA,EAC2B;AAC3B,IAAA,IAAI,CAAC,aAAa,MAAA,EAAQ;AACxB,MAAA,OAAO,gBAAA;AAAA,IACT;AAGA,IAAA,MAAM,oBAAA,GAAuB,CAAC,GAAG,YAAY,EAAE,OAAA,EAAQ;AAEvD,IAAA,IAAI,OAAA,GAAU,gBAAA;AACd,IAAA,KAAA,IAAS,IAAI,oBAAA,CAAqB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACzD,MAAA,MAAM,WAAA,GAAc,qBAAqB,CAAC,CAAA;AAC1C,MAAA,MAAM,YAAA,GAAe,OAAA;AAErB,MAAA,OAAA,iCAAiB,MAAA,KAAc;AAE7B,QAAA,MAAM,cAAA,GAAyD;AAAA,UAC7D,QAAA,EAAU;AAAA,YACR,UAAA,EAAY,IAAA;AAAA;AAAA,YACZ;AAAA,WACF;AAAA,UACA,IAAA,EAAM;AAAA,SACR;AAGA,QAAA,MAAM,WAAA,2BAAe,KAAA,KAAkD;AACrE,UAAA,OAAO,YAAA,CAAa,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AAAA,QAC3C,CAAA,EAFoB,aAAA,CAAA;AAIpB,QAAA,OAAO,WAAA,CAAY,aAAoB,cAAc,CAAA;AAAA,MACvD,CAAA,EAhBU,SAAA,CAAA;AAAA,IAiBZ;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,kBAIL,IAAA,EAAqC;AACrC,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AAG9C,IAAA,IAAI,IAAA,iCAAc,KAAA,KAAe;AAE/B,MAAA,IAAI,QAAA,GAAW,KAAA;AAEf,MAAA,IAAI,KAAK,WAAA,EAAa;AACpB,QAAA,IAAI;AACF,UAAA,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,QAAQ,CAAA;AAAA,QAC5C,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,eAAA;AAAA,YACR,YAAA;AAAA,YACA,IAAA,CAAK,EAAA;AAAA,YACL,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,WAC1D;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,SAAA,CAAU,oBAAA;AACvB,MAAA,MAAM,YAAY,MAAM,IAAA,CAAK,IAAI,IAAA,CAAK,IAAA,EAAM,UAAU,IAAI,CAAA;AAC1D,MAAA,IAAI,KAAK,YAAA,EAAc;AACrB,QAAA,IAAI;AACF,UAAA,OAAO,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,SAAS,CAAA;AAAA,QAC1C,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,eAAA,CAAgB,aAAA,EAAe,IAAA,CAAK,IAAI,KAAY,CAAA;AAAA,QAChE;AAAA,MACF;AACA,MAAA,OAAO,SAAA;AAAA,IACT,CAAA,EA1BW,MAAA,CAAA;AA6BX,IAAA,IAAI,SAAA,CAAU,YAAA,IAAgB,SAAA,CAAU,YAAA,CAAa,SAAS,CAAA,EAAG;AAC/D,MAAA,KAAA,IAAS,IAAI,SAAA,CAAU,YAAA,CAAa,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3D,QAAA,MAAM,WAAA,GAAc,SAAA,CAAU,YAAA,CAAa,CAAC,CAAA;AAC5C,QAAA,MAAM,YAAA,GAAe,IAAA;AACrB,QAAA,IAAA,mBAAO,MAAA,CAAA,OAAO,KAAA,KAAU,WAAA,CAAY,YAAA,EAAc,KAAK,CAAA,EAAhD,MAAA,CAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,0BAAA,CAA2B,MAAA,GAAS,CAAA,EAAG;AAC9C,MAAA,MAAM,oBAAA,GAAuB;AAAA,QAC3B,GAAG,IAAA,CAAK;AAAA,QACR,OAAA,EAAQ;AAGV,MAAA,MAAM,oBAAA,mBAAuB,MAAA,CAAA,CAC3B,KAAA,EACA,QAAA,MACwC;AAAA,QACxC,IAAA,EAAM;AAAA,UACJ,UAAA,EAAY,IAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACA,IAAA,EAAM;AAAA,OACR,CAAA,EAT6B,sBAAA,CAAA;AAY7B,MAAA,IAAI,WAAA,GAAc,IAAA;AAElB,MAAA,KAAA,IAAS,IAAI,oBAAA,CAAqB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACzD,QAAA,MAAM,WAAA,GAAc,qBAAqB,CAAC,CAAA;AAC1C,QAAA,MAAM,YAAA,GAAe,WAAA;AAErB,QAAA,WAAA,iCAAqB,KAAA,KAAU;AAC7B,UAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,KAAA,EAAO,YAAY,CAAA;AAE/D,UAAA,MAAM,WAAA,2BACJA,EAAAA,KACiB;AACjB,YAAA,OAAO,YAAA,CAAaA,EAAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AAAA,UAClC,CAAA,EAJoB,aAAA,CAAA;AAKpB,UAAA,OAAO,WAAA,CAAY,aAAa,cAAc,CAAA;AAAA,QAChD,CAAA,EATc,aAAA,CAAA;AAAA,MAUhB;AAEA,MAAA,IAAA,GAAO,WAAA;AAAA,IACT;AAEA,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,4BAAA,CAA6B,IAAI,CAAA;AACjE,IAAA,IAAI,kBAAA,CAAmB,WAAW,CAAA,EAAG;AACnC,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,KAAA,IAAS,IAAI,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACvD,MAAA,MAAM,UAAA,GAAa,mBAAmB,CAAC,CAAA;AACvC,MAAA,MAAM,kBAAkB,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,WAAW,EAAE,CAAA;AAEpE,MAAA,MAAM,YAAA,GAAe,IAAA;AAGrB,MAAA,MAAM,oBAAA,iCAA8B,KAAA,KAAe;AAGjD,QAAA,OAAO,gBAAgB,UAAA,CAAW,GAAA;AAAA,UAChC;AAAA,YACE,IAAA,EAAM;AAAA,cACJ,UAAA,EAAY,IAAA;AAAA,cACZ;AAAA,aACF;AAAA,YACA,IAAA,EAAM;AAAA,WACR;AAAA,UACA,eAAA,CAAgB,oBAAA;AAAA,UAChB,UAAA,CAAW;AAAA,SACb;AAAA,MACF,CAAA,EAd6B,sBAAA,CAAA;AAiB7B,MAAA,MAAM,yBACJ,IAAA,CAAK,yBAAA,CAA0B,IAAI,UAAA,CAAW,EAAE,KAAK,EAAC;AAGxD,MAAA,MAAM,oBAAoB,IAAA,CAAK,8BAAA;AAAA,QAC7B,UAAA;AAAA,QACA,oBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAA,GAAO,iBAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,eAAA,CAMX,QAAA,EACA,MAAA,EACA,cACA,OAAA,EACwB;AACxB,IAAA,IAAI,IAAA,iCAAc,GAAA,KAAmC;AACnD,MAAA,IAAI,CAAC,QAAA,CAAS,IAAA,EAAM,OAAO,MAAA;AAC3B,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,IAAA,CAAK,IAAA;AAAA,QACnC,IAAA;AAAA,QACA,GAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,SAAS,YAAA,EAAc;AACzB,QAAA,IAAI;AACF,UAAA,OAAO,QAAA,CAAS,YAAA,CAAa,KAAA,CAAM,QAAQ,CAAA;AAAA,QAC7C,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,eAAA;AAAA,YACR,iBAAA;AAAA,YACA,QAAA,CAAS,EAAA;AAAA,YACT;AAAA,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA;AAAA,IACT,CAAA,EApBW,MAAA,CAAA;AAsBX,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,gCAAA,CAAiC,QAAQ,CAAA;AACzE,IAAA,KAAA,IAAS,IAAI,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACvD,MAAA,MAAM,UAAA,GAAa,mBAAmB,CAAC,CAAA;AACvC,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,mBAAA,CAAoB,GAAA;AAAA,QACrD,UAAA,CAAW;AAAA,OACb;AAEA,MAAA,MAAM,YAAA,GAAe,IAAA;AAGrB,MAAA,MAAM,oBAAA,iCAA8B,GAAA,KAAW;AAC7C,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,UAAA,CAAW,GAAA;AAAA,YAC9C;AAAA,cACE,QAAA,EAAU;AAAA,gBACR,UAAA,EAAY,QAAA;AAAA,gBACZ,MAAA,EAAQ;AAAA,eACV;AAAA,cACA,IAAA,EAAM;AAAA,aACR;AAAA,YACA,eAAA,CAAgB,oBAAA;AAAA,YAChB,UAAA,CAAW;AAAA,WACb;AAEA,UAAA,OAAO,MAAA;AAAA,QACT,SAAS,KAAA,EAAgB;AACvB,UAAA,IAAI;AACF,YAAA,MAAM,IAAA,CAAK,MAAM,gBAAA,CAAiB;AAAA,cAChC,KAAA;AAAA,cACA,IAAA,EAAM,cAAA;AAAA,cACN,QAAQ,QAAA,CAAS;AAAA,aAClB,CAAA;AAAA,UACH,SAAS,CAAA,EAAG;AAAA,UAAC;AAEb,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF,CAAA,EA1B6B,sBAAA,CAAA;AA6B7B,MAAA,MAAM,yBACJ,IAAA,CAAK,iCAAA,CAAkC,IAAI,UAAA,CAAW,EAAE,KAAK,EAAC;AAGhE,MAAA,MAAM,oBAAoB,IAAA,CAAK,sCAAA;AAAA,QAC7B,UAAA;AAAA,QACA,oBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAA,GAAO,iBAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,CAAK,8BAAA,CAA+B,MAAA,GAAS,CAAA,EAAG;AAClD,MAAA,MAAM,oBAAA,GAAuB;AAAA,QAC3B,GAAG,IAAA,CAAK;AAAA,QACR,OAAA,EAAQ;AAGV,MAAA,MAAM,oBAAA,mBAAuB,MAAA,CAAA,CAC3BC,OAAAA,EACA,QAAA,MAC0C;AAAA,QAC1C,QAAA,EAAU;AAAA,UACR,UAAA,EAAY,QAAA;AAAA,UACZ,MAAA,EAAQA;AAAA,SACV;AAAA,QACA,IAAA,EAAM;AAAA,OACR,CAAA,EAT6B,sBAAA,CAAA;AAY7B,MAAA,IAAI,WAAA,GAAc,IAAA;AAElB,MAAA,KAAA,IAAS,IAAI,oBAAA,CAAqB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACzD,QAAA,MAAM,WAAA,GAAc,qBAAqB,CAAC,CAAA;AAC1C,QAAA,MAAM,YAAA,GAAe,WAAA;AAErB,QAAA,WAAA,iCAAqB,GAAA,KAAW;AAC9B,UAAA,MAAM,cAAA,GAAiB,oBAAA,CAAqB,GAAA,EAAK,YAAY,CAAA;AAE7D,UAAA,MAAM,WAAA,2BACJ,KAAA,KACG;AACH,YAAA,OAAO,YAAA,CAAa,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA;AAAA,UAC3C,CAAA,EAJoB,aAAA,CAAA;AAKpB,UAAA,OAAO,WAAA,CAAY,aAAa,cAAc,CAAA;AAAA,QAChD,CAAA,EATc,aAAA,CAAA;AAAA,MAUhB;AAEA,MAAA,IAAA,GAAO,WAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAK,MAAM,CAAA;AAAA,EACpB;AAAA,EAEQ,6BAIN,IAAA,EAAqC;AACrC,IAAA,MAAM,sBAAsB,IAAA,CAAK,UAAA;AACjC,IAAA,MAAM,wBAAwB,mBAAA,CAAoB,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AACjE,IAAA,MAAMC,kBAAAA,GAAoB,IAAA,CAAK,+BAAA,CAAgC,IAAI,CAAA,CAAE,MAAA;AAAA,MACnE,CAAC,CAAA,KAAM,CAAC,qBAAA,CAAsB,QAAA,CAAS,EAAE,EAAE;AAAA,KAC7C;AACA,IAAA,OAAO,CAAC,GAAGA,kBAAAA,EAAmB,GAAG,mBAAmB,CAAA;AAAA,EACtD;AAAA,EAEQ,iCAKN,QAAA,EAAwC;AACxC,IAAA,MAAM,sBAAsB,QAAA,CAAS,UAAA;AACrC,IAAA,MAAM,wBAAwB,mBAAA,CAAoB,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AACjE,IAAA,MAAMA,qBAAoB,IAAA,CAAK,mCAAA;AAAA,MAC7B;AAAA,KACF,CAAE,OAAO,CAAC,CAAA,KAAM,CAAC,qBAAA,CAAsB,QAAA,CAAS,CAAA,CAAE,EAAE,CAAC,CAAA;AACrD,IAAA,OAAO,CAAC,GAAGA,kBAAAA,EAAmB,GAAG,mBAAmB,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gCACE,IAAA,EACmB;AACnB,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,MAAM,eAAA,CAAgB,MAAA,EAAQ,CAAA,CAClD,MAAA,CAAO,CAAC,CAAA,KAAM,OAAA,CAAQ,EAAE,UAAA,CAAW,UAAU,CAAC,CAAA,CAC9C,MAAA,CAAO,CAAC,CAAA,KAAM;AACb,MAAA,IAAI,OAAO,CAAA,CAAE,UAAA,CAAW,UAAA,KAAe,UAAA,EAAY;AACjD,QAAA,OAAO,CAAA,CAAE,UAAA,CAAW,UAAA,CAAY,IAAI,CAAA;AAAA,MACtC;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,UAAU,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,oCACE,MAAA,EACuB;AACvB,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,MAAM,mBAAA,CAAoB,MAAA,EAAQ,CAAA,CACtD,MAAA,CAAO,CAAC,CAAA,KAAM,OAAA,CAAQ,EAAE,UAAA,CAAW,UAAU,CAAC,CAAA,CAC9C,MAAA,CAAO,CAAC,CAAA,KAAM;AACb,MAAA,IAAI,OAAO,CAAA,CAAE,UAAA,CAAW,UAAA,KAAe,UAAA,EAAY;AACjD,QAAA,OAAO,CAAA,CAAE,UAAA,CAAW,UAAA,CAAY,MAAM,CAAA;AAAA,MACxC;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,UAAU,CAAA;AAAA,EAC5B;AACF,CAAA;AA5fE,SAAA,GAAA,IAAA,OAAA,EAAA;AAd6B,MAAA,CAAA,kBAAA,EAAA,mBAAA,CAAA;AAAxB,IAAM,iBAAA,GAAN;;;ACvCA,IAAM,oBAAA,GAAN,MAAM,oBAAA,CAAoB;AAAA,EAC/B,WAAA,CACqBJ,MAAAA,EACA,YAAA,EACA,MAAA,EACnB;AAHmB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAEnB,IAAA,IAAA,CAAK,oBAAoB,IAAI,iBAAA;AAAA,MAC3B,IAAA,CAAK,KAAA;AAAA,MACL,IAAA,CAAK,YAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,kBAAA,CAMX,QAAA,EACA,MAAA,EACA,YAAA,EAC+C;AAC/C,IAAA,MAAM,OAAA,GAAU,SAAS,OAAA,IAAU;AAEnC,IAAA,IAAI,KAAA;AAEJ,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,QAAA,CAAS,QAAQ,YAAY,MAAA,CAAA;AAAA,IAC/B;AAEA,IAAA,IAAI,SAAS,IAAA,EAAM;AACjB,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,kBAAA;AAAA,QACjB,QAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,OAAwB,OAAA,EAAQ;AAAA,EAC3C;AAAA;AAAA,EAIA,MAAa,kBAAA,CAMX,QAAA,EACA,MAAA,EACA,cACA,OAAA,EACA;AACA,IAAA,OAAO,KAAK,iBAAA,CAAkB,eAAA;AAAA,MAC5B,QAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAA;AArEiC,MAAA,CAAA,oBAAA,EAAA,qBAAA,CAAA;AAA1B,IAAM,mBAAA,GAAN;;;ACXA,SAAS,aAAA,CACd,KAAA,EACA,KAAA,EACA,OAAA,EACQ;AACR,EAAA,MAAM,IAAA,uBAAW,OAAA,EAAgB;AACjC,EAAA,MAAM,WAAA,uBAAkB,OAAA,EAAwB;AAEhD,EAAA,MAAM,WACJ,OAAO,OAAA,EAAS,QAAA,KAAa,QAAA,GAAW,QAAS,QAAA,GAAY,QAAA;AAE/D,EAAA,MAAM,QAAA,mBAAW,MAAA,CAAA,SAAqB,IAAA,EAAc,GAAA,EAAU;AAE5D,IAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,MAAA,OAAO,YAAA;AAAA,IACT;AAGA,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,OAAO,IAAI,QAAA,EAAS;AAAA,IACtB;AAGA,IAAA,MAAM,YAAA,GAAe,OAAO,IAAI,CAAA;AAChC,IAAA,MAAM,WAAA,GAAc,WAAA,CAAY,GAAA,CAAI,YAAsB,CAAA,IAAK,CAAA;AAC/D,IAAA,MAAM,eAAe,WAAA,GAAc,CAAA;AAEnC,IAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AAC3C,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG,OAAO,YAAA;AAG1B,MAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,QAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,SAAA,GAAY,UAAA;AAAA,MAC1C;AAEA,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,MAAA,WAAA,CAAY,GAAA,CAAI,KAAK,YAAY,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EA5BiB,UAAA,CAAA;AA8BjB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAc,QAAA,EAAU,KAAK,CAAA;AAAA,EACrD,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,kBAAA;AAAA,IACT;AAAA,EACF;AACF;AAlDgB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;;;ACGhB,IAAM,SAAA,GACJ,mEAAA;AACF,SAAS,UAAU,GAAA,EAAqB;AACtC,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAClC;AAFS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AA2CT,IAAM,MAAA,GAA+B;AAAA,EACnC,KAAA,EAAO,UAAA;AAAA,EACP,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO,UAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,GAAA,EAAK,SAAA;AAAA,EACL,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,KAAA,GAAQ;AAAA,EACZ,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,WAAA,GAAN,MAAM,WAAA,CAAW;AAAA,EAItB,YAAY,OAAA,EAIT;AACD,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAI,OAAA,CAAQ,aAAa,OAAA,EAAS;AAChC,MAAA,IAAA,CAAK,SAAS,WAAA,CAAW,SAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,MAAM,OACJ,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,UAAA,GAAa,SAAS,WAAA,CAAW,SAAA;AAChE,MAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,IAAA,EAAM,GAAI,OAAA,CAAQ,UAAA,IAAc,EAAC,EAAG;AAAA,IACzD;AAAA,EACF;AAAA,EAEO,MAAM,GAAA,EAAyB;AACpC,IAAA,IAAI,IAAA,CAAK,aAAa,MAAA,EAAQ;AAC5B,MAAA,WAAA,CAAW,QAAQ,GAAA,CAAI,aAAA,CAAc,KAAK,gBAAA,CAAiB,GAAG,CAAC,CAAC,CAAA;AAChE,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,aAAa,aAAA,EAAe;AACnC,MAAA,WAAA,CAAW,OAAA,CAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,iBAAiB,GAAG,CAAA,EAAG,CAAC,CAAC,CAAA;AACnE,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,EAAE,OAAO,MAAA,EAAQ,OAAA,EAAS,WAAW,KAAA,EAAO,IAAA,EAAM,SAAQ,GAAI,GAAA;AAEpE,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA;AAC1C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA;AACxC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAE3C,IAAA,MAAM,UAAA,GAAa,CAAC,QAAA,EAAU,SAAA,EAAW,UAAU,EAChD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AAEX,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAChD,IAAA,MAAM,YAAA,GAAe,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA;AAE7C,IAAA,MAAM,MAAA,GAAmB,CAAC,UAAU,CAAA;AAEpC,IAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,QAAQ,CAAA,CAAE,MAAA;AAC3C,IAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,SAAS,CAAA,CAAE,MAAA;AAE7C,IAAA,MAAM,cAAc,GAAA,CAAI,MAAA,CAAO,cAAA,GAAiB,CAAA,GAAI,kBAAkB,CAAC,CAAA;AAEvE,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAG,WAAW,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,IACpE;AAEA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,CAAY,KAAK,CAAA;AACzC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AACtC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AAE/C,IAAA,MAAM,YAAA,GACJ,WAAW,MAAA,GAAS,CAAA,IAAK,UAAU,MAAA,GAAS,CAAA,IAAK,aAAa,MAAA,GAAS,CAAA;AAEzE,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AAAA,IAChB;AAEA,IAAA,MAAA,CAAO,KAAK,GAAG,UAAA,EAAY,GAAG,SAAA,EAAW,GAAG,YAAY,CAAA;AAExD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AACpC,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,KAAS,MAAA,CAAO,IAAI,CAAC,CAAA;AAErC,IAAA,MAAA,CAAO,EAAE,CAAA;AAAA,EACX;AAAA,EAEQ,WAAW,KAAA,EAAkB;AACnC,IAAA,MAAM,OAAA,GACJ,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,WAAW,KAAA,KAAU,UAAA;AACrD,IAAA,IAAI,OAAA,IAAW,OAAO,WAAA,CAAW,OAAA,CAAQ,UAAU,UAAA,EAAY;AAC7D,MAAA,OAAO,CAAC,GAAA,KAAa,WAAA,CAAW,OAAA,CAAQ,MAAO,GAAG,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,CAAC,GAAA,KAAa,WAAA,CAAW,OAAA,CAAQ,IAAI,GAAG,CAAA;AAAA,EACjD;AAAA,EAEQ,WAAW,SAAA,EAAyB;AAC1C,IAAA,MAAM,OAAO,SAAA,CAAU,WAAA,EAAY,CAAE,KAAA,CAAM,IAAI,EAAE,CAAA;AACjD,IAAA,MAAM,EAAA,GAAK,UAAU,eAAA,EAAgB,CAAE,UAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACjE,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,EAC7D;AAAA,EAEQ,YAAY,KAAA,EAAuB;AACzC,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,KAA4B,CAAA,IAAK,KAAK,MAAA,CAAO,IAAA;AACvE,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAA2B,CAAA,IAAK,QAAA;AACnD,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,WAAA,EAAY,CAAE,OAAO,CAAC,CAAA;AAC1C,IAAA,OAAO,CAAA,EAAG,KAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAG,KAAK,CAAA,EAAG,IAAA,CAAK,OAAO,KAAK,CAAA,CAAA;AAAA,EACxE;AAAA,EAEQ,aAAa,MAAA,EAAyB;AAC5C,IAAA,IAAI,CAAC,QAAQ,OAAO,EAAA;AACpB,IAAA,OAAO,CAAA,EAAG,KAAK,MAAA,CAAO,IAAI,GAAG,MAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,EACzD;AAAA,EAEQ,cAAc,OAAA,EAAsB;AAC1C,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,IAAA,EAAM;AACnD,MAAA,OAAO,aAAA,CAAc,SAAS,CAAC,CAAA;AAAA,IACjC;AACA,IAAA,OAAO,OAAO,OAAO,CAAA;AAAA,EACvB;AAAA,EAEQ,WAAA,CACN,KAAA,EACA,WAAA,GAAc,IAAA,EACJ;AACV,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,EAAC;AACpB,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,CAAA,EAAG,WAAW,CAAA,EAAG,IAAA,CAAK,OAAO,IAAI,CAAA,YAAA,EAAK,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,KAAK,MAAA,CAAO,KAAK,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,MAAM,OAAO,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,KACxI;AACA,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,MAAM,SAAS,KAAA,CAAM,KAAA,CAAM,MAAM,IAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AAC9C,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,QAAA,MAAM,UAAU,KAAA,CAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC/C,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,GAAG,WAAW,CAAA,GAAA,EAAM,KAAK,MAAA,CAAO,IAAI,SAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,GAAG,CAAA,EAAG,OAAO,CAAA,EAAG,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,SAC5G;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,UAAA,CAAW,IAAA,EAA4B,WAAA,GAAc,IAAA,EAAgB;AAC3E,IAAA,IAAI,CAAC,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACrD,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,IAAA,EAAM,CAAA,EAAG,EAAE,UAAU,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA;AACpE,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,GAAG,WAAW,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,YAAA,EAAK,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,KACtG;AACA,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,IAAA,KAAS;AAE1B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,WAAW,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1E,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,aAAA,CACN,OAAA,EACA,WAAA,GAAc,IAAA,EACJ;AACV,IAAA,IAAI,CAAC,OAAA,EAAS,OAAO,EAAC;AACtB,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,OAAA,EAAQ;AAC9B,IAAA,OAAQ,QAAA,CAAiB,MAAA;AACzB,IAAA,IAAI,OAAO,IAAA,CAAK,QAAQ,EAAE,MAAA,KAAW,CAAA,SAAU,EAAC;AAChD,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,QAAA,EAAU,CAAA,EAAG,EAAE,UAAU,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA;AACxE,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,GAAG,WAAW,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,YAAA,EAAK,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,QAAA,EAAW,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,KACzG;AACA,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,IAAA,KAAS;AAE1B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,WAAW,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,EAAG,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1E,CAAC,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,iBAAiB,GAAA,EAAmB;AAC1C,IAAA,MAAM,UAAA,GAAkB,EAAE,GAAG,GAAA,EAAI;AACjC,IAAA,IAAI,OAAO,GAAA,CAAI,OAAA,KAAY,QAAA,EAAU;AACnC,MAAA,MAAM,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA;AACtC,MAAA,IAAI;AACF,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AACN,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EA2BA,OAAc,WACZ,OAAA,EACA;AACA,IAAA,WAAA,CAAW,UAAU,EAAE,GAAG,WAAA,CAAW,OAAA,EAAS,GAAG,OAAA,EAAQ;AAAA,EAC3D;AAAA,EAEA,OAAc,YAAA,GAAe;AAE3B,IAAA,WAAA,CAAW,OAAA,GAAU;AAAA,MACnB,qBAAK,MAAA,CAAA,CAAC,GAAA,KAAa,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAA7B,KAAA,CAAA;AAAA,MACL,uBAAO,MAAA,CAAA,CAAC,GAAA,KAAa,OAAA,CAAQ,KAAA,GAAQ,GAAG,CAAA,EAAjC,OAAA;AAAA,KACT;AAAA,EACF;AACF,CAAA;AA1NwB,MAAA,CAAA,WAAA,EAAA,YAAA,CAAA;AAAX,WAAA,CAoLI,SAAA,GAAwB;AAAA,EACrC,KAAA,EAAO,EAAA;AAAA,EACP,KAAA,EAAO,EAAA;AAAA,EACP,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,QAAA,EAAU,EAAA;AAAA,EACV,KAAA,EAAO,EAAA;AAAA,EACP,IAAA,EAAM,EAAA;AAAA,EACN,GAAA,EAAK,EAAA;AAAA,EACL,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAjMW,WAAA,CAmMI,OAAA,GAGX;AAAA;AAAA,EAEF,qBAAK,MAAA,CAAA,CAAC,GAAA,KAAa,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAA7B,KAAA,CAAA;AAAA;AAAA,EAEL,uBAAO,MAAA,CAAA,CAAC,GAAA,KAAa,OAAA,CAAQ,KAAA,GAAQ,GAAG,CAAA,EAAjC,OAAA;AACT,CAAA;AA3MK,IAAM,UAAA,GAAN,WAAA;;;ACpCA,IAAM,OAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EAwBlB,YACE,OAAA,EAMA,YAAA,GAAoC,EAAC,EACrC,QACA,OAAA,EACA;AAjCF,IAAA,IAAA,CAAQ,cAAA,GAAmC,MAAA;AAC3C,IAAA,IAAA,CAAQ,aAAA,GAA+B,QAAA;AACvC,IAAA,IAAA,CAAQ,UAAA,GAAsB,KAAA;AAC9B,IAAA,IAAA,CAAQ,SAAiB,EAAC;AAC1B,IAAA,IAAA,CAAQ,eAAoC,EAAC;AAC7C,IAAA,IAAA,CAAQ,QAAA,GAAoB,KAAA;AAC5B,IAAA,IAAA,CAAQ,SAAA,GAAqB,IAAA;AAM7B;AAAA,IAAA,IAAA,CAAO,iBAA6D,EAAC;AAsBnE,IAAA,IAAA,CAAK,YAAA,GAAe,EAAE,GAAG,YAAA,EAAa;AACtC,IAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAC9B,IAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,aAAA;AAC7B,IAAA,IAAA,CAAK,aAAa,OAAA,CAAQ,UAAA;AAC1B,IAAA,IAAA,CAAK,SAAA,GACH,OAAO,OAAA,CAAQ,SAAA,KAAc,YACzB,OAAA,CAAQ,SAAA,GACR,KAAK,kBAAA,EAAmB;AAE9B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAEd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,GACX,OAAA,GACA,IAAI,UAAA,CAAW;AAAA,MACb,UAAU,IAAA,CAAK,aAAA;AAAA,MACf,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AAAA,EACP;AAAA,EAEQ,kBAAA,GAA8B;AAGpC,IAAA,MAAM,UAAU,OAAO,OAAA,KAAY,eAAe,CAAC,CAAC,QAAQ,GAAA,CAAI,QAAA;AAChE,IAAA,IAAI,SAAS,OAAO,KAAA;AAEpB,IAAA,MAAM,KAAA,GACJ,OAAO,OAAA,KAAY,WAAA,IACnB,CAAC,CAAC,OAAA,CAAQ,MAAA,IACV,CAAC,CAAC,OAAA,CAAQ,MAAA,CAAO,KAAA;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,CAAK;AAAA,IACV,MAAA;AAAA,IACA,iBAAA,EAAmB;AAAA,GACrB,EAGW;AACT,IAAA,MAAM,QAAQ,IAAI,OAAA;AAAA,MAChB;AAAA,QACE,gBAAgB,IAAA,CAAK,cAAA;AAAA,QACrB,eAAe,IAAA,CAAK,aAAA;AAAA,QACpB,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,WAAW,IAAA,CAAK;AAAA,OAClB;AAAA,MACA,EAAE,GAAG,IAAA,CAAK,YAAA,EAAc,GAAG,OAAA,EAAQ;AAAA,MACnC,MAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,KAAA,CAAM,UAAA,GAAa,KAAK,UAAA,IAAc,IAAA;AACtC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,GAAA,CACX,KAAA,EACA,OAAA,EACA,OAAA,GAAoB,EAAC,EACN;AACf,IAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,GAAG,SAAQ,GAAI,OAAA;AAE5C,IAAA,MAAM,GAAA,GAAY;AAAA,MAChB,KAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,EAAQ,UAAU,IAAA,CAAK,MAAA;AAAA,MACvB,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,KAAA,EAAO,KAAA,GAAQ,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAA,GAAI,MAAA;AAAA,MAC9C,MAAM,IAAA,IAAQ,MAAA;AAAA,MACd,SAAS,EAAE,GAAG,IAAA,CAAK,YAAA,EAAc,GAAG,OAAA;AAAQ,KAC9C;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,UAAA,IAAc,IAAA;AAEhC,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,GAAG,CAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,oBAAoB,GAAG,CAAA;AAElC,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,IACxB;AAAA,EACF;AAAA,EAEQ,iBAAiB,KAAA,EAIvB;AACA,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAO;AAAA,QACL,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAO,KAAA,CAAM;AAAA,OACf;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA;AAAA,MACN,OAAA,EAAS,OAAO,KAAK;AAAA,KACvB;AAAA,EACF;AAAA,EAEA,MAAa,IAAA,CAAK,OAAA,EAAc,OAAA,EAAoB;AAClD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,MAAa,KAAA,CAAM,OAAA,EAAc,OAAA,EAAoB;AACnD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAa,IAAA,CAAK,OAAA,EAAc,OAAA,EAAoB;AAClD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,MAAa,KAAA,CAAM,OAAA,EAAc,OAAA,EAAoB;AACnD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAa,KAAA,CAAM,OAAA,EAAc,OAAA,EAAoB;AACnD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,OAAO,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAa,QAAA,CAAS,OAAA,EAAc,OAAA,EAAoB;AACtD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,OAAA,EAAS,OAAO,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKO,MAAM,GAAA,EAAW;AACtB,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKO,MAAM,QAAA,EAA8B;AACzC,IAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,UAAA,KAAe,IAAA,EAAM;AAC/C,MAAA,IAAA,CAAK,UAAA,CAAW,MAAM,QAAQ,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,cAAA,CAAe,KAAK,QAAQ,CAAA;AAAA,IACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,IAAA,GAAO;AAClB,IAAA,MAAM,IAAA,GAAO,KAAK,UAAA,IAAc,IAAA;AAChC,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC7B,QAAA,MAAM,IAAA,CAAK,oBAAoB,GAAG,CAAA;AAAA,MACpC;AACA,MAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC7B,QAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA,EAAG;AAC5B,UAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EAClB;AAAA,EAEQ,SAAS,KAAA,EAAkB;AACjC,IAAA,IAAI,IAAA,CAAK,mBAAmB,IAAA,EAAM;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OACE,IAAA,CAAK,kBACL,OAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,OAAA,CAAO,QAAA,CAAS,IAAA,CAAK,cAAc,CAAA;AAAA,EAEjE;AAAA,EAEA,MAAc,oBAAoB,GAAA,EAAW;AAC3C,IAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,UAAA,KAAe,IAAA,EAAM;AAC/C,MAAA,MAAM,IAAA,CAAK,UAAA,CAAW,mBAAA,CAAoB,GAAG,CAAA;AAAA,IAC/C;AAEA,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,cAAA,EAAgB;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,GAAG,CAAA;AAAA,MACpB,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,KAAA,CAAM;AAAA,UACT,KAAA,EAAO,OAAA;AAAA,UACP,OAAA,EAAS,uBAAA;AAAA,UACT,SAAA,sBAAe,IAAA,EAAK;AAAA,UACpB,KAAA,EAAO;AAAA,YACL,IAAA,EAAM,eAAA;AAAA,YACN,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA;AAChE,SACD,CAAA;AAED,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAxPoB,MAAA,CAAA,OAAA,EAAA,QAAA,CAAA;AAAP,OAAA,CAeG,QAAA,GAAW;AAAA,EACvB,KAAA,EAAO,CAAA;AAAA,EACP,KAAA,EAAO,CAAA;AAAA,EACP,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,KAAA,EAAO,CAAA;AAAA,EACP,QAAA,EAAU;AACZ,CAAA;AAtBK,IAAM,MAAA,GAAN;;;ACJA,IAAM,oBAAA,GAAN,MAAM,oBAAA,CAAoB;AAAA,EAG/B,WAAA,CACqBA,MAAAA,EACA,YAAA,EACA,UAAA,EACnB,MAAA,EACA;AAJmB,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAGnB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,IAAA,CAAK,EAAE,MAAA,EAAQ,uBAAuB,CAAA;AAC3D,IAAA,IAAA,CAAK,sBAAsB,IAAI,mBAAA;AAAA,MAC7BA,MAAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,GAAyB;AAC7B,IAAA,KAAA,MAAW,UAAA,IAAc,IAAA,CAAK,KAAA,CAAM,mBAAA,CAAoB,QAAO,EAAG;AAChE,MAAA,MAAM,oBAAA,GAAuB,MAAM,IAAA,CAAK,mBAAA;AAAA,QACtC,WAAW,UAAA,CAAW,YAAA;AAAA,QACtB,WAAW,UAAA,CAAW;AAAA,OACxB;AAEA,MAAA,UAAA,CAAW,oBAAA,GAAuB,oBAAA;AAClC,MAAA,UAAA,CAAW,aAAA,GAAgB,IAAA;AAAA,IAC7B;AAEA,IAAA,KAAA,MAAW,UAAA,IAAc,IAAA,CAAK,KAAA,CAAM,eAAA,CAAgB,QAAO,EAAG;AAC5D,MAAA,MAAM,oBAAA,GAAuB,MAAM,IAAA,CAAK,mBAAA;AAAA,QACtC,WAAW,UAAA,CAAW,YAAA;AAAA,QACtB,WAAW,UAAA,CAAW;AAAA,OACxB;AAEA,MAAA,UAAA,CAAW,oBAAA,GAAuB,oBAAA;AAClC,MAAA,UAAA,CAAW,aAAA,GAAgB,IAAA;AAAA,IAC7B;AAEA,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,QAAO,EAAG;AACpD,MAAA,MAAM,IAAA,CAAK,4BAA4B,QAAQ,CAAA;AAAA,IACjD;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAO,EAAG;AAC5C,MAAA,MAAM,IAAA,CAAK,wBAAwB,IAAI,CAAA;AAAA,IACzC;AAGA,IAAA,KAAA,MAAW,gBAAA,IAAoB,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAO,EAAG;AACxD,MAAA,MAAM,OAAO,gBAAA,CAAiB,IAAA;AAC9B,MAAA,MAAM,OAAO,IAAA,CAAK,YAAA;AAClB,MAAA,gBAAA,CAAiB,oBAAA,GAAuB,MAAM,IAAA,CAAK,mBAAA;AAAA,QACjD,IAAA;AAAA,QACA,IAAA,CAAK;AAAA,OACP;AAAA,IACF;AAIA,IAAA,MAAM,KAAK,gCAAA,EAAiC;AAAA,EAC9C;AAAA,EAEA,MAAc,wBACZ,IAAA,EACA;AACA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,CAAK,YAAA;AACvB,IAAA,IAAA,CAAK,oBAAA,GAAuB,MAAM,IAAA,CAAK,mBAAA;AAAA,MACrC,IAAA;AAAA,MACA,KAAK,IAAA,CAAK;AAAA,KACZ;AAGA,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA,EAIA,MAAa,gCAAA,GAAmC;AAC9C,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,QAAO,EAAG;AACpD,MAAA,IACE,SAAS,aAAA,KAAkB,KAAA;AAAA,MAE3B,SAAS,QAAA,CAAS,EAAA,KAAO,KAAK,KAAA,CAAM,IAAA,CAAK,SAAS,EAAA,EAClD;AACA,QAAA,MAAM,IAAA,CAAK,4BAA4B,QAAQ,CAAA;AAC/C,QAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GACrB,MAAM,KAAK,mBAAA,CAAoB,kBAAA;AAAA,UAC7B,QAAA,CAAS,QAAA;AAAA,UACT,QAAA,CAAS,MAAA;AAAA,UACT,QAAA,CAAS;AAAA,SACX;AACF,QAAA,QAAA,CAAS,OAAA,GAAU,OAAA;AACnB,QAAA,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,QAAA,QAAA,CAAS,aAAA,GAAgB,IAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAgB,4BACd,QAAA,EACA;AACA,IAAA,MAAM,IAAA,GAAQ,QAAA,CAAS,QAAA,CAAS,YAAA,IAAiB,EAAC;AAClD,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA;AAAA,MAC3B,IAAA;AAAA,MACA,SAAS,QAAA,CAAS;AAAA,KACpB;AAEA,IAAA,QAAA,CAAS,uBAAuB,IAAA,CAAK,wBAAA;AAAA,MACnC,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EAEF;AAAA,EAEQ,wBAAA,CACN,MACA,SAAA,EACkC;AAClC,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAsB;AACtD,MAAA,MAAM,QAAA,GAAW,KAAK,GAAG,CAAA;AACzB,MAAA,MAAM,KAAA,GAAS,UAAsC,GAAa,CAAA;AAElE,MAAA,IAAU,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,QAAA,MAAM,QAAQ,QAAA,CAAS,KAAA;AACvB,QAAA,IAAU,MAAA,CAAO,KAAK,CAAA,EAAG;AACvB,UAAA,OAAA,CAAQ,GAAa,CAAA,GAAI,KAAA,GACrB,IAAA,CAAK,qBAAA,CAAsB,KAAK,CAAA,GAChC,MAAA;AAAA,QACN,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAa,CAAA,GAAI,KAAA;AAAA,QAC3B;AACA,QAAA;AAAA,MACF;AACA,MAAA,IAAU,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC1B,QAAA,OAAA,CAAQ,GAAa,CAAA,GAAI,IAAA,CAAK,qBAAA,CAAsB,QAAQ,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAa,CAAA,GAAI,KAAA;AAAA,MAC3B;AAAA,IACF;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,sBAIN,QAAA,EAA6D;AAC7D,IAAA,MAAM,SAAS,QAAA,CAAS,EAAA;AACxB,IAAA,MAAM,EAAA,2BAAuB,KAAA,KAAU;AACrC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,MAAM,CAAA;AAC7C,MAAA,MAAM,YAA4B,SAAA,CAAU,IAAA;AAE5C,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,SAAA,EAAW,KAAK,CAAA;AAAA,IAC7C,CAAA,EAL4B,IAAA,CAAA;AAM5B,IAAA,OAAO,MAAA,CAAO,OAAO,EAAA,EAAI;AAAA,MACvB,SAAA,0BAAY,UAAA,KAA2C;AACrD,QAAA,IAAA,CAAK,MAAM,SAAA,EAAU;AACrB,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,MAAM,CAAA;AAE7C,QAAA,IAAI,CAAC,SAAA,CAAU,YAAA,EAAc,SAAA,CAAU,eAAe,EAAC;AACvD,QAAA,SAAA,CAAU,YAAA,CAAa,KAAK,UAAU,CAAA;AAAA,MACxC,CAAA,EANW,WAAA;AAAA,KAOZ,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,cAAA,GAAiB;AAC5B,IAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,IAAA;AAEhC,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GACrB,MAAM,KAAK,mBAAA,CAAoB,kBAAA;AAAA,MAC7B,YAAA,CAAa,QAAA;AAAA,MACb,YAAA,CAAa,MAAA;AAAA;AAAA,MAEb,YAAA,CAAa;AAAA,KACf;AAEF,IAAA,YAAA,CAAa,OAAA,GAAU,OAAA;AACvB,IAAA,YAAA,CAAa,KAAA,GAAQ,KAAA;AACrB,IAAA,YAAA,CAAa,aAAA,GAAgB,IAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAAkB;AAEvB,IAAA,KAAA,MAAW,gBAAA,IAAoB,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,QAAO,EAAG;AACxD,MAAA,MAAM,OAAO,gBAAA,CAAiB,IAAA;AAC9B,MAAA,IAAI,KAAK,EAAA,EAAI;AACX,QAAA,MAAM,kBAAkB,IAAA,CAAK,EAAA;AAE7B,QAAA,MAAM,OAAA,iCAAiB,aAAA,KAAuC;AAC5D,UAAA,IAAI,aAAA,CAAc,MAAA,KAAW,IAAA,CAAK,EAAA,EAAI;AACpC,YAAA;AAAA,UACF;AACA,UAAA,OAAO,KAAK,YAAA,CAAa,2BAAA;AAAA,YACvB,IAAA;AAAA,YACA,aAAA;AAAA,YACA,gBAAA,CAAiB;AAAA,WACnB;AAAA,QACF,CAAA,EATgB,SAAA,CAAA;AAWhB,QAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,IAAS,CAAA;AAE5B,QAAA,IAAI,oBAAoB,GAAA,EAAK;AAC3B,UAAA,IAAA,CAAK,YAAA,CAAa,iBAAA,CAAkB,OAAA,EAAS,EAAE,OAAO,CAAA;AAAA,QACxD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,EAAG;AACzC,UAAA,KAAA,MAAW,MAAM,eAAA,EAAiB;AAChC,YAAA,IAAI,KAAK,KAAA,CAAM,MAAA,CAAO,IAAI,EAAA,CAAG,EAAE,MAAM,MAAA,EAAW;AAC9C,cAAA,MAAM,IAAI,kBAAA,CAAmB,EAAA,CAAG,EAAE,CAAA;AAAA,YACpC;AAAA,UACF;AACA,UAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,eAAA,EAAwB,OAAA,EAAS;AAAA,YAC7D;AAAA,WACD,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,IAAI,KAAK,KAAA,CAAM,MAAA,CAAO,IAAI,eAAA,CAAgB,EAAE,MAAM,MAAA,EAAW;AAC3D,YAAA,MAAM,IAAI,kBAAA,CAAmB,eAAA,CAAgB,EAAE,CAAA;AAAA,UACjD;AACA,UAAA,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,eAAA,EAAwB,OAAA,EAAS;AAAA,YAC7D;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBAAA,CACJ,GAAA,EACA,MAAA,EACkC;AAClC,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,GAAG,IAAI,MAAM,IAAA,CAAK,kBAAkB,GAAA,CAAI,GAAG,GAAG,MAAM,CAAA;AAG3D,QAAA,IAAK,MAAA,CAAO,GAAG,CAAA,YAAqB,MAAA,EAAQ;AAC1C,UAAA,MAAA,CAAO,GAAG,IAAI,MAAA,CAAO,GAAG,EAAE,IAAA,CAAK,EAAE,QAAQ,CAAA;AAAA,QAC3C;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,MAAM,YAAA,GAAe,OAAO,CAAC,CAAA;AAC7B,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,UACV,CAAA,0CAAA,EAA6C,MAAM,CAAA,IAAA,EAAO,GAAG,gBAAgB,YAAY,CAAA;AAAA,SAC3F;AAEA,QAAA,MAAM,CAAA;AAAA,MACR;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,4CAAA,EAA+C,MAAM,CAAA,CAAE,CAAA;AAEzE,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,iBAAA,CAAkB,MAAA,EAAa,MAAA,EAAgB;AACnD,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,yBAAA,EAA4B,MAAM,CAAA,IAAA,EAAO,MAAA,EAAQ,EAAE,CAAA,CAAE,CAAA;AACvE,IAAA,IAAU,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,MAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,MAAA,IAAU,UAAA,CAAW,KAAK,CAAA,EAAG;AAC3B,QAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,UAAU,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,KAAM,MAAA;AACtD,QAAA,OAAO,MAAA,GAAS,IAAA,CAAK,yBAAA,CAA0B,KAAK,CAAA,GAAI,MAAA;AAAA,MAC1D,CAAA,MAAA,IAAiB,MAAA,CAAO,KAAK,CAAA,EAAG;AAC9B,QAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,MAAM,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,KAAM,MAAA;AAClD,QAAA,OAAO,MAAA,GAAS,IAAA,CAAK,qBAAA,CAAsB,KAAK,CAAA,GAAI,MAAA;AAAA,MACtD,CAAA,MAAA,IAAiB,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,QAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,OAAO,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,KAAM,MAAA;AACnD,QAAA,OAAO,MAAA,GAAS,IAAA,CAAK,sBAAA,CAAuB,KAAA,EAAO,MAAM,CAAA,GAAI,MAAA;AAAA,MAC/D;AACA,MAAA,MAAM,IAAI,qBAAqB,KAAK,CAAA;AAAA,IACtC;AACA,IAAA,IAAU,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,MAAA,OAAO,IAAA,CAAK,0BAA0B,MAAM,CAAA;AAAA,IAC9C,CAAA,MAAA,IAAiB,MAAA,CAAO,MAAM,CAAA,EAAG;AAC/B,MAAA,OAAO,IAAA,CAAK,sBAAsB,MAAM,CAAA;AAAA,IAC1C,CAAA,MAAA,IAAiB,OAAA,CAAQ,MAAM,CAAA,EAAG;AAChC,MAAA,OAAO,IAAA,CAAK,sBAAA,CAAuB,MAAA,EAAQ,MAAM,CAAA;AAAA,IACnD,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,qBAAqB,MAAM,CAAA;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,sBAAA,CAAuB,QAAqB,MAAA,EAAgB;AAC1D,IAAA,OAAO,OAAO,KAAA,KAAe;AAC3B,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,OAAO,MAAM,CAAA;AAAA,IACrD,CAAA;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,MAAA,EAA6B;AACvD,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,OAAO,EAAE,CAAA;AAChD,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,MAAM,IAAI,uBAAA,CAAwB,CAAA,KAAA,EAAQ,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,CAAC,UAAU,aAAA,EAAe;AAE5B,MAAA,MAAM,eAAe,MAAA,CAAO,YAAA;AAE5B,MAAA,SAAA,CAAU,oBAAA,GAAuB,MAAM,IAAA,CAAK,mBAAA;AAAA,QAC1C,YAAA;AAAA,QACA,UAAU,IAAA,CAAK;AAAA,OACjB;AACA,MAAA,SAAA,CAAU,aAAA,GAAgB,IAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,CAAC,KAAA,KAAmB;AACzB,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,SAAA,CAAU,MAAM,KAAK,CAAA;AAAA,IAClD,CAAA;AAAA,EACF;AAAA,EAEA,MAAM,0BAA0B,MAAA,EAAkC;AAEhE,IAAA,MAAM,gBAAgB,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,OAAO,EAAE,CAAA;AACxD,IAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,MAAA,MAAM,IAAI,uBAAA,CAAwB,CAAA,SAAA,EAAY,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,aAAA;AAE7B,IAAA,IAAI,CAAC,cAAc,aAAA,EAAe;AAEhC,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAM,MAAA,GAAU,QAAA,CAAS,YAAA,IAAgB,EAAC;AAC1C,QAAA,MAAM,MAAM,MAAM,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,SAAS,EAAE,CAAA;AAC9D,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,wBAAA,CAAyB,MAAA,EAAQ,GAAG,CAAA;AACzD,QAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GACrB,MAAM,KAAK,mBAAA,CAAoB,kBAAA;AAAA,UAC7B,QAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACF;AAEF,QAAA,aAAA,CAAc,OAAA,GAAU,OAAA;AACxB,QAAA,aAAA,CAAc,KAAA,GAAQ,KAAA;AAAA,MACxB;AAGA,MAAA,aAAA,CAAc,aAAA,GAAgB,IAAA;AAAA,IAChC;AAEA,IAAA,OAAO,aAAA,CAAc,KAAA;AAAA,EACvB;AACF,CAAA;AAlWiC,MAAA,CAAA,oBAAA,EAAA,qBAAA,CAAA;AAA1B,IAAM,mBAAA,GAAN;;;ACjBP,IAAM,sBAAA,GAAyB,EAAE,KAAA,EAAO,CAAA,EAAE;AAf1C,IAAAK,UAAAA;AAgEO,IAAM,aAAA,GAAN,MAAM,aAAA,CAAa;AAAA,EAwBxB,YAAY,OAAA,EAA+C;AAtB3D;AAAA,IAAA,IAAA,CAAQ,SAAA,uBAAiD,GAAA,EAAI;AAC7D,IAAA,IAAA,CAAQ,kBAAsC,EAAC;AAG/C;AAAA,IAAA,IAAA,CAAQ,qBAAA,uBAA6D,GAAA,EAAI;AACzE,IAAA,IAAA,CAAQ,yBAAA,GAA4B,IAAA;AAGpC;AAAA,IAAA,IAAA,CAAQ,uBAAmD,EAAC;AAC5D,IAAA,IAAA,CAAQ,mBAA+C,EAAC;AAQxD;AAAA,IAAA,YAAA,CAAA,IAAA,EAAAA,UAAAA,EAAY,KAAA,CAAA;AAMV,IAAA,IAAA,CAAK,qBAAA,GAAwB,SAAS,qBAAA,IAAyB,IAAA;AAG/D,IAAA,IAAI,WAAA,EAAY,CAAE,oBAAA,EAAqB,IAAK,KAAK,qBAAA,EAAuB;AACtE,MAAA,IAAA,CAAK,aAAA,GACH,WAAA,EAAY,CAAE,uBAAA,EAEZ;AACJ,MAAA,IAAA,CAAK,oBAAA,GACH,WAAA,EAAY,CAAE,uBAAA,EAAgC;AAAA,IAClD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,qBAAA,GAAwB,KAAA;AAC7B,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,MAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAA,GAAW;AACb,IAAA,OAAO,YAAA,CAAA,IAAA,EAAKA,UAAAA,CAAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAO;AACL,IAAA,YAAA,CAAA,IAAA,EAAKA,UAAAA,EAAY,IAAA,CAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,IAAA,CACJ,eAAA,EACA,IAAA,EACA,MAAA,EACe;AAEf,IAAA,IAAI,gBAAgB,aAAA,EAAe;AACjC,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,eAAA,CAAgB,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA;AAAA,MACjD,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,eAAA;AAAA,UACR,eAAA;AAAA,UACA,eAAA,CAAgB,EAAA;AAAA,UAChB,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,SAC1D;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,EAAE,EAAA,EAAI,eAAA,CAAgB,IAAI,MAAA,EAAO;AAC/C,IAAA,MAAM,kCAAkB,MAAA,CAAA,YAAY;AAGlC,MAAA,MAAM,gBAAA,GAAmB;AAAA,QACvB,IAAI,eAAA,CAAgB,EAAA;AAAA,QACpB,IAAA;AAAA,QACA,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,MAAA;AAAA,QACA,IAAA,EAAM,eAAA,CAAgB,IAAA,IAAQ,EAAC;AAAA,QAC/B,iCAAiB,MAAA,CAAA,MAAM;AAAA,QAAC,CAAA,EAAP,iBAAA,CAAA;AAAA,QACjB,oBAAA,+BAA4B,KAAA,EAAN,sBAAA,CAAA;AAAA,QACtB,MAAM,eAAA,CAAgB;AAAA,OACxB;AAEA,MAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,oBAAA,CAAqB,gBAAgB,CAAA;AAGpE,MAAA,MAAM,YAAA,GAAe,iBAAA,GACjB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,eAAA,CAAgB,EAAE,CAAA,IAAK,EAAC,GAC3C,IAAA,CAAK,wBAAA,CAAyB,gBAAgB,EAAE,CAAA;AAEpD,MAAA,IAAI,kBAAA,GAAqB,KAAA;AAEzB,MAAA,MAAM,KAAA,GAAwB;AAAA,QAC5B,IAAI,eAAA,CAAgB,EAAA;AAAA,QACpB,IAAA;AAAA,QACA,SAAA,sBAAe,IAAA,EAAK;AAAA,QACpB,MAAA;AAAA,QACA,IAAA,EAAM,eAAA,CAAgB,IAAA,IAAQ,EAAC;AAAA,QAC/B,iCAAiB,MAAA,CAAA,MAAM;AACrB,UAAA,kBAAA,GAAqB,IAAA;AAAA,QACvB,CAAA,EAFiB,iBAAA,CAAA;AAAA,QAGjB,oBAAA,+BAA4B,kBAAA,EAAN,sBAAA,CAAA;AAAA,QACtB,MAAM,eAAA,CAAgB;AAAA,OACxB;AAGA,MAAA,MAAM,QAAA,iCACJ,WAAA,KACkB;AAClB,QAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,UAAA;AAAA,QACF;AAEA,QAA0B,IAAA,CAAK,oBAAA,CAAqB,WAAW;AAE/D,QAAA,KAAA,MAAW,YAAY,YAAA,EAAc;AACnC,UAAA,IAAI,kBAAA,EAAoB;AACtB,YAAA;AAAA,UACF;AAIA,UAAA,IAAI,QAAA,CAAS,EAAA,IAAM,QAAA,CAAS,EAAA,KAAO,YAAY,MAAA,EAAQ;AACrD,YAAA;AAAA,UACF;AAEA,UAAA,IAAI,CAAC,QAAA,CAAS,MAAA,IAAU,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA,EAAG;AACpD,YAAA,MAAM,QAAA,CAAS,QAAQ,WAAW,CAAA;AAAA,UACpC;AAAA,QACF;AAAA,MACF,CAAA,EAxBiB,UAAA,CAAA;AA2BjB,MAAA,IAAI,oBAAA,GACF,QAAA;AAGF,MAAA,MAAM,uBAAuB,CAAC,GAAG,IAAA,CAAK,oBAAoB,EAAE,OAAA,EAAQ;AAEpE,MAAA,KAAA,MAAW,eAAe,oBAAA,EAAsB;AAC9C,QAAA,MAAM,YAAA,GAAe,oBAAA;AACrB,QAAA,oBAAA,mBAAuB,MAAA,CAAA,OAAO,WAAA,KAC5B,WAAA,CAAY,YAAA,EAAc,WAAW,CAAA,EADhB,sBAAA,CAAA;AAAA,MAEzB;AAGA,MAAA,MAAM,qBAAqB,KAAK,CAAA;AAAA,IAClC,CAAA,EA9EwB,iBAAA,CAAA;AAgFxB,IAAA,IACE,IAAA,CAAK,qBAAA,IACL,IAAA,CAAK,aAAA,IACL,KAAK,oBAAA,EACL;AAEA,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,aAAA,CAAc,QAAA,EAAS;AACjD,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,aAAa,YAAA,CAAa,SAAA;AAAA,UAC9B,CAAC,CAAA,KAAsC,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM;AAAA,SACxD;AACA,QAAA,IAAI,eAAe,EAAA,EAAI;AACrB,UAAA,MAAM,GAAA,GAAM,YAAA,CAAa,YAAA,CAAa,MAAA,GAAS,CAAC,CAAA;AAChD,UAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,oBAAA,CAAqB,QAAA,EAAS;AACzD,UAAA,MAAM,uBACJ,GAAA,CAAI,EAAA,KAAO,KAAA,CAAM,EAAA,IAAM,iBAAiB,aAAA,KAAkB,MAAA;AAE5D,UAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,YAAA,MAAM,IAAI,eAAA,CAAgB;AAAA,cACxB,GAAG,YAAA,CAAa,KAAA,CAAM,UAAU,CAAA;AAAA,cAChC;AAAA,aACD,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,eAAe,CAAC,GAAG,cAAc,KAAK,CAAA,GAAI,CAAC,KAAK,CAAA;AAClE,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,SAAA,EAAW,eAAe,CAAA;AAAA,IACzD,CAAA,MAAO;AAEL,MAAA,MAAM,eAAA,EAAgB;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,WAAA,CACE,KAAA,EACA,OAAA,EACA,OAAA,GAAmC,sBAAA,EAC7B;AACN,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,MAAM,WAAA,GAAgC;AAAA,MACpC,OAAA;AAAA,MACA,KAAA,EAAO,QAAQ,KAAA,IAAS,CAAA;AAAA,MACxB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,QAAA,EAAU;AAAA,KACZ;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAACN,GAAAA,KAAO,IAAA,CAAK,YAAYA,GAAAA,EAAI,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAC9D,CAAA,MAAO;AACL,MAAA,MAAM,UAAU,KAAA,CAAM,EAAA;AACtB,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AAC5C,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAA,CAAK,cAAA,CAAe,WAAW,WAAW,CAAA;AAAA,MAC5C,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,CAAC,WAAW,CAAC,CAAA;AAAA,MAC3C;AACA,MAAA,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,iBAAA,CACE,OAAA,EACA,OAAA,GAAgC,sBAAA,EAC1B;AACN,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,MAAM,WAAA,GAAgC;AAAA,MACpC,OAAA;AAAA,MACA,KAAA,EAAO,QAAQ,KAAA,IAAS,CAAA;AAAA,MACxB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,QAAA,EAAU;AAAA,KACZ;AACA,IAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,eAAA,EAAiB,WAAW,CAAA;AACrD,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAgB,eAAA,EAAqC;AACnD,IAAA,MAAM,iBAAiB,IAAA,CAAK,SAAA,CAAU,IAAI,eAAA,CAAgB,EAAE,KAAK,EAAC;AAElE,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,OAAO,KAAA;AAAA,IACT;AAKA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,IAAI,eAAA,CAAgB,EAAA;AAAA,MACpB,IAAA,EAAM,MAAA;AAAA,MACN,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,MAAA,EAAQ,EAAA;AAAA,MACR,IAAA,EAAM,eAAA,CAAgB,IAAA,IAAQ,EAAC;AAAA,MAC/B,iCAAiB,MAAA,CAAA,MAAM;AAAA,MAAC,CAAA,EAAP,iBAAA,CAAA;AAAA,MACjB,oBAAA,+BAA4B,KAAA,EAAN,sBAAA,CAAA;AAAA,MACtB,MAAM,eAAA,CAAgB;AAAA,KACxB;AAEA,IAAA,IAAI,IAAA,CAAK,oBAAA,CAAqB,cAAc,CAAA,EAAG;AAC7C,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,WAAA,EAA6C;AACrD,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,IAAA,CAAK,oBAAA,CAAqB,KAAK,WAAW,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,cAAc,WAAA,EAA6C;AACzD,IAAA,IAAA,CAAK,SAAA,EAAU;AACf,IAAA,IAAA,CAAK,gBAAA,CAAiB,KAAK,WAAW,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,2BAAA,CACJ,IAAA,EACA,KAAA,EACA,oBAAA,EACc;AAEd,IAAA,MAAM,WAAA,mBAAc,MAAA,CAAA,OAClB,aAAA,EACA,YAAA,KACiB;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,GAAA;AAAA,UACjC,YAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF,CAAA,EAdoB,aAAA,CAAA;AAiBpB,IAAA,IAAI,uBAAA,GAGgB,WAAA;AAGpB,IAAA,MAAM,uBAAuB,CAAC,GAAG,IAAA,CAAK,gBAAgB,EAAE,OAAA,EAAQ;AAEhE,IAAA,KAAA,MAAW,eAAe,oBAAA,EAAsB;AAC9C,MAAA,MAAM,YAAA,GAAe,uBAAA;AACrB,MAAA,uBAAA,iCACE,aAAA,EACA,YAAA,KACG,YAAY,YAAA,EAAc,aAAA,EAAe,YAAY,CAAA,EAHhC,yBAAA,CAAA;AAAA,IAI5B;AAGA,IAAA,IAAI,KAAK,qBAAA,EAAuB;AAC9B,MAAA,OAAO,MAAM,KAAK,oBAAA,EAAsB,GAAA;AAAA,QACtC,IAAA,CAAK,EAAA;AAAA,QACL,YAAY,MAAM,uBAAA,CAAwB,IAAA,EAAM,KAAK;AAAA,OACvD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAO,MAAM,uBAAA,CAAwB,IAAA,EAAM,KAAK,CAAA;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAA,GAAY;AAClB,IAAA,IAAI,mBAAKM,UAAAA,CAAAA,EAAW;AAClB,MAAA,MAAM,IAAI,YAAY,cAAc,CAAA;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,oBAAA,CACN,GACA,CAAA,EACoB;AACpB,IAAA,MAAM,SAA6B,EAAC;AACpC,IAAA,IAAI,CAAA,GAAI,GACN,CAAA,GAAI,CAAA;AACN,IAAA,OAAO,CAAA,GAAI,CAAA,CAAE,MAAA,IAAU,CAAA,GAAI,EAAE,MAAA,EAAQ;AACnC,MAAA,IAAI,EAAE,CAAC,CAAA,CAAE,SAAS,CAAA,CAAE,CAAC,EAAE,KAAA,EAAO;AAC5B,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,CAAA,EAAG,CAAC,CAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,CAAE,CAAA,EAAG,CAAC,CAAA;AAAA,MACpB;AAAA,IACF;AACA,IAAA,OAAO,IAAI,CAAA,CAAE,MAAA,SAAe,IAAA,CAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AACvC,IAAA,OAAO,IAAI,CAAA,CAAE,MAAA,SAAe,IAAA,CAAK,CAAA,CAAE,GAAG,CAAC,CAAA;AACvC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,cAAA,CACN,WACA,WAAA,EACM;AACN,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,IAAI,OAAO,SAAA,CAAU,MAAA;AACrB,IAAA,OAAO,MAAM,IAAA,EAAM;AACjB,MAAA,MAAM,GAAA,GAAO,MAAM,IAAA,KAAU,CAAA;AAC7B,MAAA,IAAI,SAAA,CAAU,GAAG,CAAA,CAAE,KAAA,GAAQ,YAAY,KAAA,EAAO;AAC5C,QAAA,GAAA,GAAM,GAAA,GAAM,CAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,IAAA,GAAO,GAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,SAAA,CAAU,MAAA,CAAO,GAAA,EAAK,CAAA,EAAG,WAAW,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,qBAAqB,KAAA,EAAqC;AAChE,IAAA,OAAO,UAAA,CAAW,sBAAA,CAAuB,MAAA,CAAO,KAAK,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,yBAAyB,OAAA,EAAqC;AACpE,IAAA,IAAI,CAAC,KAAK,yBAAA,EAA2B;AACnC,MAAA,IAAA,CAAK,sBAAsB,KAAA,EAAM;AACjC,MAAA,IAAA,CAAK,yBAAA,GAA4B,IAAA;AAAA,IACnC;AAEA,IAAA,IAAI,MAAA,GAAS,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,OAAO,CAAA;AACnD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,iBAAiB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAO,KAAK,EAAC;AACvD,MAAA,IAAI,eAAe,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,eAAA,CAAgB,WAAW,CAAA,EAAG;AACpE,QAAA,MAAA,GAAS,EAAC;AAAA,MACZ,CAAA,MAAA,IAAW,cAAA,CAAe,MAAA,KAAW,CAAA,EAAG;AACtC,QAAA,MAAA,GAAS,IAAA,CAAK,eAAA;AAAA,MAChB,CAAA,MAAA,IAAW,IAAA,CAAK,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AAC5C,QAAA,MAAA,GAAS,cAAA;AAAA,MACX,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,IAAA,CAAK,oBAAA;AAAA,UACZ,cAAA;AAAA,UACA,IAAA,CAAK;AAAA,SACP;AAAA,MACF;AACA,MAAA,IAAA,CAAK,qBAAA,CAAsB,GAAA,CAAI,OAAA,EAAS,MAAM,CAAA;AAAA,IAChD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,gBAAgB,OAAA,EAAwB;AAC9C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,qBAAA,CAAsB,OAAO,OAAO,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,yBAAA,GAA4B,KAAA;AAAA,IACnC;AAAA,EACF;AACF,CAAA;AAheEA,UAAAA,GAAA,IAAA,OAAA,EAAA;AAnBwB,MAAA,CAAA,aAAA,EAAA,cAAA,CAAA;AAAnB,IAAM,YAAA,GAAN;;;ACnDA,SAAS,yBACd,KAAA,EACgC;AAChC,EAAA,MAAM,MAAA,GAAyC;AAAA,IAC7C,QAAQ,EAAC;AAAA,IACT,qBAAqB;AAAC,GACxB;AACA,EAAA,MAAM,OAAA,uBAA2B,GAAA,EAAI;AACrC,EAAA,MAAM,KAAA,uBAAyB,GAAA,EAAI;AACnC,EAAA,MAAM,OAAiB,EAAC;AAExB,EAAA,SAAS,IAAI,IAAA,EAA4B;AACvC,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACtB,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AAC5C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA,CAAE,OAAO,IAAA,CAAK,EAAE,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AACrE,MAAA,MAAA,CAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AAE1B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAE,CAAA;AACnB,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,EAAE,CAAA;AACjB,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,EAAE,CAAA;AAEjB,IAAA,KAAA,MAAW,CAAC,QAAQ,aAAa,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA,EAAG;AACvE,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,MAAA,CAAO,oBAAoB,IAAA,CAAK;AAAA,UAC9B,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,YAAA,EAAc;AAAA,SACf,CAAA;AACD,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,aAAa,CAAA;AAAA,IACnB;AAEA,IAAA,KAAA,CAAM,MAAA,CAAO,KAAK,EAAE,CAAA;AACpB,IAAA,IAAA,CAAK,GAAA,EAAI;AAAA,EACX;AA3BS,EAAA,MAAA,CAAA,GAAA,EAAA,KAAA,CAAA;AA6BT,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACzB,MAAA,GAAA,CAAI,IAAI,CAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,SAAS,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA;AACjD,EAAA,OAAO,MAAA;AACT;AAhDgB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;;;ACFT,IAAM,eAAA,GAAN,MAAM,eAAA,CAAe;AAAA,EAC1B,YAAoB,QAAA,EAAyB;AAAzB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAA0B;AAAA,EAE9C,gBAAgBN,GAAAA,EAA0B;AACxC,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAA,CAAIA,GAAE,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,0BAAA,CAA2B,MAAA,EAAQA,GAAE,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,GAAA,CAAIA,GAAE,CAAA,EAAG;AACnC,MAAA,MAAM,IAAI,0BAAA,CAA2B,UAAA,EAAYA,GAAE,CAAA;AAAA,IACrD;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAA,CAAIA,GAAE,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,0BAAA,CAA2B,OAAA,EAASA,GAAE,CAAA;AAAA,IAClD;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,GAAA,CAAIA,GAAE,CAAA,EAAG;AACzC,MAAA,MAAM,IAAI,0BAAA,CAA2B,YAAA,EAAcA,GAAE,CAAA;AAAA,IACvD;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,mBAAA,CAAoB,GAAA,CAAIA,GAAE,CAAA,EAAG;AAC7C,MAAA,MAAM,IAAI,0BAAA,CAA2B,YAAA,EAAcA,GAAE,CAAA;AAAA,IACvD;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,GAAA,CAAIA,GAAE,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,0BAAA,CAA2B,KAAA,EAAOA,GAAE,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAA,CAAIA,GAAE,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,0BAAA,CAA2B,MAAA,EAAQA,GAAE,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,eAAA,GAAkB;AAChB,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,QAAO,EAAG;AAC/C,MAAA,MAAM,WAAA,GAAc,KAAK,IAAA,CAAK,UAAA;AAC9B,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,oBAAA,KAAyB;AAC5C,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,gBAAgB,GAAA,CAAI,oBAAA,CAAqB,EAAE,CAAA,EAAG;AAC/D,UAAA,MAAM,IAAI,4BAAA;AAAA,YACR,MAAA;AAAA,YACA,KAAK,IAAA,CAAK,EAAA;AAAA,YACV,oBAAA,CAAqB;AAAA,WACvB;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,QAAO,EAAG;AACvD,MAAA,MAAM,WAAA,GAAc,SAAS,QAAA,CAAS,UAAA;AACtC,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,oBAAA,KAAyB;AAC5C,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,oBAAoB,GAAA,CAAI,oBAAA,CAAqB,EAAE,CAAA,EAAG;AACnE,UAAA,MAAM,IAAI,4BAAA;AAAA,YACR,UAAA;AAAA,YACA,SAAS,QAAA,CAAS,EAAA;AAAA,YAClB,oBAAA,CAAqB;AAAA,WACvB;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAA,CAAK,8BAAA,EAA+B;AAAA,EACtC;AAAA,EAEA,8BAAA,GAAiC;AAC/B,IAAA,MAAM,SAAA,GAAyB;AAAA,MAC7B,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MAC7D,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAAA,MACrE,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAAA,MAC/D,GAAG,MAAM,IAAA,CAAK,IAAA,CAAK,SAAS,eAAA,CAAgB,MAAA,EAAQ,CAAA,CAAE,GAAA;AAAA,QACpD,CAAC,MAAM,CAAA,CAAE;AAAA,OACX;AAAA,MACA,GAAG,MAAM,IAAA,CAAK,IAAA,CAAK,SAAS,mBAAA,CAAoB,MAAA,EAAQ,CAAA,CAAE,GAAA;AAAA,QACxD,CAAC,MAAM,CAAA,CAAE;AAAA,OACX;AAAA,MACA,GAAG,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI;AAAA,KAC/D;AAEA,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,UAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,KAAK,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AACnC,YAAA,MAAM,IAAI,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAlF4B,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAArB,IAAM,cAAA,GAAN,eAAA;;;ACoBA,IAAM,cAAA,GAAN,MAAM,cAAA,CAAc;AAAA,EAazB,YAA+BC,MAAAA,EAAc;AAAd,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AAZ/B,IAAA,IAAA,CAAO,KAAA,uBAA+C,GAAA,EAAI;AAC1D,IAAA,IAAA,CAAO,SAAA,uBAAuD,GAAA,EAAI;AAClE,IAAA,IAAA,CAAO,MAAA,uBAAiD,GAAA,EAAI;AAC5D,IAAA,IAAA,CAAO,eAAA,uBACD,GAAA,EAAI;AACV,IAAA,IAAA,CAAO,mBAAA,uBACD,GAAA,EAAI;AACV,IAAA,IAAA,CAAO,KAAA,uBAA+C,GAAA,EAAI;AAC1D,IAAA,IAAA,CAAO,IAAA,uBAA8B,GAAA,EAAI;AAKvC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,cAAA,CAAe,IAAI,CAAA;AAAA,EAC1C;AAAA,EAEA,YAAA,GAA+B;AAC7B,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,iBAAoB,IAAA,EAAyB;AAC3C,IAAA,IAAU,MAAA,CAAO,IAAI,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,UAAa,IAAI,CAAA;AAAA,IACxB,CAAA,MAAA,IAAiB,MAAA,IAAgB,MAAA,CAAO,IAAI,CAAA,EAAG;AAC7C,MAAA,IAAA,CAAK,UAAa,IAAa,CAAA;AAAA,IACjC,CAAA,MAAA,IAAiB,UAAA,CAAW,IAAI,CAAA,EAAG;AACjC,MAAA,IAAA,CAAK,cAAiB,IAAI,CAAA;AAAA,IAC5B,CAAA,MAAA,IAAiB,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,WAAc,IAAI,CAAA;AAAA,IACzB,CAAA,MAAA,IAAiB,gBAAA,CAAiB,IAAI,CAAA,EAAG;AACvC,MAAA,IAAA,CAAK,oBAAuB,IAA4B,CAAA;AAAA,IAC1D,CAAA,MAAA,IAAiB,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,wBAA2B,IAAgC,CAAA;AAAA,IAClE,CAAA,MAAA,IAAiB,oBAAA,CAAqB,IAAI,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,wBAA2B,IAAI,CAAA;AAAA,IACtC,CAAA,MAAA,IAAiB,KAAA,CAAM,IAAI,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,SAAS,IAAI,CAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,qBAAqB,IAAI,CAAA;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,SAAS,IAAA,EAAsB;AAC7B,IAAA,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,EAAE,CAAA;AACtC,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,SAAA,CAAa,IAAA,EAAuB,YAAA,GAA4B,QAAA,EAAU;AACxE,IAAA,YAAA,KAAiB,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,KAAK,EAAE,CAAA;AAEnE,IAAA,MAAM,OAAO,IAAA,CAAK,aAAA,CAAc,MAAM,IAAA,CAAK,KAAA,EAAO,QAAQ,YAAY,CAAA;AAGtE,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI;AAAA,MACtB,IAAA;AAAA,MACA,sBAAsB;AAAC,KACxB,CAAA;AAAA,EACH;AAAA,EAEA,mBAAA,CACE,IAAA,EACA,WAAA,GAA2B,QAAA,EAC3B;AACA,IAAA,WAAA,KAAgB,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,KAAK,EAAE,CAAA;AAElE,IAAA,MAAM,aAAa,IAAA,CAAK,aAAA;AAAA,MACtB,IAAA;AAAA,MACA,IAAA,CAAK,eAAA;AAAA,MACL,YAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,eAAA,CAAgB,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI;AAAA,MAChC,UAAA;AAAA,MACA,sBAAsB,EAAC;AAAA,MACvB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA,EAEA,uBAAA,CACE,IAAA,EACA,YAAA,GAA4B,QAAA,EAC5B;AACA,IAAA,YAAA,KAAiB,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,KAAK,EAAE,CAAA;AACnE,IAAA,MAAM,aAAa,IAAA,CAAK,aAAA;AAAA,MACtB,IAAA;AAAA,MACA,IAAA,CAAK,mBAAA;AAAA,MACL,YAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI;AAAA,MACpC,UAAA;AAAA,MACA,sBAAsB,EAAC;AAAA,MACvB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA,EAEA,WAAc,IAAA,EAAoB;AAChC,IAAA,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,EAAE,CAAA;AACtC,IAAA,IAAA,CAAK,OAAO,GAAA,CAAI,IAAA,CAAK,IAAI,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,EAC1C;AAAA,EAEA,uBAAA,CACE,IAAA,EACA,WAAA,GAA2B,QAAA,EAC3B;AACA,IAAA,WAAA,KAAgB,YACd,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,SAAS,EAAE,CAAA;AAEjD,IAAA,MAAM,WAAW,IAAA,CAAK,aAAA;AAAA,MACpB,IAAA,CAAK,QAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,UAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAA,CAAS,EAAA,EAAI;AAAA,MAC9B,QAAA,EAAU,QAAA;AAAA,MACV,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,KAAA,EAAO,MAAA;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,SAAS;AAAC,KACX,CAAA;AAED,IAAA,IAAA,CAAK,yBAAA,CAA0B,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AACpD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,yBAAA,CAA6B,SAAuB,MAAA,EAAY;AAC9D,IAAA,MAAM,KAAA,GACJ,OAAO,OAAA,CAAQ,QAAA,KAAa,aACxB,OAAA,CAAQ,QAAA,CAAS,MAAW,CAAA,GAC5B,OAAA,CAAQ,QAAA;AAEd,IAAA,OAAA,CAAQ,QAAA,GAAW,KAAA;AAEnB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AAExB,MAAA,IAAA,CAAK,iBAAoB,IAAI,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,aAAA,CACE,IAAA,EACA,YAAA,GAA4B,QAAA,EAC5B;AACA,IAAA,YAAA,KAAiB,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,KAAK,EAAE,CAAA;AAEnE,IAAA,MAAM,WAAW,IAAA,CAAK,aAAA;AAAA,MACpB,IAAA;AAAA,MACA,IAAA,CAAK,SAAA;AAAA,MACL,UAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAA,CAAS,EAAA,EAAI;AAAA,MAC9B,QAAA,EAAU,QAAA;AAAA,MACV,QAAQ,EAAC;AAAA,MACT,KAAA,EAAO,MAAA;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,OAAA,EAAS,QAAA,CAAS,OAAA,IAAU,IAAK;AAAC,KACnC,CAAA;AAED,IAAA,IAAA,CAAK,yBAAA,CAA0B,QAAA,EAAU,EAAE,CAAA;AAC3C,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,SAAA,CAAa,IAAA,EAA2B,WAAA,GAA2B,QAAA,EAAU;AAC3E,IAAA,WAAA,KAAgB,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,eAAA,CAAgB,KAAK,EAAE,CAAA;AAElE,IAAA,MAAM,OAAO,IAAA,CAAK,aAAA,CAAc,MAAM,IAAA,CAAK,KAAA,EAAO,QAAQ,WAAW,CAAA;AAErE,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI;AAAA,MACtB,IAAA;AAAA,MACA,sBAAsB,EAAC;AAAA,MACvB,aAAA,EAAe;AAAA,KAChB,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,iBAAA,GAAoB;AAClB,IAAA,MAAM,cAAgC,EAAC;AAGvC,IAAA,MAAM,OAAA,uBAAc,GAAA,EAA4B;AAGhD,IAAA,IAAA,CAAK,eAAA,CAAgB,SAAS,WAAW,CAAA;AAGzC,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACtC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAK,EAAE,CAAA;AAGrC,MAAA,IAAI,IAAA,CAAK,KAAK,YAAA,EAAc;AAC1B,QAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,UACrC,KAAK,IAAA,CAAK;AAAA,SACZ,EAAG;AACD,UAAA,MAAM,SAAA,GAAkB,UAAA,CAAW,OAAO,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AAC9D,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,EAAE,CAAA;AACxC,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GAAI,OAAA;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,IAAI,IAAA,CAAK,IAAA;AACf,MAAA,KAAA,MAAW,UAAA,IAAc,EAAE,UAAA,EAAY;AACrC,QAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA;AAChD,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,IAAA,CAAK,YAAA,CAAa,UAAA,CAAW,EAAE,CAAA,GAAI,cAAA;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,mBAAA,IAAuB,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAO,EAAG;AAC/D,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,mBAAA,CAAoB,WAAW,EAAE,CAAA;AAC1D,MAAA,MAAM,EAAE,YAAW,GAAI,mBAAA;AAEvB,MAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,QAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,UACrC,UAAA,CAAW;AAAA,SACb,EAAG;AACD,UAAA,MAAM,SAAA,GAAkB,UAAA,CAAW,OAAO,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AAE9D,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,EAAE,CAAA;AACxC,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GAAI,OAAA;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,WAAW,UAAA,EAAY;AACzB,QAAA,MAAM,SACJ,OAAO,UAAA,CAAW,eAAe,UAAA,GAC7B,UAAA,CAAW,aACX,MAAM,IAAA;AAEZ,QAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACtC,UAAA,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AACrB,YAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAK,EAAE,CAAA;AAEzC,YAAA,QAAA,CAAS,YAAA,CAAa,CAAA,aAAA,EAAgB,UAAA,CAAW,EAAE,EAAE,CAAA,GAAI,IAAA;AAAA,UAC3D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,uBAAA,IAA2B,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAO,EAAG;AACvE,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,uBAAA,CAAwB,WAAW,EAAE,CAAA;AAC9D,MAAA,MAAM,EAAE,YAAW,GAAI,uBAAA;AACvB,MAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,QAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,UACrC,UAAA,CAAW;AAAA,SACb,EAAG;AACD,UAAA,MAAM,SAAA,GAAkB,UAAA,CAAW,OAAO,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AAE9D,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,EAAE,CAAA;AACxC,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GAAI,OAAA;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,WAAW,UAAA,EAAY;AACzB,QAAA,MAAM,SACJ,OAAO,UAAA,CAAW,eAAe,UAAA,GAC7B,UAAA,CAAW,aACX,MAAM,IAAA;AAEZ,QAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,UAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC7B,YAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,SAAS,EAAE,CAAA;AAErD,YAAA,YAAA,CAAa,YAAA,CAAa,CAAA,aAAA,EAAgB,UAAA,CAAW,EAAE,EAAE,CAAA,GAAI,IAAA;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,SAAS,EAAE,CAAA;AAG7C,MAAA,IAAI,QAAA,CAAS,SAAS,YAAA,EAAc;AAClC,QAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,UACrC,SAAS,QAAA,CAAS;AAAA,SACpB,EAAG;AACD,UAAA,MAAM,SAAA,GAAkB,UAAA,CAAW,OAAO,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AAE9D,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,EAAE,CAAA;AACxC,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GAAI,OAAA;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,UAAA,IAAc,QAAA,CAAS,QAAA,CAAS,UAAA,EAAY;AACrD,QAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA;AAChD,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,IAAA,CAAK,YAAA,CAAa,UAAA,CAAW,EAAE,CAAA,GAAI,cAAA;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACtC,MAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,KAAK,EAAE,CAAA;AACrC,MAAA,IAAI,IAAA,CAAK,KAAK,YAAA,EAAc;AAC1B,QAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,CAAA,IAAK,MAAA,CAAO,OAAA;AAAA,UACrC,KAAK,IAAA,CAAK;AAAA,SACZ,EAAG;AACD,UAAA,MAAM,SAAA,GAAkB,UAAA,CAAW,OAAO,CAAA,GAAI,QAAQ,KAAA,GAAQ,OAAA;AAC9D,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,EAAE,CAAA;AAExC,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GAAI,OAAA;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAA,GAA0B;AACxB,IAAA,MAAM,KAAA,uBAAY,GAAA,EAA4B;AAG9C,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,MAAA,CAAO,MAAA,EAAO,EAAG;AACpC,MAAA,KAAA,CAAM,GAAA,CAAI,CAAA,CAAE,KAAA,CAAM,EAAA,EAAI,EAAE,EAAA,EAAI,CAAA,CAAE,KAAA,CAAM,EAAA,EAAI,YAAA,EAAc,EAAC,EAAG,CAAA;AAAA,IAC5D;AAGA,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACnC,MAAA,MAAM,WAAqB,EAAC;AAC5B,MAAA,MAAM,EAAA,GAAK,EAAE,IAAA,CAAK,EAAA;AAClB,MAAA,IAAI,OAAO,GAAA,EAAK;AAChB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,GAAG,EAAA,CAAG,GAAA,CAAI,CAAC,CAAA,KAAc,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,WAC9D,QAAA,CAAS,IAAA,CAAK,EAAA,CAAG,EAAE,CAAA;AAGxB,MAAA,MAAM,YAAsB,EAAC;AAC7B,MAAA,MAAM,IAAA,GAAO,EAAE,IAAA,CAAK,YAAA;AACpB,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAG;AACvC,UAAA,MAAM,SAAA,GAAkB,UAAA,CAAW,KAAK,CAAA,GAAI,MAAM,KAAA,GAAQ,KAAA;AAC1D,UAAA,IAAI,SAAA,IAAmB,OAAA,CAAQ,SAAS,CAAA,EAAG;AACzC,YAAA,SAAA,CAAU,IAAA,CAAK,UAAU,EAAE,CAAA;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAGA,MAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,QAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAC/B,QAAA,IAAI,CAAC,OAAA,EAAS;AACd,QAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,UAAA,IAAI,UAAU,KAAA,EAAO;AACrB,UAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,KAAK,CAAA;AAC/B,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,OAAA,CAAQ,YAAA,CAAa,KAAK,CAAA,GAAI,OAAA;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,CAAA;AAAA,EAClC;AAAA,EAEQ,eAAA,CACN,SACA,WAAA,EACA;AACA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACtC,MAAA,MAAM,IAAA,GAAuB;AAAA,QAC3B,EAAA,EAAI,KAAK,IAAA,CAAK,EAAA;AAAA,QACd,cAAc;AAAC,OACjB;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAC9B,MAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,IACvB;AAEA,IAAA,KAAA,MAAW,UAAA,IAAc,IAAA,CAAK,eAAA,CAAgB,MAAA,EAAO,EAAG;AACtD,MAAA,MAAM,IAAA,GAAuB;AAAA,QAC3B,EAAA,EAAI,WAAW,UAAA,CAAW,EAAA;AAAA,QAC1B,cAAc;AAAC,OACjB;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,UAAA,CAAW,EAAA,EAAI,IAAI,CAAA;AAC1C,MAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,IACvB;AAEA,IAAA,KAAA,MAAW,UAAA,IAAc,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAO,EAAG;AAC1D,MAAA,MAAM,IAAA,GAAuB;AAAA,QAC3B,EAAA,EAAI,WAAW,UAAA,CAAW,EAAA;AAAA,QAC1B,cAAc;AAAC,OACjB;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,UAAA,CAAW,EAAA,EAAI,IAAI,CAAA;AAC1C,MAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,IACvB;AAGA,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,MAAM,IAAA,GAAuB;AAAA,QAC3B,EAAA,EAAI,SAAS,QAAA,CAAS,EAAA;AAAA,QACtB,cAAc;AAAC,OACjB;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,EAAA,EAAI,IAAI,CAAA;AACtC,MAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,IACvB;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,EAAO,EAAG;AACtC,MAAA,MAAM,IAAA,GAAuB;AAAA,QAC3B,EAAA,EAAI,KAAK,IAAA,CAAK,EAAA;AAAA,QACd,cAAc;AAAC,OACjB;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAC9B,MAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,gBAAgB,GAAA,EAAoB;AAClC,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,GAAA,CAAI,EAAA;AAElD,IAAA,OAAO,KAAA,CAAM,KAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,CAClC,MAAA,CAAO,CAAC,CAAA,KAAM;AACb,MAAA,OAAO,CAAA,CAAE,KAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,IAC/C,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,EACtB;AAAA,EAEA,oBAAoB,GAAA,EAAoB;AACtC,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,GAAA,CAAI,EAAA;AAElD,IAAA,OAAO,KAAA,CAAM,KAAK,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,CACtC,MAAA,CAAO,CAAC,CAAA,KAAM;AACb,MAAA,OAAO,CAAA,CAAE,SAAS,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,IACnD,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,CAIN,IAAA,EACA,UAAA,EACA,GAAA,EACA,cACA,MAAA,EACG;AACH,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,MAAA,MAAM,WAAW,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,EAAE,EAAG,GAAG,CAAA;AAC7C,MAAA,WAAA,GAAc,EAAE,GAAG,QAAA,EAAU,GAAG,IAAA,EAAK;AAAA,IACvC,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,EAAE,GAAG,IAAA,EAAK;AAAA,IAC1B;AAEA,IAAA,WAAA,CAAY,YAAA,GACV,OAAO,WAAA,CAAY,YAAA,KAAiB,UAAA,GAChC,WAAA,CAAY,YAAA,CAAa,MAAA,IAAU,WAAA,CAAY,MAAM,CAAA,GACrD,WAAA,CAAY,YAAA;AAElB,IAAA,OAAO,WAAA;AAAA,EACT;AACF,CAAA;AAhe2B,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA;AAApB,IAAM,aAAA,GAAN,cAAA;;;AClBA,IAAM,gBAAA,GAAN,MAAM,gBAAA,CAAgB;AAAA,EAgB3B,YAA6B,QAAA,EAAyB;AAAzB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAf7B,IAAA,IAAA,CAAO,SAAA,uBAQC,GAAA,EAAI;AAEZ,IAAA,IAAA,CAAO,gBAAA,uBAGE,GAAA,EAAI;AAAA,EAE0C;AAAA,EAEvD,qBAAwB,OAAA,EAAiC;AACvD,IAAA,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AACtC,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA;AAAA,MACF;AAEA,MAAA,IAAU,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,QAAA,IAAA,CAAK,qBAAqB,QAAQ,CAAA;AAAA,MACpC;AAEA,MAAA,IAAID,GAAAA;AACJ,MAAA,IAAU,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AACxC,QAAA,IAAA,CAAK,oBAAA,CAAqB,SAAS,QAAQ,CAAA;AAC3C,QAAAA,GAAAA,GAAK,SAAS,QAAA,CAAS,EAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAAA,MAAK,QAAA,CAAS,EAAA;AAAA,MAChB;AAEA,MAAA,IAAA,CAAK,iBAAiB,GAAA,CAAI,EAAE,QAAQ,OAAA,CAAQ,EAAA,EAAI,UAAU,CAAA;AAC1D,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAIA,GAAAA,EAAI,QAAQ,CAAA;AAAA,IACjC,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,gBAAA,GAAmB;AAEjB,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,IAAI,UAAA,GAAa,KAAA;AACjB,MAAA,IAAU,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC1B,QAAA,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,MAClD,CAAA,MAAA,IAAiB,UAAA,CAAW,QAAQ,CAAA,EAAG;AACrC,QAAA,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,MACtD,CAAA,MAAA,IAAiB,gBAAA,CAAiB,QAAQ,CAAA,EAAG;AAC3C,QAAA,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAiB,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AAC/C,QAAA,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,mBAAA,CAAoB,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,MAChE,CAAA,MAAA,IAAiB,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AAC/C,QAAA,UAAA,GAAa,KAAK,QAAA,CAAS,SAAA,CAAU,GAAA,CAAI,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,MAC/D,CAAA,MAAA,IAAiB,MAAA,CAAO,QAAQ,CAAA,EAAG;AACjC,QAAA,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,SAAS,EAAE,CAAA;AAAA,MAClD;AAEA,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAMA,MAAW,oBAAA,CAAqB,QAAQ,IAC1C,QAAA,CAAS,QAAA,CAAS,KAClB,QAAA,CAAS,EAAA;AAEb,QAAA,MAAM,IAAI,wBAAwBA,GAAE,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,IAAU,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC1B,QAAA,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,QAAA,EAAU,UAAU,CAAA;AAAA,MAC9C,CAAA,MAAA,IAAiB,UAAA,CAAW,QAAQ,CAAA,EAAG;AACrC,QAAA,IAAA,CAAK,QAAA,CAAS,aAAA,CAAc,QAAA,EAAU,UAAU,CAAA;AAAA,MAClD,CAAA,MAAA,IAAiB,gBAAA,CAAiB,QAAQ,CAAA,EAAG;AAC3C,QAAA,IAAA,CAAK,QAAA,CAAS,mBAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AAAA,MACxD,CAAA,MAAA,IAAiB,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AAC/C,QAAA,IAAA,CAAK,QAAA,CAAS,uBAAA,CAAwB,QAAA,EAAU,UAAU,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAiB,oBAAA,CAAqB,QAAQ,CAAA,EAAG;AAC/C,QAAA,IAAA,CAAK,QAAA,CAAS,uBAAA,CAAwB,QAAA,EAAU,UAAU,CAAA;AAAA,MAC5D,CAAA,MAAA,IAAiB,MAAA,CAAO,QAAQ,CAAA,EAAG;AACjC,QAAA,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,QAAA,EAAU,UAAU,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF,CAAA;AApF6B,MAAA,CAAA,gBAAA,EAAA,iBAAA,CAAA;AAAtB,IAAM,eAAA,GAAN,gBAAA;;;ACbP,IAAAM,UAAAA,EAAA,cAAA;AAwDO,IAAM,MAAA,GAAN,MAAM,MAAA,CAAM;AAAA,EAWjB,WAAA,CACqB,YAAA,EACA,MAAA,EACH,gBAAA,EAChB;AAHmB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACH,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA;AANlB,IAAA,YAAA,CAAA,IAAA,EAAAA,UAAAA,EAAY,KAAA,CAAA;AACZ,IAAA,YAAA,CAAA,IAAA,EAAA,cAAA,EAAiB,KAAA,CAAA;AAOf,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,aAAA,CAAc,IAAI,CAAA;AACtC,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,QAAA,CAAS,YAAA,EAAa;AAC5C,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,eAAA,CAAgB,IAAA,CAAK,QAAQ,CAAA;AACxD,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,iBAAA,CAAkB,IAAA,EAAM,cAAc,MAAM,CAAA;AAAA,EAC3E;AAAA;AAAA,EAGA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,KAAK,QAAA,CAAS,KAAA;AAAA,EACvB;AAAA,EACA,IAAI,KAAA,GAAQ;AACV,IAAA,OAAO,KAAK,QAAA,CAAS,KAAA;AAAA,EACvB;AAAA,EACA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,KAAK,QAAA,CAAS,SAAA;AAAA,EACvB;AAAA,EACA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,KAAK,QAAA,CAAS,MAAA;AAAA,EACvB;AAAA,EACA,IAAI,eAAA,GAAkB;AACpB,IAAA,OAAO,KAAK,QAAA,CAAS,eAAA;AAAA,EACvB;AAAA,EACA,IAAI,mBAAA,GAAsB;AACxB,IAAA,OAAO,KAAK,QAAA,CAAS,mBAAA;AAAA,EACvB;AAAA,EACA,IAAI,IAAA,GAAO;AACT,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EACvB;AAAA,EACA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO,KAAK,eAAA,CAAgB,SAAA;AAAA,EAC9B;AAAA,EACA,IAAI,gBAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,eAAA,CAAgB,gBAAA;AAAA,EAC9B;AAAA;AAAA;AAAA,EAIO,oBAAA,GAA0C;AAC/C,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA,EAEA,IAAI,QAAA,GAAW;AACb,IAAA,OAAO,YAAA,CAAA,IAAA,EAAKA,UAAAA,CAAAA;AAAA,EACd;AAAA,EAEA,IAAA,GAAO;AACL,IAAA,YAAA,CAAA,IAAA,EAAKA,UAAAA,EAAY,IAAA,CAAA;AAAA,EACnB;AAAA,EAEA,SAAA,GAAY;AACV,IAAA,IAAI,mBAAKA,UAAAA,CAAAA,EAAW;AAClB,MAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA,EAEQ,wBAAA,GAA2B;AACjC,IAAA,MAAM,mBAAA,uBAA0B,GAAA,EAG9B;AACF,IAAA,mBAAA,CAAoB,GAAA,CAAI,eAAA,CAAgB,KAAA,EAAO,IAAI,CAAA;AACnD,IAAA,mBAAA,CAAoB,GAAA,CAAI,eAAA,CAAgB,YAAA,EAAc,IAAA,CAAK,YAAY,CAAA;AACvE,IAAA,mBAAA,CAAoB,GAAA,CAAI,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,MAAM,CAAA;AAC3D,IAAA,mBAAA,CAAoB,GAAA,CAAI,eAAA,CAAgB,UAAA,EAAY,IAAA,CAAK,UAAW,CAAA;AACpE,IAAA,mBAAA,CAAoB,GAAA;AAAA,MAClB,eAAA,CAAgB,iBAAA;AAAA,MAChB,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAiB,eAAA,CAAgB,KAAK,CAAA;AAEpD,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,KAAK,CAAA,IAAK,mBAAA,CAAoB,SAAQ,EAAG;AAC7D,MAAA,IAAA,CAAK,QAAA,CAAS,iBAAiB,QAAQ,CAAA;AACvC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,SAAS,EAAE,CAAA;AAC5C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,KAAA,CAAM,KAAA,GAAQ,KAAA;AACd,QAAA,KAAA,CAAM,aAAA,GAAgB,IAAA;AAAA,MACxB;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzC,MAAA,IAAA,CAAK,QAAA,CAAS,SAAS,GAAG,CAAA;AAAA,IAC5B,CAAC,CAAA;AAGD,IAAA,iBAAA,CAAkB,OAAA,CAAQ,CAAC,KAAA,KAAU;AACnC,MAAA,IAAA,CAAK,QAAA,CAAS,WAAW,KAAK,CAAA;AAAA,IAChC,CAAC,CAAA;AAID,IAAA,MAAM,sBAAA,GAAyB;AAAA,MAC7B,4BAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,sBAAA,CAAuB,OAAA,CAAQ,CAAC,UAAA,KAAe;AAC7C,MAAA,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI;AAAA,QAC/C,UAAA;AAAA,QACA,sBAAsB,EAAC;AAAA,QACvB,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAM,0BAAA,GAA6B;AAAA,MACjC,uBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,0BAAA,CAA2B,OAAA,CAAQ,CAAC,UAAA,KAAe;AACjD,MAAA,IAAA,CAAK,QAAA,CAAS,mBAAA,CAAoB,GAAA,CAAI,UAAA,CAAW,EAAA,EAAI;AAAA,QACnD,UAAA;AAAA,QACA,sBAAsB,EAAC;AAAA,QACvB,aAAA,EAAe;AAAA,OAChB,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA,EAEO,cAAc,UAAA,EAAwB;AAC3C,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA,EAEQ,iBAAA,CAAkB,MAAsB,MAAA,EAAa;AAC3D,IAAA,IAAA,CAAK,YAAA,GACH,OAAO,IAAA,CAAK,YAAA,KAAiB,aACzB,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA,GACxB,IAAA,CAAK,YAAA;AAEX,IAAA,IAAA,CAAK,IAAA,GAAO;AAAA,MACV,QAAA,EAAU,IAAA;AAAA,MACV,sBAAsB,EAAC;AAAA,MACvB,MAAA;AAAA,MACA,KAAA,EAAO,MAAA;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,SAAS;AAAC,KACZ;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,yBAAA,CAA0B,IAAA,EAAM,MAAM,CAAA;AACpD,IAAA,IAAA,CAAK,SAAS,SAAA,CAAU,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,KAAK,IAAI,CAAA;AAAA,EAChD;AAAA,EAEO,uBAAA,GAA0B;AAE/B,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,iBAAA,EAAkB;AACvD,IAAA,MAAM,oBAAA,GAAuB,yBAAyB,cAAc,CAAA;AACpE,IAAA,IAAI,oBAAA,CAAqB,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,yBAAA,CAA0B,oBAAA,CAAqB,MAAM,CAAA;AAAA,IACjE;AAAA,EACF;AAAA,EAEO,0BAAA,GAA6B;AAClC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,uBAAA,EAAwB;AACzD,IAAA,MAAM,QAAA,GAAW,yBAAyB,UAAU,CAAA;AACpD,IAAA,IAAI,QAAA,CAAS,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,uBAAA,CAAwB,QAAA,CAAS,MAAM,CAAA;AAAA,IACnD;AAAA,EACF;AAAA,EAEO,eAAA,CACL,MACA,MAAA,EACA;AACA,IAAA,IAAI,mBAAK,cAAA,CAAA,EAAgB;AACvB,MAAA,MAAM,IAAI,4BAAA,EAA6B;AAAA,IACzC;AAEA,IAAA,IAAA,CAAK,wBAAA,EAAyB;AAC9B,IAAA,IAAA,CAAK,iBAAA,CAAkB,MAAM,MAAM,CAAA;AACnC,IAAA,IAAA,CAAK,UAAU,eAAA,EAAgB;AAE/B,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,IAAA,CAAK,eAAA,CAAgB,oBAAA,CAAqB,QAAA,CAAS,QAAQ,CAAA;AAAA,IAC7D;AAEA,IAAA,YAAA,CAAA,IAAA,EAAK,cAAA,EAAiB,IAAA,CAAA;AAAA,EACxB;AAAA,EAEA,MAAa,OAAA,GAAU;AACrB,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,IAAI,QAAA,CAAS,aAAA,IAAiB,QAAA,CAAS,QAAA,CAAS,OAAA,EAAS;AACvD,QAAA,MAAM,SAAS,QAAA,CAAS,OAAA;AAAA,UACtB,QAAA,CAAS,KAAA;AAAA,UACT,QAAA,CAAS,MAAA;AAAA,UACT,QAAA,CAAS,oBAAA;AAAA,UACT,QAAA,CAAS;AAAA,SACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEO,gBAAA,GAAmB;AACxB,IAAA,IAAA,CAAK,gBAAgB,gBAAA,EAAiB;AAAA,EACxC;AAAA,EAEO,iBAAoB,IAAA,EAAyB;AAClD,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,gBAAA,CAAoB,IAAI,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBAAgB,GAAA,EAAoB;AACzC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,eAAA,CAAgB,GAAG,CAAA;AAAA,EAC1C;AAAA,EAEO,oBAAoB,GAAA,EAAoB;AAC7C,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,mBAAA,CAAoB,GAAG,CAAA;AAAA,EAC9C;AACF,CAAA;AA1NEA,UAAAA,GAAA,IAAA,OAAA,EAAA;AACA,cAAA,GAAA,IAAA,OAAA,EAAA;AATiB,MAAA,CAAA,MAAA,EAAA,OAAA,CAAA;AAAZ,IAAM,KAAA,GAAN;;;ACpCA,IAAM,QAAA,GAAwB,OAAO,MAAA,CAAO;AAAA,EACjD,oBAAA,EAAsB,KAAA;AAAA,EACtB,mBAAA,EAAqB,KAAA;AAAA,EACrB,sBAAA,EAAwB,KAAA;AAAA,EACxB,qBAAA,EAAuB,KAAA;AAAA,EACvB,gBAAA,EAAkB,KAAA;AAAA,EAClB,eAAA,EAAiB,KAAA;AAAA,EACjB,YAAA,EAAc,KAAA;AAAA,EACd,aAAA,EAAe,KAAA;AAAA,EACf,iBAAA,EAAmB,KAAA;AAAA,EACnB,gBAAA,EAAkB,KAAA;AAAA,EAClB,gBAAA,EAAkB,KAAA;AAAA,EAClB,gBAAA,EAAkB,KAAA;AAAA,EAClB,qBAAA,EAAuB,KAAA;AAAA,EACvB,qBAAA,EAAuB;AACzB,CAAC;AAEM,IAAM,WAAA,GAA2B,OAAO,MAAA,CAAO;AAAA,EACpD,GAAG,QAAA;AAAA,EACH,eAAA,EAAiB,IAAA;AAAA,EACjB,gBAAA,EAAkB,IAAA;AAAA,EAClB,oBAAA,EAAsB,IAAA;AAAA,EACtB,mBAAA,EAAqB,IAAA;AAAA,EACrB,sBAAA,EAAwB,IAAA;AAAA,EACxB,qBAAA,EAAuB,IAAA;AAAA,EACvB,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB,IAAA;AAAA,EAClB,qBAAA,EAAuB;AACzB,CAAC;AAED,MAAA,CAAO,OAAO,WAAW,CAAA;AAElB,IAAM,YAAA,GAA4B,OAAO,MAAA,CAAO;AAAA,EACrD,GAAG,WAAA;AAAA,EACH,YAAA,EAAc,IAAA;AAAA,EACd,aAAA,EAAe,IAAA;AAAA,EACf,iBAAA,EAAmB,IAAA;AAAA,EACnB,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB,IAAA;AAAA,EAClB,gBAAA,EAAkB;AACpB,CAAC;AAED,MAAA,CAAO,OAAO,YAAY,CAAA;AAO1B,SAAS,aAAa,MAAA,EAA0C;AAC9D,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,OAAO,EAAE,GAAG,WAAA,EAAY;AAAA,EAC1B;AACA,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,OAAO,EAAE,GAAG,YAAA,EAAa;AAAA,EAC3B;AACA,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,GAAG,MAAA,EAAO;AAClC;AARS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAUF,IAAM,SAAA,mBAAY,MAAA,CAAA,CACvB,MAAA,EACA,QAAA,KACgB;AAChB,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,aAAa,MAAM,CAAA;AAAA,EAC5B;AACA,EAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AAEhD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,uBAAA,GAA0B,aAAa,cAAc,CAAA;AAC3D,IAAA,OAAO,EAAE,GAAG,YAAA,CAAa,MAAM,CAAA,EAAG,GAAG,uBAAA,EAAwB;AAAA,EAC/D;AAEA,EAAA,OAAO,aAAa,MAAM,CAAA;AAC5B,CAAA,EAfyB,WAAA;;;AC3ElB,IAAM,cAAc,cAAA,CAAe;AAAA,EACxC,EAAA,EAAI,gCAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM,CAAC,UAAA,CAAW,MAAM,CAAA;AAAA,EACxB,IAAA,gCAAa,MAAA,KAAgC;AAC3C,IAAA,MAAM,QAAA,GAAW,EAAE,GAAG,SAAA,CAAU,MAAM,CAAA,EAAE;AAExC,IAAA,MAAA,CAAO,OAAO,QAAQ,CAAA;AACtB,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,EALM,MAAA;AAMR,CAAC,CAAA;;;ACdM,IAAM,YAAA,2BAAgB,UAAA,KAA0B;AACrD,EAAA,MAAM,YAAY,UAAA,CAAW,IAAA;AAC7B,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,UAAA,CAAW,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAC5C,CAAA,EAN4B,cAAA,CAAA;;;ACKrB,IAAM,sBAAsB,UAAA,CAAW;AAAA,EAC5C,EAAA,EAAI,gCAAA;AAAA,EACJ,EAAA,EAAI,GAAA;AAAA,EACJ,YAAA,EAAc;AAAA,IACZ,QAAQ,eAAA,CAAgB,MAAA;AAAA,IACxB;AAAA,GACF;AAAA,EACA,qBAAK,MAAA,CAAA,OAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAA,EAAAC,cAAY,KAAM;AAC7C,IAAA,IAAI,YAAA,CAAa,KAAK,CAAA,EAAG;AACvB,MAAA;AAAA,IACF;AAEA,IAAAA,YAAAA,GAAc,SAAA,CAAUA,YAAAA,EAAa,KAAM,CAAA;AAC3C,IAAA,IAAIA,aAAY,qBAAA,EAAuB;AACrC,MAAA,MAAM,OAAA,GAAU,CAAA,MAAA,EAAS,MAAA,CAAO,KAAA,CAAO,EAAE,CAAC,CAAA,QAAA,CAAA;AAC1C,MAAA,MAAM,MAAA,CAAO,KAAK,OAAA,EAAS;AAAA,QACzB,MAAA,EAAQ,gCAAA;AAAA,QACR,MAAMA,YAAAA,CAAY,qBAAA,GACd,EAAE,IAAA,EAAM,KAAA,CAAO,MAAK,GACpB;AAAA,OACL,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAfK,KAAA,CAAA;AAAA,EAgBL,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,yBAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM,CAAC,UAAA,CAAW,MAAM;AAC1B,CAAC,CAAA;;;AC1BM,IAAM,yBAAyB,oBAAA,CAAqB;AAAA,EACzD,EAAA,EAAI,gDAAA;AAAA,EACJ,UAAA,0BAAa,IAAA,KAAS,CAAC,WAAW,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAxC,YAAA,CAAA;AAAA,EACZ,YAAA,EAAc;AAAA,IACZ,QAAQ,eAAA,CAAgB,MAAA;AAAA,IACxB,WAAA;AAAA,IACA,OAAO,eAAA,CAAgB;AAAA,GACzB;AAAA,EACA,GAAA,kBAAK,MAAA,CAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAK,EAAG,EAAE,MAAA,EAAQ,WAAA,EAAAA,YAAAA,EAAa,KAAA,EAAAN,MAAAA,EAAM,KAAM;AAC7D,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,MAAA,GAAS,OAAO,IAAA,CAAK;AAAA,MACnB,QAAQ,sBAAA,CAAuB;AAAA,KAChC,CAAA;AAED,IAAAM,YAAAA,GAAc,SAAA,CAAUA,YAAAA,EAAa,IAAA,EAAM,UAAU,CAAA;AACrD,IAAA,MAAM,gBAAA,GAAmB,CAAA,KAAA,EAAQ,IAAA,CAAM,UAAA,CAAW,EAAE,CAAA,cAAA,CAAA;AACpD,IAAA,MAAM,cAAA,GAAiBA,YAAAA,CAAY,YAAA,IAAgB,IAAA,CAAM,KAAA;AACzD,IAAA,MAAM,MAAA,CAAO,KAAK,gBAAA,EAAkB;AAAA,MAClC,MAAM,cAAA,GAAiB,EAAE,KAAA,EAAO,IAAA,CAAM,OAAM,GAAI;AAAA,KACjD,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAM,KAAK,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAC9B,IAAA,MAAM,sBAAsB,CAAA,KAAA,EAC1B,IAAA,CAAM,UAAA,CAAW,EACnB,iBAAiB,QAAQ,CAAA,EAAA,CAAA;AACzB,IAAA,MAAM,gBAAA,GAAmBA,aAAY,aAAA,IAAiB,MAAA;AACtD,IAAA,MAAM,MAAA,CAAO,KAAK,mBAAA,EAAqB;AAAA,MACrC,IAAA,EAAM,gBAAA,GAAmB,EAAE,MAAA,EAAO,GAAI;AAAA,KACvC,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAvBK,KAAA,CAAA;AAAA,EAwBL,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,mBAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM,CAAC,UAAA,CAAW,MAAM;AAC1B,CAAC,CAAA;AAEM,IAAM,6BAA6B,wBAAA,CAAyB;AAAA,EACjE,EAAA,EAAI,oDAAA;AAAA,EACJ,YAAA,EAAc;AAAA,IACZ,QAAQ,eAAA,CAAgB,MAAA;AAAA,IACxB,WAAA;AAAA,IACA,OAAO,eAAA,CAAgB;AAAA,GACzB;AAAA,EACA,UAAA,0BAAa,QAAA,KAAa,CAAC,WAAW,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAhD,YAAA,CAAA;AAAA,EACZ,GAAA,kBAAK,MAAA,CAAA,OAAO,EAAE,QAAA,EAAU,IAAA,EAAK,EAAG,EAAE,MAAA,EAAQ,WAAA,EAAAA,YAAAA,EAAa,KAAA,EAAAN,MAAAA,EAAM,KAAM;AACjE,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,MAAA,GAAS,OAAO,IAAA,CAAK;AAAA,MACnB,QAAQ,0BAAA,CAA2B;AAAA,KACpC,CAAA;AACD,IAAAM,YAAAA,GAAc,SAAA,CAAUA,YAAAA,EAAa,QAAA,EAAU,UAAU,CAAA;AACzD,IAAA,MAAM,oBAAA,GAAuB,CAAA,SAAA,EAC3B,QAAA,CAAU,UAAA,CAAW,EACvB,CAAA,mBAAA,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,OAAO,IAAA,CAAK,QAAA,CAAU,UAAU,EAAE,EAAE,MAAA,KAAW,CAAA;AACrE,IAAA,MAAM,gBAAA,GAAmBA,YAAAA,CAAY,iBAAA,IAAqB,CAAC,aAAA;AAE3D,IAAA,MAAM,MAAA,CAAO,KAAK,oBAAA,EAAsB;AAAA,MACtC,MAAM,gBAAA,GAAmB,EAAE,MAAA,EAAQ,QAAA,CAAU,QAAO,GAAI;AAAA,KACzD,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAU,MAAM,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAC9B,IAAA,MAAM,0BAA0B,CAAA,SAAA,EAAY,MAAA;AAAA,MAC1C,SAAU,UAAA,CAAW;AAAA,KACtB,mBAAmB,QAAQ,CAAA,EAAA,CAAA;AAC5B,IAAA,MAAM,gBAAA,GACJA,YAAAA,CAAY,gBAAA,IAAoB,MAAA,KAAW,MAAA;AAE7C,IAAA,MAAM,MAAA,CAAO,KAAK,uBAAA,EAAyB;AAAA,MACzC,IAAA,EAAM,gBAAA,GAAmB,EAAE,MAAA,EAAO,GAAI;AAAA,KACvC,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EA7BK,KAAA,CAAA;AAAA,EA8BL,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,mBAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM,CAAC,UAAA,CAAW,MAAM;AAC1B,CAAC,CAAA;;;ACnFD,IAAM,EAAA,GAAK,+CAAA;AACJ,IAAM,gCAAgC,cAAA,CAAe;AAAA,EAC1D,EAAA;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,wBAAA;AAAA,IACP,WAAA,EACE;AAAA,GACJ;AAAA,EACA,IAAA,EAAM,CAAC,UAAA,CAAW,MAAM,CAAA;AAAA,EACxB,YAAA,EAAc;AAAA,IACZ,QAAQ,eAAA,CAAgB,MAAA;AAAA,IACxB,WAAA;AAAA,IACA,mBAAmB,eAAA,CAAgB;AAAA,GACrC;AAAA,EACA,IAAA,kBAAM,MAAA,CAAA,OAAO,KAAA,EAAO,IAAA,KAAS;AAC3B,IAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAAA,YAAAA,EAAa,mBAAkB,GAAI,IAAA;AAGnD,IAAA,iBAAA,CAAkB,SAAA;AAAA,MAChB,MAAA;AAAA,MACA,OACE,MACA,KAAA,KACG;AACH,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA;AAC3B,QAAA,IAAI,CAAC,YAAA,CAAa,OAAO,CAAA,EAAG;AAC1B,UAAA,MAAM,GAAA,GAAM,SAAA,CAAUA,YAAAA,EAAa,KAAM,CAAA;AACzC,UAAA,IAAI,IAAI,sBAAA,EAAwB;AAC9B,YAAA,MAAM,GAAA,GAAM,CAAA,8BAAA,EAAiC,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAC,CAAA,CAAA;AAC/D,YAAA,MAAM,MAAA,CAAO,KAAK,GAAA,EAAK;AAAA,cACrB,MAAA,EAAQ;AAAA,aACT,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAK,CAAA;AAE/B,QAAA,IAAI,CAAC,YAAA,CAAa,OAAO,CAAA,EAAG;AAC1B,UAAA,MAAM,GAAA,GAAM,SAAA,CAAUA,YAAAA,EAAa,KAAM,CAAA;AACzC,UAAA,IAAI,IAAI,qBAAA,EAAuB;AAC7B,YAAA,MAAM,GAAA,GAAM,CAAA,8BAAA,EAAiC,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAC,CAAA,CAAA;AAC/D,YAAA,MAAM,MAAA,CAAO,KAAK,GAAA,EAAK;AAAA,cACrB,MAAA,EAAQ;AAAA,aACT,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,KACF;AAGA,IAAA,iBAAA,CAAkB,SAAA;AAAA,MAChB,UAAA;AAAA,MACA,OACE,MACA,KAAA,KACG;AACH,QAAA,MAAM,WAAA,GAAc,MAAM,QAAA,CAAS,UAAA;AACnC,QAAA,IAAI,CAAC,YAAA,CAAa,WAAW,CAAA,EAAG;AAC9B,UAAA,MAAM,GAAA,GAAM,SAAA,CAAUA,YAAAA,EAAa,KAAM,CAAA;AACzC,UAAA,IAAI,IAAI,sBAAA,EAAwB;AAC9B,YAAA,MAAM,MAAM,CAAA,kCAAA,EAAqC,MAAA;AAAA,cAC/C,WAAA,CAAY;AAAA,aACb,CAAA,CAAA;AACD,YAAA,MAAM,MAAA,CAAO,KAAK,GAAA,EAAK;AAAA,cACrB,MAAA,EAAQ;AAAA,aACT,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAK,CAAA;AAE/B,QAAA,IAAI,CAAC,YAAA,CAAa,WAAW,CAAA,EAAG;AAC9B,UAAA,MAAM,GAAA,GAAM,SAAA,CAAUA,YAAAA,EAAa,KAAM,CAAA;AACzC,UAAA,IAAI,IAAI,qBAAA,EAAuB;AAC7B,YAAA,MAAM,MAAM,CAAA,kCAAA,EAAqC,MAAA;AAAA,cAC/C,WAAA,CAAY;AAAA,aACb,CAAA,CAAA;AACD,YAAA,MAAM,MAAA,CAAO,KAAK,GAAA,EAAK;AAAA,cACrB,MAAA,EAAQ;AAAA,aACT,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,CAAA,EA1EM,MAAA;AA2ER,CAAC,CAAA;;;ACzFM,IAAM,0BAA0B,cAAA,CAAe;AAAA,EACpD,EAAA,EAAI,yCAAA;AAAA,EACJ,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,kBAAA;AAAA,IACP,WAAA,EACE;AAAA,GACJ;AAAA,EACA,IAAA,EAAM,CAAC,UAAA,CAAW,MAAM,CAAA;AAAA,EACxB,YAAA,EAAc;AAAA,IACZ,QAAQ,eAAA,CAAgB,MAAA;AAAA,IACxB,WAAA;AAAA,IACA,cAAc,eAAA,CAAgB;AAAA,GAChC;AAAA,EACA,IAAA,kBAAM,MAAA,CAAA,OAAO,KAAA,EAAO,IAAA,KAAS;AAC3B,IAAA,IAAA,CAAK,YAAA,CAAa,aAAA,CAAc,OAAO,IAAA,EAAM,MAAMC,MAAAA,KAAU;AAC3D,MAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAAD,YAAAA,EAAY,GAAI,IAAA;AAGhC,MAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG;AACtB,QAAA,OAAO,MAAM,IAAA,CAAK,IAAA,EAAMC,MAAK,CAAA;AAAA,MAC/B;AAEA,MAAA,MAAM,QAAA,GAAW,SAAA,CAAUD,YAAAA,EAAaC,MAAM,CAAA;AAC9C,MAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,QAAA,MAAM,SAAS,IAAA,CAAK,EAAA;AACpB,QAAA,IAAI,SAAA,GAAY,CAAA,mBAAA,EAAsB,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AACpD,QAAA,MAAM,MAAA,CAAO,KAAK,SAAA,EAAW;AAAA,UAC3B,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,IAAA,CAAK,MAAMA,MAAK,CAAA;AAEtB,MAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,QAAA,MAAM,SAAS,IAAA,CAAK,EAAA;AACpB,QAAA,IAAI,SAAA,GAAY,CAAA,mBAAA,EAAsB,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AACpD,QAAA,MAAM,MAAA,CAAO,KAAK,SAAA,EAAW;AAAA,UAC3B,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EA5BM,MAAA;AA6BR,CAAC,CAAA;;;ACvCM,IAAM,gBAAgB,cAAA,CAAe;AAAA,EAC1C,EAAA,EAAI,yBAAA;AAAA,EACJ,QAAA,0BAAW,MAAA,KAAgC;AACzC,IAAA,OAAO;AAAA,MACL,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,MACvB,mBAAA;AAAA,MACA,6BAAA;AAAA,MACA,uBAAA;AAAA,MACA,sBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EATU,UAAA,CAAA;AAAA,EAUV,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,OAAA;AAAA,IACP,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM,CAAC,UAAA,CAAW,MAAM;AAC1B,CAAC,CAAA;;;AC1BD,IAAMC,YAAW,WAAA,EAAY;AAG7B,IAAM,mBAAA,uBAA0B,GAAA,EAK9B;AACF,IAAI,0BAAA,GAA6B,KAAA;AAEjC,SAAS,kCAAA,GAAqC;AAC5C,EAAA,IAAI,0BAAA,EAA4B;AAChC,EAAA,0BAAA,GAA6B,IAAA;AAC7B,EAAA,MAAM,mBAAA,iCAA6B,GAAA,KAAa;AAC9C,IAAA,KAAA,MAAW,WAAW,mBAAA,EAAqB;AACzC,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,CAAQ,KAAK,mBAAmB,CAAA;AAAA,MACxC,SAAS,CAAA,EAAG;AAAA,MAAC;AAAA,IACf;AAAA,EACF,CAAA,EAN4B,qBAAA,CAAA;AAO5B,EAAA,MAAM,oBAAA,iCAA8B,MAAA,KAAgB;AAClD,IAAA,KAAA,MAAW,WAAW,mBAAA,EAAqB;AACzC,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,CAAQ,QAAQ,oBAAoB,CAAA;AAAA,MAC5C,SAAS,CAAA,EAAG;AAAA,MAAC;AAAA,IACf;AAAA,EACF,CAAA,EAN6B,sBAAA,CAAA;AAO7B,EAAAA,SAAAA,CAAS,oBAAoB,mBAAmB,CAAA;AAChD,EAAAA,SAAAA,CAAS,qBAAqB,oBAAoB,CAAA;AACpD;AAnBS,MAAA,CAAA,kCAAA,EAAA,oCAAA,CAAA;AAqBF,SAAS,+BACd,OAAA,EAIA;AACA,EAAA,kCAAA,EAAmC;AACnC,EAAA,mBAAA,CAAoB,IAAI,OAAO,CAAA;AAC/B,EAAA,OAAO,MAAM;AACX,IAAA,mBAAA,CAAoB,OAAO,OAAO,CAAA;AAAA,EACpC,CAAA;AACF;AAXgB,MAAA,CAAA,8BAAA,EAAA,gCAAA,CAAA;AAchB,IAAM,eAAA,uBAAsB,GAAA,EAAyB;AACrD,IAAI,sBAAA,GAAyB,KAAA;AAE7B,SAAS,8BAAA,GAAiC;AACxC,EAAA,IAAI,sBAAA,EAAwB;AAC5B,EAAA,sBAAA,GAAyB,IAAA;AACzB,EAAA,MAAM,0BAAU,MAAA,CAAA,YAAY;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,eAAe,CAAA;AAC5C,MAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,QAAA,IAAI;AACF,UAAA,MAAM,CAAA,EAAE;AAAA,QACV,CAAA,CAAA,MAAQ;AAAA,QAAC;AACT,QAAA,eAAA,CAAgB,OAAO,CAAC,CAAA;AAAA,MAC1B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,IAAI;AACF,QAAAA,SAAAA,CAAS,KAAK,CAAC,CAAA;AAAA,MACjB,SAAS,CAAA,EAAG;AACV,QAAA,IAAI,EAAE,aAAa,2BAAA,CAAA,EAA8B;AAC/C,UAAA,MAAM,CAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,EAlBgB,SAAA,CAAA;AAmBhB,EAAAA,SAAAA,CAAS,iBAAiB,OAAO,CAAA;AACnC;AAvBS,MAAA,CAAA,8BAAA,EAAA,gCAAA,CAAA;AAyBF,SAAS,qBAAqB,WAAA,EAAkC;AACrE,EAAA,8BAAA,EAA+B;AAC/B,EAAA,eAAA,CAAgB,IAAI,WAAW,CAAA;AAC/B,EAAA,OAAO,MAAM;AACX,IAAA,eAAA,CAAgB,OAAO,WAAW,CAAA;AAAA,EACpC,CAAA;AACF;AANgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;;;ACzDT,SAAS,4BAA4B,MAAA,EAAkC;AAC5E,EAAA,OAAO,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,QAAO,KAA4B;AAC9D,IAAA,MAAM,eAAA,GACJ,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA;AAE1D,IAAA,MAAM,OAAO,KAAA,CAAM,CAAA,EAAG,eAAA,CAAgB,QAAA,EAAU,CAAA,CAAA,EAAI;AAAA,MAClD,MAAA;AAAA,MACA,KAAA,EAAO,eAAA;AAAA,MACP,IAAA,EAAM;AAAA,QACJ;AAAA;AACF,KACD,CAAA;AAAA,EACH,CAAA;AACF;AAbgB,MAAA,CAAA,2BAAA,EAAA,6BAAA,CAAA;AAeT,SAAS,wBACd,OAAA,EAIwB;AACxB,EAAA,OAAO,OAAO,OAAO,MAAA,KAAW;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,EAAE,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,QAAQ,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACX,CAAA;AACF;AAXgB,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAahB,eAAsB,wBAAA,CACpB,SACA,IAAA,EACe;AACf,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,EACpB,CAAA,CAAA,MAAQ;AAAA,EAAC;AACX;AAPsB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;;;ACvCf,IAAM,UAAA,GAAN,MAAM,UAAA,CAAa;AAAA,EACxB,YACkB,KAAA,EACA,MAAA,EACAR,MAAAA,EACC,YAAA,EACA,YACA,SAAA,EACjB;AANgB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAAA,MAAAA;AACC,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AASnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAO,OAAA,mBAAU,MAAA,CAAA,CAKf,IAAA,EAAA,GACG,IAAA,KACA;AACH,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,QAAA,MAAM,MAAA,GAAS,IAAA;AACf,QAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,EAAG;AACjC,UAAA,MAAM,IAAI,YAAA,CAAa,CAAA,MAAA,EAAS,MAAM,CAAA,YAAA,CAAc,CAAA;AAAA,QACtD;AACA,QAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAG,IAAA;AAAA,MACvC;AAEA,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,GAAG,IAAI,CAAA;AAAA,IAC1C,CAAA,EAjBiB,SAAA,CAAA;AAwBjB;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAO,SAAA,mBAAY,MAAA,CAAA,CACjB,KAAA,EACA,OAAA,KACG;AACH,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAM,OAAA,GAAU,KAAA;AAChB,QAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,EAAG;AACnC,UAAA,MAAM,IAAI,YAAA,CAAa,CAAA,OAAA,EAAU,OAAO,CAAA,YAAA,CAAc,CAAA;AAAA,QACxD;AACA,QAAA,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,CAAG,KAAA;AAAA,MAC1C;AACA,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,KAAA,EAAO,SAAS,SAAS,CAAA;AAAA,IACzD,CAAA,EAZmB,WAAA,CAAA;AAmBnB;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAO,gBAAA,2BACL,QAAA,KACiD;AACjD,MAAA,MAAM,UAAA,GAAa,OAAO,QAAA,KAAa,QAAA,GAAW,WAAW,QAAA,CAAS,EAAA;AACtE,MAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA,EAAG;AACzC,QAAA,MAAM,IAAI,sBAAsB,UAAU,CAAA;AAAA,MAC5C;AAEA,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,UAAU,CAAA,CAAG,KAAA;AAAA,IAC/C,CAAA,EAT0B,kBAAA,CAAA;AAW1B,IAAA,IAAA,CAAO,0BAAU,MAAA,CAAA,MAAM;AACrB,MAAA,OAAO,KAAK,SAAA,EAAU;AAAA,IACxB,CAAA,EAFiB,SAAA,CAAA;AAAA,EA9Dd;AAiEL,CAAA;AAzE0B,MAAA,CAAA,UAAA,EAAA,WAAA,CAAA;AAAnB,IAAM,SAAA,GAAN;;;ACeP,IAAMQ,YAAW,WAAA,EAAY;AAS7B,eAAsB,GAAA,CACpB,8BAIA,OAAA,EACwD;AACxD,EAAA,MAAMA,UAAS,IAAA,EAAK;AACpB,EAAA,MAAM;AAAA,IACJ,KAAA,GAAQ,MAAA;AAAA,IACR,OAAO,EAAC;AAAA,IACR,aAAA,GAAgB,IAAA;AAAA,IAChB,aAAA,GAAgB,IAAA;AAAA,IAChB,MAAA,GAAS,KAAA;AAAA,IACT,gBAAA,EAAkB,mBAAA;AAAA,IAClB,qBAAA,GAAwB;AAAA,GAC1B,GAAI,WAAW,EAAC;AAEhB,EAAA,MAAM;AAAA,IACJ,iBAAiBA,SAAAA,CAAS,MAAA,CAAO,UAAU,CAAA,KAAM,SAAS,IAAA,GAAO,MAAA;AAAA,IACjE,aAAA,GAAgB,QAAA;AAAA,IAChB,UAAA,GAAa;AAAA,GACf,GAAI,IAAA;AAEJ,EAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa;AAAA,IACpC;AAAA,GACD,CAAA;AAED,EAAA,IAAI,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,wBAAA;AAAA,IACzB;AAAA,GACF;AAGA,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO;AAAA,IACxB,cAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,gBAAA,GACJ,mBAAA,IAAuB,2BAAA,CAA4B,MAAM,CAAA;AAE3D,EAAA,MAAMR,MAAAA,GAAQ,IAAI,KAAA,CAAM,YAAA,EAAc,QAAQ,gBAAgB,CAAA;AAC9D,EAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAWA,MAAAA,EAAO,cAAc,MAAM,CAAA;AAC7D,EAAAA,MAAAA,CAAM,cAAc,UAAU,CAAA;AAG9B,EAAA,IAAI,uBAAA;AACJ,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,uBAAA,GAA0B,8BAAA;AAAA,MACxB,wBAAwB,gBAAgB;AAAA,KAC1C;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,IAAI,mBAAA;AAAA,IACpBA,MAAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF;AAGA,EAAA,IAAI,cAAA;AAGJ,EAAA,MAAM,6BAAa,MAAA,CAAA,YAAY;AAC7B,IAAA,IAAI;AACF,MAAA,IAAI,uBAAA,EAAyB;AAC3B,QAAA,uBAAA,EAAwB;AACxB,QAAA,uBAAA,GAA0B,KAAA,CAAA;AAAA,MAC5B;AACA,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,cAAA,EAAe;AACf,QAAA,cAAA,GAAiB,KAAA,CAAA;AAAA,MACnB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,MAAMA,OAAM,OAAA,EAAQ;AAAA,IACtB;AAAA,EACF,CAAA,EAbmB,YAAA,CAAA;AAenB,EAAA,IAAI;AACF,IAAA,IAAI,KAAA,EAAO;AACT,MAAAA,MAAAA,CAAM,gBAAA,CAAiB,aAAA,CAAc,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,IAClD;AAGA,IAAAA,MAAAA,CAAM,eAAA,CAAgB,QAAA,EAAU,MAAM,CAAA;AAGtC,IAAA,MAAMA,OAAM,gBAAA,EAAiB;AAE7B,IAAAA,OAAM,uBAAA,EAAwB;AAE9B,IAAAA,OAAM,0BAAA,EAA2B;AAEjC,IAAA,MAAM,gBAAgB,MAAA,CAAO,IAAA,CAAK,EAAE,MAAA,EAAQ,OAAO,CAAA;AACnD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,aAAA,CAAc,MAAM,0CAA0C,CAAA;AACpE,MAAA,OAAO,IAAI,SAAA;AAAA,QACTA,OAAM,IAAA,CAAK,KAAA;AAAA,QACX,MAAA;AAAA,QACAA,MAAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAGA,IAAA,MAAM,aAAA,CAAc,MAAM,uCAAuC,CAAA;AACjE,IAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,IAAA,MAAM,aAAA,CAAc,MAAM,+CAA+C,CAAA;AACzE,IAAA,MAAM,UAAU,sBAAA,EAAuB;AAEvC,IAAA,MAAM,aAAA,CAAc,KAAA;AAAA,MAClB;AAAA,KACF;AAMA,IAAA,MAAM,UAAU,cAAA,EAAe;AAG/B,IAAAA,OAAM,IAAA,EAAK;AACX,IAAA,YAAA,CAAa,IAAA,EAAK;AAClB,IAAA,MAAM,OAAO,IAAA,EAAK;AAElB,IAAA,MAAM,YAAA,CAAa,IAAA;AAAA,MACjB,YAAA,CAAa,KAAA;AAAA,MACb;AAAA,QACE,IAAA,EAAMA,OAAM,IAAA,CAAK;AAAA,OACnB;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,aAAA,CAAc,KAAK,2CAA2C,CAAA;AAEpE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,cAAA,GAAiB,oBAAA,CAAqB,MAAMA,MAAAA,CAAM,OAAA,EAAS,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,IAAI,SAAA;AAAA,MACTA,OAAM,IAAA,CAAK,KAAA;AAAA,MACX,MAAA;AAAA,MACAA,MAAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,SAAS,GAAA,EAAK;AAEZ,IAAA,MAAM,UAAA,EAAW;AACjB,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AA5JsB,MAAA,CAAA,GAAA,EAAA,KAAA,CAAA;AAgKtB,SAAS,yBACP,4BAAA,EAIA;AACA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,oBAAA,CAAqB,4BAA4B,CAAA,EAAG;AACtD,IAAA,QAAA,GAAW,4BAAA,CAA6B,QAAA;AACxC,IAAA,MAAA,GAAS,4BAAA,CAA6B,MAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,QAAA,GAAW,4BAAA;AACX,IAAA,MAAA,GAAS,MAAA;AAAA,EACX;AACA,EAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAC5B;AAhBS,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;;;AChLT,IAAI,mBAAA,GAAsB,CAAA;AAQnB,SAAS,kBAAA,CACd,MACA,OAAA,EAS8D;AAC9D,EAAA,OAAO,cAAA,CAAe;AAAA,IACpB,IAAI,CAAA,QAAA,EAAW,IAAA,CAAK,EAAE,CAAA,CAAA,EAAI,EAAE,mBAAmB,CAAA,CAAA;AAAA,IAC/C,QAAA,EAAU,CAAC,IAAI,CAAA;AAAA,IACf,SAAA,EAAW,OAAA,EAAS,SAAA,IAAa,EAAC;AAAA,IAClC,YAAA,EAAc;AAAA,MACZ,YAAY,eAAA,CAAgB,UAAA;AAAA,MAC5B,OAAO,eAAA,CAAgB,KAAA;AAAA,MACvB,QAAQ,eAAA,CAAgB,MAAA;AAAA,MACxB,cAAc,eAAA,CAAgB;AAAA,KAChC;AAAA,IACA,MAAM,IAAA,CAAK,CAAA,EAAG,IAAA,EAAM;AAClB,MAAA,OAAO,gBAAgB,IAAI,CAAA;AAAA,IAC7B;AAAA,GACD,CAAA;AACH;AA1BgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AA2BhB,SAAS,gBAAgB,IAAA,EAKtB;AACD,EAAA,OAAO;AAAA;AAAA,IAEL,OAAA,kBAAS,MAAA,CAAA,CACP,IAAA,EAAA,GACG,IAAA,KAEH,IAAA,CAAK,WAAW,GAAA,CAAI,IAAA,EAAM,GAAG,IAAI,CAAA,EAJ1B,SAAA,CAAA;AAAA;AAAA,IAMT,WAAA,0BAAcD,GAAAA,KAAe,IAAA,CAAK,MAAM,SAAA,CAAU,GAAA,CAAIA,GAAE,CAAA,EAAG,KAAA,EAA9C,aAAA,CAAA;AAAA;AAAA,IAEb,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,cAAc,IAAA,CAAK;AAAA,GACrB;AACF;AArBS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;;;ACxCF,IAAM,UAAA,GAAN,MAAM,UAAA,CAAU;AAAA,EAMrB,YAAY,UAAA,EAAoB;AAJhC,IAAA,IAAA,CAAiB,eAAwC,EAAC;AAC1D,IAAA,IAAA,CAAQ,QAAA,GAAW,KAAA;AAIjB,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,UAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,OAAA,EAGI;AAChB,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAI,OAAA,EAAS,QAAQ,OAAA,EAAS;AAC5B,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,OAAA,EAAA;AACL,MAAA;AAAA,IACF;AAGA,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAC5C,MAAA,MAAM,SAAA,GAA8B,EAAE,OAAA,EAAS,MAAA,EAAO;AAGtD,MAAA,IAAI,OAAA,EAAS,OAAA,IAAW,OAAA,CAAQ,OAAA,GAAU,CAAA,EAAG;AAC3C,QAAA,SAAA,CAAU,OAAA,GAAU,WAAW,MAAM;AACnC,UAAA,IAAA,CAAK,gBAAgB,SAAS,CAAA;AAC9B,UAAA,MAAA;AAAA,YACE,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,OAAA,CAAQ,OAAO,CAAA,EAAA,CAAI;AAAA,WAClE;AAAA,QACF,CAAA,EAAG,QAAQ,OAAO,CAAA;AAAA,MACpB;AAGA,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,MAAM,+BAAe,MAAA,CAAA,MAAM;AACzB,UAAA,IAAA,CAAK,gBAAgB,SAAS,CAAA;AAC9B,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,uBAAuB,CAAC,CAAA;AAAA,QAC3C,CAAA,EAHqB,cAAA,CAAA;AAIrB,QAAA,OAAA,CAAQ,OAAO,gBAAA,CAAiB,OAAA,EAAS,cAAc,EAAE,IAAA,EAAM,MAAM,CAAA;AAGrE,QAAA,MAAM,kBAAkB,SAAA,CAAU,OAAA;AAClC,QAAA,MAAM,iBAAiB,SAAA,CAAU,MAAA;AAEjC,QAAA,SAAA,CAAU,UAAU,MAAM;AACxB,UAAA,OAAA,CAAQ,MAAA,CAAQ,mBAAA,CAAoB,OAAA,EAAS,YAAY,CAAA;AACzD,UAAA,eAAA,EAAgB;AAAA,QAClB,CAAA;AAEA,QAAA,SAAA,CAAU,MAAA,GAAS,CAAC,KAAA,KAAiB;AACnC,UAAA,OAAA,CAAQ,MAAA,CAAQ,mBAAA,CAAoB,OAAA,EAAS,YAAY,CAAA;AACzD,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,QACtB,CAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,YAAA,CAAa,KAAK,SAAS,CAAA;AAAA,IAClC,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAEhC,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM;AAG9C,MAAA,IAAI,cAAc,OAAA,EAAS;AACzB,QAAA,YAAA,CAAa,cAAc,OAAO,CAAA;AAAA,MACpC;AAEA,MAAA,aAAA,CAAc,OAAA,EAAQ;AAAA,IACxB,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,UAAU,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,GAAU,CAAA,EAAG,KAAK,UAAU,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA,EAEQ,gBAAgB,SAAA,EAAmC;AACzD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AACjD,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAGjC,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,YAAA,CAAa,UAAU,OAAO,CAAA;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CACJ,EAAA,EACA,OAAA,EACY;AACZ,IAAA,MAAM,IAAA,CAAK,QAAQ,OAAO,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAGhB,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,KAAA,EAAM;AAG1C,MAAA,IAAI,UAAU,OAAA,EAAS;AACrB,QAAA,YAAA,CAAa,UAAU,OAAO,CAAA;AAAA,MAChC;AAEA,MAAA,SAAA,CAAU,MAAA,CAAO,IAAI,KAAA,CAAM,6BAA6B,CAAC,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAA0B;AACxB,IAAA,OAAO,KAAK,YAAA,CAAa,MAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAwB;AACtB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAME;AACA,IAAA,OAAO;AAAA,MACL,kBAAkB,IAAA,CAAK,OAAA;AAAA,MACvB,YAAA,EAAc,KAAK,YAAA,CAAa,MAAA;AAAA,MAChC,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,WAAA,EAAA,CAAc,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,WAAW,IAAA,CAAK,UAAA;AAAA,MACrD,UAAU,IAAA,CAAK;AAAA,KACjB;AAAA,EACF;AACF,CAAA;AAnMuB,MAAA,CAAA,UAAA,EAAA,WAAA,CAAA;AAAhB,IAAM,SAAA,GAAN;;;ACMP,IAAM,OAAA,GAAU;AAAA,EACd,MAAA,EAAQ,YAAA;AAAA,EACR,SAAA,EAAW,eAAA;AAAA,EACX,UAAA,EAAY,iBAAA;AAAA,EACZ,IAAA,EAAM;AACR","file":"index.cjs","sourcesContent":["/**\n * Core public TypeScript types for BlueLibs Runner.\n *\n * This file contains the strongly-typed contract for tasks, resources, events\n * and middleware. It mirrors the mental model described in the README:\n * - Tasks are functions\n * - Resources are singletons (with init/dispose hooks)\n * - Hooks are event listeners without middleware\n * - Events are simple, strongly-typed emissions\n * - Middleware can target both tasks and resources (taskMiddleware, resourceMiddleware)\n *\n * DX goals:\n * - Crystal‑clear generics and helper types that infer dependency shapes\n * - Friendly JSDoc you can hover in editors to understand usage instantly\n * - Safe overrides and strong typing around config and register mechanics\n */\nexport * from \"./types/utilities\";\nexport * from \"./types/symbols\";\nexport * from \"./types/tag\";\nexport * from \"./types/hook\";\nexport * from \"./types/resource\";\nexport * from \"./types/event\";\nexport * from \"./types/task\";\nexport * from \"./types/taskMiddleware\";\nexport * from \"./types/resourceMiddleware\";\nexport * from \"./types/meta\";\nexport * from \"./types/runner\";\n\n// Useful other types that are kind-of spread out.\nexport { ICacheInstance } from \"./globals/middleware/cache.middleware\";\nexport * from \"./types/storeTypes\";\n","/**\n * Internal brand symbols used to tag created objects at runtime and help with\n * type‑narrowing. Prefer the `isTask`/`isResource`/`isEvent`/`isMiddleware`\n * helpers instead of touching these directly.\n * @internal\n */\nexport const symbolTask: unique symbol = Symbol.for(\"runner.task\");\nexport const symbolResource: unique symbol = Symbol.for(\"runner.resource\");\nexport const symbolResourceWithConfig: unique symbol = Symbol.for(\n \"runner.resourceWithConfig\",\n);\nexport const symbolEvent: unique symbol = Symbol.for(\"runner.event\");\nexport const symbolMiddleware: unique symbol = Symbol.for(\"runner.middleware\");\n/** New brands for separated middleware kinds */\nexport const symbolTaskMiddleware: unique symbol = Symbol.for(\n \"runner.taskMiddleware\",\n);\nexport const symbolResourceMiddleware: unique symbol = Symbol.for(\n \"runner.resourceMiddleware\",\n);\nexport const symbolMiddlewareConfigured: unique symbol = Symbol.for(\n \"runner.middlewareConfigured\",\n);\n/** @internal Marks hook definitions (event listeners without middleware) */\nexport const symbolHook: unique symbol = Symbol.for(\"runner.hook\");\n// export const symbolMiddlewareEverywhereTasks: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalTasks\",\n// );\n// export const symbolMiddlewareEverywhereResources: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalResources\",\n// );\n/** @internal Marks a tag definition */\nexport const symbolTag: unique symbol = Symbol.for(\"runner.tag\");\nexport const symbolTagConfigured: unique symbol = Symbol.for(\n \"runner.tagConfigured\",\n);\n\n/** @internal Marks an optional dependency wrapper */\nexport const symbolOptionalDependency: unique symbol = Symbol.for(\n \"runner.optionalDependency\",\n);\n\n/** @internal Path to aid anonymous id generation and error messages */\nexport const symbolFilePath: unique symbol = Symbol.for(\"runner.filePath\");\n/** @internal Marks disposable instances */\nexport const symbolDispose: unique symbol = Symbol.for(\"runner.dispose\");\n/** @internal Link to internal Store */\nexport const symbolStore: unique symbol = Symbol.for(\"runner.store\");\n\n/** @internal Brand used by index() resources */\nexport const symbolIndexResource: unique symbol = Symbol.for(\n \"runner.indexResource\",\n);\n","import { IOptionalDependency, IValidationSchema } from \"../defs\";\nimport { TagType } from \"./tag\";\nimport { IEventMeta } from \"./meta\";\nimport { CommonPayload, symbolEvent, symbolFilePath } from \"./utilities\";\n\nexport type EventHandlerType<T = any> = (\n event: IEventEmission<T>,\n) => any | Promise<any>;\n\n// Helper to keep tuple inference intact for multi-event hooks\nexport function onAnyOf<T extends readonly IEventDefinition<any>[]>(\n ...defs: T\n): T {\n return defs;\n}\n\n/**\n * Runtime guard that checks if an emission belongs to one of the given event defs.\n * Narrows payload type to the intersection of the provided events' payloads.\n */\nexport function isOneOf<TDefs extends readonly IEventDefinition<any>[]>(\n emission: IEventEmission<any>,\n defs: TDefs,\n): emission is IEventEmission<CommonPayload<TDefs>> {\n return defs.some((d) => d.id === emission.id);\n}\n\nexport interface IEventDefinition<TPayload = void> {\n id: string;\n meta?: IEventMeta;\n /**\n * Optional validation schema for runtime payload validation.\n * When provided, event payload will be validated when emitted.\n */\n payloadSchema?: IValidationSchema<TPayload>;\n tags?: TagType[];\n}\n\n/**\n * The definioten of the event.\n * This is different from the event emission.\n */\nexport interface IEvent<TPayload = any> extends IEventDefinition<TPayload> {\n id: string;\n /**\n * We use this event to discriminate between resources with just 'id' and 'events' as they collide. This is a workaround, should be redone using classes and instanceof.\n */\n [symbolEvent]: true;\n [symbolFilePath]: string;\n /** Return an optional dependency wrapper for this event. */\n optional: () => IOptionalDependency<IEvent<TPayload>>;\n tags: TagType[];\n}\n\n/**\n * This represents the object that is passed to event handlers\n */\nexport interface IEventEmission<TPayload = any> {\n /**\n * The ID of the event. This is the same as the event's ID.\n * This is useful for global event listeners.\n */\n id: string;\n /**\n * The data that the event carries. It can be anything.\n */\n data: TPayload;\n /**\n * The timestamp when the event was created.\n */\n timestamp: Date;\n /**\n * The source of the event. This can be useful for debugging.\n */\n source: string;\n /**\n * Metadata associated with the event definition.\n */\n meta: IEventMeta;\n /**\n * Stops propagation to remaining event listeners.\n */\n stopPropagation(): void;\n /**\n * Returns true if propagation has been stopped.\n */\n isPropagationStopped(): boolean;\n /**\n * The tags that the event carries.\n */\n tags: TagType[];\n}\n","import { defineTaskMiddleware, defineResource, defineTask } from \"../../define\";\nimport { LRUCache } from \"lru-cache\";\nimport { IResource, ITask } from \"../../defs\";\n\nexport interface ICacheInstance {\n set(key: string, value: any): void;\n get(key: string): any;\n clear(): void;\n}\n\n// Default cache factory task that can be overridden\nexport const cacheFactoryTask = defineTask({\n id: \"globals.tasks.cacheFactory\",\n run: async (options: any) => {\n return new LRUCache(options) as ICacheInstance;\n },\n});\n\ntype CacheResourceConfig = {\n defaultOptions?: any;\n};\n\ntype CacheMiddlewareConfig = {\n keyBuilder?: (taskId: string, input: any) => string;\n} & any;\n\nexport const cacheResource = defineResource({\n id: \"globals.resources.cache\",\n register: [cacheFactoryTask],\n dependencies: {\n cacheFactoryTask,\n },\n init: async (config: CacheResourceConfig, { cacheFactoryTask }) => {\n return {\n map: new Map<string, ICacheInstance>(),\n cacheFactoryTask,\n defaultOptions: {\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config.defaultOptions,\n },\n };\n },\n dispose: async (cache) => {\n for (const cacheInstance of cache.map.values()) {\n await cacheInstance.clear();\n }\n },\n});\n\nconst defaultKeyBuilder = (taskId: string, input: any) =>\n `${taskId}-${JSON.stringify(input)}`;\n\nexport const cacheMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.cache\",\n dependencies: { cache: cacheResource },\n async run({ task, next }, deps, config: CacheMiddlewareConfig) {\n const { cache } = deps;\n config = {\n keyBuilder: defaultKeyBuilder,\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config,\n };\n\n const taskId = task!.definition.id;\n let cacheHolderForTask = cache.map.get(taskId)!;\n if (!cacheHolderForTask) {\n // Extract only LRUCache options, excluding keyBuilder\n const { keyBuilder, ...lruOptions } = config;\n const cacheOptions = {\n ...cache.defaultOptions,\n ...lruOptions,\n };\n\n // Use the factory task to create the cache instance\n cacheHolderForTask = await cache.cacheFactoryTask(cacheOptions);\n\n cache.map.set(taskId, cacheHolderForTask);\n }\n\n const key = config.keyBuilder!(taskId, task!.input);\n\n const cachedValue = await cacheHolderForTask.get(key);\n\n if (cachedValue) {\n return cachedValue;\n }\n\n const result = await next(task!.input);\n\n await cacheHolderForTask.set(key, result);\n\n return result;\n },\n});\n","export function getCallerFile(): string {\n const originalFunc = Error.prepareStackTrace;\n\n try {\n const err = new Error();\n let callerfile;\n let currentfile;\n\n // Safeguard prepareStackTrace\n Error.prepareStackTrace = (err, stack) => stack;\n\n const stack = err.stack as unknown as NodeJS.CallSite[];\n\n // Don't know how to test this.\n // if (stack.length < 3) {\n // // We need at least 3 frames: current function, its caller, and one above\n // return undefined;\n // }\n\n // Remove the first frame (getCallerFile itself)\n stack.shift();\n\n // Remove the second frame (the direct caller of getCallerFile)\n currentfile = stack.shift()?.getFileName?.();\n\n // The third frame (the caller above the immediate one)\n callerfile = stack.shift()?.getFileName?.();\n\n return callerfile as string; // Return the file name of the caller above\n } finally {\n Error.prepareStackTrace = originalFunc;\n }\n}\n","import {\n ITask,\n ITaskDefinition,\n DependencyMapType,\n ITaskMeta,\n TagType,\n symbolTask,\n symbolFilePath,\n symbolOptionalDependency,\n IOptionalDependency,\n TaskMiddlewareAttachmentType,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Define a task.\n * Generates a strongly-typed task object with id, dependencies,\n * middleware, and metadata.\n *\n * @typeParam Input - Input type accepted by the task's `run` function.\n * @typeParam Output - Promise type returned by the `run` function.\n * @typeParam Deps - Dependency map type this task requires.\n * @typeParam TOn - Event type or \"*\" this task listens to.\n * @typeParam TMeta - Arbitrary metadata type carried by the task.\n * @param taskConfig - The task definition config.\n * @returns A branded task definition usable by the runner.\n */\nexport function defineTask<\n Input = undefined,\n Output extends Promise<any> = any,\n Deps extends DependencyMapType = any,\n TMeta extends ITaskMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[],\n>(\n taskConfig: ITaskDefinition<Input, Output, Deps, TMeta, TTags, TMiddleware>,\n): ITask<Input, Output, Deps, TMeta, TTags, TMiddleware> {\n const filePath = getCallerFile();\n const id = taskConfig.id;\n return {\n [symbolTask]: true,\n [symbolFilePath]: filePath,\n id,\n dependencies: taskConfig.dependencies || ({} as Deps),\n middleware: taskConfig.middleware || ([] as unknown as TMiddleware),\n run: taskConfig.run,\n inputSchema: taskConfig.inputSchema,\n resultSchema: taskConfig.resultSchema,\n meta: taskConfig.meta || ({} as TMeta),\n tags: taskConfig.tags || ([] as unknown as TTags),\n // autorun,\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n ITask<Input, Output, Deps, TMeta, TTags, TMiddleware>\n >;\n },\n };\n}\n","import {\n DependencyMapType,\n IEventDefinition,\n ITaskMeta,\n IHook,\n IHookDefinition,\n symbolHook,\n symbolFilePath,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Define a hook (event listeners).\n * Same shape as task with mandatory `on` and without `middleware`.\n */\nexport function defineHook<\n D extends DependencyMapType = any,\n TOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[] = any,\n TMeta extends ITaskMeta = any,\n>(hookDef: IHookDefinition<D, TOn, TMeta>): IHook<D, TOn, TMeta> {\n const filePath = getCallerFile();\n return {\n [symbolHook]: true,\n [symbolFilePath]: filePath,\n id: hookDef.id,\n dependencies: hookDef.dependencies || ({} as D),\n on: hookDef.on,\n order: hookDef.order,\n run: hookDef.run,\n meta: hookDef.meta || ({} as TMeta),\n tags: hookDef.tags || [],\n } as IHook<D, TOn, TMeta>;\n}\n","/**\n * Base error class for all BlueLibs Runner errors\n */\nexport class RuntimeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RuntimeError\";\n }\n}\n\n/**\n * Error thrown when attempting to register a component with a duplicate ID\n */\nexport class DuplicateRegistrationError extends RuntimeError {\n constructor(type: string, id: string) {\n super(\n `${type} \"${id.toString()}\" already registered. You might have used the same 'id' in two different components or you may have registered the same element twice.`,\n );\n this.name = \"DuplicateRegistrationError\";\n }\n}\n\n/**\n * Error thrown when a dependency is not found in the registry\n */\nexport class DependencyNotFoundError extends RuntimeError {\n constructor(key: string) {\n super(\n `Dependency ${key.toString()} not found. Did you forget to register it through a resource?`,\n );\n this.name = \"DependencyNotFoundError\";\n }\n}\n\n/**\n * Error thrown when an unknown item type is encountered\n */\nexport class UnknownItemTypeError extends RuntimeError {\n constructor(item: any) {\n super(\n `Unknown item type: ${item}. Please ensure you are not using different versions of '@bluelibs/runner'`,\n );\n this.name = \"UnknownItemTypeError\";\n }\n}\n\n/**\n * Error thrown whenever a requested context is not available.\n */\nexport class ContextError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ContextError\";\n }\n}\n\n/**\n * Error thrown when circular dependencies are detected\n */\nexport class CircularDependenciesError extends RuntimeError {\n constructor(cycles: string[]) {\n const cycleDetails = cycles.map((cycle) => ` • ${cycle}`).join(\"\\n\");\n const hasMiddleware = cycles.some((cycle) => cycle.includes(\"middleware\"));\n\n let guidance = \"\\n\\nTo resolve circular dependencies:\";\n guidance +=\n \"\\n • Consider refactoring to reduce coupling between components\";\n guidance += \"\\n • Extract shared dependencies into separate resources\";\n\n if (hasMiddleware) {\n guidance +=\n \"\\n • For middleware: you can filter out tasks/resources using everywhere(fn)\";\n guidance +=\n \"\\n • Consider using events for communication instead of direct dependencies\";\n }\n\n super(`Circular dependencies detected:\\n${cycleDetails}${guidance}`);\n this.name = \"CircularDependenciesError\";\n }\n}\n\n/**\n * Error thrown when an event is not found in the registry\n */\nexport class EventNotFoundError extends RuntimeError {\n constructor(id: string) {\n super(`Event \"${id.toString()}\" not found. Did you forget to register it?`);\n this.name = \"EventNotFoundError\";\n }\n}\n\n/**\n * Error thrown when a resource is not found in the store\n */\nexport class ResourceNotFoundError extends RuntimeError {\n constructor(id: string) {\n super(\n `Resource \"${id.toString()}\" not found. Did you forget to register it or are you using the correct id?`,\n );\n this.name = \"ResourceNotFoundError\";\n }\n}\n\nexport class MiddlewareNotRegisteredError extends RuntimeError {\n constructor(type: \"task\" | \"resource\", source: string, middlewareId: string) {\n super(\n `Middleware inside ${type} \"${source}\" depends on \"${middlewareId}\" but it's not registered. Did you forget to register it?`,\n );\n\n this.name = `MiddlewareNotRegisteredError: ${type} ${source} ${middlewareId}`;\n }\n}\n\n/**\n * Error thrown when a tag is not found in the registry\n */\nexport class TagNotFoundError extends RuntimeError {\n constructor(id: string) {\n super(\n `Tag \"${id}\" not registered. Did you forget to register it inside a resource?`,\n );\n this.name = \"TagNotRegisteredError\";\n }\n}\n\n/**\n * Error thrown when attempting to modify a locked component\n */\nexport class LockedError extends RuntimeError {\n constructor(what: string) {\n super(`Cannot modify the ${what.toString()} when it is locked.`);\n this.name = \"LockedError\";\n }\n}\n\n/**\n * Error thrown when attempting to initialize a store that's already initialized\n */\nexport class StoreAlreadyInitializedError extends RuntimeError {\n constructor() {\n super(\"Store already initialized. Cannot reinitialize.\");\n this.name = \"StoreAlreadyInitializedError\";\n }\n}\n\n/**\n * Error thrown when validation fails for task input, resource config, middleware config, or event payload\n */\nexport class ValidationError extends RuntimeError {\n constructor(type: string, id: string, originalError: Error | string) {\n const errorMessage =\n originalError instanceof Error\n ? originalError.message\n : String(originalError);\n super(`${type} validation failed for ${id.toString()}: ${errorMessage}`);\n this.name = \"ValidationError\";\n }\n}\n\n/**\n * Error thrown when an event emission cycle is detected\n */\nexport class EventCycleError extends RuntimeError {\n constructor(path: Array<{ id: string; source: string }>) {\n const chain = path.map((p) => `${p.id}←${p.source}`).join(\" -> \");\n super(\n `Event emission cycle detected:\\n ${chain}\\n\\nBreak the cycle by changing hook logic (avoid mutual emits) or gate with conditions/tags.`,\n );\n this.name = \"EventCycleError\";\n }\n}\n\n/**\n * Error thrown when a compile-time event emission cycle is detected\n */\nexport class EventEmissionCycleError extends RuntimeError {\n constructor(cycles: string[]) {\n const list = cycles.map((c) => ` • ${c}`).join(\"\\n\");\n super(\n `Event emission cycles detected between hooks and events:\\n${list}\\n\\nThis was detected at compile time (dry-run). Break the cycle by avoiding mutual emits between hooks or scoping hooks using tags.`,\n );\n this.name = \"EventEmissionCycleError\";\n }\n}\n\n/**\n * Error thrown when a platform function is not supported in the current environment.\n */\nexport class PlatformUnsupportedFunction extends RuntimeError {\n constructor(functionName: string) {\n super(\n `Platform function not supported in this environment: ${functionName}`,\n );\n this.name = \"PlatformUnsupportedFunction\";\n }\n}\n","import {\n IResource,\n IResourceDefinition,\n DependencyMapType,\n IResourceMeta,\n TagType,\n symbolResource,\n symbolFilePath,\n symbolIndexResource,\n symbolResourceWithConfig,\n symbolOptionalDependency,\n IOptionalDependency,\n ResourceMiddlewareAttachmentType,\n IResourceWithConfig,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineResource<\n TConfig = void,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TPrivate = any,\n TMeta extends IResourceMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[] = ResourceMiddlewareAttachmentType[],\n>(\n constConfig: IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >,\n): IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware> {\n /**\n * Define a resource.\n * Produces a strongly-typed resource with id, registration hooks,\n * and optional config schema.\n *\n * - If `id` is omitted, an anonymous, file-based id is generated (resource or index flavored).\n * - Provides `.with(config)` for config-bound registration with optional runtime validation.\n *\n * @typeParam TConfig - Configuration type accepted by the resource.\n * @typeParam TValue - Promise type resolved by the resource `init`.\n * @typeParam TDeps - Dependency map type this resource requires.\n * @typeParam TPrivate - Private context type exposed to middleware during init.\n * @typeParam TMeta - Arbitrary metadata type carried by the resource.\n * @param constConfig - The resource definition config.\n * @returns A branded resource definition usable by the runner.\n */\n // The symbolFilePath might already come from defineIndex() for example\n const filePath: string = constConfig[symbolFilePath] || getCallerFile();\n const isIndexResource = constConfig[symbolIndexResource] || false;\n const id = constConfig.id;\n\n return {\n [symbolResource]: true,\n [symbolFilePath]: filePath,\n [symbolIndexResource]: isIndexResource,\n id,\n dependencies: constConfig.dependencies,\n dispose: constConfig.dispose,\n register: constConfig.register || [],\n overrides: constConfig.overrides || [],\n init: constConfig.init,\n context: constConfig.context,\n configSchema: constConfig.configSchema,\n resultSchema: constConfig.resultSchema,\n tags: constConfig.tags || ([] as unknown as TTags),\n with: function (config: TConfig) {\n // Validate config with schema if provided (fail fast)\n if (constConfig.configSchema) {\n try {\n config = constConfig.configSchema.parse(config);\n } catch (error) {\n throw new ValidationError(\n \"Resource config\",\n id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n return {\n [symbolResourceWithConfig]: true,\n id: this.id,\n resource: this,\n config,\n } satisfies IResourceWithConfig<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n TMeta,\n TTags,\n TMiddleware\n >;\n },\n\n meta: (constConfig.meta || {}) as TMeta,\n middleware: constConfig.middleware || ([] as unknown as TMiddleware),\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware>\n >;\n },\n };\n}\n","import {\n IEvent,\n IEventDefinition,\n symbolEvent,\n symbolFilePath,\n symbolOptionalDependency,\n IOptionalDependency,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineEvent<TPayload = void>(\n config: IEventDefinition<TPayload>,\n): IEvent<TPayload> {\n const callerFilePath = getCallerFile();\n const eventConfig = config;\n return {\n ...eventConfig,\n id: eventConfig.id,\n [symbolFilePath]: callerFilePath,\n [symbolEvent]: true, // This is a workaround\n tags: eventConfig.tags || [],\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<IEvent<TPayload>>;\n },\n };\n}\n","import {\n ITaskMiddleware,\n ITaskMiddlewareDefinition,\n DependencyMapType,\n ITask,\n symbolFilePath,\n symbolTaskMiddleware,\n symbolMiddlewareConfigured,\n ITaskMiddlewareConfigured,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineTaskMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: ITaskMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolTaskMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies:\n (middlewareDef.dependencies as TDependencies) || ({} as TDependencies),\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n throw new ValidationError(\n \"Middleware config\",\n obj.id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: {\n ...(obj.config as TConfig),\n ...config,\n },\n } satisfies ITaskMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>);\n },\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n IResourceMiddleware,\n IResourceMiddlewareDefinition,\n DependencyMapType,\n symbolFilePath,\n symbolResourceMiddleware,\n symbolMiddlewareConfigured,\n IResourceMiddlewareConfigured,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineResourceMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: IResourceMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolResourceMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies: middlewareDef.dependencies || ({} as TDependencies),\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n throw new ValidationError(\n \"Middleware config\",\n obj.id,\n error as Error,\n );\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: {\n ...(obj.config as TConfig),\n ...config,\n },\n } satisfies IResourceMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>);\n },\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n ITask,\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n IHook,\n} from \"../defs\";\n\n/**\n * Override helper that preserves the original `id` and returns the same type.\n * You can override any property except `id`. The override is shallow-merged over the base.\n *\n * @param base - The base definition to override.\n * @param patch - Properties to override (except `id`).\n * @returns A definition of the same kind with overrides applied.\n */\nexport function defineOverride<T extends ITask<any, any, any, any, any, any>>(\n base: T,\n patch: Omit<Partial<T>, \"id\"> & Pick<T, \"run\">,\n): T;\nexport function defineOverride<\n T extends IResource<any, any, any, any, any, any>,\n>(base: T, patch: Omit<Partial<T>, \"id\"> & Pick<T, \"init\">): T;\nexport function defineOverride<T extends ITaskMiddleware<any, any, any, any>>(\n base: T,\n patch: Omit<Partial<T>, \"id\">,\n): T;\nexport function defineOverride<\n T extends IResourceMiddleware<any, any, any, any>,\n>(base: T, patch: Omit<Partial<T>, \"id\"> & Pick<T, \"run\">): T;\nexport function defineOverride<T extends IHook<any, any, any>>(\n base: T,\n patch: Omit<Partial<T>, \"id\" | \"on\"> & Pick<T, \"run\">,\n): T;\nexport function defineOverride(\n base: ITask | IResource | ITaskMiddleware | IResourceMiddleware,\n patch: Record<string, unknown>,\n): ITask | IResource | ITaskMiddleware | IResourceMiddleware {\n const { id: _ignored, ...rest } = patch;\n // Ensure we never change the id, and merge overrides last\n return {\n ...(base as any),\n ...rest,\n id: (base as any).id,\n } as any;\n}\n","import {\n ITag,\n ITagDefinition,\n ITaggable,\n TagType,\n ITagConfigured,\n symbolTag,\n symbolFilePath,\n symbolTagConfigured,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Create a tag definition.\n * - `.with(config)` to create configured instances\n * - `.extract(tags)` to extract this tag from a list of tags or a taggable's meta\n *\n * @typeParam TConfig - Configuration type carried by configured tags.\n * @typeParam TEnforceContract - Optional helper type to enforce a contract when tags are used.\n * @param definition - The tag definition (id).\n * @returns A tag object with helpers to configure and extract.\n */\nexport function defineTag<\n TConfig = void,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n>(\n definition: ITagDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >,\n): ITag<TConfig, TEnforceInputContract, TEnforceOutputContract> {\n const id = definition.id;\n const filePath = getCallerFile();\n const foundation = {\n id,\n meta: definition.meta,\n config: definition.config,\n configSchema: definition.configSchema,\n } as ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n\n return {\n ...foundation,\n [symbolTag]: true,\n [symbolFilePath]: filePath,\n /**\n * Specify custom config for this tag which extends the default one if exists\n * @param tagConfig\n * @returns\n */\n with(tagConfig: TConfig) {\n if (definition.configSchema) {\n try {\n tagConfig = definition.configSchema.parse(tagConfig);\n } catch (error) {\n throw new ValidationError(\"Tag config\", this.id, error as Error);\n }\n }\n let config: TConfig;\n if (typeof tagConfig === \"object\") {\n if (typeof foundation.config === \"object\") {\n config = {\n ...foundation.config,\n ...tagConfig,\n };\n } else {\n config = tagConfig;\n }\n } else {\n config = tagConfig;\n }\n return {\n ...foundation,\n [symbolTagConfigured]: true,\n config,\n } as ITagConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >;\n },\n /**\n * Checks if the tag exists in a taggable or a list of tags.\n * @param target\n * @returns\n */\n exists(target: ITaggable | TagType[]): boolean {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags;\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return true;\n }\n }\n\n return false;\n },\n /**\n * Function which serves 2 purposes, verifying if the task exists, and retrieving its config\n * @param target\n * @returns\n */\n extract(target: ITaggable | TagType[]): TConfig | undefined {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags || [];\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return candidate.config as TConfig;\n }\n }\n\n return;\n },\n } satisfies ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n}\n","/**\n * Type guard and utility functions for checking definition types.\n */\nimport {\n ITask,\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n symbolEvent,\n symbolTask,\n symbolHook,\n symbolResourceWithConfig,\n symbolResource,\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n IHook,\n IOptionalDependency,\n symbolOptionalDependency,\n symbolTag,\n ITag,\n} from \"../defs\";\n\n/**\n * Type guard: checks if a definition is a Task.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Task.\n */\nexport function isTask(definition: any): definition is ITask {\n return definition && definition[symbolTask];\n}\n\n/**\n * Type guard: checks if a definition is a Resource.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Resource.\n */\nexport function isResource(definition: any): definition is IResource {\n return definition && definition[symbolResource];\n}\n\n/**\n * Type guard: checks if a definition is a Resource that carries config via `.with()`.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded ResourceWithConfig.\n */\nexport function isResourceWithConfig(\n definition: any,\n): definition is IResourceWithConfig {\n return definition && definition[symbolResourceWithConfig];\n}\n\n/**\n * Type guard: checks if a definition is an Event.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Event.\n */\nexport function isEvent(definition: any): definition is IEvent {\n return definition && definition[symbolEvent];\n}\n\n/** Type guard: checks if a definition is a Hook. */\nexport function isHook(definition: any): definition is IHook {\n return definition && definition[symbolHook];\n}\n\n/**\n * Type guard: checks if a definition is a Middleware.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Middleware.\n */\nexport function isTaskMiddleware(\n definition: any,\n): definition is ITaskMiddleware {\n return definition && definition[symbolTaskMiddleware];\n}\n\nexport function isResourceMiddleware(\n definition: any,\n): definition is IResourceMiddleware {\n return definition && definition[symbolResourceMiddleware];\n}\n\n/**\n * Type guard: checks if a definition is a Tag.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Tag.\n */\nexport function isTag(definition: any): definition is ITag {\n return definition && definition[symbolTag];\n}\n\n/** Type guard: checks if a definition is an Optional Dependency wrapper. */\nexport function isOptional(\n definition: any,\n): definition is IOptionalDependency<any> {\n return definition && definition[symbolOptionalDependency];\n}","/**\n * Unified Platform Adapter\n * Single adapter that switches behavior based on detected environment.\n */\n\nimport type { IPlatformAdapter, IAsyncLocalStorage } from \"./types\";\nimport { PlatformUnsupportedFunction } from \"../errors\";\n\nexport type PlatformEnv = \"node\" | \"browser\" | \"universal\";\n\nexport function detectEnvironment(): PlatformEnv {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n return \"browser\";\n }\n if (\n typeof process !== \"undefined\" &&\n (process as any).versions &&\n (process as any).versions.node\n ) {\n return \"node\";\n }\n return \"universal\";\n}\n\nexport class PlatformAdapter implements IPlatformAdapter {\n readonly env: PlatformEnv;\n private isInitialized = false;\n private nodeALSClass: any | null = null;\n\n constructor(env?: PlatformEnv) {\n this.env = env ?? detectEnvironment();\n }\n\n async init() {\n if (this.env === \"node\") {\n this.nodeALSClass = (await import(\"node:async_hooks\")).AsyncLocalStorage;\n }\n }\n\n onUncaughtException(handler: (error: any) => void): () => void {\n switch (this.env) {\n case \"node\": {\n process.on(\"uncaughtException\", handler as any);\n return () => process.off(\"uncaughtException\", handler as any);\n }\n case \"browser\": {\n const target: any = (globalThis as any).window ?? globalThis;\n const h = (e: any) => handler(e?.error ?? e);\n target.addEventListener?.(\"error\", h);\n return () => target.removeEventListener?.(\"error\", h);\n }\n default: {\n const tgt: any = globalThis as any;\n if (tgt.addEventListener) {\n const h = (e: any) => handler(e?.error ?? e);\n tgt.addEventListener(\"error\", h);\n return () => tgt.removeEventListener(\"error\", h);\n }\n return () => {};\n }\n }\n }\n\n onUnhandledRejection(handler: (reason: any) => void): () => void {\n switch (this.env) {\n case \"node\": {\n const h = (reason: any) => handler(reason);\n process.on(\"unhandledRejection\", h);\n return () => process.off(\"unhandledRejection\", h);\n }\n case \"browser\": {\n const target: any = (globalThis as any).window;\n const wrap = (e: any) => handler(e.reason);\n target.addEventListener?.(\"unhandledrejection\", wrap);\n return () => target.removeEventListener?.(\"unhandledrejection\", wrap);\n }\n default: {\n const tgt: any = globalThis as any;\n if (tgt.addEventListener) {\n const wrap = (e: any) => handler(e.reason ?? e);\n tgt.addEventListener(\"unhandledrejection\", wrap);\n return () => tgt.removeEventListener(\"unhandledrejection\", wrap);\n }\n return () => {};\n }\n }\n }\n\n onShutdownSignal(handler: () => void): () => void {\n switch (this.env) {\n case \"node\": {\n process.on(\"SIGINT\", handler);\n process.on(\"SIGTERM\", handler);\n return () => {\n process.off(\"SIGINT\", handler);\n process.off(\"SIGTERM\", handler);\n };\n }\n case \"browser\": {\n const win: any = window;\n const doc: any = document;\n win.addEventListener?.(\"beforeunload\", handler);\n return () => {\n win.removeEventListener?.(\"beforeunload\", handler);\n };\n }\n default: {\n const tgt: any = globalThis as any;\n const cleanup: Array<() => void> = [];\n if (tgt.addEventListener) {\n tgt.addEventListener(\"beforeunload\", handler);\n cleanup.push(() =>\n tgt.removeEventListener?.(\"beforeunload\", handler),\n );\n const vis = () => {\n const doc: any = (globalThis as any).document;\n if (doc && doc.visibilityState === \"hidden\") handler();\n };\n tgt.addEventListener(\"visibilitychange\", vis);\n cleanup.push(() =>\n tgt.removeEventListener?.(\"visibilitychange\", vis),\n );\n }\n if (typeof process !== \"undefined\" && (process as any).on) {\n (process as any).on(\"SIGINT\", handler);\n (process as any).on(\"SIGTERM\", handler);\n cleanup.push(() => {\n (process as any).off?.(\"SIGINT\", handler);\n (process as any).off?.(\"SIGTERM\", handler);\n });\n }\n return () => cleanup.forEach((fn) => fn());\n }\n }\n }\n\n exit(code: number): void {\n switch (this.env) {\n case \"node\":\n process.exit(code);\n return;\n default:\n throw new PlatformUnsupportedFunction(\"exit\");\n }\n }\n\n getEnv(key: string): string | undefined {\n switch (this.env) {\n case \"node\":\n return process.env[key];\n default: {\n const g: any = globalThis as any;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") return g.__ENV__[key];\n if (typeof process !== \"undefined\" && (process as any).env)\n return (process as any).env[key];\n if (g.env && typeof g.env === \"object\") return g.env[key];\n return undefined;\n }\n }\n }\n\n hasAsyncLocalStorage(): boolean {\n switch (this.env) {\n case \"node\":\n return true; // We'll try native, else polyfill\n case \"browser\":\n default:\n return false; // Keep behavior strict for universal\n }\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n switch (this.env) {\n case \"node\": {\n let instance: IAsyncLocalStorage<T> | undefined;\n const get = (): IAsyncLocalStorage<T> => {\n if (!instance) {\n if (!this.nodeALSClass) {\n throw new PlatformUnsupportedFunction(\n \"createAsyncLocalStorage: Platform not initialized\",\n );\n }\n instance = new this.nodeALSClass();\n }\n\n return instance!;\n };\n\n return {\n getStore: () => get().getStore(),\n run: (store: T, callback: () => any) => get().run(store, callback),\n };\n }\n case \"browser\":\n default:\n return {\n getStore: () => {\n throw new PlatformUnsupportedFunction(\"createAsyncLocalStorage\");\n },\n run: () => {\n throw new PlatformUnsupportedFunction(\"createAsyncLocalStorage\");\n },\n };\n }\n }\n\n // timers\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n\n// Singleton management\nlet platformInstance: IPlatformAdapter | null = null;\nlet detectedEnvironment: PlatformEnv | null = null;\n\nexport function getPlatform(): IPlatformAdapter {\n if (!platformInstance) {\n const env = detectEnvironment();\n detectedEnvironment = env;\n platformInstance = new PlatformAdapter(env);\n }\n return platformInstance;\n}\n\nexport function setPlatform(adapter: IPlatformAdapter): void {\n platformInstance = adapter;\n detectedEnvironment = \"manual\" as any;\n}\n\nexport function resetPlatform(): void {\n platformInstance = null;\n detectedEnvironment = null;\n}\n\nexport function getDetectedEnvironment(): PlatformEnv {\n if (!detectedEnvironment) detectedEnvironment = detectEnvironment();\n return detectedEnvironment;\n}\n\nexport function isNode(): boolean {\n return getDetectedEnvironment() === \"node\";\n}\n\nexport function isBrowser(): boolean {\n return getDetectedEnvironment() === \"browser\";\n}\n\nexport function isUniversal(): boolean {\n return getDetectedEnvironment() === \"universal\";\n}\n\n// Re-export types\nexport type { IPlatformAdapter, IAsyncLocalStorage } from \"./types\";\n","import { Context, ContextError } from \"../../context\";\nimport { defineTaskMiddleware } from \"../../define\";\n\ntype RequireContextMiddlewareConfig = {\n context: Context<any>;\n};\n\nexport const requireContextTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.requireContext\",\n async run({ task, next }, deps, config: RequireContextMiddlewareConfig) {\n if (!config.context) {\n throw new Error(\n \"Context not available. Did you forget to pass 'context' to the middleware?\",\n );\n }\n\n // This will throw if the context is not available\n const ctx = config.context.use();\n\n return next(task?.input);\n },\n});\n","import { getPlatform } from \"./platform\";\nimport { ITaskMiddlewareConfigured } from \"./defs\";\nimport { requireContextTaskMiddleware } from \"./globals/middleware/requireContext.middleware\";\nimport {\n ContextError,\n PlatformUnsupportedFunction,\n RuntimeError,\n} from \"./errors\";\n\nexport { ContextError };\n/**\n * The generic Context object returned by `createContext`.\n */\nexport interface Context<T> {\n /** unique symbol used as key in the AsyncLocalStorage map */\n readonly id: symbol;\n /** Retrieve the current context value or throw */\n use(): T;\n /**\n * Provide a value for this context during the lifetime of `fn()`\n */\n provide<R>(value: T, fn: () => Promise<R> | R): Promise<R> | R;\n /**\n * Generates a middleware that guarantees the context exists (and optionally\n * enforces that certain keys are present on the context object).\n */\n require<K extends keyof T = never>(\n keys?: K[],\n ): ITaskMiddlewareConfigured<{ context: Context<T> }>;\n}\n\n// The internal storage maps Context identifiers (symbols) to their values\nconst platform = getPlatform();\nexport const storage = platform.createAsyncLocalStorage<Map<symbol, unknown>>();\n\n/** Returns the currently active store or undefined. */\nfunction getCurrentStore(): Map<symbol, unknown> | undefined {\n return storage.getStore();\n}\n\n/**\n * Create a new typed Context. The result contains helpers similar to React’s\n * Context API but adapted for async usage in Runner.\n */\nexport function createContext<T>(name: string = \"runner.context\"): Context<T> {\n if (!platform.hasAsyncLocalStorage()) {\n throw new PlatformUnsupportedFunction(\n `createAsyncLocalStorage: Cannot create context ${name}: no async storage available in this environment`,\n );\n }\n const ctxId = Symbol(name);\n\n const use = (): T => {\n const store = getCurrentStore();\n if (!store || !store.has(ctxId)) {\n throw new ContextError(\n `Context not available for symbol ${ctxId.toString()}`,\n );\n }\n return store.get(ctxId) as T;\n };\n\n const provide = <R>(value: T, fn: () => Promise<R> | R): Promise<R> | R => {\n const currentStore = getCurrentStore();\n const map = currentStore\n ? new Map(currentStore)\n : new Map<symbol, unknown>();\n map.set(ctxId, value);\n\n return storage.run(map, fn as any);\n };\n\n const api = {\n id: ctxId,\n use,\n provide,\n require(): ITaskMiddlewareConfigured {\n return requireContextTaskMiddleware.with({ context: api as Context<T> });\n },\n };\n\n return api;\n}\n","import { defineTag } from \"../../../define\";\nimport { DebugFriendlyConfig } from \"./types\";\n\nexport const debugTag = defineTag<DebugFriendlyConfig>({\n id: \"globals.tags.debug\",\n meta: {\n title: \"Debug\",\n description:\n \"Debug-specific tags. Used for filtering out noise when you're focusing on your application.\",\n },\n});\n","import { defineTag } from \"../define\";\nimport { DebugConfig } from \"./resources/debug\";\nimport { debugTag } from \"./resources/debug/debug.tag\";\n\nexport const globalTags = {\n system: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.system\",\n meta: {\n title: \"System\",\n description:\n \"System-wide tags. Used for filtering out noise when you're focusing on your application.\",\n },\n }),\n excludeFromGlobalHooks: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.excludeFromGlobalHooks\",\n meta: {\n title: \"Exclude Event From Global Hooks\",\n description:\n \"Marks events that should not be dispatched to global hooks (on: '*').\",\n },\n }),\n debug: debugTag,\n};\n","import { defineEvent } from \"../define\";\nimport {\n IEvent,\n IResource,\n IHook,\n ITaskMiddleware,\n IResourceMiddleware,\n} from \"../defs\";\nimport { globalTags } from \"./globalTags\";\n\nconst systemTag = globalTags.system;\n\nexport const globalEvents = {\n // Minimal core events retained if any (custom events can still be defined by users)\n /**\n * Emitted when the system is fully initialized and ready for work.\n */\n ready: defineEvent<{\n root: IResource<any, any, any, any>;\n }>({\n id: \"globals.events.ready\",\n meta: {\n title: \"System Ready\",\n description:\n \"Emitted when the system has completed boot and is ready for listeners to start work.\" +\n \"This runs right before returning value for run().\",\n },\n }),\n /**\n * Central error boundary event for any thrown error across the runner.\n */\n unhandledError: defineEvent<{\n kind: \"task\" | \"middleware\" | \"resourceInit\" | \"hook\" | \"process\" | \"run\";\n error: any;\n }>({\n id: \"globals.events.unhandledError\",\n meta: {\n title: \"Unhandled Error\",\n description:\n \"Central error boundary event for any thrown error across the runner.\",\n },\n tags: [systemTag, globalTags.excludeFromGlobalHooks],\n }),\n} as const;\n\nexport const globalEventsArray: IEvent<any>[] = [globalEvents.ready];\n","import { getPlatform } from \"../platform\";\n\n/**\n * Cooperative task queue.\n * • Tasks run one‑after‑another (FIFO ordering).\n * • Dead‑lock detection prevents nesting.\n * • dispose() drains or cancels outstanding tasks, then rejects new ones.\n */\nexport class Queue {\n private tail: Promise<unknown> = Promise.resolve();\n private disposed = false;\n private abortController = new AbortController();\n\n // true while inside a queued task → helps detect \"queue in queue\"\n private readonly executionContext =\n getPlatform().createAsyncLocalStorage<boolean>();\n\n private readonly hasAsyncLocalStorage = getPlatform().hasAsyncLocalStorage();\n\n /**\n * Schedule an asynchronous task.\n * @param task – receives an AbortSignal so it can cancel early if desired.\n */\n public run<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T> {\n // 1. refuse new work if we've disposed\n if (this.disposed) {\n return Promise.reject(new Error(\"Queue has been disposed\"));\n }\n\n // 2. detect dead‑locks (a queued task adding another queued task)\n if (this.hasAsyncLocalStorage && this.executionContext.getStore()) {\n return Promise.reject(\n new Error(\n \"Dead‑lock detected: a queued task attempted to queue another task\",\n ),\n );\n }\n\n const { signal } = this.abortController;\n\n // 3. chain task after the current tail\n const result = this.tail.then(() =>\n this.hasAsyncLocalStorage\n ? this.executionContext.run(true, () => task(signal))\n : task(signal),\n );\n\n // 4. preserve the chain even if the task rejects (swallow internally)\n this.tail = result.catch(() => {});\n\n return result;\n }\n\n /**\n * Disposes the queue.\n * @param options.cancel – if true, broadcasts AbortSignal to running task.\n * default: false (waits for tasks to finish).\n */\n public async dispose(options: { cancel?: boolean } = {}): Promise<void> {\n if (this.disposed) return;\n\n this.disposed = true;\n\n if (options.cancel) {\n this.abortController.abort(); // notify cooperative tasks\n }\n\n // wait for everything already chained to settle\n await this.tail.catch(() => {});\n }\n}\n","import { defineResource } from \"../../define\";\nimport { Queue } from \"../../models/Queue\";\n\nexport const queueResource = defineResource({\n id: \"globals.resources.queue\",\n context: () => ({\n map: new Map<string, Queue>(),\n }),\n init: async (_, deps, context) => {\n const map = context.map;\n\n return {\n map,\n run: <T>(\n id: string,\n task: (signal: AbortSignal) => Promise<T>,\n ): Promise<T> => {\n if (!map.has(id)) {\n map.set(id, new Queue());\n }\n\n return map.get(id)!.run(task);\n },\n };\n },\n dispose: async (value, _, deps, context) => {\n context.map.forEach((queue) => queue.dispose());\n },\n meta: {\n title: \"Queue Map\",\n description:\n \"A global map that can be used to store and retrieve queues. You can run exclusive tasks based on using an id. queue.run(id, task) will run the task in the queue with the given id. If the queue does not exist, it will be created.\",\n },\n});\n","import { defineResource } from \"../define\";\nimport { EventManager } from \"../models/EventManager\";\nimport { Logger } from \"../models/Logger\";\nimport { Store } from \"../models/Store\";\nimport { TaskRunner } from \"../models/TaskRunner\";\nimport { cacheResource } from \"./middleware/cache.middleware\";\nimport { queueResource } from \"./resources/queue.resource\";\nimport { globalTags } from \"./globalTags\";\nimport { MiddlewareManager } from \"../models/MiddlewareManager\";\n\nconst systemTag = globalTags.system;\n\nconst store = defineResource<void, Promise<Store>>({\n id: \"globals.resources.store\",\n meta: {\n title: \"Store\",\n description:\n \"A global store that can be used to store and retrieve tasks, resources, events and middleware\",\n },\n tags: [systemTag],\n});\n\nexport const globalResources = {\n store,\n middlewareManager: defineResource<void, Promise<MiddlewareManager>>({\n id: \"globals.resources.middlewareManager\",\n meta: {\n title: \"Middleware Manager\",\n description: \"Manages all middleware and middleware interceptors.\",\n },\n tags: [systemTag],\n }),\n eventManager: defineResource<void, Promise<EventManager>>({\n id: \"globals.resources.eventManager\",\n meta: {\n title: \"Event Manager\",\n description:\n \"Manages all events and event listeners. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n }),\n taskRunner: defineResource<void, Promise<TaskRunner>>({\n id: \"globals.resources.taskRunner\",\n meta: {\n title: \"Task Runner\",\n description:\n \"Manages the execution of tasks and task dependencies. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n }),\n logger: defineResource<void, Promise<Logger>>({\n id: \"globals.resources.logger\",\n meta: {\n // We skip system tag for logger because it's part of the utility toolkit.\n title: \"Logger\",\n description:\n \"Logs all events and errors. This is meant to be used internally for most use-cases. Emits a globals.log event for each log.\",\n },\n tags: [systemTag],\n }),\n cache: cacheResource,\n queue: queueResource,\n};\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\n\n/**\n * Configuration options for the retry middleware\n */\nexport interface RetryMiddlewareConfig {\n /**\n * Maximum number of retry attempts (default: 3)\n */\n retries?: number;\n /**\n * Callback to determine if retry should stop based on error\n * @default () => false (retry all errors)\n */\n stopRetryIf?: (error: Error) => boolean;\n /**\n * Custom delay strategy function\n * @default Exponential backoff starting at 100ms\n */\n delayStrategy?: (attempt: number, error: Error) => number;\n}\n\nexport const retryTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.retry.task\",\n async run({ task, next }, deps, config: RetryMiddlewareConfig) {\n const input = task?.input;\n let attempts = 0;\n\n // Set defaults for required parameters\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n\n // Calculate delay using custom strategy or default exponential backoff\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n attempts++;\n }\n }\n },\n});\n\nexport const retryResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.retry.resource\",\n async run({ resource, next }, deps, config: RetryMiddlewareConfig) {\n const input = resource?.config;\n let attempts = 0;\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n attempts++;\n }\n }\n },\n});\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\n\nexport interface TimeoutMiddlewareConfig {\n /**\n * Maximum time in milliseconds before the wrapped operation is aborted\n * and a timeout error is thrown. Defaults to 5000ms.\n */\n ttl: number;\n}\n\nexport const timeoutTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.timeout.task\",\n async run({ task, next }, _deps, config: TimeoutMiddlewareConfig) {\n const input = task?.input;\n\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n\n // Fast-path: immediate timeout\n if (ttl === 0) {\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n throw error;\n }\n\n const controller = new AbortController();\n\n // Create a timeout promise that rejects when aborted\n const timeoutPromise = new Promise((_, reject) => {\n const timeoutId = setTimeout(() => {\n controller.abort();\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n reject(error);\n }, ttl);\n\n // Clean up timeout if abort signal fires for other reasons\n controller.signal.addEventListener(\"abort\", () => {\n clearTimeout(timeoutId);\n });\n });\n\n // Race between the actual operation and the timeout\n return Promise.race([next(input as any), timeoutPromise]);\n },\n});\n\nexport const timeoutResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.timeout.resource\",\n async run({ resource, next }, _deps, config: TimeoutMiddlewareConfig) {\n const input = resource?.config;\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n if (ttl === 0) {\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n throw error;\n }\n const controller = new AbortController();\n const timeoutPromise = new Promise((_, reject) => {\n const timeoutId = setTimeout(() => {\n controller.abort();\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n reject(error);\n }, ttl);\n controller.signal.addEventListener(\"abort\", () => {\n clearTimeout(timeoutId);\n });\n });\n return Promise.race([next(input as any), timeoutPromise]);\n },\n});\n","import { Context, ContextError } from \"../context\";\nimport { cacheMiddleware } from \"./middleware/cache.middleware\";\nimport { requireContextTaskMiddleware } from \"./middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n} from \"./middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n} from \"./middleware/timeout.middleware\";\n\n/**\n * Global middlewares\n */\nexport const globalMiddlewares = {\n requireContext: requireContextTaskMiddleware,\n task: {\n requireContext: requireContextTaskMiddleware,\n cache: cacheMiddleware,\n // common with resources\n retry: retryTaskMiddleware,\n timeout: timeoutTaskMiddleware,\n },\n resource: {\n retry: retryResourceMiddleware,\n timeout: timeoutResourceMiddleware,\n },\n};\n","import { DependencyMapType, ITask, IHook, IEventEmission } from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport { globalEvents } from \"../globals/globalEvents\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\n\nexport class TaskRunner {\n protected readonly runnerStore = new Map<\n string | symbol,\n (input: any) => Promise<any>\n >();\n\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n // Use the same MiddlewareManager instance from the Store so that\n // any interceptors registered via resources (like debug) affect task runs.\n this.middlewareManager = this.store.getMiddlewareManager();\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n * @param task the task to be run\n * @param input the input to be passed to the task\n */\n public async run<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n input?: TInput,\n ): Promise<TOutput | undefined> {\n let runner = this.runnerStore.get(task.id);\n if (!runner) {\n runner = this.createRunnerWithMiddleware<TInput, TOutput, TDeps>(task);\n\n this.runnerStore.set(task.id, runner);\n }\n\n try {\n return await runner(input);\n } catch (error) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"task\",\n source: task.id,\n });\n } catch (_) {}\n throw error;\n }\n }\n\n /**\n * Creates the function with the chain of middleware.\n * @param task\n * @param input\n * @param taskDependencies\n * @returns\n */\n protected createRunnerWithMiddleware<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n return this.middlewareManager.composeTaskRunner(task);\n }\n}\n","import {\n DependencyMapType,\n ITask,\n IResource,\n ITaskMiddleware,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport {\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n} from \"../types/storeTypes\";\nimport { Logger } from \"./Logger\";\nimport { globalEvents } from \"../globals/globalEvents\";\nimport { ValidationError, LockedError } from \"../errors\";\nimport * as utils from \"../define\";\nimport { symbol } from \"zod\";\nimport { ITaskMiddlewareExecutionInput } from \"../types/taskMiddleware\";\nimport {\n IResourceMiddlewareExecutionInput,\n IResourceMiddleware,\n} from \"../types/resourceMiddleware\";\nimport {\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n} from \"../types/symbols\";\nimport { isResourceMiddleware, isTaskMiddleware } from \"../define\";\n\n/**\n * Interceptor for task middleware execution\n */\nexport type TaskMiddlewareInterceptor = (\n next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>,\n input: ITaskMiddlewareExecutionInput<any>,\n) => Promise<any>;\n\n/**\n * Interceptor for resource middleware execution\n */\nexport type ResourceMiddlewareInterceptor = (\n next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>,\n input: IResourceMiddlewareExecutionInput<any>,\n) => Promise<any>;\n\n/**\n * Centralizes middleware composition and execution for both tasks and resources.\n * Keeps observability emissions and unhandled error routing consistent.\n */\nexport class MiddlewareManager {\n // Interceptor storage\n private taskMiddlewareInterceptors: TaskMiddlewareInterceptor[] = [];\n private resourceMiddlewareInterceptors: ResourceMiddlewareInterceptor[] = [];\n\n // Per-middleware interceptor storage\n private perMiddlewareInterceptors: Map<string, TaskMiddlewareInterceptor[]> =\n new Map();\n private perResourceMiddlewareInterceptors: Map<\n string,\n ResourceMiddlewareInterceptor[]\n > = new Map();\n\n // Locking mechanism to prevent modifications after initialization\n #isLocked = false;\n\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {}\n\n /**\n * Gets the current lock status of the MiddlewareManager\n */\n get isLocked() {\n return this.#isLocked;\n }\n\n /**\n * Locks the MiddlewareManager, preventing any further modifications to interceptors\n */\n lock() {\n this.#isLocked = true;\n }\n\n /**\n * Throws an error if the MiddlewareManager is locked\n */\n private checkLock() {\n if (this.#isLocked) {\n throw new LockedError(\"MiddlewareManager\");\n }\n }\n\n /**\n * Adds an interceptor for task or resource middleware execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent middleware execution\n *\n * @param kind - The type of middleware to intercept (\"task\" or \"resource\")\n * @param interceptor - The interceptor function to add\n */\n intercept(\n kind: \"task\" | \"resource\",\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n\n if (kind === \"task\") {\n this.taskMiddlewareInterceptors.push(\n interceptor as TaskMiddlewareInterceptor,\n );\n } else {\n this.resourceMiddlewareInterceptors.push(\n interceptor as ResourceMiddlewareInterceptor,\n );\n }\n }\n\n /**\n * Adds an interceptor for a specific middleware instance with better type safety\n * This method automatically determines the type and provides type-safe access\n *\n * @param middleware - The middleware instance to intercept\n * @param interceptor - The interceptor function with proper typing\n */\n interceptMiddleware(\n middleware:\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n\n // Determine the type based on the middleware's symbol\n if (isTaskMiddleware(middleware)) {\n // Store per-middleware interceptor instead of adding to global pool\n if (!this.perMiddlewareInterceptors.has(middleware.id)) {\n this.perMiddlewareInterceptors.set(middleware.id, []);\n }\n this.perMiddlewareInterceptors\n .get(middleware.id)!\n .push(interceptor as TaskMiddlewareInterceptor);\n } else if (isResourceMiddleware(middleware)) {\n // Store per-middleware interceptor instead of adding to global pool\n if (!this.perResourceMiddlewareInterceptors.has(middleware.id)) {\n this.perResourceMiddlewareInterceptors.set(middleware.id, []);\n }\n this.perResourceMiddlewareInterceptors\n .get(middleware.id)!\n .push(interceptor as ResourceMiddlewareInterceptor);\n } else {\n throw new Error(\"Unknown middleware type\");\n }\n }\n\n /**\n * Wrap a middleware with its specific interceptors in onion style\n */\n private wrapMiddlewareWithInterceptors<TInput, TOutput extends Promise<any>>(\n middleware: ITaskMiddleware<any, any, any, any>,\n middlewareRunner: (input: TInput) => Promise<TOutput>,\n interceptors: TaskMiddlewareInterceptor[],\n ): (input: TInput) => Promise<TOutput> {\n if (!interceptors.length) {\n return middlewareRunner;\n }\n\n // Apply interceptors in reverse order (last added runs first)\n const reversedInterceptors = [...interceptors].reverse();\n\n let wrapped = middlewareRunner;\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = async (input: TInput) => {\n // Create execution input for the interceptor\n const executionInput: ITaskMiddlewareExecutionInput<any> = {\n task: {\n definition: null as any, // Will be filled by middleware.run\n input: input,\n },\n next: nextFunction as any,\n };\n\n // Provide a next function that accepts an execution input and forwards the raw input\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<any>,\n ): Promise<any> => {\n return nextFunction(i.task.input);\n };\n\n return interceptor(wrappedNext as any, executionInput);\n };\n }\n\n return wrapped;\n }\n\n /**\n * Wrap a resource middleware with its specific interceptors in onion style\n */\n private wrapResourceMiddlewareWithInterceptors<C, V extends Promise<any>>(\n middleware: IResourceMiddleware<any, any, any, any>,\n middlewareRunner: (config: C) => Promise<V>,\n interceptors: ResourceMiddlewareInterceptor[],\n ): (config: C) => Promise<V> {\n if (!interceptors.length) {\n return middlewareRunner;\n }\n\n // Apply interceptors in reverse order (last added runs first)\n const reversedInterceptors = [...interceptors].reverse();\n\n let wrapped = middlewareRunner;\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = async (config: C) => {\n // Create execution input for the interceptor\n const executionInput: IResourceMiddlewareExecutionInput<any> = {\n resource: {\n definition: null as any, // Will be filled by middleware.run\n config: config,\n },\n next: nextFunction as any,\n };\n\n // Provide a next function that accepts an execution input and forwards the raw config\n const wrappedNext = (input: IResourceMiddlewareExecutionInput<any>) => {\n return nextFunction(input.resource.config);\n };\n\n return interceptor(wrappedNext as any, executionInput);\n };\n }\n\n return wrapped;\n }\n\n /**\n * Compose a runner for a task with its local interceptors and applicable middlewares.\n * Returns a function that accepts the task input and resolves to the task output.\n */\n public composeTaskRunner<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n const storeTask = this.store.tasks.get(task.id)!;\n\n // Base next executes the task with validation\n let next = async (input: any) => {\n // Extract raw input from execution input if needed\n let rawInput = input;\n\n if (task.inputSchema) {\n try {\n rawInput = task.inputSchema.parse(rawInput);\n } catch (error) {\n throw new ValidationError(\n \"Task input\",\n task.id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n const deps = storeTask.computedDependencies;\n const rawResult = await task.run.call(null, rawInput, deps);\n if (task.resultSchema) {\n try {\n return task.resultSchema.parse(rawResult);\n } catch (error) {\n throw new ValidationError(\"Task result\", task.id, error as any);\n }\n }\n return rawResult;\n };\n\n // Inject local per-task interceptors first (closest to the task)\n if (storeTask.interceptors && storeTask.interceptors.length > 0) {\n for (let i = storeTask.interceptors.length - 1; i >= 0; i--) {\n const interceptor = storeTask.interceptors[i];\n const nextFunction = next;\n next = async (input) => interceptor(nextFunction, input);\n }\n }\n\n // Apply task middleware interceptors (last added runs first)\n if (this.taskMiddlewareInterceptors.length > 0) {\n const reversedInterceptors = [\n ...this.taskMiddlewareInterceptors,\n ].reverse();\n\n // Create the final execution input for the chain\n const createExecutionInput = (\n input: any,\n nextFunc: any,\n ): ITaskMiddlewareExecutionInput<any> => ({\n task: {\n definition: task,\n input: input,\n },\n next: nextFunc,\n });\n\n // Build the interceptor chain\n let currentNext = next;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = currentNext;\n\n currentNext = async (input) => {\n const executionInput = createExecutionInput(input, nextFunction);\n // Create a wrapper function that matches the expected signature\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<any>,\n ): Promise<any> => {\n return nextFunction(i.task.input);\n };\n return interceptor(wrappedNext, executionInput);\n };\n }\n\n next = currentNext;\n }\n\n const createdMiddlewares = this.getApplicableTaskMiddlewares(task);\n if (createdMiddlewares.length === 0) {\n return next;\n }\n\n // layer task middlewares (global first, then local), closest to the task runs last\n for (let i = createdMiddlewares.length - 1; i >= 0; i--) {\n const middleware = createdMiddlewares[i];\n const storeMiddleware = this.store.taskMiddlewares.get(middleware.id)!;\n\n const nextFunction = next;\n\n // Create the base middleware runner with events\n const baseMiddlewareRunner = async (input: any) => {\n // Attention: we use the store middleware run, because it might have been overidden.\n // All middleware run() functions should be common accross all tasks.\n return storeMiddleware.middleware.run(\n {\n task: {\n definition: task,\n input,\n },\n next: nextFunction,\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n };\n\n // Get interceptors for this specific middleware\n const middlewareInterceptors =\n this.perMiddlewareInterceptors.get(middleware.id) || [];\n\n // Wrap the middleware with its interceptors (onion style)\n const wrappedMiddleware = this.wrapMiddlewareWithInterceptors(\n middleware,\n baseMiddlewareRunner,\n middlewareInterceptors,\n );\n\n next = wrappedMiddleware;\n }\n\n return next;\n }\n\n /**\n * Run a resource init wrapped with its applicable middlewares.\n */\n public async runResourceInit<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: any,\n context: TContext,\n ): Promise<V | undefined> {\n let next = async (cfg: C): Promise<V | undefined> => {\n if (!resource.init) return undefined as unknown as V;\n const rawValue = await resource.init.call(\n null,\n cfg,\n dependencies,\n context,\n );\n if (resource.resultSchema) {\n try {\n return resource.resultSchema.parse(rawValue);\n } catch (error) {\n throw new ValidationError(\n \"Resource result\",\n resource.id,\n error as any,\n );\n }\n }\n return rawValue as any;\n };\n\n const createdMiddlewares = this.getApplicableResourceMiddlewares(resource);\n for (let i = createdMiddlewares.length - 1; i >= 0; i--) {\n const middleware = createdMiddlewares[i];\n const storeMiddleware = this.store.resourceMiddlewares.get(\n middleware.id,\n )!;\n\n const nextFunction = next;\n\n // Create the base resource middleware runner with events\n const baseMiddlewareRunner = async (cfg: C) => {\n try {\n const result = await storeMiddleware.middleware.run(\n {\n resource: {\n definition: resource,\n config: cfg,\n },\n next: nextFunction,\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n\n return result as any;\n } catch (error: unknown) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"resourceInit\",\n source: resource.id,\n });\n } catch (_) {}\n\n throw error;\n }\n };\n\n // Get interceptors for this specific middleware\n const middlewareInterceptors =\n this.perResourceMiddlewareInterceptors.get(middleware.id) || [];\n\n // Wrap the middleware with its interceptors (onion style)\n const wrappedMiddleware = this.wrapResourceMiddlewareWithInterceptors(\n middleware,\n baseMiddlewareRunner,\n middlewareInterceptors,\n );\n\n next = wrappedMiddleware;\n }\n\n // Apply resource middleware interceptors (last added runs first)\n if (this.resourceMiddlewareInterceptors.length > 0) {\n const reversedInterceptors = [\n ...this.resourceMiddlewareInterceptors,\n ].reverse();\n\n // Create the final execution input for the chain\n const createExecutionInput = (\n config: C,\n nextFunc: any,\n ): IResourceMiddlewareExecutionInput<C> => ({\n resource: {\n definition: resource,\n config: config,\n },\n next: nextFunc,\n });\n\n // Build the interceptor chain\n let currentNext = next;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = currentNext;\n\n currentNext = async (cfg: C) => {\n const executionInput = createExecutionInput(cfg, nextFunction);\n // Create a wrapper function that matches the expected signature\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<any>,\n ) => {\n return nextFunction(input.resource.config);\n };\n return interceptor(wrappedNext, executionInput);\n };\n }\n\n next = currentNext;\n }\n\n return next(config);\n }\n\n private getApplicableTaskMiddlewares<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n const existingMiddlewares = task.middleware;\n const existingMiddlewareIds = existingMiddlewares.map((x) => x.id);\n const globalMiddlewares = this.getEverywhereMiddlewareForTasks(task).filter(\n (x) => !existingMiddlewareIds.includes(x.id),\n );\n return [...globalMiddlewares, ...existingMiddlewares];\n }\n\n private getApplicableResourceMiddlewares<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(resource: IResource<C, V, D, TContext>) {\n const existingMiddlewares = resource.middleware;\n const existingMiddlewareIds = existingMiddlewares.map((x) => x.id);\n const globalMiddlewares = this.getEverywhereMiddlewareForResources(\n resource,\n ).filter((x) => !existingMiddlewareIds.includes(x.id));\n return [...globalMiddlewares, ...existingMiddlewares];\n }\n\n /**\n * @param task\n * @returns\n */\n getEverywhereMiddlewareForTasks(\n task: ITask<any, any, any, any>,\n ): ITaskMiddleware[] {\n return Array.from(this.store.taskMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere!(task);\n }\n\n return true;\n })\n .map((x) => x.middleware);\n }\n\n /**\n * Returns all global middleware for resource, which do not depend on the target resource.\n */\n getEverywhereMiddlewareForResources(\n target: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n return Array.from(this.store.resourceMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere!(target);\n }\n\n return true;\n })\n .map((x) => x.middleware);\n }\n}\n","import {\n DependencyMapType,\n IResource,\n ResourceDependencyValuesType,\n} from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport { ValidationError } from \"../errors\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\n\nexport class ResourceInitializer {\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n this.middlewareManager = new MiddlewareManager(\n this.store,\n this.eventManager,\n this.logger,\n );\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n */\n public async initializeResource<\n TConfig = null,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TContext = any,\n >(\n resource: IResource<TConfig, TValue, TDeps>,\n config: TConfig,\n dependencies: ResourceDependencyValuesType<TDeps>,\n ): Promise<{ value: TValue; context: TContext }> {\n const context = resource.context?.();\n\n let value: TValue | undefined;\n // Create a no-op init function if it doesn't exist\n if (!resource.init) {\n resource.init = (async () => undefined) as any;\n }\n\n if (resource.init) {\n value = await this.initWithMiddleware(\n resource,\n config,\n dependencies,\n context,\n );\n }\n\n return { value: value as TValue, context };\n }\n\n // Lifecycle emissions removed\n\n public async initWithMiddleware<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: ResourceDependencyValuesType<D>,\n context: TContext,\n ) {\n return this.middlewareManager.runResourceInit(\n resource,\n config,\n dependencies,\n context,\n );\n }\n}\n","export function safeStringify(\n value: unknown,\n space?: number,\n options?: { maxDepth?: number },\n): string {\n const seen = new WeakSet<object>();\n const holderDepth = new WeakMap<object, number>();\n\n const maxDepth =\n typeof options?.maxDepth === \"number\" ? options!.maxDepth! : Infinity;\n\n const replacer = function (this: any, _key: string, val: any) {\n // Normalize functions to a readable placeholder\n if (typeof val === \"function\") {\n return \"function()\";\n }\n\n // Normalize BigInt safely\n if (typeof val === \"bigint\") {\n return val.toString();\n }\n\n // Compute the depth of the current value based on its holder (this)\n const holderObject = Object(this);\n const parentDepth = holderDepth.get(holderObject as object) || 0;\n const currentDepth = parentDepth + 1;\n\n if (typeof val === \"object\" && val !== null) {\n if (seen.has(val)) return \"[Circular]\";\n\n // Apply depth limiting beyond the configured depth\n if (currentDepth > maxDepth) {\n return Array.isArray(val) ? \"[Array]\" : \"[Object]\";\n }\n\n seen.add(val);\n holderDepth.set(val, currentDepth);\n }\n return val;\n } as (this: any, key: string, value: any) => any;\n\n try {\n return JSON.stringify(value as any, replacer, space);\n } catch {\n try {\n return String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n","import { safeStringify } from \"./utils/safeStringify\";\n\n// eslint-disable-next-line no-control-regex\nconst ansiRegex =\n /[\u001b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;\nfunction stripAnsi(str: string): string {\n return str.replace(ansiRegex, \"\");\n}\n\nexport type PrintStrategy = \"pretty\" | \"plain\" | \"json\" | \"json_pretty\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface PrintableLog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type ColorTheme = {\n trace: string;\n debug: string;\n info: string;\n warn: string;\n error: string;\n critical: string;\n reset: string;\n bold: string;\n dim: string;\n blue: string;\n cyan: string;\n gray: string;\n};\n\nconst COLORS: Readonly<ColorTheme> = {\n trace: \"\\x1b[90m\",\n debug: \"\\x1b[36m\",\n info: \"\\x1b[32m\",\n warn: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n critical: \"\\x1b[35m\",\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n blue: \"\\x1b[34m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n} as const;\n\nconst ICONS = {\n trace: \"○\",\n debug: \"◆\",\n info: \"●\",\n warn: \"▲\",\n error: \"✕\",\n critical: \"█\",\n} as const;\n\nexport class LogPrinter {\n private strategy: PrintStrategy;\n private colors: ColorTheme;\n\n constructor(options: {\n strategy: PrintStrategy;\n useColors: boolean;\n colorTheme?: Partial<ColorTheme>;\n }) {\n this.strategy = options.strategy;\n if (options.strategy === \"plain\") {\n this.colors = LogPrinter.NO_COLORS;\n } else {\n const base =\n options.useColors || options.colorTheme ? COLORS : LogPrinter.NO_COLORS;\n this.colors = { ...base, ...(options.colorTheme || {}) };\n }\n }\n\n public print(log: PrintableLog): void {\n if (this.strategy === \"json\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log)));\n return;\n }\n\n if (this.strategy === \"json_pretty\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log), 2));\n return;\n }\n\n // Pretty, multi-line output\n const { level, source, message, timestamp, error, data, context } = log;\n\n const timePart = this.formatTime(timestamp);\n const levelPart = this.formatLevel(level);\n const sourcePart = this.formatSource(source);\n\n const headerLine = [timePart, levelPart, sourcePart]\n .filter(Boolean)\n .join(\" \");\n\n const messageString = this.formatMessage(message);\n const messageLines = messageString.split(\"\\n\");\n\n const output: string[] = [headerLine];\n\n const timePartLength = stripAnsi(timePart).length;\n const levelPartLength = stripAnsi(levelPart).length;\n // Indentation is length of time + space + level + space\n const indentation = \" \".repeat(timePartLength + 1 + levelPartLength + 1);\n\n if (message) {\n output.push(...messageLines.map((line) => `${indentation}${line}`));\n }\n\n const errorLines = this.formatError(error);\n const dataLines = this.formatData(data);\n const contextLines = this.formatContext(context);\n\n const detailsExist =\n errorLines.length > 0 || dataLines.length > 0 || contextLines.length > 0;\n\n if (detailsExist) {\n output.push(\"\"); // Add a space before details\n }\n\n output.push(...errorLines, ...dataLines, ...contextLines);\n\n if (detailsExist) {\n output.push(\"\"); // Add a space after for readability\n }\n\n const writer = this.pickWriter(level);\n output.forEach((line) => writer(line));\n // New line for readability especially in console\n writer(\"\");\n }\n\n private pickWriter(level: LogLevels) {\n const toError =\n level === \"warn\" || level === \"error\" || level === \"critical\";\n if (toError && typeof LogPrinter.writers.error === \"function\") {\n return (msg: any) => LogPrinter.writers.error!(msg);\n }\n return (msg: any) => LogPrinter.writers.log(msg);\n }\n\n private formatTime(timestamp: Date): string {\n const time = timestamp.toISOString().slice(11, 19);\n const ms = timestamp.getMilliseconds().toString().padStart(3, \"0\");\n return `${this.colors.gray}${time}.${ms}${this.colors.reset}`;\n }\n\n private formatLevel(level: string): string {\n const color = this.colors[level as keyof typeof COLORS] || this.colors.info;\n const icon = ICONS[level as keyof typeof ICONS] || \"●\";\n const label = level.toUpperCase().padEnd(7);\n return `${color}${icon} ${this.colors.bold}${label}${this.colors.reset}`;\n }\n\n private formatSource(source?: string): string {\n if (!source) return \"\";\n return `${this.colors.cyan}${source}${this.colors.reset}`;\n }\n\n private formatMessage(message: any): string {\n if (typeof message === \"object\" && message !== null) {\n return safeStringify(message, 2);\n }\n return String(message);\n }\n\n private formatError(\n error: PrintableLog[\"error\"],\n indentation = \" \",\n ): string[] {\n if (!error) return [];\n const lines: string[] = [];\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.error}Error: ${error.name}: ${error.message}${this.colors.reset}`,\n );\n if (error.stack) {\n const frames = error.stack.split(\"\\n\").slice(1); // slice(1) to skip the error message line\n frames.forEach((frame) => {\n const cleaned = frame.trim().replace(/^at /, \"\");\n lines.push(\n `${indentation} ${this.colors.gray}↳${this.colors.reset} ${this.colors.dim}${cleaned}${this.colors.reset}`,\n );\n });\n }\n return lines;\n }\n\n private formatData(data?: Record<string, any>, indentation = \" \"): string[] {\n if (!data || Object.keys(data).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(data, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.cyan}Data:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep data lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private formatContext(\n context?: Record<string, any>,\n indentation = \" \",\n ): string[] {\n if (!context) return [];\n const filtered = { ...context };\n delete (filtered as any).source;\n if (Object.keys(filtered).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(filtered, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.blue}Context:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep context lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private normalizeForJson(log: PrintableLog) {\n const normalized: any = { ...log };\n if (typeof log.message === \"object\") {\n const text = safeStringify(log.message);\n try {\n normalized.message = JSON.parse(text);\n } catch {\n normalized.message = text;\n }\n }\n return normalized;\n }\n\n private static NO_COLORS: ColorTheme = {\n trace: \"\",\n debug: \"\",\n info: \"\",\n warn: \"\",\n error: \"\",\n critical: \"\",\n reset: \"\",\n bold: \"\",\n dim: \"\",\n blue: \"\",\n cyan: \"\",\n gray: \"\",\n } as const;\n\n private static writers: {\n log: (msg: any) => void;\n error?: (msg: any) => void;\n } = {\n // eslint-disable-next-line no-console\n log: (msg: any) => console.log(msg),\n // eslint-disable-next-line no-console\n error: (msg: any) => console.error?.(msg),\n };\n\n public static setWriters(\n writers: Partial<{ log: (msg: any) => void; error?: (msg: any) => void }>,\n ) {\n LogPrinter.writers = { ...LogPrinter.writers, ...writers };\n }\n\n public static resetWriters() {\n // eslint-disable-next-line no-console\n LogPrinter.writers = {\n log: (msg: any) => console.log(msg),\n error: (msg: any) => console.error?.(msg),\n };\n }\n}\n","import { globalEvents } from \"../globals/globalEvents\";\nimport { EventManager } from \"./EventManager\";\nimport { LogPrinter, PrintStrategy as PrinterStrategy } from \"./LogPrinter\";\nimport { safeStringify } from \"./utils/safeStringify\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface ILogInfo {\n source?: string;\n error?: unknown | Error;\n data?: Record<string, any>;\n context?: Record<string, any>;\n [key: string]: any;\n}\n\nexport interface ILog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type PrintStrategy = PrinterStrategy;\nexport class Logger {\n private printThreshold: null | LogLevels = \"info\";\n private printStrategy: PrintStrategy = \"pretty\";\n private bufferLogs: boolean = false;\n private buffer: ILog[] = [];\n private boundContext: Record<string, any> = {};\n private isLocked: boolean = false;\n private useColors: boolean = true;\n private printer: LogPrinter;\n private source?: string;\n // This is used for when we use .with() .with() and we want access to local listeners\n private rootLogger?: Logger;\n // Observable why not?\n public localListeners: Array<(log: ILog) => void | Promise<void>> = [];\n\n public static Severity = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n critical: 5,\n };\n\n constructor(\n options: {\n printThreshold: null | LogLevels;\n printStrategy: PrintStrategy;\n bufferLogs: boolean;\n useColors?: boolean;\n },\n boundContext: Record<string, any> = {},\n source?: string,\n printer?: LogPrinter,\n ) {\n this.boundContext = { ...boundContext };\n this.printThreshold = options.printThreshold;\n this.printStrategy = options.printStrategy;\n this.bufferLogs = options.bufferLogs;\n this.useColors =\n typeof options.useColors === \"boolean\"\n ? options.useColors\n : this.detectColorSupport();\n\n this.source = source;\n\n this.printer = printer\n ? printer\n : new LogPrinter({\n strategy: this.printStrategy,\n useColors: this.useColors,\n });\n }\n\n private detectColorSupport(): boolean {\n // Respect NO_COLOR convention\n // eslint-disable-next-line no-undef\n const noColor = typeof process !== \"undefined\" && !!process.env.NO_COLOR;\n if (noColor) return false;\n // eslint-disable-next-line no-undef\n const isTty =\n typeof process !== \"undefined\" &&\n !!process.stdout &&\n !!process.stdout.isTTY;\n return isTty;\n }\n\n /**\n * Creates a new logger instance with additional bound context\n */\n public with({\n source,\n additionalContext: context,\n }: {\n source?: string;\n additionalContext?: Record<string, any>;\n }): Logger {\n const child = new Logger(\n {\n printThreshold: this.printThreshold,\n printStrategy: this.printStrategy,\n bufferLogs: this.bufferLogs,\n useColors: this.useColors,\n },\n { ...this.boundContext, ...context },\n source,\n this.printer,\n );\n // Ensure child logger delegates buffering, listeners and printing to root\n child.rootLogger = this.rootLogger ?? this;\n return child;\n }\n\n /**\n * Core logging method with structured LogInfo\n */\n public async log(\n level: LogLevels,\n message: any,\n logInfo: ILogInfo = {},\n ): Promise<void> {\n const { source, error, data, ...context } = logInfo;\n\n const log: ILog = {\n level,\n message,\n source: source || this.source,\n timestamp: new Date(),\n error: error ? this.extractErrorInfo(error) : undefined,\n data: data || undefined,\n context: { ...this.boundContext, ...context },\n };\n\n const root = this.rootLogger ?? this;\n\n if (root.bufferLogs) {\n root.buffer.push(log);\n return;\n }\n\n await root.triggerLogListeners(log);\n\n if (root.canPrint(level)) {\n root.printer.print(log);\n }\n }\n\n private extractErrorInfo(error: Error | unknown): {\n name: string;\n message: string;\n stack?: string;\n } {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return {\n name: \"UnknownError\",\n message: String(error),\n };\n }\n\n public async info(message: any, logInfo?: ILogInfo) {\n await this.log(\"info\", message, logInfo);\n }\n\n public async error(message: any, logInfo?: ILogInfo) {\n await this.log(\"error\", message, logInfo);\n }\n\n public async warn(message: any, logInfo?: ILogInfo) {\n await this.log(\"warn\", message, logInfo);\n }\n\n public async debug(message: any, logInfo?: ILogInfo) {\n await this.log(\"debug\", message, logInfo);\n }\n\n public async trace(message: any, logInfo?: ILogInfo) {\n await this.log(\"trace\", message, logInfo);\n }\n\n public async critical(message: any, logInfo?: ILogInfo) {\n await this.log(\"critical\", message, logInfo);\n }\n\n /**\n * Direct print for tests and advanced scenarios. Delegates to LogPrinter.\n */\n public print(log: ILog) {\n this.printer.print(log);\n }\n\n /**\n * @param listener - A listener that will be triggered for every log.\n */\n public onLog(listener: (log: ILog) => any) {\n if (this.rootLogger && this.rootLogger !== this) {\n this.rootLogger.onLog(listener);\n } else {\n this.localListeners.push(listener);\n }\n }\n\n /**\n * Marks the logger as ready.\n * This is used to trigger the local listeners and print the buffered logs (if they exists)\n * @returns A promise that resolves when the logger is ready.\n */\n public async lock() {\n const root = this.rootLogger ?? this;\n if (root.isLocked) {\n return;\n }\n\n if (root.bufferLogs) {\n for (const log of root.buffer) {\n await root.triggerLogListeners(log);\n }\n for (const log of root.buffer) {\n if (root.canPrint(log.level)) {\n root.printer.print(log);\n }\n }\n }\n root.bufferLogs = false;\n root.buffer = [];\n root.isLocked = true;\n }\n\n private canPrint(level: LogLevels) {\n if (this.printThreshold === null) {\n return false;\n }\n\n return (\n this.printThreshold &&\n Logger.Severity[level] >= Logger.Severity[this.printThreshold]\n );\n }\n\n private async triggerLogListeners(log: ILog) {\n if (this.rootLogger && this.rootLogger !== this) {\n await this.rootLogger.triggerLogListeners(log);\n }\n\n for (const listener of this.localListeners) {\n try {\n await listener(log);\n } catch (error) {\n this.print({\n level: \"error\",\n message: \"Error in log listener\",\n timestamp: new Date(),\n error: {\n name: \"ListenerError\",\n message: error instanceof Error ? error.message : String(error),\n },\n });\n // We're not breaking the app due to logListener errors.\n continue;\n }\n }\n }\n}\n","import {\n DependencyMapType,\n DependencyValuesType,\n ITask,\n IResource,\n IEvent,\n IEventEmission,\n TaskLocalInterceptor,\n ResourceDependencyValuesType,\n TaskDependencyWithIntercept,\n} from \"../defs\";\nimport { Store } from \"./Store\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n} from \"../types/storeTypes\";\nimport * as utils from \"../define\";\nimport { EventManager } from \"./EventManager\";\nimport { ResourceInitializer } from \"./ResourceInitializer\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport {\n DependencyNotFoundError,\n EventNotFoundError,\n UnknownItemTypeError,\n} from \"../errors\";\nimport { Logger } from \"./Logger\";\n\n/**\n * This class is responsible of setting up dependencies with their respective computedValues.\n * Note that all elements must have been previously registered otherwise errors will be thrown\n * when trying to depend on something not in the store.\n */\nexport class DependencyProcessor {\n protected readonly resourceInitializer: ResourceInitializer;\n protected readonly logger!: Logger;\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly taskRunner: TaskRunner,\n logger: Logger,\n ) {\n this.logger = logger.with({ source: \"dependencyProcessor\" });\n this.resourceInitializer = new ResourceInitializer(\n store,\n eventManager,\n logger,\n );\n }\n\n /**\n * This function is going to go through all the resources, tasks and middleware to compute their required dependencies.\n */\n async computeAllDependencies() {\n for (const middleware of this.store.resourceMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n for (const middleware of this.store.taskMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n for (const resource of this.store.resources.values()) {\n await this.processResourceDependencies(resource);\n }\n\n for (const task of this.store.tasks.values()) {\n await this.computeTaskDependencies(task);\n }\n\n // Compute hook dependencies (hooks cannot be dependencies themselves)\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n const deps = hook.dependencies as DependencyMapType;\n hookStoreElement.computedDependencies = await this.extractDependencies(\n deps,\n hook.id,\n );\n }\n\n // leftovers that were registered but not depended upon, except root\n // they should still be initialized as they might extend other\n await this.initializeUninitializedResources();\n }\n\n private async computeTaskDependencies(\n task: TaskStoreElementType<any, any, any>,\n ) {\n const deps = task.task.dependencies as DependencyMapType;\n task.computedDependencies = await this.extractDependencies(\n deps,\n task.task.id,\n );\n // Mark task as initialized so subsequent injections don't recompute using\n // a potentially lazy dependencies() function and lose computed values.\n task.isInitialized = true;\n }\n\n // Most likely these are resources that no-one has dependencies towards\n // We need to ensure they work too!\n public async initializeUninitializedResources() {\n for (const resource of this.store.resources.values()) {\n if (\n resource.isInitialized === false &&\n // The root is the last one to be initialized and is done in a separate process.\n resource.resource.id !== this.store.root.resource.id\n ) {\n await this.processResourceDependencies(resource);\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource.resource,\n resource.config,\n resource.computedDependencies!,\n );\n resource.context = context;\n resource.value = value;\n resource.isInitialized = true;\n }\n }\n }\n\n /**\n * Processes dependencies and hooks\n * @param resource\n */\n protected async processResourceDependencies<TD extends DependencyMapType>(\n resource: ResourceStoreElementType<any, any, TD>,\n ) {\n const deps = (resource.resource.dependencies || ({} as TD)) as TD;\n const extracted = await this.extractDependencies(\n deps,\n resource.resource.id,\n );\n\n resource.computedDependencies = this.wrapResourceDependencies<TD>(\n deps,\n extracted,\n );\n // resource.isInitialized = true;\n }\n\n private wrapResourceDependencies<TD extends DependencyMapType>(\n deps: TD,\n extracted: DependencyValuesType<TD>,\n ): ResourceDependencyValuesType<TD> {\n const wrapped: Record<string, unknown> = {};\n for (const key of Object.keys(deps) as Array<keyof TD>) {\n const original = deps[key] as any;\n const value = (extracted as Record<string, unknown>)[key as string];\n // Handle optional wrappers\n if (utils.isOptional(original)) {\n const inner = original.inner as any;\n if (utils.isTask(inner)) {\n wrapped[key as string] = value\n ? this.makeTaskWithIntercept(inner)\n : undefined;\n } else {\n wrapped[key as string] = value as unknown;\n }\n continue;\n }\n if (utils.isTask(original)) {\n wrapped[key as string] = this.makeTaskWithIntercept(original);\n } else {\n wrapped[key as string] = value as unknown;\n }\n }\n return wrapped as unknown as ResourceDependencyValuesType<TD>;\n }\n\n private makeTaskWithIntercept<\n I,\n O extends Promise<any>,\n D extends DependencyMapType,\n >(original: ITask<I, O, D>): TaskDependencyWithIntercept<I, O> {\n const taskId = original.id;\n const fn: (input: I) => O = (input) => {\n const storeTask = this.store.tasks.get(taskId)!;\n const effective: ITask<I, O, D> = storeTask.task;\n\n return this.taskRunner.run(effective, input) as O;\n };\n return Object.assign(fn, {\n intercept: (middleware: TaskLocalInterceptor<I, O>) => {\n this.store.checkLock();\n const storeTask = this.store.tasks.get(taskId)!;\n\n if (!storeTask.interceptors) storeTask.interceptors = [];\n storeTask.interceptors.push(middleware);\n },\n }) as TaskDependencyWithIntercept<I, O>;\n }\n\n public async initializeRoot() {\n const rootResource = this.store.root;\n\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n rootResource.resource,\n rootResource.config,\n // They are already computed\n rootResource.computedDependencies!,\n );\n\n rootResource.context = context;\n rootResource.value = value;\n rootResource.isInitialized = true;\n }\n\n /**\n * Processes all hooks, should run before emission of any event.\n */\n public attachListeners() {\n // Attach listeners for dedicated hooks map\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n if (hook.on) {\n const eventDefinition = hook.on;\n\n const handler = async (receivedEvent: IEventEmission<any>) => {\n if (receivedEvent.source === hook.id) {\n return;\n }\n return this.eventManager.executeHookWithInterceptors(\n hook,\n receivedEvent,\n hookStoreElement.computedDependencies,\n );\n };\n\n const order = hook.order ?? 0;\n\n if (eventDefinition === \"*\") {\n this.eventManager.addGlobalListener(handler, { order });\n } else if (Array.isArray(eventDefinition)) {\n for (const ed of eventDefinition) {\n if (this.store.events.get(ed.id) === undefined) {\n throw new EventNotFoundError(ed.id);\n }\n }\n this.eventManager.addListener(eventDefinition as any, handler, {\n order,\n });\n } else {\n if (this.store.events.get(eventDefinition.id) === undefined) {\n throw new EventNotFoundError(eventDefinition.id);\n }\n this.eventManager.addListener(eventDefinition as any, handler, {\n order,\n });\n }\n }\n }\n }\n\n async extractDependencies<T extends DependencyMapType>(\n map: T,\n source: string,\n ): Promise<DependencyValuesType<T>> {\n const object = {} as DependencyValuesType<T>;\n\n for (const key in map) {\n try {\n object[key] = await this.extractDependency(map[key], source);\n // Special handling, a little bit of magic and memory sacrifice for the sake of observability.\n // Maybe later we can allow this to be opt-in to save 'memory' in the case of large tasks?\n if ((object[key] as any) instanceof Logger) {\n object[key] = object[key].with({ source });\n }\n } catch (e) {\n const errorMessage = String(e);\n this.logger.error(\n `Failed to extract dependency from source: ${source} -> ${key} with error: ${errorMessage}`,\n );\n\n throw e;\n }\n }\n this.logger.trace(`Finished computing dependencies for source: ${source}`);\n\n return object;\n }\n\n async extractDependency(object: any, source: string) {\n this.logger.trace(`Extracting dependency -> ${source} -> ${object?.id}`);\n if (utils.isOptional(object)) {\n const inner = object.inner;\n if (utils.isResource(inner)) {\n const exists = this.store.resources.get(inner.id) !== undefined;\n return exists ? this.extractResourceDependency(inner) : undefined;\n } else if (utils.isTask(inner)) {\n const exists = this.store.tasks.get(inner.id) !== undefined;\n return exists ? this.extractTaskDependency(inner) : undefined;\n } else if (utils.isEvent(inner)) {\n const exists = this.store.events.get(inner.id) !== undefined;\n return exists ? this.extractEventDependency(inner, source) : undefined;\n }\n throw new UnknownItemTypeError(inner);\n }\n if (utils.isResource(object)) {\n return this.extractResourceDependency(object);\n } else if (utils.isTask(object)) {\n return this.extractTaskDependency(object);\n } else if (utils.isEvent(object)) {\n return this.extractEventDependency(object, source);\n } else {\n throw new UnknownItemTypeError(object);\n }\n }\n\n /**\n * Converts the event into a running functions with real inputs\n * @param object\n * @returns\n */\n extractEventDependency(object: IEvent<any>, source: string) {\n return async (input: any) => {\n return this.eventManager.emit(object, input, source);\n };\n }\n\n async extractTaskDependency(object: ITask<any, any, {}>) {\n const storeTask = this.store.tasks.get(object.id);\n if (storeTask === undefined) {\n throw new DependencyNotFoundError(`Task ${object.id}`);\n }\n\n if (!storeTask.isInitialized) {\n // it's sanitised\n const dependencies = object.dependencies as DependencyMapType;\n\n storeTask.computedDependencies = await this.extractDependencies(\n dependencies,\n storeTask.task.id,\n );\n storeTask.isInitialized = true;\n }\n\n return (input: unknown) => {\n return this.taskRunner.run(storeTask.task, input);\n };\n }\n\n async extractResourceDependency(object: IResource<any, any, any>) {\n // check if it exists in the store with the value\n const storeResource = this.store.resources.get(object.id);\n if (storeResource === undefined) {\n throw new DependencyNotFoundError(`Resource ${object.id}`);\n }\n\n const { resource, config } = storeResource;\n\n if (!storeResource.isInitialized) {\n // check if it has an initialisation function that provides the value\n if (resource.init) {\n const depMap = (resource.dependencies || {}) as DependencyMapType;\n const raw = await this.extractDependencies(depMap, resource.id);\n const wrapped = this.wrapResourceDependencies(depMap, raw);\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource,\n config,\n wrapped,\n );\n\n storeResource.context = context;\n storeResource.value = value;\n }\n\n // we need to initialize the resource\n storeResource.isInitialized = true;\n }\n\n return storeResource.value;\n }\n}\n","import {\n DependencyValuesType,\n EventHandlerType,\n IEvent,\n IEventDefinition,\n IEventEmission,\n} from \"../defs\";\nimport { LockedError, ValidationError, EventCycleError } from \"../errors\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { IHook } from \"../types/hook\";\nimport { getPlatform, IAsyncLocalStorage } from \"../platform\";\n\n/**\n * Default options for event handlers\n */\nconst HandlerOptionsDefaults = { order: 0 };\n\n/**\n * Internal storage structure for event listeners\n */\ninterface IListenerStorage {\n order: number;\n filter?: (event: IEventEmission<any>) => boolean;\n handler: EventHandlerType;\n /** Optional listener id (from IEventHandlerOptions.id) */\n id?: string;\n /** True when this listener originates from addGlobalListener(). */\n isGlobal: boolean;\n}\n\n/**\n * Options for configuring event listeners\n */\nexport interface IEventHandlerOptions<T = any> {\n order?: number;\n filter?: (event: IEventEmission<T>) => boolean;\n /**\n * Represents the listener ID. Use this to avoid a listener calling himself.\n */\n id?: string;\n}\n\n/**\n * Interceptor for event emissions\n */\nexport type EventEmissionInterceptor = (\n next: (event: IEventEmission<any>) => Promise<void>,\n event: IEventEmission<any>,\n) => Promise<void>;\n\n/**\n * Interceptor for hook execution\n */\nexport type HookExecutionInterceptor = (\n next: (hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>,\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n) => Promise<any>;\n\n/**\n * EventManager handles event emission, listener registration, and event processing.\n * It supports both specific event listeners and global listeners that handle all events.\n * Listeners are processed in order based on their priority.\n */\nexport class EventManager {\n // Core storage for event listeners\n private listeners: Map<string, IListenerStorage[]> = new Map();\n private globalListeners: IListenerStorage[] = [];\n\n // Caching system for merged listeners to improve performance\n private cachedMergedListeners: Map<string, IListenerStorage[]> = new Map();\n private globalListenersCacheValid = true;\n\n // Interceptors storage\n private emissionInterceptors: EventEmissionInterceptor[] = [];\n private hookInterceptors: HookExecutionInterceptor[] = [];\n\n // Tracks the current emission chain to detect cycles\n private readonly emissionStack!: IAsyncLocalStorage<any> | null;\n // Tracks currently executing hook id (if any)\n private readonly currentHookIdContext!: IAsyncLocalStorage<string> | null;\n\n // Locking mechanism to prevent modifications after initialization\n #isLocked = false;\n\n // Feature flags\n private readonly runtimeCycleDetection: boolean;\n\n constructor(options?: { runtimeCycleDetection?: boolean }) {\n this.runtimeCycleDetection = options?.runtimeCycleDetection ?? true;\n\n // Store based on the platform.\n if (getPlatform().hasAsyncLocalStorage() && this.runtimeCycleDetection) {\n this.emissionStack =\n getPlatform().createAsyncLocalStorage<\n { id: string; source: string }[]\n >();\n this.currentHookIdContext =\n getPlatform().createAsyncLocalStorage<string>();\n } else {\n this.runtimeCycleDetection = false;\n this.emissionStack = null;\n this.currentHookIdContext = null;\n }\n }\n\n // ==================== PUBLIC API ====================\n\n /**\n * Gets the current lock status of the EventManager\n */\n get isLocked() {\n return this.#isLocked;\n }\n\n /**\n * Locks the EventManager, preventing any further modifications to listeners\n */\n lock() {\n this.#isLocked = true;\n }\n\n /**\n * Emits an event to all registered listeners for that event type.\n * Listeners are processed in order of priority and can stop event propagation.\n *\n * @param eventDefinition - The event definition to emit\n * @param data - The event payload data\n * @param source - The source identifier of the event emitter\n */\n async emit<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n ): Promise<void> {\n // Validate payload with schema if provided\n if (eventDefinition.payloadSchema) {\n try {\n data = eventDefinition.payloadSchema.parse(data);\n } catch (error) {\n throw new ValidationError(\n \"Event payload\",\n eventDefinition.id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n const frame = { id: eventDefinition.id, source };\n const processEmission = async () => {\n // Determine whether this emission should be excluded from global listeners\n /* istanbul ignore next */\n const pseudoForExclude = {\n id: eventDefinition.id,\n data,\n timestamp: new Date(),\n source,\n meta: eventDefinition.meta || {},\n stopPropagation: () => {},\n isPropagationStopped: () => false,\n tags: eventDefinition.tags,\n } as IEventEmission<TInput>;\n\n const excludeFromGlobal = this.isExcludedFromGlobal(pseudoForExclude);\n\n // Choose listeners: if globals are excluded, only use event-specific listeners\n const allListeners = excludeFromGlobal\n ? this.listeners.get(eventDefinition.id) || []\n : this.getCachedMergedListeners(eventDefinition.id);\n\n let propagationStopped = false;\n\n const event: IEventEmission = {\n id: eventDefinition.id,\n data,\n timestamp: new Date(),\n source,\n meta: eventDefinition.meta || {},\n stopPropagation: () => {\n propagationStopped = true;\n },\n isPropagationStopped: () => propagationStopped,\n tags: eventDefinition.tags,\n };\n\n // Create the base emission function\n const baseEmit = async (\n eventToEmit: IEventEmission<any>,\n ): Promise<void> => {\n if (allListeners.length === 0) {\n return;\n }\n\n const excludeFromGlobal = this.isExcludedFromGlobal(eventToEmit);\n\n for (const listener of allListeners) {\n if (propagationStopped) {\n break;\n }\n\n // Skip handlers that identify themselves as the source of this event\n // (prevents a listener from re-invoking itself).\n if (listener.id && listener.id === eventToEmit.source) {\n continue;\n }\n\n if (!listener.filter || listener.filter(eventToEmit)) {\n await listener.handler(eventToEmit);\n }\n }\n };\n\n // Apply emission interceptors (last added runs first)\n let emitWithInterceptors: (event: IEventEmission<any>) => Promise<void> =\n baseEmit;\n\n // Reverse the interceptors so the last added runs first\n const reversedInterceptors = [...this.emissionInterceptors].reverse();\n\n for (const interceptor of reversedInterceptors) {\n const nextFunction = emitWithInterceptors;\n emitWithInterceptors = async (eventToEmit: IEventEmission<any>) =>\n interceptor(nextFunction, eventToEmit);\n }\n\n // Execute the emission with interceptors\n await emitWithInterceptors(event);\n };\n\n if (\n this.runtimeCycleDetection &&\n this.emissionStack &&\n this.currentHookIdContext\n ) {\n // Detect re-entrant event cycles: same event id appearing in the current chain\n const currentStack = this.emissionStack.getStore();\n if (currentStack) {\n const cycleStart = currentStack.findIndex(\n (f: { id: string; source: string }) => f.id === frame.id,\n );\n if (cycleStart !== -1) {\n const top = currentStack[currentStack.length - 1];\n const currentHookId = this.currentHookIdContext.getStore();\n const safeReEmitBySameHook =\n top.id === frame.id && currentHookId && currentHookId === source;\n\n if (!safeReEmitBySameHook) {\n throw new EventCycleError([\n ...currentStack.slice(cycleStart),\n frame,\n ]);\n }\n }\n }\n\n const nextStack = currentStack ? [...currentStack, frame] : [frame];\n await this.emissionStack.run(nextStack, processEmission);\n } else {\n // Fast path without AsyncLocalStorage context tracking\n await processEmission();\n }\n }\n\n /**\n * Registers an event listener for specific event(s).\n * Listeners are ordered by priority and executed in ascending order.\n *\n * @param event - The event definition(s) to listen for\n * @param handler - The callback function to handle the event\n * @param options - Configuration options for the listener\n */\n addListener<T>(\n event: IEvent<T> | Array<IEvent<T>>,\n handler: EventHandlerType<T>,\n options: IEventHandlerOptions<T> = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener: IListenerStorage = {\n handler,\n order: options.order || 0,\n filter: options.filter,\n id: options.id,\n isGlobal: false,\n };\n\n if (Array.isArray(event)) {\n event.forEach((id) => this.addListener(id, handler, options));\n } else {\n const eventId = event.id;\n const listeners = this.listeners.get(eventId);\n if (listeners) {\n this.insertListener(listeners, newListener);\n } else {\n this.listeners.set(eventId, [newListener]);\n }\n this.invalidateCache(eventId);\n }\n }\n\n /**\n * Registers a global event listener that handles all events.\n * Global listeners are mixed with specific listeners and ordered by priority.\n *\n * @param handler - The callback function to handle events\n * @param options - Configuration options for the listener\n */\n addGlobalListener(\n handler: EventHandlerType,\n options: IEventHandlerOptions = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener: IListenerStorage = {\n handler,\n order: options.order || 0,\n filter: options.filter,\n id: options.id,\n isGlobal: true,\n };\n this.insertListener(this.globalListeners, newListener);\n this.invalidateCache();\n }\n\n /**\n * Checks if there are any listeners registered for the given event\n *\n * @param eventDefinition - The event definition to check\n * @returns true if listeners exist, false otherwise\n */\n hasListeners<T>(eventDefinition: IEvent<T>): boolean {\n const eventListeners = this.listeners.get(eventDefinition.id) || [];\n\n if (eventListeners.length > 0) {\n return true;\n }\n\n if (this.globalListeners.length === 0) {\n return false;\n }\n\n // If the event definition carries the tag that excludes it from global\n // listeners, report no listeners (since globals would be skipped at emit).\n /* istanbul ignore next */\n const pseudoEmission = {\n id: eventDefinition.id,\n data: undefined,\n timestamp: new Date(),\n source: \"\",\n meta: eventDefinition.meta || {},\n stopPropagation: () => {},\n isPropagationStopped: () => false,\n tags: eventDefinition.tags,\n } as unknown as IEventEmission<any>;\n\n if (this.isExcludedFromGlobal(pseudoEmission)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Adds an interceptor for all event emissions\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent event emissions\n *\n * @param interceptor - The interceptor function to add\n */\n intercept(interceptor: EventEmissionInterceptor): void {\n this.checkLock();\n this.emissionInterceptors.push(interceptor);\n }\n\n /**\n * Adds an interceptor for hook execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent hook execution\n *\n * @param interceptor - The interceptor function to add\n */\n interceptHook(interceptor: HookExecutionInterceptor): void {\n this.checkLock();\n this.hookInterceptors.push(interceptor);\n }\n\n /**\n * Executes a hook with all registered hook interceptors applied\n * This method should be used by TaskRunner when executing hooks\n *\n * @param hook - The hook to execute\n * @param event - The event that triggered the hook\n * @param computedDependencies - The computed dependencies for the hook\n * @returns Promise resolving to the hook execution result\n */\n async executeHookWithInterceptors(\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n computedDependencies: DependencyValuesType<any>,\n ): Promise<any> {\n // Base hook execution function\n const baseExecute = async (\n hookToExecute: IHook<any, any>,\n eventForHook: IEventEmission<any>,\n ): Promise<any> => {\n try {\n const result = await hookToExecute.run(\n eventForHook,\n computedDependencies,\n );\n\n return result;\n } catch (err: unknown) {\n throw err;\n }\n };\n\n // Apply hook interceptors (last added runs first)\n let executeWithInterceptors: (\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n ) => Promise<any> = baseExecute;\n\n // Reverse the interceptors so the last added runs first\n const reversedInterceptors = [...this.hookInterceptors].reverse();\n\n for (const interceptor of reversedInterceptors) {\n const nextFunction = executeWithInterceptors;\n executeWithInterceptors = async (\n hookToExecute: IHook<any, any>,\n eventForHook: IEventEmission<any>,\n ) => interceptor(nextFunction, hookToExecute, eventForHook);\n }\n\n // Execute the hook with interceptors within current hook context\n if (this.runtimeCycleDetection) {\n return await this.currentHookIdContext?.run(\n hook.id,\n async () => await executeWithInterceptors(hook, event),\n );\n } else {\n return await executeWithInterceptors(hook, event);\n }\n }\n\n // ==================== PRIVATE METHODS ====================\n\n /**\n * Throws an error if the EventManager is locked\n */\n private checkLock() {\n if (this.#isLocked) {\n throw new LockedError(\"EventManager\");\n }\n }\n\n /**\n * Merges two sorted arrays of listeners while maintaining order.\n * Used to combine event-specific listeners with global listeners.\n *\n * @param a - First array of listeners\n * @param b - Second array of listeners\n * @returns Merged and sorted array of listeners\n */\n private mergeSortedListeners(\n a: IListenerStorage[],\n b: IListenerStorage[],\n ): IListenerStorage[] {\n const result: IListenerStorage[] = [];\n let i = 0,\n j = 0;\n while (i < a.length && j < b.length) {\n if (a[i].order <= b[j].order) {\n result.push(a[i++]);\n } else {\n result.push(b[j++]);\n }\n }\n while (i < a.length) result.push(a[i++]);\n while (j < b.length) result.push(b[j++]);\n return result;\n }\n\n /**\n * Inserts a new listener into a sorted array using binary search.\n * Maintains order based on listener priority.\n *\n * @param listeners - Array to insert into\n * @param newListener - Listener to insert\n */\n private insertListener(\n listeners: IListenerStorage[],\n newListener: IListenerStorage,\n ): void {\n let low = 0;\n let high = listeners.length;\n while (low < high) {\n const mid = (low + high) >>> 1;\n if (listeners[mid].order < newListener.order) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n listeners.splice(low, 0, newListener);\n }\n\n /**\n * Returns true if the given emission carries the tag that marks\n * it as excluded from global (\"*\") listeners.\n *\n * @param event - The event emission to check\n * @returns true if event should exclude global listeners\n */\n private isExcludedFromGlobal(event: IEventEmission<any>): boolean {\n return globalTags.excludeFromGlobalHooks.exists(event);\n }\n\n /**\n * Retrieves cached merged listeners for an event, or creates them if not cached.\n * Combines event-specific listeners with global listeners and sorts them by priority.\n *\n * @param eventId - The event ID to get listeners for\n * @returns Array of merged listeners sorted by priority\n */\n private getCachedMergedListeners(eventId: string): IListenerStorage[] {\n if (!this.globalListenersCacheValid) {\n this.cachedMergedListeners.clear();\n this.globalListenersCacheValid = true;\n }\n\n let cached = this.cachedMergedListeners.get(eventId);\n if (!cached) {\n const eventListeners = this.listeners.get(eventId) || [];\n if (eventListeners.length === 0 && this.globalListeners.length === 0) {\n cached = [];\n } else if (eventListeners.length === 0) {\n cached = this.globalListeners;\n } else if (this.globalListeners.length === 0) {\n cached = eventListeners;\n } else {\n cached = this.mergeSortedListeners(\n eventListeners,\n this.globalListeners,\n );\n }\n this.cachedMergedListeners.set(eventId, cached);\n }\n return cached;\n }\n\n /**\n * Invalidates the cached merged listeners.\n * If eventId is provided, only invalidates cache for that specific event.\n * Otherwise, invalidates the global cache.\n *\n * @param eventId - Optional specific event ID to invalidate\n */\n private invalidateCache(eventId?: string): void {\n if (eventId) {\n this.cachedMergedListeners.delete(eventId);\n } else {\n this.globalListenersCacheValid = false;\n }\n }\n}\n","/**\n * A node that has dependencies.\n */\nexport interface IDependentNode {\n id: string;\n dependencies: Record<string, IDependentNode>;\n}\n\ninterface FindCircularDependenciesResult {\n cycles: string[];\n missingDependencies: Array<{ nodeId: string; dependencyId: string }>;\n}\n\nexport function findCircularDependencies(\n nodes: IDependentNode[],\n): FindCircularDependenciesResult {\n const result: FindCircularDependenciesResult = {\n cycles: [],\n missingDependencies: [],\n };\n const visited: Set<string> = new Set();\n const stack: Set<string> = new Set();\n const path: string[] = [];\n\n function dfs(node: IDependentNode): void {\n if (stack.has(node.id)) {\n const cycleStartIndex = path.indexOf(node.id);\n const cycle = path.slice(cycleStartIndex).concat(node.id).join(\" -> \");\n result.cycles.push(cycle);\n return;\n }\n\n if (visited.has(node.id)) return;\n\n visited.add(node.id);\n stack.add(node.id);\n path.push(node.id);\n\n for (const [depKey, dependentNode] of Object.entries(node.dependencies)) {\n if (!dependentNode) {\n result.missingDependencies.push({\n nodeId: node.id,\n dependencyId: depKey,\n });\n continue;\n }\n dfs(dependentNode);\n }\n\n stack.delete(node.id);\n path.pop();\n }\n\n for (const node of nodes) {\n if (!visited.has(node.id)) {\n dfs(node);\n }\n }\n\n result.cycles = Array.from(new Set(result.cycles)); // Remove duplicate cycles\n return result;\n}\n","import { HookStoreElementType, ITag } from \"../defs\";\nimport {\n DependencyNotFoundError,\n DuplicateRegistrationError,\n MiddlewareNotRegisteredError,\n TagNotFoundError,\n} from \"../errors\";\nimport { ITaggable } from \"../defs\";\nimport { Store } from \"./Store\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class StoreValidator {\n constructor(private registry: StoreRegistry) {}\n\n checkIfIDExists(id: string): void | never {\n if (this.registry.tasks.has(id)) {\n throw new DuplicateRegistrationError(\"Task\", id);\n }\n if (this.registry.resources.has(id)) {\n throw new DuplicateRegistrationError(\"Resource\", id);\n }\n if (this.registry.events.has(id)) {\n throw new DuplicateRegistrationError(\"Event\", id);\n }\n if (this.registry.taskMiddlewares.has(id)) {\n throw new DuplicateRegistrationError(\"Middleware\", id);\n }\n if (this.registry.resourceMiddlewares.has(id)) {\n throw new DuplicateRegistrationError(\"Middleware\", id);\n }\n if (this.registry.tags.has(id)) {\n throw new DuplicateRegistrationError(\"Tag\", id);\n }\n if (this.registry.hooks.has(id)) {\n throw new DuplicateRegistrationError(\"Hook\", id);\n }\n }\n\n runSanityChecks() {\n for (const task of this.registry.tasks.values()) {\n const middlewares = task.task.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.taskMiddlewares.has(middlewareAttachment.id)) {\n throw new MiddlewareNotRegisteredError(\n \"task\",\n task.task.id,\n middlewareAttachment.id,\n );\n }\n });\n }\n\n for (const resource of this.registry.resources.values()) {\n const middlewares = resource.resource.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.resourceMiddlewares.has(middlewareAttachment.id)) {\n throw new MiddlewareNotRegisteredError(\n \"resource\",\n resource.resource.id,\n middlewareAttachment.id,\n );\n }\n });\n }\n\n this.ensureAllTagsUsedAreRegistered();\n }\n\n ensureAllTagsUsedAreRegistered() {\n const taggables: ITaggable[] = [\n ...Array.from(this.registry.tasks.values()).map((x) => x.task),\n ...Array.from(this.registry.resources.values()).map((x) => x.resource),\n ...Array.from(this.registry.events.values()).map((x) => x.event),\n ...Array.from(this.registry.taskMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.resourceMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.hooks.values()).map((x) => x.hook),\n ];\n\n for (const taggable of taggables) {\n const tags = taggable.tags;\n if (tags) {\n for (const tag of tags) {\n if (!this.registry.tags.has(tag.id)) {\n throw new TagNotFoundError(tag.id);\n }\n }\n }\n }\n }\n}\n","import {\n DependencyMapType,\n IEventDefinition,\n IResource,\n ITask,\n IResourceWithConfig,\n RegisterableItems,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n ITag,\n IHook,\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { UnknownItemTypeError } from \"../errors\";\nimport {\n TaskStoreElementType,\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n ResourceStoreElementType,\n EventStoreElementType,\n HookStoreElementType,\n} from \"../defs\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport { Store } from \"./Store\";\nimport { task } from \"..\";\nimport { IDependentNode } from \"./utils/findCircularDependencies\";\n\ntype StoringMode = \"normal\" | \"override\";\nexport class StoreRegistry {\n public tasks: Map<string, TaskStoreElementType> = new Map();\n public resources: Map<string, ResourceStoreElementType> = new Map();\n public events: Map<string, EventStoreElementType> = new Map();\n public taskMiddlewares: Map<string, TaskMiddlewareStoreElementType> =\n new Map();\n public resourceMiddlewares: Map<string, ResourceMiddlewareStoreElementType> =\n new Map();\n public hooks: Map<string, HookStoreElementType> = new Map();\n public tags: Map<string, ITag> = new Map();\n\n private validator: StoreValidator;\n\n constructor(protected readonly store: Store) {\n this.validator = new StoreValidator(this);\n }\n\n getValidator(): StoreValidator {\n return this.validator;\n }\n\n storeGenericItem<C>(item: RegisterableItems) {\n if (utils.isTask(item)) {\n this.storeTask<C>(item);\n } else if (utils.isHook && utils.isHook(item)) {\n this.storeHook<C>(item as IHook);\n } else if (utils.isResource(item)) {\n this.storeResource<C>(item);\n } else if (utils.isEvent(item)) {\n this.storeEvent<C>(item);\n } else if (utils.isTaskMiddleware(item)) {\n this.storeTaskMiddleware<C>(item as ITaskMiddleware<any>);\n } else if (utils.isResourceMiddleware(item)) {\n this.storeResourceMiddleware<C>(item as IResourceMiddleware<any>);\n } else if (utils.isResourceWithConfig(item)) {\n this.storeResourceWithConfig<C>(item);\n } else if (utils.isTag(item)) {\n this.storeTag(item);\n } else {\n throw new UnknownItemTypeError(item);\n }\n }\n\n storeTag(item: ITag<any, any>) {\n this.validator.checkIfIDExists(item.id);\n this.tags.set(item.id, item);\n }\n\n storeHook<C>(item: IHook<any, any>, overrideMode: StoringMode = \"normal\") {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const hook = this.getFreshValue(item, this.hooks, \"hook\", overrideMode);\n\n // store separately\n this.hooks.set(hook.id, {\n hook,\n computedDependencies: {},\n });\n }\n\n storeTaskMiddleware<C>(\n item: ITaskMiddleware<any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const middleware = this.getFreshValue(\n item,\n this.taskMiddlewares,\n \"middleware\",\n storingMode,\n );\n\n this.taskMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeResourceMiddleware<C>(\n item: IResourceMiddleware<any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n const middleware = this.getFreshValue(\n item,\n this.resourceMiddlewares,\n \"middleware\",\n overrideMode,\n );\n\n this.resourceMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeEvent<C>(item: IEvent<void>) {\n this.validator.checkIfIDExists(item.id);\n this.events.set(item.id, { event: item });\n }\n\n storeResourceWithConfig<C>(\n item: IResourceWithConfig<any, any, any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" &&\n this.validator.checkIfIDExists(item.resource.id);\n\n const prepared = this.getFreshValue(\n item.resource,\n this.resources,\n \"resource\",\n storingMode,\n item.config,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: item.config,\n value: undefined,\n isInitialized: false,\n context: {},\n });\n\n this.computeRegistrationDeeply(prepared, item.config);\n return prepared;\n }\n\n computeRegistrationDeeply<C>(element: IResource<C>, config?: C) {\n const items =\n typeof element.register === \"function\"\n ? element.register(config as C)\n : element.register;\n\n element.register = items;\n\n for (const item of items) {\n // will call registration if it detects another resource.\n this.storeGenericItem<C>(item);\n }\n }\n\n storeResource<C>(\n item: IResource<any, any, any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const prepared = this.getFreshValue(\n item,\n this.resources,\n \"resource\",\n overrideMode,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: {},\n value: undefined,\n isInitialized: false,\n context: prepared.context?.() || {},\n });\n\n this.computeRegistrationDeeply(prepared, {});\n return prepared;\n }\n\n storeTask<C>(item: ITask<any, any, {}>, storingMode: StoringMode = \"normal\") {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const task = this.getFreshValue(item, this.tasks, \"task\", storingMode);\n\n this.tasks.set(task.id, {\n task,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n // Feels like a dependencyProcessor task?\n getDependentNodes() {\n const depenedants: IDependentNode[] = [];\n\n // First, create all nodes\n const nodeMap = new Map<string, IDependentNode>();\n\n // Create nodes for tasks\n this.setupBlankNodes(nodeMap, depenedants);\n\n // Now, populate dependencies with references to actual nodes\n for (const task of this.tasks.values()) {\n const node = nodeMap.get(task.task.id)!;\n\n // Add task dependencies\n if (task.task.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n task.task.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies for tasks (hooks have no middleware)\n const t = task.task;\n for (const middleware of t.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n // Populate task middleware dependencies\n for (const storeTaskMiddleware of this.taskMiddlewares.values()) {\n const node = nodeMap.get(storeTaskMiddleware.middleware.id)!;\n const { middleware } = storeTaskMiddleware;\n\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const task of this.tasks.values()) {\n if (filter(task.task)) {\n const taskNode = nodeMap.get(task.task.id)!;\n // node.dependencies[task.task.id] = taskNode;\n taskNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource middleware dependencies\n for (const storeResourceMiddleware of this.resourceMiddlewares.values()) {\n const node = nodeMap.get(storeResourceMiddleware.middleware.id)!;\n const { middleware } = storeResourceMiddleware;\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const resource of this.resources.values()) {\n if (filter(resource.resource)) {\n const resourceNode = nodeMap.get(resource.resource.id)!;\n // node.dependencies[resource.resource.id] = resourceNode;\n resourceNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource dependencies\n for (const resource of this.resources.values()) {\n const node = nodeMap.get(resource.resource.id)!;\n\n // Add resource dependencies\n if (resource.resource.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n resource.resource.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies\n for (const middleware of resource.resource.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n for (const hook of this.hooks.values()) {\n const node = nodeMap.get(hook.hook.id)!;\n if (hook.hook.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n hook.hook.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n }\n\n return depenedants;\n }\n\n /**\n * Builds a directed graph of event emissions based on hooks listening to events\n * and their dependencies on events (emission capability). Ignores wildcard hooks by default.\n */\n buildEventEmissionGraph() {\n const nodes = new Map<string, IDependentNode>();\n\n // Create nodes for all events\n for (const e of this.events.values()) {\n nodes.set(e.event.id, { id: e.event.id, dependencies: {} });\n }\n\n // For each hook, if it listens to concrete event(s) and depends on events, add edges listenedEvent -> depEvent\n for (const h of this.hooks.values()) {\n const listened: string[] = [];\n const on = h.hook.on as any;\n if (on === \"*\") continue; // avoid over-reporting for global hooks\n if (Array.isArray(on)) listened.push(...on.map((e: IEvent) => e.id));\n else listened.push(on.id);\n\n // Collect event dependencies from the hook\n const depEvents: string[] = [];\n const deps = h.hook.dependencies as any;\n if (deps) {\n for (const value of Object.values(deps)) {\n const candidate = utils.isOptional(value) ? value.inner : value;\n if (candidate && utils.isEvent(candidate)) {\n depEvents.push(candidate.id);\n }\n }\n }\n\n // Add edges\n for (const srcId of listened) {\n const srcNode = nodes.get(srcId);\n if (!srcNode) continue; // skip unknown/unregistered events\n for (const dstId of depEvents) {\n if (srcId === dstId) continue; // ignore trivial self edge\n const dstNode = nodes.get(dstId);\n if (dstNode) {\n srcNode.dependencies[dstId] = dstNode;\n }\n }\n }\n }\n\n return Array.from(nodes.values());\n }\n\n private setupBlankNodes(\n nodeMap: Map<string, IDependentNode>,\n depenedants: IDependentNode[],\n ) {\n for (const task of this.tasks.values()) {\n const node: IDependentNode = {\n id: task.task.id,\n dependencies: {},\n };\n nodeMap.set(task.task.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.taskMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.resourceMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n // Create nodes for resources\n for (const resource of this.resources.values()) {\n const node: IDependentNode = {\n id: resource.resource.id,\n dependencies: {},\n };\n nodeMap.set(resource.resource.id, node);\n depenedants.push(node);\n }\n\n for (const hook of this.hooks.values()) {\n const node: IDependentNode = {\n id: hook.hook.id,\n dependencies: {},\n };\n nodeMap.set(hook.hook.id, node);\n depenedants.push(node);\n }\n }\n\n getTasksWithTag(tag: string | ITag) {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.tasks.values())\n .filter((x) => {\n return x.task.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.task);\n }\n\n getResourcesWithTag(tag: string | ITag) {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.resources.values())\n .filter((x) => {\n return x.resource.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.resource);\n }\n\n /**\n * Used to fetch the value cloned, and if we're dealing with an override, we need to extend the previous value.\n */\n private getFreshValue<\n T extends { id: string; dependencies?: any; config?: any },\n MapType,\n >(\n item: T,\n collection: Map<string, MapType>,\n key: keyof MapType,\n overrideMode: StoringMode,\n config?: any, // If provided config, takes precedence over config in item.\n ): T {\n let currentItem: T;\n if (overrideMode === \"override\") {\n const existing = collection.get(item.id)![key];\n currentItem = { ...existing, ...item };\n } else {\n currentItem = { ...item };\n }\n\n currentItem.dependencies =\n typeof currentItem.dependencies === \"function\"\n ? currentItem.dependencies(config || currentItem.config)\n : currentItem.dependencies;\n\n return currentItem;\n }\n}\n","import {\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n IResourceWithConfig,\n RegisterableItems,\n IHook,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { DependencyNotFoundError } from \"../errors\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class OverrideManager {\n public overrides: Map<\n string,\n | IResource\n | ITaskMiddleware\n | IResourceMiddleware\n | ITask\n | IResourceWithConfig\n | IHook\n > = new Map();\n\n public overrideRequests: Set<{\n source: string;\n override: RegisterableItems;\n }> = new Set();\n\n constructor(private readonly registry: StoreRegistry) {}\n\n storeOverridesDeeply<C>(element: IResource<C, any, any>) {\n element.overrides.forEach((override) => {\n if (!override) {\n return;\n }\n\n if (utils.isResource(override)) {\n this.storeOverridesDeeply(override);\n }\n\n let id: string;\n if (utils.isResourceWithConfig(override)) {\n this.storeOverridesDeeply(override.resource);\n id = override.resource.id;\n } else {\n id = override.id;\n }\n\n this.overrideRequests.add({ source: element.id, override });\n this.overrides.set(id, override);\n });\n }\n\n processOverrides() {\n // If we are trying to use override on something that wasn't previously registered, we throw an error.\n for (const override of this.overrides.values()) {\n let hasAnyItem = false;\n if (utils.isTask(override)) {\n hasAnyItem = this.registry.tasks.has(override.id);\n } else if (utils.isResource(override)) {\n hasAnyItem = this.registry.resources.has(override.id);\n } else if (utils.isTaskMiddleware(override)) {\n hasAnyItem = this.registry.taskMiddlewares.has(override.id);\n } else if (utils.isResourceMiddleware(override)) {\n hasAnyItem = this.registry.resourceMiddlewares.has(override.id);\n } else if (utils.isResourceWithConfig(override)) {\n hasAnyItem = this.registry.resources.has(override.resource.id);\n } else if (utils.isHook(override)) {\n hasAnyItem = this.registry.hooks.has(override.id);\n }\n\n if (!hasAnyItem) {\n const id = utils.isResourceWithConfig(override)\n ? override.resource.id\n : override.id;\n\n throw new DependencyNotFoundError(id);\n }\n }\n\n for (const override of this.overrides.values()) {\n if (utils.isTask(override)) {\n this.registry.storeTask(override, \"override\");\n } else if (utils.isResource(override)) {\n this.registry.storeResource(override, \"override\");\n } else if (utils.isTaskMiddleware(override)) {\n this.registry.storeTaskMiddleware(override, \"override\");\n } else if (utils.isResourceMiddleware(override)) {\n this.registry.storeResourceMiddleware(override, \"override\");\n } else if (utils.isResourceWithConfig(override)) {\n this.registry.storeResourceWithConfig(override, \"override\");\n } else if (utils.isHook(override)) {\n this.registry.storeHook(override, \"override\");\n }\n }\n }\n}\n","import {\n DependencyMapType,\n IResource,\n ITask,\n RegisterableItems,\n ITaskMiddleware,\n IResourceMiddleware,\n ITag,\n} from \"../defs\";\nimport {\n findCircularDependencies,\n IDependentNode,\n} from \"./utils/findCircularDependencies\";\nimport { globalEventsArray } from \"../globals/globalEvents\";\nimport {\n CircularDependenciesError,\n StoreAlreadyInitializedError,\n EventEmissionCycleError,\n} from \"../errors\";\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { StoreRegistry } from \"./StoreRegistry\";\nimport { OverrideManager } from \"./OverrideManager\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n EventStoreElementType,\n} from \"../types/storeTypes\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { globalResources } from \"../globals/globalResources\";\nimport { requireContextTaskMiddleware } from \"../globals/middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n} from \"../globals/middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n} from \"../globals/middleware/timeout.middleware\";\nimport { OnUnhandledError } from \"./UnhandledError\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\n\n// Re-export types for backward compatibility\nexport {\n ResourceStoreElementType,\n TaskStoreElementType,\n EventStoreElementType,\n};\n\n/**\n * Store class which is used to store all the resources, tasks, middleware and events.\n */\nexport class Store {\n root!: ResourceStoreElementType;\n private registry: StoreRegistry;\n private overrideManager: OverrideManager;\n private validator: StoreValidator;\n private taskRunner?: TaskRunner;\n private middlewareManager!: MiddlewareManager;\n\n #isLocked = false;\n #isInitialized = false;\n\n constructor(\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n public readonly onUnhandledError: OnUnhandledError,\n ) {\n this.registry = new StoreRegistry(this);\n this.validator = this.registry.getValidator();\n this.overrideManager = new OverrideManager(this.registry);\n this.middlewareManager = new MiddlewareManager(this, eventManager, logger);\n }\n\n // Delegate properties to registry\n get tasks() {\n return this.registry.tasks;\n }\n get hooks() {\n return this.registry.hooks;\n }\n get resources() {\n return this.registry.resources;\n }\n get events() {\n return this.registry.events;\n }\n get taskMiddlewares() {\n return this.registry.taskMiddlewares;\n }\n get resourceMiddlewares() {\n return this.registry.resourceMiddlewares;\n }\n get tags() {\n return this.registry.tags;\n }\n get overrides() {\n return this.overrideManager.overrides;\n }\n get overrideRequests() {\n return this.overrideManager.overrideRequests;\n }\n\n // Expose the shared MiddlewareManager instance so other components (like TaskRunner)\n // can compose runners using the same interceptor configuration.\n public getMiddlewareManager(): MiddlewareManager {\n return this.middlewareManager;\n }\n\n get isLocked() {\n return this.#isLocked;\n }\n\n lock() {\n this.#isLocked = true;\n }\n\n checkLock() {\n if (this.#isLocked) {\n throw new Error(\"Cannot modify the Store when it is locked.\");\n }\n }\n\n private registerGlobalComponents() {\n const builtInResourcesMap = new Map<\n IResource<any, any, any, any, any>,\n any\n >();\n builtInResourcesMap.set(globalResources.store, this);\n builtInResourcesMap.set(globalResources.eventManager, this.eventManager);\n builtInResourcesMap.set(globalResources.logger, this.logger);\n builtInResourcesMap.set(globalResources.taskRunner, this.taskRunner!);\n builtInResourcesMap.set(\n globalResources.middlewareManager,\n this.middlewareManager,\n );\n\n this.registry.storeGenericItem(globalResources.queue);\n\n for (const [resource, value] of builtInResourcesMap.entries()) {\n this.registry.storeGenericItem(resource);\n const entry = this.resources.get(resource.id);\n if (entry) {\n entry.value = value;\n entry.isInitialized = true;\n }\n }\n\n // Register global tags\n Object.values(globalTags).forEach((tag) => {\n this.registry.storeTag(tag);\n });\n\n // Register global events\n globalEventsArray.forEach((event) => {\n this.registry.storeEvent(event);\n });\n\n // Register built-in middlewares\n // Built-in middlewares currently target tasks only; adjust as needed per kind\n const builtInTaskMiddlewares = [\n requireContextTaskMiddleware,\n retryTaskMiddleware,\n timeoutTaskMiddleware,\n ];\n builtInTaskMiddlewares.forEach((middleware) => {\n this.registry.taskMiddlewares.set(middleware.id, {\n middleware: middleware as any,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n\n const builtInResourceMiddlewares = [\n retryResourceMiddleware,\n timeoutResourceMiddleware,\n ];\n builtInResourceMiddlewares.forEach((middleware) => {\n this.registry.resourceMiddlewares.set(middleware.id, {\n middleware: middleware as any,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n }\n\n public setTaskRunner(taskRunner: TaskRunner) {\n this.taskRunner = taskRunner;\n }\n\n private setupRootResource(root: IResource<any>, config: any) {\n root.dependencies =\n typeof root.dependencies === \"function\"\n ? root.dependencies(config)\n : root.dependencies;\n\n this.root = {\n resource: root,\n computedDependencies: {},\n config,\n value: undefined,\n isInitialized: false,\n context: {},\n };\n\n this.registry.computeRegistrationDeeply(root, config);\n this.registry.resources.set(root.id, this.root);\n }\n\n public validateDependencyGraph() {\n // We verify that there isn't any circular dependencies before we begin computing the dependencies\n const dependentNodes = this.registry.getDependentNodes();\n const circularDependencies = findCircularDependencies(dependentNodes);\n if (circularDependencies.cycles.length > 0) {\n throw new CircularDependenciesError(circularDependencies.cycles);\n }\n }\n\n public validateEventEmissionGraph() {\n const eventNodes = this.registry.buildEventEmissionGraph();\n const circular = findCircularDependencies(eventNodes);\n if (circular.cycles.length > 0) {\n throw new EventEmissionCycleError(circular.cycles);\n }\n }\n\n public initializeStore(\n root: IResource<any, any, any, any, any>,\n config: any,\n ) {\n if (this.#isInitialized) {\n throw new StoreAlreadyInitializedError();\n }\n\n this.registerGlobalComponents();\n this.setupRootResource(root, config);\n this.validator.runSanityChecks();\n\n for (const resource of this.resources.values()) {\n this.overrideManager.storeOverridesDeeply(resource.resource);\n }\n\n this.#isInitialized = true;\n }\n\n public async dispose() {\n for (const resource of this.resources.values()) {\n if (resource.isInitialized && resource.resource.dispose) {\n await resource.resource.dispose(\n resource.value,\n resource.config,\n resource.computedDependencies as any,\n resource.context,\n );\n }\n }\n }\n\n public processOverrides() {\n this.overrideManager.processOverrides();\n }\n\n public storeGenericItem<C>(item: RegisterableItems) {\n return this.registry.storeGenericItem<C>(item);\n }\n\n /**\n * Returns all tasks with the given tag.\n * @param tag - The tag to filter by.\n * @returns The tasks with the given tag.\n */\n public getTasksWithTag(tag: string | ITag) {\n return this.registry.getTasksWithTag(tag);\n }\n\n public getResourcesWithTag(tag: string | ITag) {\n return this.registry.getResourcesWithTag(tag);\n }\n}\n","import { ITaggable } from \"../../../defs\";\nimport { debugTag } from \"./debug.tag\";\n\nexport type DebugConfig = {\n logResourceConfig: boolean;\n logResourceValue: boolean;\n logResourceBeforeRun: boolean;\n logResourceAfterRun: boolean;\n logTaskBeforeRun: boolean;\n logTaskInput: boolean;\n logTaskOutput: boolean;\n logTaskAfterRun: boolean;\n logMiddlewareBeforeRun: boolean;\n logMiddlewareAfterRun: boolean;\n logEventEmissionOnRun: boolean;\n logEventEmissionInput: boolean;\n logHookTriggered: boolean;\n logHookCompleted: boolean;\n};\n\nexport const allFalse: DebugConfig = Object.freeze({\n logResourceBeforeRun: false,\n logResourceAfterRun: false,\n logMiddlewareBeforeRun: false,\n logMiddlewareAfterRun: false,\n logTaskBeforeRun: false,\n logTaskAfterRun: false,\n logTaskInput: false,\n logTaskOutput: false,\n logResourceConfig: false,\n logResourceValue: false,\n logHookTriggered: false,\n logHookCompleted: false,\n logEventEmissionOnRun: false,\n logEventEmissionInput: false,\n});\n\nexport const levelNormal: DebugConfig = Object.freeze({\n ...allFalse,\n logTaskAfterRun: true,\n logTaskBeforeRun: true,\n logResourceBeforeRun: true,\n logResourceAfterRun: true,\n logMiddlewareBeforeRun: true,\n logMiddlewareAfterRun: true,\n logHookTriggered: true,\n logHookCompleted: true,\n logEventEmissionOnRun: true,\n});\n\nObject.freeze(levelNormal);\n\nexport const levelVerbose: DebugConfig = Object.freeze({\n ...levelNormal,\n logTaskInput: true,\n logTaskOutput: true,\n logResourceConfig: true,\n logResourceValue: true,\n logHookTriggered: true,\n logHookCompleted: true,\n});\n\nObject.freeze(levelVerbose);\n\n/**\n * If you choose to specify your own config, all values will be set to false by default and extended by your config.\n */\nexport type DebugFriendlyConfig = \"normal\" | \"verbose\" | Partial<DebugConfig>;\n\nfunction formatConfig(config: DebugFriendlyConfig): DebugConfig {\n if (config === \"normal\") {\n return { ...levelNormal };\n }\n if (config === \"verbose\") {\n return { ...levelVerbose };\n }\n return { ...allFalse, ...config };\n}\n\nexport const getConfig = (\n config: DebugFriendlyConfig,\n taggable?: ITaggable,\n): DebugConfig => {\n if (!taggable) {\n return formatConfig(config);\n }\n const debugTagConfig = debugTag.extract(taggable);\n\n if (debugTagConfig) {\n const debugTagConfigFormatted = formatConfig(debugTagConfig);\n return { ...formatConfig(config), ...debugTagConfigFormatted };\n }\n\n return formatConfig(config);\n};\n","import { defineResource } from \"../../../define\";\nimport { DebugFriendlyConfig, getConfig } from \"./types\";\nimport { globalTags } from \"../../../globals/globalTags\";\n\nexport const debugConfig = defineResource({\n id: \"globals.debug.resources.config\",\n meta: {\n title: \"Debug Config\",\n description: \"Debug config. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n init: async (config: DebugFriendlyConfig) => {\n const myConfig = { ...getConfig(config) };\n\n Object.freeze(myConfig);\n return myConfig;\n },\n});\n","import { ITaggable } from \"../../../defs\";\nimport { globalTags } from \"../../globalTags\";\n\nexport const hasSystemTag = (definition: ITaggable) => {\n const maybeTags = definition.tags;\n if (!Array.isArray(maybeTags)) {\n return false;\n }\n return globalTags.system.exists(definition);\n};\n","import { defineHook } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\nimport { globalEvents } from \"../../globalEvents\";\n\nexport const globalEventListener = defineHook({\n id: \"globals.debug.hooks.onAnyEvent\",\n on: \"*\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n },\n run: async (event, { logger, debugConfig }) => {\n if (hasSystemTag(event)) {\n return;\n }\n\n debugConfig = getConfig(debugConfig, event!);\n if (debugConfig.logEventEmissionOnRun) {\n const message = `Event ${String(event!.id)} emitted`;\n await logger.info(message, {\n source: \"globals.debug.hooks.onAnyEvent\",\n data: debugConfig.logEventEmissionInput\n ? { data: event!.data }\n : undefined,\n });\n }\n },\n meta: {\n title: \"Non-system Event Logger\",\n description: \"Logs all non-system events.\",\n },\n tags: [globalTags.system],\n});\n","import {\n defineTaskMiddleware,\n defineResourceMiddleware,\n} from \"../../../define\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\n\nexport const tasksTrackerMiddleware = defineTaskMiddleware({\n id: \"globals.debug.middleware.task.executionTracker\",\n everywhere: (task) => !globalTags.system.exists(task),\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n run: async ({ task, next }, { logger, debugConfig, store }) => {\n const start = Date.now();\n logger = logger.with({\n source: tasksTrackerMiddleware.id,\n });\n\n debugConfig = getConfig(debugConfig, task?.definition);\n const taskStartMessage = `Task ${task!.definition.id} is running...`;\n const shouldShowData = debugConfig.logTaskInput && task!.input;\n await logger.info(taskStartMessage, {\n data: shouldShowData ? { input: task!.input } : undefined,\n });\n\n const result = await next(task!.input);\n const duration = Date.now() - start;\n const taskCompleteMessage = `Task ${\n task!.definition.id\n } completed in ${duration}ms`;\n const shouldShowResult = debugConfig.logTaskOutput && result;\n await logger.info(taskCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n\nexport const resourcesTrackerMiddleware = defineResourceMiddleware({\n id: \"globals.debug.middleware.resource.executionTracker\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n everywhere: (resource) => !globalTags.system.exists(resource),\n run: async ({ resource, next }, { logger, debugConfig, store }) => {\n const start = Date.now();\n logger = logger.with({\n source: resourcesTrackerMiddleware.id,\n });\n debugConfig = getConfig(debugConfig, resource?.definition);\n const resourceStartMessage = `Resource ${\n resource!.definition.id\n } is initializing...`;\n\n const isConfigEmpty = Object.keys(resource!.config || {}).length === 0;\n const shouldShowConfig = debugConfig.logResourceConfig && !isConfigEmpty;\n\n await logger.info(resourceStartMessage, {\n data: shouldShowConfig ? { config: resource!.config } : undefined,\n });\n\n const result = await next(resource!.config);\n const duration = Date.now() - start;\n const resourceCompleteMessage = `Resource ${String(\n resource!.definition.id,\n )} initialized in ${duration}ms`;\n const shouldShowResult =\n debugConfig.logResourceValue && result !== undefined;\n\n await logger.info(resourceCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n","import { defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { hasSystemTag } from \"./utils\";\nimport { ITaskMiddlewareExecutionInput } from \"../../../types/taskMiddleware\";\nimport { IResourceMiddlewareExecutionInput } from \"../../../types/resourceMiddleware\";\n\nconst id = \"globals.debug.resources.middlewareInterceptor\";\nexport const middlewareInterceptorResource = defineResource({\n id,\n meta: {\n title: \"Middleware Interceptor\",\n description:\n \"Intercepts task and resource middleware, skipping system-tagged entities.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n middlewareManager: globalResources.middlewareManager,\n },\n init: async (event, deps) => {\n const { logger, debugConfig, middlewareManager } = deps;\n\n // Task middleware interceptor\n middlewareManager.intercept(\n \"task\",\n async (\n next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>,\n input: ITaskMiddlewareExecutionInput<any>,\n ) => {\n const taskDef = input.task.definition;\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n\n // Resource middleware interceptor\n middlewareManager.intercept(\n \"resource\",\n async (\n next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>,\n input: IResourceMiddlewareExecutionInput<any>,\n ) => {\n const resourceDef = input.resource.definition;\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n },\n});\n","import { defineHook, defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\nimport { globalEvents } from \"../../globalEvents\";\nimport { safeStringify } from \"../../../models/utils/safeStringify\";\n\nexport const hookInterceptorResource = defineResource({\n id: \"globals.debug.resources.hookInterceptor\",\n meta: {\n title: \"Hook Interceptor\",\n description:\n \"Intercepts hooks for debug logging, skipping system-tagged hooks.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n eventManager: globalResources.eventManager,\n },\n init: async (event, deps) => {\n deps.eventManager.interceptHook(async (next, hook, event) => {\n const { logger, debugConfig } = deps;\n\n // Skip logging for system-tagged observability events\n if (hasSystemTag(hook)) {\n return await next(hook, event);\n }\n\n const resolved = getConfig(debugConfig, event!);\n if (resolved.logHookTriggered) {\n const hookId = hook.id;\n let logString = `Hook triggered for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n\n await next(hook, event);\n\n if (resolved.logHookCompleted) {\n const hookId = hook.id;\n let logString = `Hook completed for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n });\n },\n});\n","import { defineResource } from \"../../../define\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { DebugFriendlyConfig } from \"./types\";\nimport { globalEventListener } from \"./globalEvent.hook\";\nimport {\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n} from \"./executionTracker.middleware\";\nimport { globalTags } from \"../../globalTags\";\nimport { middlewareInterceptorResource } from \"./middleware.hook\";\nimport { hookInterceptorResource } from \"./hook.hook\";\n\nexport const debugResource = defineResource({\n id: \"globals.resources.debug\",\n register: (config: DebugFriendlyConfig) => {\n return [\n debugConfig.with(config),\n globalEventListener,\n middlewareInterceptorResource,\n hookInterceptorResource,\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n ];\n },\n meta: {\n title: \"Debug\",\n description: \"Debug resource. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n});\n","import { getPlatform } from \"./platform\";\nimport { PlatformUnsupportedFunction } from \"./errors\";\n\nconst platform = getPlatform();\n\n// Global registry of active error handlers for process-level safety nets\nconst activeErrorHandlers = new Set<\n (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>\n>();\nlet processSafetyNetsInstalled = false;\n\nfunction installGlobalProcessSafetyNetsOnce() {\n if (processSafetyNetsInstalled) return;\n processSafetyNetsInstalled = true;\n const onUncaughtException = async (err: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(err, \"uncaughtException\");\n } catch (_) {}\n }\n };\n const onUnhandledRejection = async (reason: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(reason, \"unhandledRejection\");\n } catch (_) {}\n }\n };\n platform.onUncaughtException(onUncaughtException);\n platform.onUnhandledRejection(onUnhandledRejection);\n}\n\nexport function registerProcessLevelSafetyNets(\n handler: (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>,\n) {\n installGlobalProcessSafetyNetsOnce();\n activeErrorHandlers.add(handler);\n return () => {\n activeErrorHandlers.delete(handler);\n };\n}\n\n// Global shutdown registry: one listener per signal, dispatching to active disposers\nconst activeDisposers = new Set<() => Promise<void>>();\nlet shutdownHooksInstalled = false;\n\nfunction installGlobalShutdownHooksOnce() {\n if (shutdownHooksInstalled) return;\n shutdownHooksInstalled = true;\n const handler = async () => {\n try {\n const disposers = Array.from(activeDisposers);\n for (const d of disposers) {\n try {\n await d();\n } catch {}\n activeDisposers.delete(d);\n }\n } finally {\n try {\n platform.exit(0);\n } catch (e) {\n if (!(e instanceof PlatformUnsupportedFunction)) {\n throw e;\n }\n }\n }\n };\n platform.onShutdownSignal(handler);\n}\n\nexport function registerShutdownHook(disposeOnce: () => Promise<void>) {\n installGlobalShutdownHooksOnce();\n activeDisposers.add(disposeOnce);\n return () => {\n activeDisposers.delete(disposeOnce);\n };\n}\n","import { Logger } from \"./Logger\";\n\nexport type UnhandledErrorKind =\n | \"process\"\n | \"task\"\n | \"middleware\"\n | \"resourceInit\"\n | \"hook\"\n | \"run\";\n\nexport interface OnUnhandledErrorInfo {\n error: unknown;\n kind?: UnhandledErrorKind;\n source?: string;\n}\n\nexport type OnUnhandledError = (\n info: OnUnhandledErrorInfo,\n) => void | Promise<void>;\n\nexport function createDefaultUnhandledError(logger: Logger): OnUnhandledError {\n return async ({ error, kind, source }: OnUnhandledErrorInfo) => {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n\n await logger.error(`${normalizedError.toString()}`, {\n source,\n error: normalizedError,\n data: {\n kind,\n },\n });\n };\n}\n\nexport function bindProcessErrorHandler(\n handler: OnUnhandledError,\n): (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n) => void | Promise<void> {\n return async (error, source) => {\n try {\n await handler({ error, kind: \"process\", source });\n } catch {}\n };\n}\n\nexport async function safeReportUnhandledError(\n handler: OnUnhandledError,\n info: OnUnhandledErrorInfo,\n): Promise<void> {\n try {\n await handler(info);\n } catch {}\n}\n","import { DependencyMapType, IEvent, ITask } from \"../defs\";\nimport { IResource } from \"../defs\";\nimport { ResourceNotFoundError, RuntimeError } from \"../errors\";\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { Store } from \"./Store\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { OnUnhandledError } from \"./UnhandledError\";\n\nexport class RunResult<V> {\n constructor(\n public readonly value: V,\n public readonly logger: Logger,\n public readonly store: Store,\n private readonly eventManager: EventManager,\n private readonly taskRunner: TaskRunner,\n private readonly disposeFn: () => Promise<void>,\n ) {}\n\n /**\n * Run a task within the context of the run result.\n * @param task - The task to run.\n * @param args - The arguments to pass to the task.\n * @returns The result of the task.\n */\n public runTask = <\n I = undefined,\n O extends Promise<any> = any,\n D extends DependencyMapType = any,\n >(\n task: ITask<I, O, D> | string,\n ...args: I extends undefined | void ? [] : [I]\n ) => {\n if (typeof task === \"string\") {\n const taskId = task;\n if (!this.store.tasks.has(taskId)) {\n throw new RuntimeError(`Task \"${taskId}\" not found.`);\n }\n task = this.store.tasks.get(taskId)!.task;\n }\n\n return this.taskRunner.run(task, ...args);\n };\n\n /**\n * Emit an event within the context of the run result.\n * @param event - The event to emit.\n * @param payload - The payload to emit.\n */\n public emitEvent = <P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n ) => {\n if (typeof event === \"string\") {\n const eventId = event;\n if (!this.store.events.has(eventId)) {\n throw new RuntimeError(`Event \"${eventId}\" not found.`);\n }\n event = this.store.events.get(eventId)!.event;\n }\n return this.eventManager.emit(event, payload, \"outside\");\n };\n\n /**\n * Get the value of a resource from the run result.\n * @param resource - The resource to get the value of.\n * @returns The value of the resource.\n */\n public getResourceValue = <Output extends Promise<any>>(\n resource: string | IResource<any, Output, any, any, any>,\n ): Output extends Promise<infer U> ? U : Output => {\n const resourceId = typeof resource === \"string\" ? resource : resource.id;\n if (!this.store.resources.has(resourceId)) {\n throw new ResourceNotFoundError(resourceId);\n }\n\n return this.store.resources.get(resourceId)!.value;\n };\n\n public dispose = () => {\n return this.disposeFn();\n };\n}\n","import { TaskRunner } from \"./models/TaskRunner\";\nimport { IResource, IResourceWithConfig } from \"./defs\";\nimport { DependencyProcessor } from \"./models/DependencyProcessor\";\nimport { EventManager } from \"./models/EventManager\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { Store } from \"./models/Store\";\nimport { findCircularDependencies } from \"./models/utils/findCircularDependencies\";\nimport { CircularDependenciesError } from \"./errors\";\nimport { Logger } from \"./models/Logger\";\nimport { isResourceWithConfig } from \"./define\";\nimport { debugResource } from \"./globals/resources/debug\";\nimport {\n registerProcessLevelSafetyNets,\n registerShutdownHook,\n} from \"./processHooks\";\nimport {\n OnUnhandledError,\n createDefaultUnhandledError,\n bindProcessErrorHandler,\n} from \"./models/UnhandledError\";\nimport { RunResult } from \"./models/RunResult\";\nimport { RunOptions } from \"./types/runner\";\nimport { getPlatform } from \"./platform\";\n\nconst platform = getPlatform();\n\n/**\n * This is the central function that kicks off you runner. You can run as many resources as you want in a single process, they will run in complete isolation.\n *\n * @param resourceOrResourceWithConfig - The resource or resource with config to run.\n * @param options - The options for the run.\n * @returns A promise that resolves to the result of the run.\n */\nexport async function run<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n options?: RunOptions,\n): Promise<RunResult<V extends Promise<infer U> ? U : V>> {\n await platform.init(); // ensure platform is initialized\n const {\n debug = undefined,\n logs = {},\n errorBoundary = true,\n shutdownHooks = true,\n dryRun = false,\n onUnhandledError: onUnhandledErrorOpt,\n runtimeCycleDetection = true,\n } = options || {};\n\n const {\n printThreshold = platform.getEnv(\"NODE_ENV\") === \"test\" ? null : \"info\",\n printStrategy = \"pretty\",\n bufferLogs = false,\n } = logs;\n\n const eventManager = new EventManager({\n runtimeCycleDetection,\n });\n\n let { resource, config } = extractResourceAndConfig(\n resourceOrResourceWithConfig,\n );\n\n // ensure for logger, that it can be used only after: computeAllDependencies() has executed\n const logger = new Logger({\n printThreshold,\n printStrategy,\n bufferLogs,\n });\n\n const onUnhandledError: OnUnhandledError =\n onUnhandledErrorOpt || createDefaultUnhandledError(logger);\n\n const store = new Store(eventManager, logger, onUnhandledError);\n const taskRunner = new TaskRunner(store, eventManager, logger);\n store.setTaskRunner(taskRunner);\n\n // Register this run's event manager for global process error safety nets\n let unhookProcessSafetyNets: (() => void) | undefined;\n if (errorBoundary) {\n unhookProcessSafetyNets = registerProcessLevelSafetyNets(\n bindProcessErrorHandler(onUnhandledError),\n );\n }\n\n const processor = new DependencyProcessor(\n store,\n eventManager,\n taskRunner,\n logger,\n );\n\n // We may install shutdown hooks; capture unhook function to remove them on dispose\n let unhookShutdown: (() => void) | undefined;\n\n // Helper dispose that always unhooks process listeners first\n const disposeAll = async () => {\n try {\n if (unhookProcessSafetyNets) {\n unhookProcessSafetyNets();\n unhookProcessSafetyNets = undefined;\n }\n if (unhookShutdown) {\n unhookShutdown();\n unhookShutdown = undefined;\n }\n } finally {\n await store.dispose();\n }\n };\n\n try {\n if (debug) {\n store.storeGenericItem(debugResource.with(debug));\n }\n\n // In the registration phase we register deeply all the resources, tasks, middleware and events\n store.initializeStore(resource, config);\n\n // the overrides that were registered now will override the other registered resources\n await store.processOverrides();\n\n store.validateDependencyGraph();\n // Compile-time event emission cycle detection (cheap, graph-based)\n store.validateEventEmissionGraph();\n\n const boundedLogger = logger.with({ source: \"run\" });\n if (dryRun) {\n await boundedLogger.debug(\"Dry run mode. Skipping initialization...\");\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n }\n\n // Beginning initialization\n await boundedLogger.debug(\"Events stored. Attaching listeners...\");\n await processor.attachListeners();\n await boundedLogger.debug(\"Listeners attached. Computing dependencies...\");\n await processor.computeAllDependencies();\n // After this stage, logger print policy could have been set.\n await boundedLogger.debug(\n \"Dependencies computed. Proceeding with initialization...\",\n );\n\n // Now we can safely compute dependencies without being afraid of an infinite loop.\n // The hooking part is done here.\n\n // Now we can initialise the root resource\n await processor.initializeRoot();\n\n // disallow manipulation or attaching more\n store.lock();\n eventManager.lock();\n await logger.lock();\n\n await eventManager.emit(\n globalEvents.ready,\n {\n root: store.root.resource,\n },\n \"system\",\n );\n\n await boundedLogger.info(\"Runner online. Awaiting tasks and events.\");\n\n if (shutdownHooks) {\n unhookShutdown = registerShutdownHook(() => store.dispose());\n }\n\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n } catch (err) {\n // Rollback initialized resources\n await disposeAll();\n throw err;\n }\n}\n\n// process hooks moved to processHooks.ts for clarity\n\nfunction extractResourceAndConfig<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n) {\n let resource: IResource<any, any, any, any>;\n let config: any;\n if (isResourceWithConfig(resourceOrResourceWithConfig)) {\n resource = resourceOrResourceWithConfig.resource;\n config = resourceOrResourceWithConfig.config;\n } else {\n resource = resourceOrResourceWithConfig as IResource<any, any, any, any>;\n config = undefined;\n }\n return { resource, config };\n}\n","import { defineResource } from \"./define\";\nimport { globalResources } from \"./globals/globalResources\";\nimport {\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n RegisterableItems,\n IEvent,\n IEventEmission,\n DependencyMapType,\n DependencyValuesType,\n} from \"./defs\";\nimport { EventManager, Logger, Store, TaskRunner } from \"./models\";\nimport { ResourceNotFoundError } from \"./errors\";\n\nlet testResourceCounter = 0;\n\n/**\n * Helper to create a minimal test harness resource that wraps a root app (or any registerable)\n * and exposes convenient testing utilities while running the full ecosystem\n * (registration, overrides, middleware, events) without modifying the core API.\n * @deprecated Use `run` instead with your testResource, as it provides the necessary toolkit.\n */\nexport function createTestResource(\n root: RegisterableItems,\n options?: {\n overrides?: Array<\n | IResource\n | ITask\n | ITaskMiddleware\n | IResourceMiddleware\n | IResourceWithConfig\n >;\n },\n): IResource<void, Promise<ReturnType<typeof buildTestFacade>>> {\n return defineResource({\n id: `testing.${root.id}.${++testResourceCounter}`,\n register: [root],\n overrides: options?.overrides || [],\n dependencies: {\n taskRunner: globalResources.taskRunner,\n store: globalResources.store,\n logger: globalResources.logger,\n eventManager: globalResources.eventManager,\n },\n async init(_, deps) {\n return buildTestFacade(deps);\n },\n });\n}\nfunction buildTestFacade(deps: {\n taskRunner: TaskRunner;\n store: Store;\n logger: Logger;\n eventManager: EventManager;\n}) {\n return {\n // Run a task within the fully initialized ecosystem\n runTask: <I, O extends Promise<any>, D extends DependencyMapType>(\n task: ITask<I, O, D>,\n ...args: I extends undefined ? [] : [I]\n ): Promise<Awaited<O> | undefined> =>\n deps.taskRunner.run(task, ...args) as any,\n // Access a resource value by id (string or symbol)\n getResource: (id: string) => deps.store.resources.get(id)?.value,\n // Expose internals when needed in tests (not recommended for app usage)\n taskRunner: deps.taskRunner,\n store: deps.store,\n logger: deps.logger,\n eventManager: deps.eventManager,\n };\n}\n","interface WaitingOperation {\n resolve: () => void;\n reject: (error: Error) => void;\n timeout?: NodeJS.Timeout;\n abortController?: AbortController;\n}\n\n/**\n * A semaphore that limits the number of concurrent operations.\n * Used to prevent connection pool exhaustion by limiting concurrent\n * database operations to the pool size.\n */\nexport class Semaphore {\n private permits: number;\n private readonly waitingQueue: Array<WaitingOperation> = [];\n private disposed = false;\n private readonly maxPermits: number;\n\n constructor(maxPermits: number) {\n if (maxPermits <= 0) {\n throw new Error(\"maxPermits must be greater than 0\");\n }\n this.permits = maxPermits;\n this.maxPermits = maxPermits;\n }\n\n /**\n * Acquire a permit. If no permits are available, waits until one becomes available.\n */\n async acquire(options?: {\n timeout?: number;\n signal?: AbortSignal;\n }): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Semaphore has been disposed\");\n }\n\n if (options?.signal?.aborted) {\n throw new Error(\"Operation was aborted\");\n }\n\n if (this.permits > 0) {\n this.permits--;\n return;\n }\n\n // No permits available, wait in queue\n return new Promise<void>((resolve, reject) => {\n const operation: WaitingOperation = { resolve, reject };\n\n // Set up timeout if provided\n if (options?.timeout && options.timeout > 0) {\n operation.timeout = setTimeout(() => {\n this.removeFromQueue(operation);\n reject(\n new Error(`Semaphore acquire timeout after ${options.timeout}ms`),\n );\n }, options.timeout);\n }\n\n // Set up abort signal if provided\n if (options?.signal) {\n const abortHandler = () => {\n this.removeFromQueue(operation);\n reject(new Error(\"Operation was aborted\"));\n };\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n\n // Clean up the abort listener when operation completes\n const originalResolve = operation.resolve;\n const originalReject = operation.reject;\n\n operation.resolve = () => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalResolve();\n };\n\n operation.reject = (error: Error) => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalReject(error);\n };\n }\n\n this.waitingQueue.push(operation);\n });\n }\n\n /**\n * Release a permit, allowing waiting operations to proceed.\n */\n release(): void {\n if (this.disposed) {\n return;\n }\n\n if (this.waitingQueue.length > 0) {\n // Give permit directly to next waiting operation\n const nextOperation = this.waitingQueue.shift()!;\n\n // Clear timeout if it exists\n if (nextOperation.timeout) {\n clearTimeout(nextOperation.timeout);\n }\n\n nextOperation.resolve();\n } else {\n // No one waiting, increment available permits (but don't exceed max)\n this.permits = Math.min(this.permits + 1, this.maxPermits);\n }\n }\n\n private removeFromQueue(operation: WaitingOperation): void {\n const index = this.waitingQueue.indexOf(operation);\n if (index !== -1) {\n this.waitingQueue.splice(index, 1);\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n }\n }\n\n /**\n * Execute a function with a permit, automatically releasing it afterwards.\n */\n async withPermit<T>(\n fn: () => Promise<T>,\n options?: { timeout?: number; signal?: AbortSignal },\n ): Promise<T> {\n await this.acquire(options);\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n\n /**\n * Dispose the semaphore, rejecting all waiting operations and preventing new ones.\n */\n dispose(): void {\n if (this.disposed) {\n return;\n }\n\n this.disposed = true;\n\n // Reject all waiting operations\n while (this.waitingQueue.length > 0) {\n const operation = this.waitingQueue.shift()!;\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n\n operation.reject(new Error(\"Semaphore has been disposed\"));\n }\n }\n\n /**\n * Get current number of available permits (for debugging)\n */\n getAvailablePermits(): number {\n return this.permits;\n }\n\n /**\n * Get current number of waiting operations (for debugging)\n */\n getWaitingCount(): number {\n return this.waitingQueue.length;\n }\n\n /**\n * Get maximum number of permits\n */\n getMaxPermits(): number {\n return this.maxPermits;\n }\n\n /**\n * Check if the semaphore has been disposed\n */\n isDisposed(): boolean {\n return this.disposed;\n }\n\n /**\n * Get metrics about the current state of the semaphore\n */\n getMetrics(): {\n availablePermits: number;\n waitingCount: number;\n maxPermits: number;\n utilization: number;\n disposed: boolean;\n } {\n return {\n availablePermits: this.permits,\n waitingCount: this.waitingQueue.length,\n maxPermits: this.maxPermits,\n utilization: (this.maxPermits - this.permits) / this.maxPermits,\n disposed: this.disposed,\n };\n }\n}\n","import {\n defineTask,\n defineResource,\n defineEvent,\n defineTaskMiddleware,\n defineResourceMiddleware,\n defineTag,\n defineOverride,\n defineHook,\n} from \"./define\";\nimport { createContext } from \"./context\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { globalResources } from \"./globals/globalResources\";\nimport { globalMiddlewares } from \"./globals/globalMiddleware\";\nimport { globalTags } from \"./globals/globalTags\";\nimport { run } from \"./run\";\nimport { createTestResource } from \"./testing\";\n\nconst globals = {\n events: globalEvents,\n resources: globalResources,\n middleware: globalMiddlewares,\n tags: globalTags,\n};\n\nexport { globals };\nexport {\n defineTask as task,\n defineResource as resource,\n defineEvent as event,\n defineTaskMiddleware as taskMiddleware,\n defineResourceMiddleware as resourceMiddleware,\n defineTag as tag,\n defineOverride as override,\n defineHook as hook,\n run,\n createContext,\n createTestResource,\n};\n\nexport * as definitions from \"./defs\";\nexport * from \"./models\";\nexport * from \"./globals/types\";\nexport * as Errors from \"./errors\";\nexport { Context } from \"./context\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/defs.ts","../src/types/symbols.ts","../src/types/event.ts","../src/globals/middleware/cache.middleware.ts","../src/tools/getCallerFile.ts","../src/definers/defineTask.ts","../src/definers/defineHook.ts","../src/errors.ts","../src/definers/defineResource.ts","../src/definers/defineEvent.ts","../src/definers/defineTaskMiddleware.ts","../src/definers/defineResourceMiddleware.ts","../src/definers/defineOverride.ts","../src/definers/defineTag.ts","../src/definers/tools.ts","../src/platform/index.ts","../src/globals/middleware/requireContext.middleware.ts","../src/context.ts","../src/globals/resources/debug/debug.tag.ts","../src/globals/globalTags.ts","../src/globals/globalEvents.ts","../src/models/Queue.ts","../src/globals/resources/queue.resource.ts","../src/globals/globalResources.ts","../src/globals/middleware/retry.middleware.ts","../src/globals/middleware/timeout.middleware.ts","../src/globals/globalMiddleware.ts","../src/models/TaskRunner.ts","../src/models/MiddlewareManager.ts","../src/models/ResourceInitializer.ts","../src/models/utils/safeStringify.ts","../src/models/LogPrinter.ts","../src/models/Logger.ts","../src/models/DependencyProcessor.ts","../src/models/EventManager.ts","../src/models/utils/findCircularDependencies.ts","../src/models/StoreValidator.ts","../src/models/StoreRegistry.ts","../src/models/OverrideManager.ts","../src/models/Store.ts","../src/globals/resources/debug/types.ts","../src/globals/resources/debug/debugConfig.resource.ts","../src/globals/resources/debug/utils.ts","../src/globals/resources/debug/globalEvent.hook.ts","../src/globals/resources/debug/executionTracker.middleware.ts","../src/globals/resources/debug/middleware.hook.ts","../src/globals/resources/debug/hook.hook.ts","../src/globals/resources/debug/debug.resource.ts","../src/processHooks.ts","../src/models/UnhandledError.ts","../src/models/RunResult.ts","../src/run.ts","../src/testing.ts","../src/models/Semaphore.ts","../src/index.ts"],"names":["LRUCache","cacheFactoryTask","err","stack","id","store","systemTag","i","config","globalMiddlewares","_isLocked","debugConfig","event","platform"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Core public TypeScript types for BlueLibs Runner.\n *\n * This file contains the strongly-typed contract for tasks, resources, events\n * and middleware. It mirrors the mental model described in the README:\n * - Tasks are functions\n * - Resources are singletons (with init/dispose hooks)\n * - Hooks are event listeners without middleware\n * - Events are simple, strongly-typed emissions\n * - Middleware can target both tasks and resources (taskMiddleware, resourceMiddleware)\n *\n * DX goals:\n * - Crystal‑clear generics and helper types that infer dependency shapes\n * - Friendly JSDoc you can hover in editors to understand usage instantly\n * - Safe overrides and strong typing around config and register mechanics\n */\nexport * from \"./types/utilities\";\nexport * from \"./types/symbols\";\nexport * from \"./types/tag\";\nexport * from \"./types/hook\";\nexport * from \"./types/resource\";\nexport * from \"./types/event\";\nexport * from \"./types/task\";\nexport * from \"./types/taskMiddleware\";\nexport * from \"./types/resourceMiddleware\";\nexport * from \"./types/meta\";\nexport * from \"./types/runner\";\n\n// Useful other types that are kind-of spread out.\nexport { ICacheInstance } from \"./globals/middleware/cache.middleware\";\nexport * from \"./types/storeTypes\";\n","/**\n * Internal brand symbols used to tag created objects at runtime and help with\n * type‑narrowing. Prefer the `isTask`/`isResource`/`isEvent`/`isMiddleware`\n * helpers instead of touching these directly.\n * @internal\n */\nexport const symbolTask: unique symbol = Symbol.for(\"runner.task\");\nexport const symbolResource: unique symbol = Symbol.for(\"runner.resource\");\nexport const symbolResourceWithConfig: unique symbol = Symbol.for(\n \"runner.resourceWithConfig\",\n);\nexport const symbolEvent: unique symbol = Symbol.for(\"runner.event\");\nexport const symbolMiddleware: unique symbol = Symbol.for(\"runner.middleware\");\n/** New brands for separated middleware kinds */\nexport const symbolTaskMiddleware: unique symbol = Symbol.for(\n \"runner.taskMiddleware\",\n);\nexport const symbolResourceMiddleware: unique symbol = Symbol.for(\n \"runner.resourceMiddleware\",\n);\nexport const symbolMiddlewareConfigured: unique symbol = Symbol.for(\n \"runner.middlewareConfigured\",\n);\n/** @internal Marks hook definitions (event listeners without middleware) */\nexport const symbolHook: unique symbol = Symbol.for(\"runner.hook\");\n// export const symbolMiddlewareEverywhereTasks: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalTasks\",\n// );\n// export const symbolMiddlewareEverywhereResources: unique symbol = Symbol.for(\n// \"runner.middlewareGlobalResources\",\n// );\n/** @internal Marks a tag definition */\nexport const symbolTag: unique symbol = Symbol.for(\"runner.tag\");\nexport const symbolTagConfigured: unique symbol = Symbol.for(\n \"runner.tagConfigured\",\n);\n\n/** @internal Marks an optional dependency wrapper */\nexport const symbolOptionalDependency: unique symbol = Symbol.for(\n \"runner.optionalDependency\",\n);\n\n/** @internal Path to aid anonymous id generation and error messages */\nexport const symbolFilePath: unique symbol = Symbol.for(\"runner.filePath\");\n/** @internal Marks disposable instances */\nexport const symbolDispose: unique symbol = Symbol.for(\"runner.dispose\");\n/** @internal Link to internal Store */\nexport const symbolStore: unique symbol = Symbol.for(\"runner.store\");\n\n/** @internal Brand used by index() resources */\nexport const symbolIndexResource: unique symbol = Symbol.for(\n \"runner.indexResource\",\n);\n","import { IOptionalDependency, IValidationSchema } from \"../defs\";\nimport { TagType } from \"./tag\";\nimport { IEventMeta } from \"./meta\";\nimport { CommonPayload, symbolEvent, symbolFilePath } from \"./utilities\";\n\nexport type EventHandlerType<T = any> = (\n event: IEventEmission<T>,\n) => any | Promise<any>;\n\n// Helper to keep tuple inference intact for multi-event hooks\nexport function onAnyOf<T extends readonly IEventDefinition<any>[]>(\n ...defs: T\n): T {\n return defs;\n}\n\n/**\n * Runtime guard that checks if an emission belongs to one of the given event defs.\n * Narrows payload type to the intersection of the provided events' payloads.\n */\nexport function isOneOf<TDefs extends readonly IEventDefinition<any>[]>(\n emission: IEventEmission<any>,\n defs: TDefs,\n): emission is IEventEmission<CommonPayload<TDefs>> {\n return defs.some((d) => d.id === emission.id);\n}\n\nexport interface IEventDefinition<TPayload = void> {\n id: string;\n meta?: IEventMeta;\n /**\n * Optional validation schema for runtime payload validation.\n * When provided, event payload will be validated when emitted.\n */\n payloadSchema?: IValidationSchema<TPayload>;\n tags?: TagType[];\n}\n\n/**\n * The definioten of the event.\n * This is different from the event emission.\n */\nexport interface IEvent<TPayload = any> extends IEventDefinition<TPayload> {\n id: string;\n /**\n * We use this event to discriminate between resources with just 'id' and 'events' as they collide. This is a workaround, should be redone using classes and instanceof.\n */\n [symbolEvent]: true;\n [symbolFilePath]: string;\n /** Return an optional dependency wrapper for this event. */\n optional: () => IOptionalDependency<IEvent<TPayload>>;\n tags: TagType[];\n}\n\n/**\n * This represents the object that is passed to event handlers\n */\nexport interface IEventEmission<TPayload = any> {\n /**\n * The ID of the event. This is the same as the event's ID.\n * This is useful for global event listeners.\n */\n id: string;\n /**\n * The data that the event carries. It can be anything.\n */\n data: TPayload;\n /**\n * The timestamp when the event was created.\n */\n timestamp: Date;\n /**\n * The source of the event. This can be useful for debugging.\n */\n source: string;\n /**\n * Metadata associated with the event definition.\n */\n meta: IEventMeta;\n /**\n * Stops propagation to remaining event listeners.\n */\n stopPropagation(): void;\n /**\n * Returns true if propagation has been stopped.\n */\n isPropagationStopped(): boolean;\n /**\n * The tags that the event carries.\n */\n tags: TagType[];\n}\n","import { defineTaskMiddleware, defineResource, defineTask } from \"../../define\";\nimport { LRUCache } from \"lru-cache\";\nimport { IResource, ITask } from \"../../defs\";\n\nexport interface ICacheInstance {\n set(key: string, value: any): void;\n get(key: string): any;\n clear(): void;\n}\n\n// Default cache factory task that can be overridden\nexport const cacheFactoryTask = defineTask({\n id: \"globals.tasks.cacheFactory\",\n run: async (options: any) => {\n return new LRUCache(options) as ICacheInstance;\n },\n});\n\ntype CacheResourceConfig = {\n defaultOptions?: any;\n};\n\ntype CacheMiddlewareConfig = {\n keyBuilder?: (taskId: string, input: any) => string;\n} & any;\n\nexport const cacheResource = defineResource({\n id: \"globals.resources.cache\",\n register: [cacheFactoryTask],\n dependencies: {\n cacheFactoryTask,\n },\n init: async (config: CacheResourceConfig, { cacheFactoryTask }) => {\n return {\n map: new Map<string, ICacheInstance>(),\n cacheFactoryTask,\n defaultOptions: {\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config.defaultOptions,\n },\n };\n },\n dispose: async (cache) => {\n for (const cacheInstance of cache.map.values()) {\n await cacheInstance.clear();\n }\n },\n});\n\nconst defaultKeyBuilder = (taskId: string, input: any) =>\n `${taskId}-${JSON.stringify(input)}`;\n\nexport const cacheMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.cache\",\n dependencies: { cache: cacheResource },\n async run({ task, next }, deps, config: CacheMiddlewareConfig) {\n const { cache } = deps;\n config = {\n keyBuilder: defaultKeyBuilder,\n ttl: 10 * 1000,\n max: 100, // Maximum number of items in cache\n ttlAutopurge: true, // Automatically purge expired items\n ...config,\n };\n\n const taskId = task!.definition.id;\n let cacheHolderForTask = cache.map.get(taskId)!;\n if (!cacheHolderForTask) {\n // Extract only LRUCache options, excluding keyBuilder\n const { keyBuilder, ...lruOptions } = config;\n const cacheOptions = {\n ...cache.defaultOptions,\n ...lruOptions,\n };\n\n // Use the factory task to create the cache instance\n cacheHolderForTask = await cache.cacheFactoryTask(cacheOptions);\n\n cache.map.set(taskId, cacheHolderForTask);\n }\n\n const key = config.keyBuilder!(taskId, task!.input);\n\n const cachedValue = await cacheHolderForTask.get(key);\n\n if (cachedValue) {\n return cachedValue;\n }\n\n const result = await next(task!.input);\n\n await cacheHolderForTask.set(key, result);\n\n return result;\n },\n});\n","export function getCallerFile(): string {\n const originalFunc = Error.prepareStackTrace;\n\n try {\n const err = new Error();\n let callerfile;\n let currentfile;\n\n // Safeguard prepareStackTrace\n Error.prepareStackTrace = (err, stack) => stack;\n\n const stack = err.stack as unknown as NodeJS.CallSite[];\n\n // Don't know how to test this.\n // if (stack.length < 3) {\n // // We need at least 3 frames: current function, its caller, and one above\n // return undefined;\n // }\n\n // Remove the first frame (getCallerFile itself)\n stack.shift();\n\n // Remove the second frame (the direct caller of getCallerFile)\n currentfile = stack.shift()?.getFileName?.();\n\n // The third frame (the caller above the immediate one)\n callerfile = stack.shift()?.getFileName?.();\n\n return callerfile as string; // Return the file name of the caller above\n } finally {\n Error.prepareStackTrace = originalFunc;\n }\n}\n","import {\n ITask,\n ITaskDefinition,\n DependencyMapType,\n ITaskMeta,\n TagType,\n symbolTask,\n symbolFilePath,\n symbolOptionalDependency,\n IOptionalDependency,\n TaskMiddlewareAttachmentType,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Define a task.\n * Generates a strongly-typed task object with id, dependencies,\n * middleware, and metadata.\n *\n * @typeParam Input - Input type accepted by the task's `run` function.\n * @typeParam Output - Promise type returned by the `run` function.\n * @typeParam Deps - Dependency map type this task requires.\n * @typeParam TOn - Event type or \"*\" this task listens to.\n * @typeParam TMeta - Arbitrary metadata type carried by the task.\n * @param taskConfig - The task definition config.\n * @returns A branded task definition usable by the runner.\n */\nexport function defineTask<\n Input = undefined,\n Output extends Promise<any> = any,\n Deps extends DependencyMapType = any,\n TMeta extends ITaskMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[],\n>(\n taskConfig: ITaskDefinition<Input, Output, Deps, TMeta, TTags, TMiddleware>,\n): ITask<Input, Output, Deps, TMeta, TTags, TMiddleware> {\n const filePath = getCallerFile();\n const id = taskConfig.id;\n return {\n [symbolTask]: true,\n [symbolFilePath]: filePath,\n id,\n dependencies: taskConfig.dependencies || ({} as Deps),\n middleware: taskConfig.middleware || ([] as unknown as TMiddleware),\n run: taskConfig.run,\n inputSchema: taskConfig.inputSchema,\n resultSchema: taskConfig.resultSchema,\n meta: taskConfig.meta || ({} as TMeta),\n tags: taskConfig.tags || ([] as unknown as TTags),\n // autorun,\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n ITask<Input, Output, Deps, TMeta, TTags, TMiddleware>\n >;\n },\n };\n}\n","import {\n DependencyMapType,\n IEventDefinition,\n ITaskMeta,\n IHook,\n IHookDefinition,\n symbolHook,\n symbolFilePath,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Define a hook (event listeners).\n * Same shape as task with mandatory `on` and without `middleware`.\n */\nexport function defineHook<\n D extends DependencyMapType = any,\n TOn extends\n | \"*\"\n | IEventDefinition<any>\n | readonly IEventDefinition<any>[] = any,\n TMeta extends ITaskMeta = any,\n>(hookDef: IHookDefinition<D, TOn, TMeta>): IHook<D, TOn, TMeta> {\n const filePath = getCallerFile();\n return {\n [symbolHook]: true,\n [symbolFilePath]: filePath,\n id: hookDef.id,\n dependencies: hookDef.dependencies || ({} as D),\n on: hookDef.on,\n order: hookDef.order,\n run: hookDef.run,\n meta: hookDef.meta || ({} as TMeta),\n tags: hookDef.tags || [],\n } as IHook<D, TOn, TMeta>;\n}\n","/**\n * Base error class for all BlueLibs Runner errors\n */\nexport class RuntimeError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"RuntimeError\";\n }\n}\n\n/**\n * Error thrown when attempting to register a component with a duplicate ID\n */\nexport class DuplicateRegistrationError extends RuntimeError {\n constructor(type: string, id: string) {\n super(\n `${type} \"${id.toString()}\" already registered. You might have used the same 'id' in two different components or you may have registered the same element twice.`,\n );\n this.name = \"DuplicateRegistrationError\";\n }\n}\n\n/**\n * Error thrown when a dependency is not found in the registry\n */\nexport class DependencyNotFoundError extends RuntimeError {\n constructor(key: string) {\n super(\n `Dependency ${key.toString()} not found. Did you forget to register it through a resource?`,\n );\n this.name = \"DependencyNotFoundError\";\n }\n}\n\n/**\n * Error thrown when an unknown item type is encountered\n */\nexport class UnknownItemTypeError extends RuntimeError {\n constructor(item: any) {\n super(\n `Unknown item type: ${item}. Please ensure you are not using different versions of '@bluelibs/runner'`,\n );\n this.name = \"UnknownItemTypeError\";\n }\n}\n\n/**\n * Error thrown whenever a requested context is not available.\n */\nexport class ContextError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ContextError\";\n }\n}\n\n/**\n * Error thrown when circular dependencies are detected\n */\nexport class CircularDependenciesError extends RuntimeError {\n constructor(cycles: string[]) {\n const cycleDetails = cycles.map((cycle) => ` • ${cycle}`).join(\"\\n\");\n const hasMiddleware = cycles.some((cycle) => cycle.includes(\"middleware\"));\n\n let guidance = \"\\n\\nTo resolve circular dependencies:\";\n guidance +=\n \"\\n • Consider refactoring to reduce coupling between components\";\n guidance += \"\\n • Extract shared dependencies into separate resources\";\n\n if (hasMiddleware) {\n guidance +=\n \"\\n • For middleware: you can filter out tasks/resources using everywhere(fn)\";\n guidance +=\n \"\\n • Consider using events for communication instead of direct dependencies\";\n }\n\n super(`Circular dependencies detected:\\n${cycleDetails}${guidance}`);\n this.name = \"CircularDependenciesError\";\n }\n}\n\n/**\n * Error thrown when an event is not found in the registry\n */\nexport class EventNotFoundError extends RuntimeError {\n constructor(id: string) {\n super(`Event \"${id.toString()}\" not found. Did you forget to register it?`);\n this.name = \"EventNotFoundError\";\n }\n}\n\n/**\n * Error thrown when a resource is not found in the store\n */\nexport class ResourceNotFoundError extends RuntimeError {\n constructor(id: string) {\n super(\n `Resource \"${id.toString()}\" not found. Did you forget to register it or are you using the correct id?`,\n );\n this.name = \"ResourceNotFoundError\";\n }\n}\n\nexport class MiddlewareNotRegisteredError extends RuntimeError {\n constructor(type: \"task\" | \"resource\", source: string, middlewareId: string) {\n super(\n `Middleware inside ${type} \"${source}\" depends on \"${middlewareId}\" but it's not registered. Did you forget to register it?`,\n );\n\n this.name = `MiddlewareNotRegisteredError: ${type} ${source} ${middlewareId}`;\n }\n}\n\n/**\n * Error thrown when a tag is not found in the registry\n */\nexport class TagNotFoundError extends RuntimeError {\n constructor(id: string) {\n super(\n `Tag \"${id}\" not registered. Did you forget to register it inside a resource?`,\n );\n this.name = \"TagNotRegisteredError\";\n }\n}\n\n/**\n * Error thrown when attempting to modify a locked component\n */\nexport class LockedError extends RuntimeError {\n constructor(what: string) {\n super(`Cannot modify the ${what.toString()} when it is locked.`);\n this.name = \"LockedError\";\n }\n}\n\n/**\n * Error thrown when attempting to initialize a store that's already initialized\n */\nexport class StoreAlreadyInitializedError extends RuntimeError {\n constructor() {\n super(\"Store already initialized. Cannot reinitialize.\");\n this.name = \"StoreAlreadyInitializedError\";\n }\n}\n\n/**\n * Error thrown when validation fails for task input, resource config, middleware config, or event payload\n */\nexport class ValidationError extends RuntimeError {\n constructor(type: string, id: string, originalError: Error | string) {\n const errorMessage =\n originalError instanceof Error\n ? originalError.message\n : String(originalError);\n super(`${type} validation failed for ${id.toString()}: ${errorMessage}`);\n this.name = \"ValidationError\";\n }\n}\n\n/**\n * Error thrown when an event emission cycle is detected\n */\nexport class EventCycleError extends RuntimeError {\n constructor(path: Array<{ id: string; source: string }>) {\n const chain = path.map((p) => `${p.id}←${p.source}`).join(\" -> \");\n super(\n `Event emission cycle detected:\\n ${chain}\\n\\nBreak the cycle by changing hook logic (avoid mutual emits) or gate with conditions/tags.`,\n );\n this.name = \"EventCycleError\";\n }\n}\n\n/**\n * Error thrown when a compile-time event emission cycle is detected\n */\nexport class EventEmissionCycleError extends RuntimeError {\n constructor(cycles: string[]) {\n const list = cycles.map((c) => ` • ${c}`).join(\"\\n\");\n super(\n `Event emission cycles detected between hooks and events:\\n${list}\\n\\nThis was detected at compile time (dry-run). Break the cycle by avoiding mutual emits between hooks or scoping hooks using tags.`,\n );\n this.name = \"EventEmissionCycleError\";\n }\n}\n\n/**\n * Error thrown when a platform function is not supported in the current environment.\n */\nexport class PlatformUnsupportedFunction extends RuntimeError {\n constructor(functionName: string) {\n super(\n `Platform function not supported in this environment: ${functionName}`,\n );\n this.name = \"PlatformUnsupportedFunction\";\n }\n}\n","import {\n IResource,\n IResourceDefinition,\n DependencyMapType,\n IResourceMeta,\n TagType,\n symbolResource,\n symbolFilePath,\n symbolIndexResource,\n symbolResourceWithConfig,\n symbolOptionalDependency,\n IOptionalDependency,\n ResourceMiddlewareAttachmentType,\n IResourceWithConfig,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineResource<\n TConfig = void,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TPrivate = any,\n TMeta extends IResourceMeta = any,\n TTags extends TagType[] = TagType[],\n TMiddleware extends ResourceMiddlewareAttachmentType[] = ResourceMiddlewareAttachmentType[],\n>(\n constConfig: IResourceDefinition<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n any,\n any,\n TMeta,\n TTags,\n TMiddleware\n >,\n): IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware> {\n /**\n * Define a resource.\n * Produces a strongly-typed resource with id, registration hooks,\n * and optional config schema.\n *\n * - If `id` is omitted, an anonymous, file-based id is generated (resource or index flavored).\n * - Provides `.with(config)` for config-bound registration with optional runtime validation.\n *\n * @typeParam TConfig - Configuration type accepted by the resource.\n * @typeParam TValue - Promise type resolved by the resource `init`.\n * @typeParam TDeps - Dependency map type this resource requires.\n * @typeParam TPrivate - Private context type exposed to middleware during init.\n * @typeParam TMeta - Arbitrary metadata type carried by the resource.\n * @param constConfig - The resource definition config.\n * @returns A branded resource definition usable by the runner.\n */\n // The symbolFilePath might already come from defineIndex() for example\n const filePath: string = constConfig[symbolFilePath] || getCallerFile();\n const isIndexResource = constConfig[symbolIndexResource] || false;\n const id = constConfig.id;\n\n return {\n [symbolResource]: true,\n [symbolFilePath]: filePath,\n [symbolIndexResource]: isIndexResource,\n id,\n dependencies: constConfig.dependencies,\n dispose: constConfig.dispose,\n register: constConfig.register || [],\n overrides: constConfig.overrides || [],\n init: constConfig.init,\n context: constConfig.context,\n configSchema: constConfig.configSchema,\n resultSchema: constConfig.resultSchema,\n tags: constConfig.tags || ([] as unknown as TTags),\n with: function (config: TConfig) {\n // Validate config with schema if provided (fail fast)\n if (constConfig.configSchema) {\n try {\n config = constConfig.configSchema.parse(config);\n } catch (error) {\n throw new ValidationError(\n \"Resource config\",\n id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n return {\n [symbolResourceWithConfig]: true,\n id: this.id,\n resource: this,\n config,\n } satisfies IResourceWithConfig<\n TConfig,\n TValue,\n TDeps,\n TPrivate,\n TMeta,\n TTags,\n TMiddleware\n >;\n },\n\n meta: (constConfig.meta || {}) as TMeta,\n middleware: constConfig.middleware || ([] as unknown as TMiddleware),\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<\n IResource<TConfig, TValue, TDeps, TPrivate, TMeta, TTags, TMiddleware>\n >;\n },\n };\n}\n","import {\n IEvent,\n IEventDefinition,\n symbolEvent,\n symbolFilePath,\n symbolOptionalDependency,\n IOptionalDependency,\n} from \"../defs\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineEvent<TPayload = void>(\n config: IEventDefinition<TPayload>,\n): IEvent<TPayload> {\n const callerFilePath = getCallerFile();\n const eventConfig = config;\n return {\n ...eventConfig,\n id: eventConfig.id,\n [symbolFilePath]: callerFilePath,\n [symbolEvent]: true, // This is a workaround\n tags: eventConfig.tags || [],\n optional() {\n return {\n inner: this,\n [symbolOptionalDependency]: true,\n } as IOptionalDependency<IEvent<TPayload>>;\n },\n };\n}\n","import {\n ITaskMiddleware,\n ITaskMiddlewareDefinition,\n DependencyMapType,\n ITask,\n symbolFilePath,\n symbolTaskMiddleware,\n symbolMiddlewareConfigured,\n ITaskMiddlewareConfigured,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineTaskMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: ITaskMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolTaskMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies:\n (middlewareDef.dependencies as TDependencies) || ({} as TDependencies),\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n throw new ValidationError(\n \"Middleware config\",\n obj.id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: {\n ...(obj.config as TConfig),\n ...config,\n },\n } satisfies ITaskMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>);\n },\n } as ITaskMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n IResourceMiddleware,\n IResourceMiddlewareDefinition,\n DependencyMapType,\n symbolFilePath,\n symbolResourceMiddleware,\n symbolMiddlewareConfigured,\n IResourceMiddlewareConfigured,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\nexport function defineResourceMiddleware<\n TConfig = any,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n TDependencies extends DependencyMapType = any,\n>(\n middlewareDef: IResourceMiddlewareDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >,\n): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n> {\n const filePath = getCallerFile();\n const base = {\n [symbolFilePath]: filePath,\n [symbolResourceMiddleware]: true,\n config: {} as TConfig,\n configSchema: middlewareDef.configSchema,\n ...middlewareDef,\n dependencies: middlewareDef.dependencies || ({} as TDependencies),\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n\n const wrap = (\n obj: IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > & {\n [symbolMiddlewareConfigured]?: true;\n },\n ): IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n > => {\n return {\n ...obj,\n with: (config: TConfig) => {\n if (obj.configSchema) {\n try {\n config = obj.configSchema.parse(config);\n } catch (error) {\n throw new ValidationError(\n \"Middleware config\",\n obj.id,\n error as Error,\n );\n }\n }\n return wrap({\n ...obj,\n [symbolMiddlewareConfigured]: true,\n config: {\n ...(obj.config as TConfig),\n ...config,\n },\n } satisfies IResourceMiddlewareConfigured<TConfig, TEnforceInputContract, TEnforceOutputContract, TDependencies>);\n },\n } as IResourceMiddleware<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract,\n TDependencies\n >;\n };\n\n return wrap(base);\n}\n","import {\n ITask,\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n IHook,\n} from \"../defs\";\n\n/**\n * Override helper that preserves the original `id` and returns the same type.\n * You can override any property except `id`. The override is shallow-merged over the base.\n *\n * @param base - The base definition to override.\n * @param patch - Properties to override (except `id`).\n * @returns A definition of the same kind with overrides applied.\n */\nexport function defineOverride<T extends ITask<any, any, any, any, any, any>>(\n base: T,\n patch: Omit<Partial<T>, \"id\"> & Pick<T, \"run\">,\n): T;\nexport function defineOverride<\n T extends IResource<any, any, any, any, any, any>,\n>(base: T, patch: Omit<Partial<T>, \"id\"> & Pick<T, \"init\">): T;\nexport function defineOverride<T extends ITaskMiddleware<any, any, any, any>>(\n base: T,\n patch: Omit<Partial<T>, \"id\">,\n): T;\nexport function defineOverride<\n T extends IResourceMiddleware<any, any, any, any>,\n>(base: T, patch: Omit<Partial<T>, \"id\"> & Pick<T, \"run\">): T;\nexport function defineOverride<T extends IHook<any, any, any>>(\n base: T,\n patch: Omit<Partial<T>, \"id\" | \"on\"> & Pick<T, \"run\">,\n): T;\nexport function defineOverride(\n base: ITask | IResource | ITaskMiddleware | IResourceMiddleware,\n patch: Record<string, unknown>,\n): ITask | IResource | ITaskMiddleware | IResourceMiddleware {\n const { id: _ignored, ...rest } = patch;\n // Ensure we never change the id, and merge overrides last\n return {\n ...(base as any),\n ...rest,\n id: (base as any).id,\n } as any;\n}\n","import {\n ITag,\n ITagDefinition,\n ITaggable,\n TagType,\n ITagConfigured,\n symbolTag,\n symbolFilePath,\n symbolTagConfigured,\n} from \"../defs\";\nimport { ValidationError } from \"../errors\";\nimport { getCallerFile } from \"../tools/getCallerFile\";\n\n/**\n * Create a tag definition.\n * - `.with(config)` to create configured instances\n * - `.extract(tags)` to extract this tag from a list of tags or a taggable's meta\n *\n * @typeParam TConfig - Configuration type carried by configured tags.\n * @typeParam TEnforceContract - Optional helper type to enforce a contract when tags are used.\n * @param definition - The tag definition (id).\n * @returns A tag object with helpers to configure and extract.\n */\nexport function defineTag<\n TConfig = void,\n TEnforceInputContract = void,\n TEnforceOutputContract = void,\n>(\n definition: ITagDefinition<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >,\n): ITag<TConfig, TEnforceInputContract, TEnforceOutputContract> {\n const id = definition.id;\n const filePath = getCallerFile();\n const foundation = {\n id,\n meta: definition.meta,\n config: definition.config,\n configSchema: definition.configSchema,\n } as ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n\n return {\n ...foundation,\n [symbolTag]: true,\n [symbolFilePath]: filePath,\n /**\n * Specify custom config for this tag which extends the default one if exists\n * @param tagConfig\n * @returns\n */\n with(tagConfig: TConfig) {\n if (definition.configSchema) {\n try {\n tagConfig = definition.configSchema.parse(tagConfig);\n } catch (error) {\n throw new ValidationError(\"Tag config\", this.id, error as Error);\n }\n }\n let config: TConfig;\n if (typeof tagConfig === \"object\") {\n if (typeof foundation.config === \"object\") {\n config = {\n ...foundation.config,\n ...tagConfig,\n };\n } else {\n config = tagConfig;\n }\n } else {\n config = tagConfig;\n }\n return {\n ...foundation,\n [symbolTagConfigured]: true,\n config,\n } as ITagConfigured<\n TConfig,\n TEnforceInputContract,\n TEnforceOutputContract\n >;\n },\n /**\n * Checks if the tag exists in a taggable or a list of tags.\n * @param target\n * @returns\n */\n exists(target: ITaggable | TagType[]): boolean {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags;\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return true;\n }\n }\n\n return false;\n },\n /**\n * Function which serves 2 purposes, verifying if the task exists, and retrieving its config\n * @param target\n * @returns\n */\n extract(target: ITaggable | TagType[]): TConfig | undefined {\n let currentTags: TagType[] = [];\n if (Array.isArray(target)) {\n currentTags = target;\n } else {\n currentTags = target.tags || [];\n }\n\n for (const candidate of currentTags) {\n if (candidate.id === id) {\n return candidate.config as TConfig;\n }\n }\n\n return;\n },\n } satisfies ITag<TConfig, TEnforceInputContract, TEnforceOutputContract>;\n}\n","/**\n * Type guard and utility functions for checking definition types.\n */\nimport {\n ITask,\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n symbolEvent,\n symbolTask,\n symbolHook,\n symbolResourceWithConfig,\n symbolResource,\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n IHook,\n IOptionalDependency,\n symbolOptionalDependency,\n symbolTag,\n ITag,\n} from \"../defs\";\n\n/**\n * Type guard: checks if a definition is a Task.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Task.\n */\nexport function isTask(definition: any): definition is ITask {\n return definition && definition[symbolTask];\n}\n\n/**\n * Type guard: checks if a definition is a Resource.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Resource.\n */\nexport function isResource(definition: any): definition is IResource {\n return definition && definition[symbolResource];\n}\n\n/**\n * Type guard: checks if a definition is a Resource that carries config via `.with()`.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded ResourceWithConfig.\n */\nexport function isResourceWithConfig(\n definition: any,\n): definition is IResourceWithConfig {\n return definition && definition[symbolResourceWithConfig];\n}\n\n/**\n * Type guard: checks if a definition is an Event.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Event.\n */\nexport function isEvent(definition: any): definition is IEvent {\n return definition && definition[symbolEvent];\n}\n\n/** Type guard: checks if a definition is a Hook. */\nexport function isHook(definition: any): definition is IHook {\n return definition && definition[symbolHook];\n}\n\n/**\n * Type guard: checks if a definition is a Middleware.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Middleware.\n */\nexport function isTaskMiddleware(\n definition: any,\n): definition is ITaskMiddleware {\n return definition && definition[symbolTaskMiddleware];\n}\n\nexport function isResourceMiddleware(\n definition: any,\n): definition is IResourceMiddleware {\n return definition && definition[symbolResourceMiddleware];\n}\n\n/**\n * Type guard: checks if a definition is a Tag.\n * @param definition - Any value to test.\n * @returns True when `definition` is a branded Tag.\n */\nexport function isTag(definition: any): definition is ITag {\n return definition && definition[symbolTag];\n}\n\n/** Type guard: checks if a definition is an Optional Dependency wrapper. */\nexport function isOptional(\n definition: any,\n): definition is IOptionalDependency<any> {\n return definition && definition[symbolOptionalDependency];\n}","/**\n * Unified Platform Adapter\n * Single adapter that switches behavior based on detected environment.\n */\n\nimport type { IPlatformAdapter, IAsyncLocalStorage } from \"./types\";\nimport { PlatformUnsupportedFunction } from \"../errors\";\n\nexport type PlatformEnv = \"node\" | \"browser\" | \"universal\";\n\nexport function detectEnvironment(): PlatformEnv {\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n return \"browser\";\n }\n if (\n typeof process !== \"undefined\" &&\n (process as any).versions &&\n (process as any).versions.node\n ) {\n return \"node\";\n }\n return \"universal\";\n}\n\nexport class PlatformAdapter implements IPlatformAdapter {\n readonly env: PlatformEnv;\n private isInitialized = false;\n private nodeALSClass: any | null = null;\n\n constructor(env?: PlatformEnv) {\n this.env = env ?? detectEnvironment();\n }\n\n async init() {\n if (this.env === \"node\") {\n this.nodeALSClass = (await import(\"node:async_hooks\")).AsyncLocalStorage;\n }\n }\n\n onUncaughtException(handler: (error: any) => void): () => void {\n switch (this.env) {\n case \"node\": {\n process.on(\"uncaughtException\", handler as any);\n return () => process.off(\"uncaughtException\", handler as any);\n }\n case \"browser\": {\n const target: any = (globalThis as any).window ?? globalThis;\n const h = (e: any) => handler(e?.error ?? e);\n target.addEventListener?.(\"error\", h);\n return () => target.removeEventListener?.(\"error\", h);\n }\n default: {\n const tgt: any = globalThis as any;\n if (tgt.addEventListener) {\n const h = (e: any) => handler(e?.error ?? e);\n tgt.addEventListener(\"error\", h);\n return () => tgt.removeEventListener(\"error\", h);\n }\n return () => {};\n }\n }\n }\n\n onUnhandledRejection(handler: (reason: any) => void): () => void {\n switch (this.env) {\n case \"node\": {\n const h = (reason: any) => handler(reason);\n process.on(\"unhandledRejection\", h);\n return () => process.off(\"unhandledRejection\", h);\n }\n case \"browser\": {\n const target: any = (globalThis as any).window;\n const wrap = (e: any) => handler(e.reason);\n target.addEventListener?.(\"unhandledrejection\", wrap);\n return () => target.removeEventListener?.(\"unhandledrejection\", wrap);\n }\n default: {\n const tgt: any = globalThis as any;\n if (tgt.addEventListener) {\n const wrap = (e: any) => handler(e.reason ?? e);\n tgt.addEventListener(\"unhandledrejection\", wrap);\n return () => tgt.removeEventListener(\"unhandledrejection\", wrap);\n }\n return () => {};\n }\n }\n }\n\n onShutdownSignal(handler: () => void): () => void {\n switch (this.env) {\n case \"node\": {\n process.on(\"SIGINT\", handler);\n process.on(\"SIGTERM\", handler);\n return () => {\n process.off(\"SIGINT\", handler);\n process.off(\"SIGTERM\", handler);\n };\n }\n case \"browser\": {\n const win: any = window;\n const doc: any = document;\n win.addEventListener?.(\"beforeunload\", handler);\n return () => {\n win.removeEventListener?.(\"beforeunload\", handler);\n };\n }\n default: {\n const tgt: any = globalThis as any;\n const cleanup: Array<() => void> = [];\n if (tgt.addEventListener) {\n tgt.addEventListener(\"beforeunload\", handler);\n cleanup.push(() =>\n tgt.removeEventListener?.(\"beforeunload\", handler),\n );\n const vis = () => {\n const doc: any = (globalThis as any).document;\n if (doc && doc.visibilityState === \"hidden\") handler();\n };\n tgt.addEventListener(\"visibilitychange\", vis);\n cleanup.push(() =>\n tgt.removeEventListener?.(\"visibilitychange\", vis),\n );\n }\n if (typeof process !== \"undefined\" && (process as any).on) {\n (process as any).on(\"SIGINT\", handler);\n (process as any).on(\"SIGTERM\", handler);\n cleanup.push(() => {\n (process as any).off?.(\"SIGINT\", handler);\n (process as any).off?.(\"SIGTERM\", handler);\n });\n }\n return () => cleanup.forEach((fn) => fn());\n }\n }\n }\n\n exit(code: number): void {\n switch (this.env) {\n case \"node\":\n process.exit(code);\n return;\n default:\n throw new PlatformUnsupportedFunction(\"exit\");\n }\n }\n\n getEnv(key: string): string | undefined {\n switch (this.env) {\n case \"node\":\n return process.env[key];\n default: {\n const g: any = globalThis as any;\n if (g.__ENV__ && typeof g.__ENV__ === \"object\") return g.__ENV__[key];\n if (typeof process !== \"undefined\" && (process as any).env)\n return (process as any).env[key];\n if (g.env && typeof g.env === \"object\") return g.env[key];\n return undefined;\n }\n }\n }\n\n hasAsyncLocalStorage(): boolean {\n switch (this.env) {\n case \"node\":\n return true; // We'll try native, else polyfill\n case \"browser\":\n default:\n return false; // Keep behavior strict for universal\n }\n }\n\n createAsyncLocalStorage<T>(): IAsyncLocalStorage<T> {\n switch (this.env) {\n case \"node\": {\n let instance: IAsyncLocalStorage<T> | undefined;\n const get = (): IAsyncLocalStorage<T> => {\n if (!instance) {\n if (!this.nodeALSClass) {\n throw new PlatformUnsupportedFunction(\n \"createAsyncLocalStorage: Platform not initialized\",\n );\n }\n instance = new this.nodeALSClass();\n }\n\n return instance!;\n };\n\n return {\n getStore: () => get().getStore(),\n run: (store: T, callback: () => any) => get().run(store, callback),\n };\n }\n case \"browser\":\n default:\n return {\n getStore: () => {\n throw new PlatformUnsupportedFunction(\"createAsyncLocalStorage\");\n },\n run: () => {\n throw new PlatformUnsupportedFunction(\"createAsyncLocalStorage\");\n },\n };\n }\n }\n\n // timers\n setTimeout = globalThis.setTimeout;\n clearTimeout = globalThis.clearTimeout;\n}\n\n// Singleton management\nlet platformInstance: IPlatformAdapter | null = null;\nlet detectedEnvironment: PlatformEnv | null = null;\n\nexport function getPlatform(): IPlatformAdapter {\n if (!platformInstance) {\n const env = detectEnvironment();\n detectedEnvironment = env;\n platformInstance = new PlatformAdapter(env);\n }\n return platformInstance;\n}\n\nexport function setPlatform(adapter: IPlatformAdapter): void {\n platformInstance = adapter;\n detectedEnvironment = \"manual\" as any;\n}\n\nexport function resetPlatform(): void {\n platformInstance = null;\n detectedEnvironment = null;\n}\n\nexport function getDetectedEnvironment(): PlatformEnv {\n if (!detectedEnvironment) detectedEnvironment = detectEnvironment();\n return detectedEnvironment;\n}\n\nexport function isNode(): boolean {\n return getDetectedEnvironment() === \"node\";\n}\n\nexport function isBrowser(): boolean {\n return getDetectedEnvironment() === \"browser\";\n}\n\nexport function isUniversal(): boolean {\n return getDetectedEnvironment() === \"universal\";\n}\n\n// Re-export types\nexport type { IPlatformAdapter, IAsyncLocalStorage } from \"./types\";\n","import { Context, ContextError } from \"../../context\";\nimport { defineTaskMiddleware } from \"../../define\";\n\ntype RequireContextMiddlewareConfig = {\n context: Context<any>;\n};\n\nexport const requireContextTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.requireContext\",\n async run({ task, next }, deps, config: RequireContextMiddlewareConfig) {\n if (!config.context) {\n throw new Error(\n \"Context not available. Did you forget to pass 'context' to the middleware?\",\n );\n }\n\n // This will throw if the context is not available\n const ctx = config.context.use();\n\n return next(task?.input);\n },\n});\n","import { getPlatform } from \"./platform\";\nimport { ITaskMiddlewareConfigured } from \"./defs\";\nimport { requireContextTaskMiddleware } from \"./globals/middleware/requireContext.middleware\";\nimport {\n ContextError,\n PlatformUnsupportedFunction,\n RuntimeError,\n} from \"./errors\";\n\nexport { ContextError };\n/**\n * The generic Context object returned by `createContext`.\n */\nexport interface Context<T> {\n /** unique symbol used as key in the AsyncLocalStorage map */\n readonly id: symbol;\n /** Retrieve the current context value or throw */\n use(): T;\n /**\n * Provide a value for this context during the lifetime of `fn()`\n */\n provide<R>(value: T, fn: () => Promise<R> | R): Promise<R> | R;\n /**\n * Generates a middleware that guarantees the context exists (and optionally\n * enforces that certain keys are present on the context object).\n */\n require<K extends keyof T = never>(\n keys?: K[],\n ): ITaskMiddlewareConfigured<{ context: Context<T> }>;\n}\n\n// The internal storage maps Context identifiers (symbols) to their values\nconst platform = getPlatform();\nexport const storage = platform.createAsyncLocalStorage<Map<symbol, unknown>>();\n\n/** Returns the currently active store or undefined. */\nfunction getCurrentStore(): Map<symbol, unknown> | undefined {\n return storage.getStore();\n}\n\n/**\n * Create a new typed Context. The result contains helpers similar to React’s\n * Context API but adapted for async usage in Runner.\n */\nexport function createContext<T>(name: string = \"runner.context\"): Context<T> {\n if (!platform.hasAsyncLocalStorage()) {\n throw new PlatformUnsupportedFunction(\n `createAsyncLocalStorage: Cannot create context ${name}: no async storage available in this environment`,\n );\n }\n const ctxId = Symbol(name);\n\n const use = (): T => {\n const store = getCurrentStore();\n if (!store || !store.has(ctxId)) {\n throw new ContextError(\n `Context not available for symbol ${ctxId.toString()}`,\n );\n }\n return store.get(ctxId) as T;\n };\n\n const provide = <R>(value: T, fn: () => Promise<R> | R): Promise<R> | R => {\n const currentStore = getCurrentStore();\n const map = currentStore\n ? new Map(currentStore)\n : new Map<symbol, unknown>();\n map.set(ctxId, value);\n\n return storage.run(map, fn as any);\n };\n\n const api = {\n id: ctxId,\n use,\n provide,\n require(): ITaskMiddlewareConfigured {\n return requireContextTaskMiddleware.with({ context: api as Context<T> });\n },\n };\n\n return api;\n}\n","import { defineTag } from \"../../../define\";\nimport { DebugFriendlyConfig } from \"./types\";\n\nexport const debugTag = defineTag<DebugFriendlyConfig>({\n id: \"globals.tags.debug\",\n meta: {\n title: \"Debug\",\n description:\n \"Debug-specific tags. Used for filtering out noise when you're focusing on your application.\",\n },\n});\n","import { defineTag } from \"../define\";\nimport { DebugConfig } from \"./resources/debug\";\nimport { debugTag } from \"./resources/debug/debug.tag\";\n\nexport const globalTags = {\n system: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.system\",\n meta: {\n title: \"System\",\n description:\n \"System-wide tags. Used for filtering out noise when you're focusing on your application.\",\n },\n }),\n excludeFromGlobalHooks: defineTag<{\n metadata?: Record<string, any>;\n }>({\n id: \"globals.tags.excludeFromGlobalHooks\",\n meta: {\n title: \"Exclude Event From Global Hooks\",\n description:\n \"Marks events that should not be dispatched to global hooks (on: '*').\",\n },\n }),\n debug: debugTag,\n};\n","import { defineEvent } from \"../define\";\nimport {\n IEvent,\n IResource,\n IHook,\n ITaskMiddleware,\n IResourceMiddleware,\n} from \"../defs\";\nimport { globalTags } from \"./globalTags\";\n\nconst systemTag = globalTags.system;\n\nexport const globalEvents = {\n // Minimal core events retained if any (custom events can still be defined by users)\n /**\n * Emitted when the system is fully initialized and ready for work.\n */\n ready: defineEvent<{\n root: IResource<any, any, any, any>;\n }>({\n id: \"globals.events.ready\",\n meta: {\n title: \"System Ready\",\n description:\n \"Emitted when the system has completed boot and is ready for listeners to start work.\" +\n \"This runs right before returning value for run().\",\n },\n }),\n /**\n * Central error boundary event for any thrown error across the runner.\n */\n unhandledError: defineEvent<{\n kind: \"task\" | \"middleware\" | \"resourceInit\" | \"hook\" | \"process\" | \"run\";\n error: any;\n }>({\n id: \"globals.events.unhandledError\",\n meta: {\n title: \"Unhandled Error\",\n description:\n \"Central error boundary event for any thrown error across the runner.\",\n },\n tags: [systemTag, globalTags.excludeFromGlobalHooks],\n }),\n} as const;\n\nexport const globalEventsArray: IEvent<any>[] = [globalEvents.ready];\n","import { getPlatform } from \"../platform\";\n\n/**\n * Cooperative task queue.\n * • Tasks run one‑after‑another (FIFO ordering).\n * • Dead‑lock detection prevents nesting.\n * • dispose() drains or cancels outstanding tasks, then rejects new ones.\n */\nexport class Queue {\n private tail: Promise<unknown> = Promise.resolve();\n private disposed = false;\n private abortController = new AbortController();\n\n // true while inside a queued task → helps detect \"queue in queue\"\n private readonly executionContext =\n getPlatform().createAsyncLocalStorage<boolean>();\n\n private readonly hasAsyncLocalStorage = getPlatform().hasAsyncLocalStorage();\n\n /**\n * Schedule an asynchronous task.\n * @param task – receives an AbortSignal so it can cancel early if desired.\n */\n public run<T>(task: (signal: AbortSignal) => Promise<T>): Promise<T> {\n // 1. refuse new work if we've disposed\n if (this.disposed) {\n return Promise.reject(new Error(\"Queue has been disposed\"));\n }\n\n // 2. detect dead‑locks (a queued task adding another queued task)\n if (this.hasAsyncLocalStorage && this.executionContext.getStore()) {\n return Promise.reject(\n new Error(\n \"Dead‑lock detected: a queued task attempted to queue another task\",\n ),\n );\n }\n\n const { signal } = this.abortController;\n\n // 3. chain task after the current tail\n const result = this.tail.then(() =>\n this.hasAsyncLocalStorage\n ? this.executionContext.run(true, () => task(signal))\n : task(signal),\n );\n\n // 4. preserve the chain even if the task rejects (swallow internally)\n this.tail = result.catch(() => {});\n\n return result;\n }\n\n /**\n * Disposes the queue.\n * @param options.cancel – if true, broadcasts AbortSignal to running task.\n * default: false (waits for tasks to finish).\n */\n public async dispose(options: { cancel?: boolean } = {}): Promise<void> {\n if (this.disposed) return;\n\n this.disposed = true;\n\n if (options.cancel) {\n this.abortController.abort(); // notify cooperative tasks\n }\n\n // wait for everything already chained to settle\n await this.tail.catch(() => {});\n }\n}\n","import { defineResource } from \"../../define\";\nimport { Queue } from \"../../models/Queue\";\n\nexport const queueResource = defineResource({\n id: \"globals.resources.queue\",\n context: () => ({\n map: new Map<string, Queue>(),\n }),\n init: async (_, deps, context) => {\n const map = context.map;\n\n return {\n map,\n run: <T>(\n id: string,\n task: (signal: AbortSignal) => Promise<T>,\n ): Promise<T> => {\n if (!map.has(id)) {\n map.set(id, new Queue());\n }\n\n return map.get(id)!.run(task);\n },\n };\n },\n dispose: async (value, _, deps, context) => {\n context.map.forEach((queue) => queue.dispose());\n },\n meta: {\n title: \"Queue Map\",\n description:\n \"A global map that can be used to store and retrieve queues. You can run exclusive tasks based on using an id. queue.run(id, task) will run the task in the queue with the given id. If the queue does not exist, it will be created.\",\n },\n});\n","import { defineResource } from \"../define\";\nimport { EventManager } from \"../models/EventManager\";\nimport { Logger } from \"../models/Logger\";\nimport { Store } from \"../models/Store\";\nimport { TaskRunner } from \"../models/TaskRunner\";\nimport { cacheResource } from \"./middleware/cache.middleware\";\nimport { queueResource } from \"./resources/queue.resource\";\nimport { globalTags } from \"./globalTags\";\nimport { MiddlewareManager } from \"../models/MiddlewareManager\";\n\nconst systemTag = globalTags.system;\n\nconst store = defineResource<void, Promise<Store>>({\n id: \"globals.resources.store\",\n meta: {\n title: \"Store\",\n description:\n \"A global store that can be used to store and retrieve tasks, resources, events and middleware\",\n },\n tags: [systemTag],\n});\n\nexport const globalResources = {\n store,\n middlewareManager: defineResource<void, Promise<MiddlewareManager>>({\n id: \"globals.resources.middlewareManager\",\n meta: {\n title: \"Middleware Manager\",\n description: \"Manages all middleware and middleware interceptors.\",\n },\n tags: [systemTag],\n }),\n eventManager: defineResource<void, Promise<EventManager>>({\n id: \"globals.resources.eventManager\",\n meta: {\n title: \"Event Manager\",\n description:\n \"Manages all events and event listeners. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n }),\n taskRunner: defineResource<void, Promise<TaskRunner>>({\n id: \"globals.resources.taskRunner\",\n meta: {\n title: \"Task Runner\",\n description:\n \"Manages the execution of tasks and task dependencies. This is meant to be used internally for most use-cases.\",\n },\n tags: [systemTag],\n }),\n logger: defineResource<void, Promise<Logger>>({\n id: \"globals.resources.logger\",\n meta: {\n // We skip system tag for logger because it's part of the utility toolkit.\n title: \"Logger\",\n description:\n \"Logs all events and errors. This is meant to be used internally for most use-cases. Emits a globals.log event for each log.\",\n },\n tags: [systemTag],\n }),\n cache: cacheResource,\n queue: queueResource,\n};\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\n\n/**\n * Configuration options for the retry middleware\n */\nexport interface RetryMiddlewareConfig {\n /**\n * Maximum number of retry attempts (default: 3)\n */\n retries?: number;\n /**\n * Callback to determine if retry should stop based on error\n * @default () => false (retry all errors)\n */\n stopRetryIf?: (error: Error) => boolean;\n /**\n * Custom delay strategy function\n * @default Exponential backoff starting at 100ms\n */\n delayStrategy?: (attempt: number, error: Error) => number;\n}\n\nexport const retryTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.retry.task\",\n async run({ task, next }, deps, config: RetryMiddlewareConfig) {\n const input = task?.input;\n let attempts = 0;\n\n // Set defaults for required parameters\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n\n // Calculate delay using custom strategy or default exponential backoff\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n\n attempts++;\n }\n }\n },\n});\n\nexport const retryResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.retry.resource\",\n async run({ resource, next }, deps, config: RetryMiddlewareConfig) {\n const input = resource?.config;\n let attempts = 0;\n const maxRetries = config.retries ?? 3;\n const shouldStop = config.stopRetryIf ?? (() => false);\n while (true) {\n try {\n return await next(input);\n } catch (error) {\n const err = error as Error;\n if (shouldStop(err) || attempts >= maxRetries) {\n throw error;\n }\n const delay = config.delayStrategy\n ? config.delayStrategy(attempts, err)\n : 100 * Math.pow(2, attempts);\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n attempts++;\n }\n }\n },\n});\n","import { defineTaskMiddleware, defineResourceMiddleware } from \"../../define\";\n\nexport interface TimeoutMiddlewareConfig {\n /**\n * Maximum time in milliseconds before the wrapped operation is aborted\n * and a timeout error is thrown. Defaults to 5000ms.\n */\n ttl: number;\n}\n\nexport const timeoutTaskMiddleware = defineTaskMiddleware({\n id: \"globals.middleware.timeout.task\",\n async run({ task, next }, _deps, config: TimeoutMiddlewareConfig) {\n const input = task?.input;\n\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n\n // Fast-path: immediate timeout\n if (ttl === 0) {\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n throw error;\n }\n\n const controller = new AbortController();\n\n // Create a timeout promise that rejects when aborted\n const timeoutPromise = new Promise((_, reject) => {\n const timeoutId = setTimeout(() => {\n controller.abort();\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n reject(error);\n }, ttl);\n\n // Clean up timeout if abort signal fires for other reasons\n controller.signal.addEventListener(\"abort\", () => {\n clearTimeout(timeoutId);\n });\n });\n\n // Race between the actual operation and the timeout\n return Promise.race([next(input as any), timeoutPromise]);\n },\n});\n\nexport const timeoutResourceMiddleware = defineResourceMiddleware({\n id: \"globals.middleware.timeout.resource\",\n async run({ resource, next }, _deps, config: TimeoutMiddlewareConfig) {\n const input = resource?.config;\n const ttl = Math.max(0, config.ttl);\n const message = `Operation timed out after ${ttl}ms`;\n if (ttl === 0) {\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n throw error;\n }\n const controller = new AbortController();\n const timeoutPromise = new Promise((_, reject) => {\n const timeoutId = setTimeout(() => {\n controller.abort();\n const error = new Error(message);\n (error as any).name = \"TimeoutError\";\n reject(error);\n }, ttl);\n controller.signal.addEventListener(\"abort\", () => {\n clearTimeout(timeoutId);\n });\n });\n return Promise.race([next(input as any), timeoutPromise]);\n },\n});\n","import { Context, ContextError } from \"../context\";\nimport { cacheMiddleware } from \"./middleware/cache.middleware\";\nimport { requireContextTaskMiddleware } from \"./middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n} from \"./middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n} from \"./middleware/timeout.middleware\";\n\n/**\n * Global middlewares\n */\nexport const globalMiddlewares = {\n requireContext: requireContextTaskMiddleware,\n task: {\n requireContext: requireContextTaskMiddleware,\n cache: cacheMiddleware,\n // common with resources\n retry: retryTaskMiddleware,\n timeout: timeoutTaskMiddleware,\n },\n resource: {\n retry: retryResourceMiddleware,\n timeout: timeoutResourceMiddleware,\n },\n};\n","import { DependencyMapType, ITask, IHook, IEventEmission } from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport { globalEvents } from \"../globals/globalEvents\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\n\nexport class TaskRunner {\n protected readonly runnerStore = new Map<\n string | symbol,\n (input: any) => Promise<any>\n >();\n\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n // Use the same MiddlewareManager instance from the Store so that\n // any interceptors registered via resources (like debug) affect task runs.\n this.middlewareManager = this.store.getMiddlewareManager();\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n * @param task the task to be run\n * @param input the input to be passed to the task\n */\n public async run<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(\n task: ITask<TInput, TOutput, TDeps>,\n input?: TInput,\n ): Promise<TOutput | undefined> {\n let runner = this.runnerStore.get(task.id);\n if (!runner) {\n runner = this.createRunnerWithMiddleware<TInput, TOutput, TDeps>(task);\n\n this.runnerStore.set(task.id, runner);\n }\n\n try {\n return await runner(input);\n } catch (error) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"task\",\n source: task.id,\n });\n } catch (_) {}\n throw error;\n }\n }\n\n /**\n * Creates the function with the chain of middleware.\n * @param task\n * @param input\n * @param taskDependencies\n * @returns\n */\n protected createRunnerWithMiddleware<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n return this.middlewareManager.composeTaskRunner(task);\n }\n}\n","import {\n DependencyMapType,\n ITask,\n IResource,\n ITaskMiddleware,\n ResourceMiddlewareAttachmentType,\n TagType,\n} from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport {\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n} from \"../types/storeTypes\";\nimport { Logger } from \"./Logger\";\nimport { globalEvents } from \"../globals/globalEvents\";\nimport { ValidationError, LockedError } from \"../errors\";\nimport * as utils from \"../define\";\nimport { symbol } from \"zod\";\nimport { ITaskMiddlewareExecutionInput } from \"../types/taskMiddleware\";\nimport {\n IResourceMiddlewareExecutionInput,\n IResourceMiddleware,\n} from \"../types/resourceMiddleware\";\nimport {\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n} from \"../types/symbols\";\nimport { isResourceMiddleware, isTaskMiddleware } from \"../define\";\n\n/**\n * Interceptor for task middleware execution\n */\nexport type TaskMiddlewareInterceptor = (\n next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>,\n input: ITaskMiddlewareExecutionInput<any>,\n) => Promise<any>;\n\n/**\n * Interceptor for resource middleware execution\n */\nexport type ResourceMiddlewareInterceptor = (\n next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>,\n input: IResourceMiddlewareExecutionInput<any>,\n) => Promise<any>;\n\n/**\n * Centralizes middleware composition and execution for both tasks and resources.\n * Keeps observability emissions and unhandled error routing consistent.\n */\nexport class MiddlewareManager {\n // Interceptor storage\n private taskMiddlewareInterceptors: TaskMiddlewareInterceptor[] = [];\n private resourceMiddlewareInterceptors: ResourceMiddlewareInterceptor[] = [];\n\n // Per-middleware interceptor storage\n private perMiddlewareInterceptors: Map<string, TaskMiddlewareInterceptor[]> =\n new Map();\n private perResourceMiddlewareInterceptors: Map<\n string,\n ResourceMiddlewareInterceptor[]\n > = new Map();\n\n // Locking mechanism to prevent modifications after initialization\n #isLocked = false;\n\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {}\n\n /**\n * Gets the current lock status of the MiddlewareManager\n */\n get isLocked() {\n return this.#isLocked;\n }\n\n /**\n * Locks the MiddlewareManager, preventing any further modifications to interceptors\n */\n lock() {\n this.#isLocked = true;\n }\n\n /**\n * Throws an error if the MiddlewareManager is locked\n */\n private checkLock() {\n if (this.#isLocked) {\n throw new LockedError(\"MiddlewareManager\");\n }\n }\n\n /**\n * Adds an interceptor for task or resource middleware execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent middleware execution\n *\n * @param kind - The type of middleware to intercept (\"task\" or \"resource\")\n * @param interceptor - The interceptor function to add\n */\n intercept(\n kind: \"task\" | \"resource\",\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n\n if (kind === \"task\") {\n this.taskMiddlewareInterceptors.push(\n interceptor as TaskMiddlewareInterceptor,\n );\n } else {\n this.resourceMiddlewareInterceptors.push(\n interceptor as ResourceMiddlewareInterceptor,\n );\n }\n }\n\n /**\n * Adds an interceptor for a specific middleware instance with better type safety\n * This method automatically determines the type and provides type-safe access\n *\n * @param middleware - The middleware instance to intercept\n * @param interceptor - The interceptor function with proper typing\n */\n interceptMiddleware(\n middleware:\n | ITaskMiddleware<any, any, any, any>\n | IResourceMiddleware<any, any, any, any>,\n interceptor: TaskMiddlewareInterceptor | ResourceMiddlewareInterceptor,\n ): void {\n this.checkLock();\n\n // Determine the type based on the middleware's symbol\n if (isTaskMiddleware(middleware)) {\n // Store per-middleware interceptor instead of adding to global pool\n if (!this.perMiddlewareInterceptors.has(middleware.id)) {\n this.perMiddlewareInterceptors.set(middleware.id, []);\n }\n this.perMiddlewareInterceptors\n .get(middleware.id)!\n .push(interceptor as TaskMiddlewareInterceptor);\n } else if (isResourceMiddleware(middleware)) {\n // Store per-middleware interceptor instead of adding to global pool\n if (!this.perResourceMiddlewareInterceptors.has(middleware.id)) {\n this.perResourceMiddlewareInterceptors.set(middleware.id, []);\n }\n this.perResourceMiddlewareInterceptors\n .get(middleware.id)!\n .push(interceptor as ResourceMiddlewareInterceptor);\n } else {\n throw new Error(\"Unknown middleware type\");\n }\n }\n\n /**\n * Wrap a middleware with its specific interceptors in onion style\n */\n private wrapMiddlewareWithInterceptors<TInput, TOutput extends Promise<any>>(\n middleware: ITaskMiddleware<any, any, any, any>,\n middlewareRunner: (input: TInput) => Promise<TOutput>,\n interceptors: TaskMiddlewareInterceptor[],\n ): (input: TInput) => Promise<TOutput> {\n if (!interceptors.length) {\n return middlewareRunner;\n }\n\n // Apply interceptors in reverse order (last added runs first)\n const reversedInterceptors = [...interceptors].reverse();\n\n let wrapped = middlewareRunner;\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = async (input: TInput) => {\n // Create execution input for the interceptor\n const executionInput: ITaskMiddlewareExecutionInput<any> = {\n task: {\n definition: null as any, // Will be filled by middleware.run\n input: input,\n },\n next: nextFunction as any,\n };\n\n // Provide a next function that accepts an execution input and forwards the raw input\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<any>,\n ): Promise<any> => {\n return nextFunction(i.task.input);\n };\n\n return interceptor(wrappedNext as any, executionInput);\n };\n }\n\n return wrapped;\n }\n\n /**\n * Wrap a resource middleware with its specific interceptors in onion style\n */\n private wrapResourceMiddlewareWithInterceptors<C, V extends Promise<any>>(\n middleware: IResourceMiddleware<any, any, any, any>,\n middlewareRunner: (config: C) => Promise<V>,\n interceptors: ResourceMiddlewareInterceptor[],\n ): (config: C) => Promise<V> {\n if (!interceptors.length) {\n return middlewareRunner;\n }\n\n // Apply interceptors in reverse order (last added runs first)\n const reversedInterceptors = [...interceptors].reverse();\n\n let wrapped = middlewareRunner;\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = wrapped;\n\n wrapped = async (config: C) => {\n // Create execution input for the interceptor\n const executionInput: IResourceMiddlewareExecutionInput<any> = {\n resource: {\n definition: null as any, // Will be filled by middleware.run\n config: config,\n },\n next: nextFunction as any,\n };\n\n // Provide a next function that accepts an execution input and forwards the raw config\n const wrappedNext = (input: IResourceMiddlewareExecutionInput<any>) => {\n return nextFunction(input.resource.config);\n };\n\n return interceptor(wrappedNext as any, executionInput);\n };\n }\n\n return wrapped;\n }\n\n /**\n * Compose a runner for a task with its local interceptors and applicable middlewares.\n * Returns a function that accepts the task input and resolves to the task output.\n */\n public composeTaskRunner<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n const storeTask = this.store.tasks.get(task.id)!;\n\n // Base next executes the task with validation\n let next = async (input: any) => {\n // Extract raw input from execution input if needed\n let rawInput = input;\n\n if (task.inputSchema) {\n try {\n rawInput = task.inputSchema.parse(rawInput);\n } catch (error) {\n throw new ValidationError(\n \"Task input\",\n task.id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n const deps = storeTask.computedDependencies;\n const rawResult = await task.run.call(null, rawInput, deps);\n if (task.resultSchema) {\n try {\n return task.resultSchema.parse(rawResult);\n } catch (error) {\n throw new ValidationError(\"Task result\", task.id, error as any);\n }\n }\n return rawResult;\n };\n\n // Inject local per-task interceptors first (closest to the task)\n if (storeTask.interceptors && storeTask.interceptors.length > 0) {\n for (let i = storeTask.interceptors.length - 1; i >= 0; i--) {\n const interceptor = storeTask.interceptors[i];\n const nextFunction = next;\n next = async (input) => interceptor(nextFunction, input);\n }\n }\n\n // Apply task middleware interceptors (last added runs first)\n if (this.taskMiddlewareInterceptors.length > 0) {\n const reversedInterceptors = [\n ...this.taskMiddlewareInterceptors,\n ].reverse();\n\n // Create the final execution input for the chain\n const createExecutionInput = (\n input: any,\n nextFunc: any,\n ): ITaskMiddlewareExecutionInput<any> => ({\n task: {\n definition: task,\n input: input,\n },\n next: nextFunc,\n });\n\n // Build the interceptor chain\n let currentNext = next;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = currentNext;\n\n currentNext = async (input) => {\n const executionInput = createExecutionInput(input, nextFunction);\n // Create a wrapper function that matches the expected signature\n const wrappedNext = (\n i: ITaskMiddlewareExecutionInput<any>,\n ): Promise<any> => {\n return nextFunction(i.task.input);\n };\n return interceptor(wrappedNext, executionInput);\n };\n }\n\n next = currentNext;\n }\n\n const createdMiddlewares = this.getApplicableTaskMiddlewares(task);\n if (createdMiddlewares.length === 0) {\n return next;\n }\n\n // layer task middlewares (global first, then local), closest to the task runs last\n for (let i = createdMiddlewares.length - 1; i >= 0; i--) {\n const middleware = createdMiddlewares[i];\n const storeMiddleware = this.store.taskMiddlewares.get(middleware.id)!;\n\n const nextFunction = next;\n\n // Create the base middleware runner with events\n const baseMiddlewareRunner = async (input: any) => {\n // Attention: we use the store middleware run, because it might have been overidden.\n // All middleware run() functions should be common accross all tasks.\n return storeMiddleware.middleware.run(\n {\n task: {\n definition: task,\n input,\n },\n next: nextFunction,\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n };\n\n // Get interceptors for this specific middleware\n const middlewareInterceptors =\n this.perMiddlewareInterceptors.get(middleware.id) || [];\n\n // Wrap the middleware with its interceptors (onion style)\n const wrappedMiddleware = this.wrapMiddlewareWithInterceptors(\n middleware,\n baseMiddlewareRunner,\n middlewareInterceptors,\n );\n\n next = wrappedMiddleware;\n }\n\n return next;\n }\n\n /**\n * Run a resource init wrapped with its applicable middlewares.\n */\n public async runResourceInit<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: any,\n context: TContext,\n ): Promise<V | undefined> {\n let next = async (cfg: C): Promise<V | undefined> => {\n if (!resource.init) return undefined as unknown as V;\n const rawValue = await resource.init.call(\n null,\n cfg,\n dependencies,\n context,\n );\n if (resource.resultSchema) {\n try {\n return resource.resultSchema.parse(rawValue);\n } catch (error) {\n throw new ValidationError(\n \"Resource result\",\n resource.id,\n error as any,\n );\n }\n }\n return rawValue as any;\n };\n\n const createdMiddlewares = this.getApplicableResourceMiddlewares(resource);\n for (let i = createdMiddlewares.length - 1; i >= 0; i--) {\n const middleware = createdMiddlewares[i];\n const storeMiddleware = this.store.resourceMiddlewares.get(\n middleware.id,\n )!;\n\n const nextFunction = next;\n\n // Create the base resource middleware runner with events\n const baseMiddlewareRunner = async (cfg: C) => {\n try {\n const result = await storeMiddleware.middleware.run(\n {\n resource: {\n definition: resource,\n config: cfg,\n },\n next: nextFunction,\n },\n storeMiddleware.computedDependencies,\n middleware.config,\n );\n\n return result as any;\n } catch (error: unknown) {\n try {\n await this.store.onUnhandledError({\n error,\n kind: \"resourceInit\",\n source: resource.id,\n });\n } catch (_) {}\n\n throw error;\n }\n };\n\n // Get interceptors for this specific middleware\n const middlewareInterceptors =\n this.perResourceMiddlewareInterceptors.get(middleware.id) || [];\n\n // Wrap the middleware with its interceptors (onion style)\n const wrappedMiddleware = this.wrapResourceMiddlewareWithInterceptors(\n middleware,\n baseMiddlewareRunner,\n middlewareInterceptors,\n );\n\n next = wrappedMiddleware;\n }\n\n // Apply resource middleware interceptors (last added runs first)\n if (this.resourceMiddlewareInterceptors.length > 0) {\n const reversedInterceptors = [\n ...this.resourceMiddlewareInterceptors,\n ].reverse();\n\n // Create the final execution input for the chain\n const createExecutionInput = (\n config: C,\n nextFunc: any,\n ): IResourceMiddlewareExecutionInput<C> => ({\n resource: {\n definition: resource,\n config: config,\n },\n next: nextFunc,\n });\n\n // Build the interceptor chain\n let currentNext = next;\n\n for (let i = reversedInterceptors.length - 1; i >= 0; i--) {\n const interceptor = reversedInterceptors[i];\n const nextFunction = currentNext;\n\n currentNext = async (cfg: C) => {\n const executionInput = createExecutionInput(cfg, nextFunction);\n // Create a wrapper function that matches the expected signature\n const wrappedNext = (\n input: IResourceMiddlewareExecutionInput<any>,\n ) => {\n return nextFunction(input.resource.config);\n };\n return interceptor(wrappedNext, executionInput);\n };\n }\n\n next = currentNext;\n }\n\n return next(config);\n }\n\n private getApplicableTaskMiddlewares<\n TInput,\n TOutput extends Promise<any>,\n TDeps extends DependencyMapType,\n >(task: ITask<TInput, TOutput, TDeps>) {\n const existingMiddlewares = task.middleware;\n const existingMiddlewareIds = existingMiddlewares.map((x) => x.id);\n const globalMiddlewares = this.getEverywhereMiddlewareForTasks(task).filter(\n (x) => !existingMiddlewareIds.includes(x.id),\n );\n return [...globalMiddlewares, ...existingMiddlewares];\n }\n\n private getApplicableResourceMiddlewares<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(resource: IResource<C, V, D, TContext>) {\n const existingMiddlewares = resource.middleware;\n const existingMiddlewareIds = existingMiddlewares.map((x) => x.id);\n const globalMiddlewares = this.getEverywhereMiddlewareForResources(\n resource,\n ).filter((x) => !existingMiddlewareIds.includes(x.id));\n return [...globalMiddlewares, ...existingMiddlewares];\n }\n\n /**\n * @param task\n * @returns\n */\n getEverywhereMiddlewareForTasks(\n task: ITask<any, any, any, any>,\n ): ITaskMiddleware[] {\n return Array.from(this.store.taskMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere!(task);\n }\n\n return true;\n })\n .map((x) => x.middleware);\n }\n\n /**\n * Returns all global middleware for resource, which do not depend on the target resource.\n */\n getEverywhereMiddlewareForResources(\n target: IResource<any, any, any, any>,\n ): IResourceMiddleware[] {\n return Array.from(this.store.resourceMiddlewares.values())\n .filter((x) => Boolean(x.middleware.everywhere))\n .filter((x) => {\n if (typeof x.middleware.everywhere === \"function\") {\n return x.middleware.everywhere!(target);\n }\n\n return true;\n })\n .map((x) => x.middleware);\n }\n}\n","import {\n DependencyMapType,\n IResource,\n ResourceDependencyValuesType,\n} from \"../defs\";\nimport { EventManager } from \"./EventManager\";\nimport { Store } from \"./Store\";\nimport { Logger } from \"./Logger\";\nimport { ValidationError } from \"../errors\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\n\nexport class ResourceInitializer {\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n ) {\n this.middlewareManager = new MiddlewareManager(\n this.store,\n this.eventManager,\n this.logger,\n );\n }\n\n private readonly middlewareManager: MiddlewareManager;\n\n /**\n * Begins the execution of an task. These are registered tasks and all sanity checks have been performed at this stage to ensure consistency of the object.\n * This function can throw only if any of the event listeners or run function throws\n */\n public async initializeResource<\n TConfig = null,\n TValue extends Promise<any> = Promise<any>,\n TDeps extends DependencyMapType = {},\n TContext = any,\n >(\n resource: IResource<TConfig, TValue, TDeps>,\n config: TConfig,\n dependencies: ResourceDependencyValuesType<TDeps>,\n ): Promise<{ value: TValue; context: TContext }> {\n const context = resource.context?.();\n\n let value: TValue | undefined;\n // Create a no-op init function if it doesn't exist\n if (!resource.init) {\n resource.init = (async () => undefined) as any;\n }\n\n if (resource.init) {\n value = await this.initWithMiddleware(\n resource,\n config,\n dependencies,\n context,\n );\n }\n\n return { value: value as TValue, context };\n }\n\n // Lifecycle emissions removed\n\n public async initWithMiddleware<\n C,\n V extends Promise<any>,\n D extends DependencyMapType,\n TContext,\n >(\n resource: IResource<C, V, D, TContext>,\n config: C,\n dependencies: ResourceDependencyValuesType<D>,\n context: TContext,\n ) {\n return this.middlewareManager.runResourceInit(\n resource,\n config,\n dependencies,\n context,\n );\n }\n}\n","export function safeStringify(\n value: unknown,\n space?: number,\n options?: { maxDepth?: number },\n): string {\n const seen = new WeakSet<object>();\n const holderDepth = new WeakMap<object, number>();\n\n const maxDepth =\n typeof options?.maxDepth === \"number\" ? options!.maxDepth! : Infinity;\n\n const replacer = function (this: any, _key: string, val: any) {\n // Normalize functions to a readable placeholder\n if (typeof val === \"function\") {\n return \"function()\";\n }\n\n // Normalize BigInt safely\n if (typeof val === \"bigint\") {\n return val.toString();\n }\n\n // Compute the depth of the current value based on its holder (this)\n const holderObject = Object(this);\n const parentDepth = holderDepth.get(holderObject as object) || 0;\n const currentDepth = parentDepth + 1;\n\n if (typeof val === \"object\" && val !== null) {\n if (seen.has(val)) return \"[Circular]\";\n\n // Apply depth limiting beyond the configured depth\n if (currentDepth > maxDepth) {\n return Array.isArray(val) ? \"[Array]\" : \"[Object]\";\n }\n\n seen.add(val);\n holderDepth.set(val, currentDepth);\n }\n return val;\n } as (this: any, key: string, value: any) => any;\n\n try {\n return JSON.stringify(value as any, replacer, space);\n } catch {\n try {\n return String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n","import { safeStringify } from \"./utils/safeStringify\";\n\n// eslint-disable-next-line no-control-regex\nconst ansiRegex =\n /[\u001b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;\nfunction stripAnsi(str: string): string {\n return str.replace(ansiRegex, \"\");\n}\n\nexport type PrintStrategy = \"pretty\" | \"plain\" | \"json\" | \"json_pretty\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface PrintableLog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type ColorTheme = {\n trace: string;\n debug: string;\n info: string;\n warn: string;\n error: string;\n critical: string;\n reset: string;\n bold: string;\n dim: string;\n blue: string;\n cyan: string;\n gray: string;\n};\n\nconst COLORS: Readonly<ColorTheme> = {\n trace: \"\\x1b[90m\",\n debug: \"\\x1b[36m\",\n info: \"\\x1b[32m\",\n warn: \"\\x1b[33m\",\n error: \"\\x1b[31m\",\n critical: \"\\x1b[35m\",\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n blue: \"\\x1b[34m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n} as const;\n\nconst ICONS = {\n trace: \"○\",\n debug: \"◆\",\n info: \"●\",\n warn: \"▲\",\n error: \"✕\",\n critical: \"█\",\n} as const;\n\nexport class LogPrinter {\n private strategy: PrintStrategy;\n private colors: ColorTheme;\n\n constructor(options: {\n strategy: PrintStrategy;\n useColors: boolean;\n colorTheme?: Partial<ColorTheme>;\n }) {\n this.strategy = options.strategy;\n if (options.strategy === \"plain\") {\n this.colors = LogPrinter.NO_COLORS;\n } else {\n const base =\n options.useColors || options.colorTheme ? COLORS : LogPrinter.NO_COLORS;\n this.colors = { ...base, ...(options.colorTheme || {}) };\n }\n }\n\n public print(log: PrintableLog): void {\n if (this.strategy === \"json\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log)));\n return;\n }\n\n if (this.strategy === \"json_pretty\") {\n LogPrinter.writers.log(safeStringify(this.normalizeForJson(log), 2));\n return;\n }\n\n // Pretty, multi-line output\n const { level, source, message, timestamp, error, data, context } = log;\n\n const timePart = this.formatTime(timestamp);\n const levelPart = this.formatLevel(level);\n const sourcePart = this.formatSource(source);\n\n const headerLine = [timePart, levelPart, sourcePart]\n .filter(Boolean)\n .join(\" \");\n\n const messageString = this.formatMessage(message);\n const messageLines = messageString.split(\"\\n\");\n\n const output: string[] = [headerLine];\n\n const timePartLength = stripAnsi(timePart).length;\n const levelPartLength = stripAnsi(levelPart).length;\n // Indentation is length of time + space + level + space\n const indentation = \" \".repeat(timePartLength + 1 + levelPartLength + 1);\n\n if (message) {\n output.push(...messageLines.map((line) => `${indentation}${line}`));\n }\n\n const errorLines = this.formatError(error);\n const dataLines = this.formatData(data);\n const contextLines = this.formatContext(context);\n\n const detailsExist =\n errorLines.length > 0 || dataLines.length > 0 || contextLines.length > 0;\n\n if (detailsExist) {\n output.push(\"\"); // Add a space before details\n }\n\n output.push(...errorLines, ...dataLines, ...contextLines);\n\n if (detailsExist) {\n output.push(\"\"); // Add a space after for readability\n }\n\n const writer = this.pickWriter(level);\n output.forEach((line) => writer(line));\n // New line for readability especially in console\n writer(\"\");\n }\n\n private pickWriter(level: LogLevels) {\n const toError =\n level === \"warn\" || level === \"error\" || level === \"critical\";\n if (toError && typeof LogPrinter.writers.error === \"function\") {\n return (msg: any) => LogPrinter.writers.error!(msg);\n }\n return (msg: any) => LogPrinter.writers.log(msg);\n }\n\n private formatTime(timestamp: Date): string {\n const time = timestamp.toISOString().slice(11, 19);\n const ms = timestamp.getMilliseconds().toString().padStart(3, \"0\");\n return `${this.colors.gray}${time}.${ms}${this.colors.reset}`;\n }\n\n private formatLevel(level: string): string {\n const color = this.colors[level as keyof typeof COLORS] || this.colors.info;\n const icon = ICONS[level as keyof typeof ICONS] || \"●\";\n const label = level.toUpperCase().padEnd(7);\n return `${color}${icon} ${this.colors.bold}${label}${this.colors.reset}`;\n }\n\n private formatSource(source?: string): string {\n if (!source) return \"\";\n return `${this.colors.cyan}${source}${this.colors.reset}`;\n }\n\n private formatMessage(message: any): string {\n if (typeof message === \"object\" && message !== null) {\n return safeStringify(message, 2);\n }\n return String(message);\n }\n\n private formatError(\n error: PrintableLog[\"error\"],\n indentation = \" \",\n ): string[] {\n if (!error) return [];\n const lines: string[] = [];\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.error}Error: ${error.name}: ${error.message}${this.colors.reset}`,\n );\n if (error.stack) {\n const frames = error.stack.split(\"\\n\").slice(1); // slice(1) to skip the error message line\n frames.forEach((frame) => {\n const cleaned = frame.trim().replace(/^at /, \"\");\n lines.push(\n `${indentation} ${this.colors.gray}↳${this.colors.reset} ${this.colors.dim}${cleaned}${this.colors.reset}`,\n );\n });\n }\n return lines;\n }\n\n private formatData(data?: Record<string, any>, indentation = \" \"): string[] {\n if (!data || Object.keys(data).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(data, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.cyan}Data:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep data lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private formatContext(\n context?: Record<string, any>,\n indentation = \" \",\n ): string[] {\n if (!context) return [];\n const filtered = { ...context };\n delete (filtered as any).source;\n if (Object.keys(filtered).length === 0) return [];\n const lines: string[] = [];\n const formatted = safeStringify(filtered, 2, { maxDepth: 3 }).split(\"\\n\");\n lines.push(\n `${indentation}${this.colors.gray}╰─${this.colors.reset} ${this.colors.blue}Context:${this.colors.reset}`,\n );\n formatted.forEach((line) => {\n // Keep context lines non-padded to save horizontal space\n lines.push(`${indentation}${this.colors.dim}${line}${this.colors.reset}`);\n });\n return lines;\n }\n\n private normalizeForJson(log: PrintableLog) {\n const normalized: any = { ...log };\n if (typeof log.message === \"object\") {\n const text = safeStringify(log.message);\n try {\n normalized.message = JSON.parse(text);\n } catch {\n normalized.message = text;\n }\n }\n return normalized;\n }\n\n private static NO_COLORS: ColorTheme = {\n trace: \"\",\n debug: \"\",\n info: \"\",\n warn: \"\",\n error: \"\",\n critical: \"\",\n reset: \"\",\n bold: \"\",\n dim: \"\",\n blue: \"\",\n cyan: \"\",\n gray: \"\",\n } as const;\n\n private static writers: {\n log: (msg: any) => void;\n error?: (msg: any) => void;\n } = {\n // eslint-disable-next-line no-console\n log: (msg: any) => console.log(msg),\n // eslint-disable-next-line no-console\n error: (msg: any) => console.error?.(msg),\n };\n\n public static setWriters(\n writers: Partial<{ log: (msg: any) => void; error?: (msg: any) => void }>,\n ) {\n LogPrinter.writers = { ...LogPrinter.writers, ...writers };\n }\n\n public static resetWriters() {\n // eslint-disable-next-line no-console\n LogPrinter.writers = {\n log: (msg: any) => console.log(msg),\n error: (msg: any) => console.error?.(msg),\n };\n }\n}\n","import { globalEvents } from \"../globals/globalEvents\";\nimport { EventManager } from \"./EventManager\";\nimport { LogPrinter, PrintStrategy as PrinterStrategy } from \"./LogPrinter\";\nimport { safeStringify } from \"./utils/safeStringify\";\n\nexport type LogLevels =\n | \"trace\"\n | \"debug\"\n | \"info\"\n | \"warn\"\n | \"error\"\n | \"critical\";\n\nexport interface ILogInfo {\n source?: string;\n error?: unknown | Error;\n data?: Record<string, any>;\n context?: Record<string, any>;\n [key: string]: any;\n}\n\nexport interface ILog {\n level: LogLevels;\n source?: string;\n message: any;\n timestamp: Date;\n error?: {\n name: string;\n message: string;\n stack?: string;\n };\n data?: Record<string, any>;\n context?: Record<string, any>;\n}\n\nexport type PrintStrategy = PrinterStrategy;\nexport class Logger {\n private printThreshold: null | LogLevels = \"info\";\n private printStrategy: PrintStrategy = \"pretty\";\n private bufferLogs: boolean = false;\n private buffer: ILog[] = [];\n private boundContext: Record<string, any> = {};\n private isLocked: boolean = false;\n private useColors: boolean = true;\n private printer: LogPrinter;\n private source?: string;\n // This is used for when we use .with() .with() and we want access to local listeners\n private rootLogger?: Logger;\n // Observable why not?\n public localListeners: Array<(log: ILog) => void | Promise<void>> = [];\n\n public static Severity = {\n trace: 0,\n debug: 1,\n info: 2,\n warn: 3,\n error: 4,\n critical: 5,\n };\n\n constructor(\n options: {\n printThreshold: null | LogLevels;\n printStrategy: PrintStrategy;\n bufferLogs: boolean;\n useColors?: boolean;\n },\n boundContext: Record<string, any> = {},\n source?: string,\n printer?: LogPrinter,\n ) {\n this.boundContext = { ...boundContext };\n this.printThreshold = options.printThreshold;\n this.printStrategy = options.printStrategy;\n this.bufferLogs = options.bufferLogs;\n this.useColors =\n typeof options.useColors === \"boolean\"\n ? options.useColors\n : this.detectColorSupport();\n\n this.source = source;\n\n this.printer = printer\n ? printer\n : new LogPrinter({\n strategy: this.printStrategy,\n useColors: this.useColors,\n });\n }\n\n private detectColorSupport(): boolean {\n // Respect NO_COLOR convention\n // eslint-disable-next-line no-undef\n const noColor = typeof process !== \"undefined\" && !!process.env.NO_COLOR;\n if (noColor) return false;\n // eslint-disable-next-line no-undef\n const isTty =\n typeof process !== \"undefined\" &&\n !!process.stdout &&\n !!process.stdout.isTTY;\n return isTty;\n }\n\n /**\n * Creates a new logger instance with additional bound context\n */\n public with({\n source,\n additionalContext: context,\n }: {\n source?: string;\n additionalContext?: Record<string, any>;\n }): Logger {\n const child = new Logger(\n {\n printThreshold: this.printThreshold,\n printStrategy: this.printStrategy,\n bufferLogs: this.bufferLogs,\n useColors: this.useColors,\n },\n { ...this.boundContext, ...context },\n source,\n this.printer,\n );\n // Ensure child logger delegates buffering, listeners and printing to root\n child.rootLogger = this.rootLogger ?? this;\n return child;\n }\n\n /**\n * Core logging method with structured LogInfo\n */\n public async log(\n level: LogLevels,\n message: any,\n logInfo: ILogInfo = {},\n ): Promise<void> {\n const { source, error, data, ...context } = logInfo;\n\n const log: ILog = {\n level,\n message,\n source: source || this.source,\n timestamp: new Date(),\n error: error ? this.extractErrorInfo(error) : undefined,\n data: data || undefined,\n context: { ...this.boundContext, ...context },\n };\n\n const root = this.rootLogger ?? this;\n\n if (root.bufferLogs) {\n root.buffer.push(log);\n return;\n }\n\n await root.triggerLogListeners(log);\n\n if (root.canPrint(level)) {\n root.printer.print(log);\n }\n }\n\n private extractErrorInfo(error: Error | unknown): {\n name: string;\n message: string;\n stack?: string;\n } {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n };\n }\n\n return {\n name: \"UnknownError\",\n message: String(error),\n };\n }\n\n public async info(message: any, logInfo?: ILogInfo) {\n await this.log(\"info\", message, logInfo);\n }\n\n public async error(message: any, logInfo?: ILogInfo) {\n await this.log(\"error\", message, logInfo);\n }\n\n public async warn(message: any, logInfo?: ILogInfo) {\n await this.log(\"warn\", message, logInfo);\n }\n\n public async debug(message: any, logInfo?: ILogInfo) {\n await this.log(\"debug\", message, logInfo);\n }\n\n public async trace(message: any, logInfo?: ILogInfo) {\n await this.log(\"trace\", message, logInfo);\n }\n\n public async critical(message: any, logInfo?: ILogInfo) {\n await this.log(\"critical\", message, logInfo);\n }\n\n /**\n * Direct print for tests and advanced scenarios. Delegates to LogPrinter.\n */\n public print(log: ILog) {\n this.printer.print(log);\n }\n\n /**\n * @param listener - A listener that will be triggered for every log.\n */\n public onLog(listener: (log: ILog) => any) {\n if (this.rootLogger && this.rootLogger !== this) {\n this.rootLogger.onLog(listener);\n } else {\n this.localListeners.push(listener);\n }\n }\n\n /**\n * Marks the logger as ready.\n * This is used to trigger the local listeners and print the buffered logs (if they exists)\n * @returns A promise that resolves when the logger is ready.\n */\n public async lock() {\n const root = this.rootLogger ?? this;\n if (root.isLocked) {\n return;\n }\n\n if (root.bufferLogs) {\n for (const log of root.buffer) {\n await root.triggerLogListeners(log);\n }\n for (const log of root.buffer) {\n if (root.canPrint(log.level)) {\n root.printer.print(log);\n }\n }\n }\n root.bufferLogs = false;\n root.buffer = [];\n root.isLocked = true;\n }\n\n private canPrint(level: LogLevels) {\n if (this.printThreshold === null) {\n return false;\n }\n\n return (\n this.printThreshold &&\n Logger.Severity[level] >= Logger.Severity[this.printThreshold]\n );\n }\n\n private async triggerLogListeners(log: ILog) {\n if (this.rootLogger && this.rootLogger !== this) {\n await this.rootLogger.triggerLogListeners(log);\n }\n\n for (const listener of this.localListeners) {\n try {\n await listener(log);\n } catch (error) {\n this.print({\n level: \"error\",\n message: \"Error in log listener\",\n timestamp: new Date(),\n error: {\n name: \"ListenerError\",\n message: error instanceof Error ? error.message : String(error),\n },\n });\n // We're not breaking the app due to logListener errors.\n continue;\n }\n }\n }\n}\n","import {\n DependencyMapType,\n DependencyValuesType,\n ITask,\n IResource,\n IEvent,\n IEventEmission,\n TaskLocalInterceptor,\n ResourceDependencyValuesType,\n TaskDependencyWithIntercept,\n} from \"../defs\";\nimport { Store } from \"./Store\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n} from \"../types/storeTypes\";\nimport * as utils from \"../define\";\nimport { EventManager } from \"./EventManager\";\nimport { ResourceInitializer } from \"./ResourceInitializer\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport {\n DependencyNotFoundError,\n EventNotFoundError,\n UnknownItemTypeError,\n} from \"../errors\";\nimport { Logger } from \"./Logger\";\n\n/**\n * This class is responsible of setting up dependencies with their respective computedValues.\n * Note that all elements must have been previously registered otherwise errors will be thrown\n * when trying to depend on something not in the store.\n */\nexport class DependencyProcessor {\n protected readonly resourceInitializer: ResourceInitializer;\n protected readonly logger!: Logger;\n constructor(\n protected readonly store: Store,\n protected readonly eventManager: EventManager,\n protected readonly taskRunner: TaskRunner,\n logger: Logger,\n ) {\n this.logger = logger.with({ source: \"dependencyProcessor\" });\n this.resourceInitializer = new ResourceInitializer(\n store,\n eventManager,\n logger,\n );\n }\n\n /**\n * This function is going to go through all the resources, tasks and middleware to compute their required dependencies.\n */\n async computeAllDependencies() {\n for (const middleware of this.store.resourceMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n for (const middleware of this.store.taskMiddlewares.values()) {\n const computedDependencies = await this.extractDependencies(\n middleware.middleware.dependencies,\n middleware.middleware.id,\n );\n\n middleware.computedDependencies = computedDependencies;\n middleware.isInitialized = true;\n }\n\n for (const resource of this.store.resources.values()) {\n await this.processResourceDependencies(resource);\n }\n\n for (const task of this.store.tasks.values()) {\n await this.computeTaskDependencies(task);\n }\n\n // Compute hook dependencies (hooks cannot be dependencies themselves)\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n const deps = hook.dependencies as DependencyMapType;\n hookStoreElement.computedDependencies = await this.extractDependencies(\n deps,\n hook.id,\n );\n }\n\n // leftovers that were registered but not depended upon, except root\n // they should still be initialized as they might extend other\n await this.initializeUninitializedResources();\n }\n\n private async computeTaskDependencies(\n task: TaskStoreElementType<any, any, any>,\n ) {\n const deps = task.task.dependencies as DependencyMapType;\n task.computedDependencies = await this.extractDependencies(\n deps,\n task.task.id,\n );\n // Mark task as initialized so subsequent injections don't recompute using\n // a potentially lazy dependencies() function and lose computed values.\n task.isInitialized = true;\n }\n\n // Most likely these are resources that no-one has dependencies towards\n // We need to ensure they work too!\n public async initializeUninitializedResources() {\n for (const resource of this.store.resources.values()) {\n if (\n resource.isInitialized === false &&\n // The root is the last one to be initialized and is done in a separate process.\n resource.resource.id !== this.store.root.resource.id\n ) {\n await this.processResourceDependencies(resource);\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource.resource,\n resource.config,\n resource.computedDependencies!,\n );\n resource.context = context;\n resource.value = value;\n resource.isInitialized = true;\n }\n }\n }\n\n /**\n * Processes dependencies and hooks\n * @param resource\n */\n protected async processResourceDependencies<TD extends DependencyMapType>(\n resource: ResourceStoreElementType<any, any, TD>,\n ) {\n const deps = (resource.resource.dependencies || ({} as TD)) as TD;\n const extracted = await this.extractDependencies(\n deps,\n resource.resource.id,\n );\n\n resource.computedDependencies = this.wrapResourceDependencies<TD>(\n deps,\n extracted,\n );\n // resource.isInitialized = true;\n }\n\n private wrapResourceDependencies<TD extends DependencyMapType>(\n deps: TD,\n extracted: DependencyValuesType<TD>,\n ): ResourceDependencyValuesType<TD> {\n const wrapped: Record<string, unknown> = {};\n for (const key of Object.keys(deps) as Array<keyof TD>) {\n const original = deps[key] as any;\n const value = (extracted as Record<string, unknown>)[key as string];\n // Handle optional wrappers\n if (utils.isOptional(original)) {\n const inner = original.inner as any;\n if (utils.isTask(inner)) {\n wrapped[key as string] = value\n ? this.makeTaskWithIntercept(inner)\n : undefined;\n } else {\n wrapped[key as string] = value as unknown;\n }\n continue;\n }\n if (utils.isTask(original)) {\n wrapped[key as string] = this.makeTaskWithIntercept(original);\n } else {\n wrapped[key as string] = value as unknown;\n }\n }\n return wrapped as unknown as ResourceDependencyValuesType<TD>;\n }\n\n private makeTaskWithIntercept<\n I,\n O extends Promise<any>,\n D extends DependencyMapType,\n >(original: ITask<I, O, D>): TaskDependencyWithIntercept<I, O> {\n const taskId = original.id;\n const fn: (input: I) => O = (input) => {\n const storeTask = this.store.tasks.get(taskId)!;\n const effective: ITask<I, O, D> = storeTask.task;\n\n return this.taskRunner.run(effective, input) as O;\n };\n return Object.assign(fn, {\n intercept: (middleware: TaskLocalInterceptor<I, O>) => {\n this.store.checkLock();\n const storeTask = this.store.tasks.get(taskId)!;\n\n if (!storeTask.interceptors) storeTask.interceptors = [];\n storeTask.interceptors.push(middleware);\n },\n }) as TaskDependencyWithIntercept<I, O>;\n }\n\n public async initializeRoot() {\n const rootResource = this.store.root;\n\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n rootResource.resource,\n rootResource.config,\n // They are already computed\n rootResource.computedDependencies!,\n );\n\n rootResource.context = context;\n rootResource.value = value;\n rootResource.isInitialized = true;\n }\n\n /**\n * Processes all hooks, should run before emission of any event.\n */\n public attachListeners() {\n // Attach listeners for dedicated hooks map\n for (const hookStoreElement of this.store.hooks.values()) {\n const hook = hookStoreElement.hook;\n if (hook.on) {\n const eventDefinition = hook.on;\n\n const handler = async (receivedEvent: IEventEmission<any>) => {\n if (receivedEvent.source === hook.id) {\n return;\n }\n return this.eventManager.executeHookWithInterceptors(\n hook,\n receivedEvent,\n hookStoreElement.computedDependencies,\n );\n };\n\n const order = hook.order ?? 0;\n\n if (eventDefinition === \"*\") {\n this.eventManager.addGlobalListener(handler, { order });\n } else if (Array.isArray(eventDefinition)) {\n for (const ed of eventDefinition) {\n if (this.store.events.get(ed.id) === undefined) {\n throw new EventNotFoundError(ed.id);\n }\n }\n this.eventManager.addListener(eventDefinition as any, handler, {\n order,\n });\n } else {\n if (this.store.events.get(eventDefinition.id) === undefined) {\n throw new EventNotFoundError(eventDefinition.id);\n }\n this.eventManager.addListener(eventDefinition as any, handler, {\n order,\n });\n }\n }\n }\n }\n\n async extractDependencies<T extends DependencyMapType>(\n map: T,\n source: string,\n ): Promise<DependencyValuesType<T>> {\n const object = {} as DependencyValuesType<T>;\n\n for (const key in map) {\n try {\n object[key] = await this.extractDependency(map[key], source);\n // Special handling, a little bit of magic and memory sacrifice for the sake of observability.\n // Maybe later we can allow this to be opt-in to save 'memory' in the case of large tasks?\n if ((object[key] as any) instanceof Logger) {\n object[key] = object[key].with({ source });\n }\n } catch (e) {\n const errorMessage = String(e);\n this.logger.error(\n `Failed to extract dependency from source: ${source} -> ${key} with error: ${errorMessage}`,\n );\n\n throw e;\n }\n }\n this.logger.trace(`Finished computing dependencies for source: ${source}`);\n\n return object;\n }\n\n async extractDependency(object: any, source: string) {\n this.logger.trace(`Extracting dependency -> ${source} -> ${object?.id}`);\n if (utils.isOptional(object)) {\n const inner = object.inner;\n if (utils.isResource(inner)) {\n const exists = this.store.resources.get(inner.id) !== undefined;\n return exists ? this.extractResourceDependency(inner) : undefined;\n } else if (utils.isTask(inner)) {\n const exists = this.store.tasks.get(inner.id) !== undefined;\n return exists ? this.extractTaskDependency(inner) : undefined;\n } else if (utils.isEvent(inner)) {\n const exists = this.store.events.get(inner.id) !== undefined;\n return exists ? this.extractEventDependency(inner, source) : undefined;\n }\n throw new UnknownItemTypeError(inner);\n }\n if (utils.isResource(object)) {\n return this.extractResourceDependency(object);\n } else if (utils.isTask(object)) {\n return this.extractTaskDependency(object);\n } else if (utils.isEvent(object)) {\n return this.extractEventDependency(object, source);\n } else {\n throw new UnknownItemTypeError(object);\n }\n }\n\n /**\n * Converts the event into a running functions with real inputs\n * @param object\n * @returns\n */\n extractEventDependency(object: IEvent<any>, source: string) {\n return async (input: any) => {\n return this.eventManager.emit(object, input, source);\n };\n }\n\n async extractTaskDependency(object: ITask<any, any, {}>) {\n const storeTask = this.store.tasks.get(object.id);\n if (storeTask === undefined) {\n throw new DependencyNotFoundError(`Task ${object.id}`);\n }\n\n if (!storeTask.isInitialized) {\n // it's sanitised\n const dependencies = object.dependencies as DependencyMapType;\n\n storeTask.computedDependencies = await this.extractDependencies(\n dependencies,\n storeTask.task.id,\n );\n storeTask.isInitialized = true;\n }\n\n return (input: unknown) => {\n return this.taskRunner.run(storeTask.task, input);\n };\n }\n\n async extractResourceDependency(object: IResource<any, any, any>) {\n // check if it exists in the store with the value\n const storeResource = this.store.resources.get(object.id);\n if (storeResource === undefined) {\n throw new DependencyNotFoundError(`Resource ${object.id}`);\n }\n\n const { resource, config } = storeResource;\n\n if (!storeResource.isInitialized) {\n // check if it has an initialisation function that provides the value\n if (resource.init) {\n const depMap = (resource.dependencies || {}) as DependencyMapType;\n const raw = await this.extractDependencies(depMap, resource.id);\n const wrapped = this.wrapResourceDependencies(depMap, raw);\n const { value, context } =\n await this.resourceInitializer.initializeResource(\n resource,\n config,\n wrapped,\n );\n\n storeResource.context = context;\n storeResource.value = value;\n }\n\n // we need to initialize the resource\n storeResource.isInitialized = true;\n }\n\n return storeResource.value;\n }\n}\n","import {\n DependencyValuesType,\n EventHandlerType,\n IEvent,\n IEventDefinition,\n IEventEmission,\n} from \"../defs\";\nimport { LockedError, ValidationError, EventCycleError } from \"../errors\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { IHook } from \"../types/hook\";\nimport { getPlatform, IAsyncLocalStorage } from \"../platform\";\n\n/**\n * Default options for event handlers\n */\nconst HandlerOptionsDefaults = { order: 0 };\n\n/**\n * Internal storage structure for event listeners\n */\ninterface IListenerStorage {\n order: number;\n filter?: (event: IEventEmission<any>) => boolean;\n handler: EventHandlerType;\n /** Optional listener id (from IEventHandlerOptions.id) */\n id?: string;\n /** True when this listener originates from addGlobalListener(). */\n isGlobal: boolean;\n}\n\n/**\n * Options for configuring event listeners\n */\nexport interface IEventHandlerOptions<T = any> {\n order?: number;\n filter?: (event: IEventEmission<T>) => boolean;\n /**\n * Represents the listener ID. Use this to avoid a listener calling himself.\n */\n id?: string;\n}\n\n/**\n * Interceptor for event emissions\n */\nexport type EventEmissionInterceptor = (\n next: (event: IEventEmission<any>) => Promise<void>,\n event: IEventEmission<any>,\n) => Promise<void>;\n\n/**\n * Interceptor for hook execution\n */\nexport type HookExecutionInterceptor = (\n next: (hook: IHook<any, any>, event: IEventEmission<any>) => Promise<any>,\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n) => Promise<any>;\n\n/**\n * EventManager handles event emission, listener registration, and event processing.\n * It supports both specific event listeners and global listeners that handle all events.\n * Listeners are processed in order based on their priority.\n */\nexport class EventManager {\n // Core storage for event listeners\n private listeners: Map<string, IListenerStorage[]> = new Map();\n private globalListeners: IListenerStorage[] = [];\n\n // Caching system for merged listeners to improve performance\n private cachedMergedListeners: Map<string, IListenerStorage[]> = new Map();\n private globalListenersCacheValid = true;\n\n // Interceptors storage\n private emissionInterceptors: EventEmissionInterceptor[] = [];\n private hookInterceptors: HookExecutionInterceptor[] = [];\n\n // Tracks the current emission chain to detect cycles\n private readonly emissionStack!: IAsyncLocalStorage<any> | null;\n // Tracks currently executing hook id (if any)\n private readonly currentHookIdContext!: IAsyncLocalStorage<string> | null;\n\n // Locking mechanism to prevent modifications after initialization\n #isLocked = false;\n\n // Feature flags\n private readonly runtimeCycleDetection: boolean;\n\n constructor(options?: { runtimeCycleDetection?: boolean }) {\n this.runtimeCycleDetection = options?.runtimeCycleDetection ?? true;\n\n // Store based on the platform.\n if (getPlatform().hasAsyncLocalStorage() && this.runtimeCycleDetection) {\n this.emissionStack =\n getPlatform().createAsyncLocalStorage<\n { id: string; source: string }[]\n >();\n this.currentHookIdContext =\n getPlatform().createAsyncLocalStorage<string>();\n } else {\n this.runtimeCycleDetection = false;\n this.emissionStack = null;\n this.currentHookIdContext = null;\n }\n }\n\n // ==================== PUBLIC API ====================\n\n /**\n * Gets the current lock status of the EventManager\n */\n get isLocked() {\n return this.#isLocked;\n }\n\n /**\n * Locks the EventManager, preventing any further modifications to listeners\n */\n lock() {\n this.#isLocked = true;\n }\n\n /**\n * Emits an event to all registered listeners for that event type.\n * Listeners are processed in order of priority and can stop event propagation.\n *\n * @param eventDefinition - The event definition to emit\n * @param data - The event payload data\n * @param source - The source identifier of the event emitter\n */\n async emit<TInput>(\n eventDefinition: IEvent<TInput>,\n data: TInput,\n source: string,\n ): Promise<void> {\n // Validate payload with schema if provided\n if (eventDefinition.payloadSchema) {\n try {\n data = eventDefinition.payloadSchema.parse(data);\n } catch (error) {\n throw new ValidationError(\n \"Event payload\",\n eventDefinition.id,\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }\n\n const frame = { id: eventDefinition.id, source };\n const processEmission = async () => {\n // Determine whether this emission should be excluded from global listeners\n /* istanbul ignore next */\n const pseudoForExclude = {\n id: eventDefinition.id,\n data,\n timestamp: new Date(),\n source,\n meta: eventDefinition.meta || {},\n stopPropagation: () => {},\n isPropagationStopped: () => false,\n tags: eventDefinition.tags,\n } as IEventEmission<TInput>;\n\n const excludeFromGlobal = this.isExcludedFromGlobal(pseudoForExclude);\n\n // Choose listeners: if globals are excluded, only use event-specific listeners\n const allListeners = excludeFromGlobal\n ? this.listeners.get(eventDefinition.id) || []\n : this.getCachedMergedListeners(eventDefinition.id);\n\n let propagationStopped = false;\n\n const event: IEventEmission = {\n id: eventDefinition.id,\n data,\n timestamp: new Date(),\n source,\n meta: eventDefinition.meta || {},\n stopPropagation: () => {\n propagationStopped = true;\n },\n isPropagationStopped: () => propagationStopped,\n tags: eventDefinition.tags,\n };\n\n // Create the base emission function\n const baseEmit = async (\n eventToEmit: IEventEmission<any>,\n ): Promise<void> => {\n if (allListeners.length === 0) {\n return;\n }\n\n const excludeFromGlobal = this.isExcludedFromGlobal(eventToEmit);\n\n for (const listener of allListeners) {\n if (propagationStopped) {\n break;\n }\n\n // Skip handlers that identify themselves as the source of this event\n // (prevents a listener from re-invoking itself).\n if (listener.id && listener.id === eventToEmit.source) {\n continue;\n }\n\n if (!listener.filter || listener.filter(eventToEmit)) {\n await listener.handler(eventToEmit);\n }\n }\n };\n\n // Apply emission interceptors (last added runs first)\n let emitWithInterceptors: (event: IEventEmission<any>) => Promise<void> =\n baseEmit;\n\n // Reverse the interceptors so the last added runs first\n const reversedInterceptors = [...this.emissionInterceptors].reverse();\n\n for (const interceptor of reversedInterceptors) {\n const nextFunction = emitWithInterceptors;\n emitWithInterceptors = async (eventToEmit: IEventEmission<any>) =>\n interceptor(nextFunction, eventToEmit);\n }\n\n // Execute the emission with interceptors\n await emitWithInterceptors(event);\n };\n\n if (\n this.runtimeCycleDetection &&\n this.emissionStack &&\n this.currentHookIdContext\n ) {\n // Detect re-entrant event cycles: same event id appearing in the current chain\n const currentStack = this.emissionStack.getStore();\n if (currentStack) {\n const cycleStart = currentStack.findIndex(\n (f: { id: string; source: string }) => f.id === frame.id,\n );\n if (cycleStart !== -1) {\n const top = currentStack[currentStack.length - 1];\n const currentHookId = this.currentHookIdContext.getStore();\n const safeReEmitBySameHook =\n top.id === frame.id && currentHookId && currentHookId === source;\n\n if (!safeReEmitBySameHook) {\n throw new EventCycleError([\n ...currentStack.slice(cycleStart),\n frame,\n ]);\n }\n }\n }\n\n const nextStack = currentStack ? [...currentStack, frame] : [frame];\n await this.emissionStack.run(nextStack, processEmission);\n } else {\n // Fast path without AsyncLocalStorage context tracking\n await processEmission();\n }\n }\n\n /**\n * Registers an event listener for specific event(s).\n * Listeners are ordered by priority and executed in ascending order.\n *\n * @param event - The event definition(s) to listen for\n * @param handler - The callback function to handle the event\n * @param options - Configuration options for the listener\n */\n addListener<T>(\n event: IEvent<T> | Array<IEvent<T>>,\n handler: EventHandlerType<T>,\n options: IEventHandlerOptions<T> = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener: IListenerStorage = {\n handler,\n order: options.order || 0,\n filter: options.filter,\n id: options.id,\n isGlobal: false,\n };\n\n if (Array.isArray(event)) {\n event.forEach((id) => this.addListener(id, handler, options));\n } else {\n const eventId = event.id;\n const listeners = this.listeners.get(eventId);\n if (listeners) {\n this.insertListener(listeners, newListener);\n } else {\n this.listeners.set(eventId, [newListener]);\n }\n this.invalidateCache(eventId);\n }\n }\n\n /**\n * Registers a global event listener that handles all events.\n * Global listeners are mixed with specific listeners and ordered by priority.\n *\n * @param handler - The callback function to handle events\n * @param options - Configuration options for the listener\n */\n addGlobalListener(\n handler: EventHandlerType,\n options: IEventHandlerOptions = HandlerOptionsDefaults,\n ): void {\n this.checkLock();\n const newListener: IListenerStorage = {\n handler,\n order: options.order || 0,\n filter: options.filter,\n id: options.id,\n isGlobal: true,\n };\n this.insertListener(this.globalListeners, newListener);\n this.invalidateCache();\n }\n\n /**\n * Checks if there are any listeners registered for the given event\n *\n * @param eventDefinition - The event definition to check\n * @returns true if listeners exist, false otherwise\n */\n hasListeners<T>(eventDefinition: IEvent<T>): boolean {\n const eventListeners = this.listeners.get(eventDefinition.id) || [];\n\n if (eventListeners.length > 0) {\n return true;\n }\n\n if (this.globalListeners.length === 0) {\n return false;\n }\n\n // If the event definition carries the tag that excludes it from global\n // listeners, report no listeners (since globals would be skipped at emit).\n /* istanbul ignore next */\n const pseudoEmission = {\n id: eventDefinition.id,\n data: undefined,\n timestamp: new Date(),\n source: \"\",\n meta: eventDefinition.meta || {},\n stopPropagation: () => {},\n isPropagationStopped: () => false,\n tags: eventDefinition.tags,\n } as unknown as IEventEmission<any>;\n\n if (this.isExcludedFromGlobal(pseudoEmission)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Adds an interceptor for all event emissions\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent event emissions\n *\n * @param interceptor - The interceptor function to add\n */\n intercept(interceptor: EventEmissionInterceptor): void {\n this.checkLock();\n this.emissionInterceptors.push(interceptor);\n }\n\n /**\n * Adds an interceptor for hook execution\n * Interceptors are executed in the order they are added, with the ability to\n * modify, log, or prevent hook execution\n *\n * @param interceptor - The interceptor function to add\n */\n interceptHook(interceptor: HookExecutionInterceptor): void {\n this.checkLock();\n this.hookInterceptors.push(interceptor);\n }\n\n /**\n * Executes a hook with all registered hook interceptors applied\n * This method should be used by TaskRunner when executing hooks\n *\n * @param hook - The hook to execute\n * @param event - The event that triggered the hook\n * @param computedDependencies - The computed dependencies for the hook\n * @returns Promise resolving to the hook execution result\n */\n async executeHookWithInterceptors(\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n computedDependencies: DependencyValuesType<any>,\n ): Promise<any> {\n // Base hook execution function\n const baseExecute = async (\n hookToExecute: IHook<any, any>,\n eventForHook: IEventEmission<any>,\n ): Promise<any> => {\n try {\n const result = await hookToExecute.run(\n eventForHook,\n computedDependencies,\n );\n\n return result;\n } catch (err: unknown) {\n throw err;\n }\n };\n\n // Apply hook interceptors (last added runs first)\n let executeWithInterceptors: (\n hook: IHook<any, any>,\n event: IEventEmission<any>,\n ) => Promise<any> = baseExecute;\n\n // Reverse the interceptors so the last added runs first\n const reversedInterceptors = [...this.hookInterceptors].reverse();\n\n for (const interceptor of reversedInterceptors) {\n const nextFunction = executeWithInterceptors;\n executeWithInterceptors = async (\n hookToExecute: IHook<any, any>,\n eventForHook: IEventEmission<any>,\n ) => interceptor(nextFunction, hookToExecute, eventForHook);\n }\n\n // Execute the hook with interceptors within current hook context\n if (this.runtimeCycleDetection) {\n return await this.currentHookIdContext?.run(\n hook.id,\n async () => await executeWithInterceptors(hook, event),\n );\n } else {\n return await executeWithInterceptors(hook, event);\n }\n }\n\n // ==================== PRIVATE METHODS ====================\n\n /**\n * Throws an error if the EventManager is locked\n */\n private checkLock() {\n if (this.#isLocked) {\n throw new LockedError(\"EventManager\");\n }\n }\n\n /**\n * Merges two sorted arrays of listeners while maintaining order.\n * Used to combine event-specific listeners with global listeners.\n *\n * @param a - First array of listeners\n * @param b - Second array of listeners\n * @returns Merged and sorted array of listeners\n */\n private mergeSortedListeners(\n a: IListenerStorage[],\n b: IListenerStorage[],\n ): IListenerStorage[] {\n const result: IListenerStorage[] = [];\n let i = 0,\n j = 0;\n while (i < a.length && j < b.length) {\n if (a[i].order <= b[j].order) {\n result.push(a[i++]);\n } else {\n result.push(b[j++]);\n }\n }\n while (i < a.length) result.push(a[i++]);\n while (j < b.length) result.push(b[j++]);\n return result;\n }\n\n /**\n * Inserts a new listener into a sorted array using binary search.\n * Maintains order based on listener priority.\n *\n * @param listeners - Array to insert into\n * @param newListener - Listener to insert\n */\n private insertListener(\n listeners: IListenerStorage[],\n newListener: IListenerStorage,\n ): void {\n let low = 0;\n let high = listeners.length;\n while (low < high) {\n const mid = (low + high) >>> 1;\n if (listeners[mid].order < newListener.order) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n listeners.splice(low, 0, newListener);\n }\n\n /**\n * Returns true if the given emission carries the tag that marks\n * it as excluded from global (\"*\") listeners.\n *\n * @param event - The event emission to check\n * @returns true if event should exclude global listeners\n */\n private isExcludedFromGlobal(event: IEventEmission<any>): boolean {\n return globalTags.excludeFromGlobalHooks.exists(event);\n }\n\n /**\n * Retrieves cached merged listeners for an event, or creates them if not cached.\n * Combines event-specific listeners with global listeners and sorts them by priority.\n *\n * @param eventId - The event ID to get listeners for\n * @returns Array of merged listeners sorted by priority\n */\n private getCachedMergedListeners(eventId: string): IListenerStorage[] {\n if (!this.globalListenersCacheValid) {\n this.cachedMergedListeners.clear();\n this.globalListenersCacheValid = true;\n }\n\n let cached = this.cachedMergedListeners.get(eventId);\n if (!cached) {\n const eventListeners = this.listeners.get(eventId) || [];\n if (eventListeners.length === 0 && this.globalListeners.length === 0) {\n cached = [];\n } else if (eventListeners.length === 0) {\n cached = this.globalListeners;\n } else if (this.globalListeners.length === 0) {\n cached = eventListeners;\n } else {\n cached = this.mergeSortedListeners(\n eventListeners,\n this.globalListeners,\n );\n }\n this.cachedMergedListeners.set(eventId, cached);\n }\n return cached;\n }\n\n /**\n * Invalidates the cached merged listeners.\n * If eventId is provided, only invalidates cache for that specific event.\n * Otherwise, invalidates the global cache.\n *\n * @param eventId - Optional specific event ID to invalidate\n */\n private invalidateCache(eventId?: string): void {\n if (eventId) {\n this.cachedMergedListeners.delete(eventId);\n } else {\n this.globalListenersCacheValid = false;\n }\n }\n}\n","/**\n * A node that has dependencies.\n */\nexport interface IDependentNode {\n id: string;\n dependencies: Record<string, IDependentNode>;\n}\n\ninterface FindCircularDependenciesResult {\n cycles: string[];\n missingDependencies: Array<{ nodeId: string; dependencyId: string }>;\n}\n\nexport function findCircularDependencies(\n nodes: IDependentNode[],\n): FindCircularDependenciesResult {\n const result: FindCircularDependenciesResult = {\n cycles: [],\n missingDependencies: [],\n };\n const visited: Set<string> = new Set();\n const stack: Set<string> = new Set();\n const path: string[] = [];\n\n function dfs(node: IDependentNode): void {\n if (stack.has(node.id)) {\n const cycleStartIndex = path.indexOf(node.id);\n const cycle = path.slice(cycleStartIndex).concat(node.id).join(\" -> \");\n result.cycles.push(cycle);\n return;\n }\n\n if (visited.has(node.id)) return;\n\n visited.add(node.id);\n stack.add(node.id);\n path.push(node.id);\n\n for (const [depKey, dependentNode] of Object.entries(node.dependencies)) {\n if (!dependentNode) {\n result.missingDependencies.push({\n nodeId: node.id,\n dependencyId: depKey,\n });\n continue;\n }\n dfs(dependentNode);\n }\n\n stack.delete(node.id);\n path.pop();\n }\n\n for (const node of nodes) {\n if (!visited.has(node.id)) {\n dfs(node);\n }\n }\n\n result.cycles = Array.from(new Set(result.cycles)); // Remove duplicate cycles\n return result;\n}\n","import { HookStoreElementType, ITag } from \"../defs\";\nimport {\n DependencyNotFoundError,\n DuplicateRegistrationError,\n MiddlewareNotRegisteredError,\n TagNotFoundError,\n} from \"../errors\";\nimport { ITaggable } from \"../defs\";\nimport { Store } from \"./Store\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class StoreValidator {\n constructor(private registry: StoreRegistry) {}\n\n checkIfIDExists(id: string): void | never {\n if (this.registry.tasks.has(id)) {\n throw new DuplicateRegistrationError(\"Task\", id);\n }\n if (this.registry.resources.has(id)) {\n throw new DuplicateRegistrationError(\"Resource\", id);\n }\n if (this.registry.events.has(id)) {\n throw new DuplicateRegistrationError(\"Event\", id);\n }\n if (this.registry.taskMiddlewares.has(id)) {\n throw new DuplicateRegistrationError(\"Middleware\", id);\n }\n if (this.registry.resourceMiddlewares.has(id)) {\n throw new DuplicateRegistrationError(\"Middleware\", id);\n }\n if (this.registry.tags.has(id)) {\n throw new DuplicateRegistrationError(\"Tag\", id);\n }\n if (this.registry.hooks.has(id)) {\n throw new DuplicateRegistrationError(\"Hook\", id);\n }\n }\n\n runSanityChecks() {\n for (const task of this.registry.tasks.values()) {\n const middlewares = task.task.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.taskMiddlewares.has(middlewareAttachment.id)) {\n throw new MiddlewareNotRegisteredError(\n \"task\",\n task.task.id,\n middlewareAttachment.id,\n );\n }\n });\n }\n\n for (const resource of this.registry.resources.values()) {\n const middlewares = resource.resource.middleware;\n middlewares.forEach((middlewareAttachment) => {\n if (!this.registry.resourceMiddlewares.has(middlewareAttachment.id)) {\n throw new MiddlewareNotRegisteredError(\n \"resource\",\n resource.resource.id,\n middlewareAttachment.id,\n );\n }\n });\n }\n\n this.ensureAllTagsUsedAreRegistered();\n }\n\n ensureAllTagsUsedAreRegistered() {\n const taggables: ITaggable[] = [\n ...Array.from(this.registry.tasks.values()).map((x) => x.task),\n ...Array.from(this.registry.resources.values()).map((x) => x.resource),\n ...Array.from(this.registry.events.values()).map((x) => x.event),\n ...Array.from(this.registry.taskMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.resourceMiddlewares.values()).map(\n (x) => x.middleware,\n ),\n ...Array.from(this.registry.hooks.values()).map((x) => x.hook),\n ];\n\n for (const taggable of taggables) {\n const tags = taggable.tags;\n if (tags) {\n for (const tag of tags) {\n if (!this.registry.tags.has(tag.id)) {\n throw new TagNotFoundError(tag.id);\n }\n }\n }\n }\n }\n}\n","import {\n DependencyMapType,\n IEventDefinition,\n IResource,\n ITask,\n IResourceWithConfig,\n RegisterableItems,\n ITaskMiddleware,\n IResourceMiddleware,\n IEvent,\n ITag,\n IHook,\n symbolTaskMiddleware,\n symbolResourceMiddleware,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { UnknownItemTypeError } from \"../errors\";\nimport {\n TaskStoreElementType,\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n ResourceStoreElementType,\n EventStoreElementType,\n HookStoreElementType,\n} from \"../defs\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport { Store } from \"./Store\";\nimport { task } from \"..\";\nimport { IDependentNode } from \"./utils/findCircularDependencies\";\n\ntype StoringMode = \"normal\" | \"override\";\nexport class StoreRegistry {\n public tasks: Map<string, TaskStoreElementType> = new Map();\n public resources: Map<string, ResourceStoreElementType> = new Map();\n public events: Map<string, EventStoreElementType> = new Map();\n public taskMiddlewares: Map<string, TaskMiddlewareStoreElementType> =\n new Map();\n public resourceMiddlewares: Map<string, ResourceMiddlewareStoreElementType> =\n new Map();\n public hooks: Map<string, HookStoreElementType> = new Map();\n public tags: Map<string, ITag> = new Map();\n\n private validator: StoreValidator;\n\n constructor(protected readonly store: Store) {\n this.validator = new StoreValidator(this);\n }\n\n getValidator(): StoreValidator {\n return this.validator;\n }\n\n storeGenericItem<C>(item: RegisterableItems) {\n if (utils.isTask(item)) {\n this.storeTask<C>(item);\n } else if (utils.isHook && utils.isHook(item)) {\n this.storeHook<C>(item as IHook);\n } else if (utils.isResource(item)) {\n this.storeResource<C>(item);\n } else if (utils.isEvent(item)) {\n this.storeEvent<C>(item);\n } else if (utils.isTaskMiddleware(item)) {\n this.storeTaskMiddleware<C>(item as ITaskMiddleware<any>);\n } else if (utils.isResourceMiddleware(item)) {\n this.storeResourceMiddleware<C>(item as IResourceMiddleware<any>);\n } else if (utils.isResourceWithConfig(item)) {\n this.storeResourceWithConfig<C>(item);\n } else if (utils.isTag(item)) {\n this.storeTag(item);\n } else {\n throw new UnknownItemTypeError(item);\n }\n }\n\n storeTag(item: ITag<any, any>) {\n this.validator.checkIfIDExists(item.id);\n this.tags.set(item.id, item);\n }\n\n storeHook<C>(item: IHook<any, any>, overrideMode: StoringMode = \"normal\") {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const hook = this.getFreshValue(item, this.hooks, \"hook\", overrideMode);\n\n // store separately\n this.hooks.set(hook.id, {\n hook,\n computedDependencies: {},\n });\n }\n\n storeTaskMiddleware<C>(\n item: ITaskMiddleware<any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const middleware = this.getFreshValue(\n item,\n this.taskMiddlewares,\n \"middleware\",\n storingMode,\n );\n\n this.taskMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeResourceMiddleware<C>(\n item: IResourceMiddleware<any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n const middleware = this.getFreshValue(\n item,\n this.resourceMiddlewares,\n \"middleware\",\n overrideMode,\n );\n\n this.resourceMiddlewares.set(item.id, {\n middleware,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n storeEvent<C>(item: IEvent<void>) {\n this.validator.checkIfIDExists(item.id);\n this.events.set(item.id, { event: item });\n }\n\n storeResourceWithConfig<C>(\n item: IResourceWithConfig<any, any, any>,\n storingMode: StoringMode = \"normal\",\n ) {\n storingMode === \"normal\" &&\n this.validator.checkIfIDExists(item.resource.id);\n\n const prepared = this.getFreshValue(\n item.resource,\n this.resources,\n \"resource\",\n storingMode,\n item.config,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: item.config,\n value: undefined,\n isInitialized: false,\n context: {},\n });\n\n this.computeRegistrationDeeply(prepared, item.config);\n return prepared;\n }\n\n computeRegistrationDeeply<C>(element: IResource<C>, config?: C) {\n const items =\n typeof element.register === \"function\"\n ? element.register(config as C)\n : element.register;\n\n element.register = items;\n\n for (const item of items) {\n // will call registration if it detects another resource.\n this.storeGenericItem<C>(item);\n }\n }\n\n storeResource<C>(\n item: IResource<any, any, any>,\n overrideMode: StoringMode = \"normal\",\n ) {\n overrideMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const prepared = this.getFreshValue(\n item,\n this.resources,\n \"resource\",\n overrideMode,\n );\n\n this.resources.set(prepared.id, {\n resource: prepared,\n config: {},\n value: undefined,\n isInitialized: false,\n context: prepared.context?.() || {},\n });\n\n this.computeRegistrationDeeply(prepared, {});\n return prepared;\n }\n\n storeTask<C>(item: ITask<any, any, {}>, storingMode: StoringMode = \"normal\") {\n storingMode === \"normal\" && this.validator.checkIfIDExists(item.id);\n\n const task = this.getFreshValue(item, this.tasks, \"task\", storingMode);\n\n this.tasks.set(task.id, {\n task,\n computedDependencies: {},\n isInitialized: false,\n });\n }\n\n // Feels like a dependencyProcessor task?\n getDependentNodes() {\n const depenedants: IDependentNode[] = [];\n\n // First, create all nodes\n const nodeMap = new Map<string, IDependentNode>();\n\n // Create nodes for tasks\n this.setupBlankNodes(nodeMap, depenedants);\n\n // Now, populate dependencies with references to actual nodes\n for (const task of this.tasks.values()) {\n const node = nodeMap.get(task.task.id)!;\n\n // Add task dependencies\n if (task.task.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n task.task.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies for tasks (hooks have no middleware)\n const t = task.task;\n for (const middleware of t.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n // Populate task middleware dependencies\n for (const storeTaskMiddleware of this.taskMiddlewares.values()) {\n const node = nodeMap.get(storeTaskMiddleware.middleware.id)!;\n const { middleware } = storeTaskMiddleware;\n\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const task of this.tasks.values()) {\n if (filter(task.task)) {\n const taskNode = nodeMap.get(task.task.id)!;\n // node.dependencies[task.task.id] = taskNode;\n taskNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource middleware dependencies\n for (const storeResourceMiddleware of this.resourceMiddlewares.values()) {\n const node = nodeMap.get(storeResourceMiddleware.middleware.id)!;\n const { middleware } = storeResourceMiddleware;\n if (middleware.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n middleware.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n if (middleware.everywhere) {\n const filter =\n typeof middleware.everywhere === \"function\"\n ? middleware.everywhere\n : () => true;\n\n for (const resource of this.resources.values()) {\n if (filter(resource.resource)) {\n const resourceNode = nodeMap.get(resource.resource.id)!;\n // node.dependencies[resource.resource.id] = resourceNode;\n resourceNode.dependencies[`__middleware.${middleware.id}`] = node;\n }\n }\n }\n }\n\n // Populate resource dependencies\n for (const resource of this.resources.values()) {\n const node = nodeMap.get(resource.resource.id)!;\n\n // Add resource dependencies\n if (resource.resource.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n resource.resource.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n\n const depNode = nodeMap.get(candidate.id);\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n\n // Add local middleware dependencies\n for (const middleware of resource.resource.middleware) {\n const middlewareNode = nodeMap.get(middleware.id);\n if (middlewareNode) {\n node.dependencies[middleware.id] = middlewareNode;\n }\n }\n }\n\n for (const hook of this.hooks.values()) {\n const node = nodeMap.get(hook.hook.id)!;\n if (hook.hook.dependencies) {\n for (const [depKey, depItem] of Object.entries(\n hook.hook.dependencies,\n )) {\n const candidate = utils.isOptional(depItem) ? depItem.inner : depItem;\n const depNode = nodeMap.get(candidate.id);\n\n if (depNode) {\n node.dependencies[depKey] = depNode;\n }\n }\n }\n }\n\n return depenedants;\n }\n\n /**\n * Builds a directed graph of event emissions based on hooks listening to events\n * and their dependencies on events (emission capability). Ignores wildcard hooks by default.\n */\n buildEventEmissionGraph() {\n const nodes = new Map<string, IDependentNode>();\n\n // Create nodes for all events\n for (const e of this.events.values()) {\n nodes.set(e.event.id, { id: e.event.id, dependencies: {} });\n }\n\n // For each hook, if it listens to concrete event(s) and depends on events, add edges listenedEvent -> depEvent\n for (const h of this.hooks.values()) {\n const listened: string[] = [];\n const on = h.hook.on as any;\n if (on === \"*\") continue; // avoid over-reporting for global hooks\n if (Array.isArray(on)) listened.push(...on.map((e: IEvent) => e.id));\n else listened.push(on.id);\n\n // Collect event dependencies from the hook\n const depEvents: string[] = [];\n const deps = h.hook.dependencies as any;\n if (deps) {\n for (const value of Object.values(deps)) {\n const candidate = utils.isOptional(value) ? value.inner : value;\n if (candidate && utils.isEvent(candidate)) {\n depEvents.push(candidate.id);\n }\n }\n }\n\n // Add edges\n for (const srcId of listened) {\n const srcNode = nodes.get(srcId);\n if (!srcNode) continue; // skip unknown/unregistered events\n for (const dstId of depEvents) {\n if (srcId === dstId) continue; // ignore trivial self edge\n const dstNode = nodes.get(dstId);\n if (dstNode) {\n srcNode.dependencies[dstId] = dstNode;\n }\n }\n }\n }\n\n return Array.from(nodes.values());\n }\n\n private setupBlankNodes(\n nodeMap: Map<string, IDependentNode>,\n depenedants: IDependentNode[],\n ) {\n for (const task of this.tasks.values()) {\n const node: IDependentNode = {\n id: task.task.id,\n dependencies: {},\n };\n nodeMap.set(task.task.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.taskMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n for (const middleware of this.resourceMiddlewares.values()) {\n const node: IDependentNode = {\n id: middleware.middleware.id,\n dependencies: {},\n };\n nodeMap.set(middleware.middleware.id, node);\n depenedants.push(node);\n }\n\n // Create nodes for resources\n for (const resource of this.resources.values()) {\n const node: IDependentNode = {\n id: resource.resource.id,\n dependencies: {},\n };\n nodeMap.set(resource.resource.id, node);\n depenedants.push(node);\n }\n\n for (const hook of this.hooks.values()) {\n const node: IDependentNode = {\n id: hook.hook.id,\n dependencies: {},\n };\n nodeMap.set(hook.hook.id, node);\n depenedants.push(node);\n }\n }\n\n getTasksWithTag(tag: string | ITag) {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.tasks.values())\n .filter((x) => {\n return x.task.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.task);\n }\n\n getResourcesWithTag(tag: string | ITag) {\n const tagId = typeof tag === \"string\" ? tag : tag.id;\n\n return Array.from(this.resources.values())\n .filter((x) => {\n return x.resource.tags.some((t) => t.id === tagId);\n })\n .map((x) => x.resource);\n }\n\n /**\n * Used to fetch the value cloned, and if we're dealing with an override, we need to extend the previous value.\n */\n private getFreshValue<\n T extends { id: string; dependencies?: any; config?: any },\n MapType,\n >(\n item: T,\n collection: Map<string, MapType>,\n key: keyof MapType,\n overrideMode: StoringMode,\n config?: any, // If provided config, takes precedence over config in item.\n ): T {\n let currentItem: T;\n if (overrideMode === \"override\") {\n const existing = collection.get(item.id)![key];\n currentItem = { ...existing, ...item };\n } else {\n currentItem = { ...item };\n }\n\n currentItem.dependencies =\n typeof currentItem.dependencies === \"function\"\n ? currentItem.dependencies(config || currentItem.config)\n : currentItem.dependencies;\n\n return currentItem;\n }\n}\n","import {\n IResource,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n IResourceWithConfig,\n RegisterableItems,\n IHook,\n} from \"../defs\";\nimport * as utils from \"../define\";\nimport { DependencyNotFoundError } from \"../errors\";\nimport { StoreRegistry } from \"./StoreRegistry\";\n\nexport class OverrideManager {\n public overrides: Map<\n string,\n | IResource\n | ITaskMiddleware\n | IResourceMiddleware\n | ITask\n | IResourceWithConfig\n | IHook\n > = new Map();\n\n public overrideRequests: Set<{\n source: string;\n override: RegisterableItems;\n }> = new Set();\n\n constructor(private readonly registry: StoreRegistry) {}\n\n storeOverridesDeeply<C>(element: IResource<C, any, any>) {\n element.overrides.forEach((override) => {\n if (!override) {\n return;\n }\n\n if (utils.isResource(override)) {\n this.storeOverridesDeeply(override);\n }\n\n let id: string;\n if (utils.isResourceWithConfig(override)) {\n this.storeOverridesDeeply(override.resource);\n id = override.resource.id;\n } else {\n id = override.id;\n }\n\n this.overrideRequests.add({ source: element.id, override });\n this.overrides.set(id, override);\n });\n }\n\n processOverrides() {\n // If we are trying to use override on something that wasn't previously registered, we throw an error.\n for (const override of this.overrides.values()) {\n let hasAnyItem = false;\n if (utils.isTask(override)) {\n hasAnyItem = this.registry.tasks.has(override.id);\n } else if (utils.isResource(override)) {\n hasAnyItem = this.registry.resources.has(override.id);\n } else if (utils.isTaskMiddleware(override)) {\n hasAnyItem = this.registry.taskMiddlewares.has(override.id);\n } else if (utils.isResourceMiddleware(override)) {\n hasAnyItem = this.registry.resourceMiddlewares.has(override.id);\n } else if (utils.isResourceWithConfig(override)) {\n hasAnyItem = this.registry.resources.has(override.resource.id);\n } else if (utils.isHook(override)) {\n hasAnyItem = this.registry.hooks.has(override.id);\n }\n\n if (!hasAnyItem) {\n const id = utils.isResourceWithConfig(override)\n ? override.resource.id\n : override.id;\n\n throw new DependencyNotFoundError(id);\n }\n }\n\n for (const override of this.overrides.values()) {\n if (utils.isTask(override)) {\n this.registry.storeTask(override, \"override\");\n } else if (utils.isResource(override)) {\n this.registry.storeResource(override, \"override\");\n } else if (utils.isTaskMiddleware(override)) {\n this.registry.storeTaskMiddleware(override, \"override\");\n } else if (utils.isResourceMiddleware(override)) {\n this.registry.storeResourceMiddleware(override, \"override\");\n } else if (utils.isResourceWithConfig(override)) {\n this.registry.storeResourceWithConfig(override, \"override\");\n } else if (utils.isHook(override)) {\n this.registry.storeHook(override, \"override\");\n }\n }\n }\n}\n","import {\n DependencyMapType,\n IResource,\n ITask,\n RegisterableItems,\n ITaskMiddleware,\n IResourceMiddleware,\n ITag,\n} from \"../defs\";\nimport {\n findCircularDependencies,\n IDependentNode,\n} from \"./utils/findCircularDependencies\";\nimport { globalEventsArray } from \"../globals/globalEvents\";\nimport {\n CircularDependenciesError,\n StoreAlreadyInitializedError,\n EventEmissionCycleError,\n} from \"../errors\";\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { StoreRegistry } from \"./StoreRegistry\";\nimport { OverrideManager } from \"./OverrideManager\";\nimport { StoreValidator } from \"./StoreValidator\";\nimport {\n ResourceStoreElementType,\n TaskStoreElementType,\n TaskMiddlewareStoreElementType,\n ResourceMiddlewareStoreElementType,\n EventStoreElementType,\n} from \"../types/storeTypes\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { globalResources } from \"../globals/globalResources\";\nimport { requireContextTaskMiddleware } from \"../globals/middleware/requireContext.middleware\";\nimport {\n retryTaskMiddleware,\n retryResourceMiddleware,\n} from \"../globals/middleware/retry.middleware\";\nimport {\n timeoutTaskMiddleware,\n timeoutResourceMiddleware,\n} from \"../globals/middleware/timeout.middleware\";\nimport { OnUnhandledError } from \"./UnhandledError\";\nimport { globalTags } from \"../globals/globalTags\";\nimport { MiddlewareManager } from \"./MiddlewareManager\";\n\n// Re-export types for backward compatibility\nexport {\n ResourceStoreElementType,\n TaskStoreElementType,\n EventStoreElementType,\n};\n\n/**\n * Store class which is used to store all the resources, tasks, middleware and events.\n */\nexport class Store {\n root!: ResourceStoreElementType;\n private registry: StoreRegistry;\n private overrideManager: OverrideManager;\n private validator: StoreValidator;\n private taskRunner?: TaskRunner;\n private middlewareManager!: MiddlewareManager;\n\n #isLocked = false;\n #isInitialized = false;\n\n constructor(\n protected readonly eventManager: EventManager,\n protected readonly logger: Logger,\n public readonly onUnhandledError: OnUnhandledError,\n ) {\n this.registry = new StoreRegistry(this);\n this.validator = this.registry.getValidator();\n this.overrideManager = new OverrideManager(this.registry);\n this.middlewareManager = new MiddlewareManager(this, eventManager, logger);\n }\n\n // Delegate properties to registry\n get tasks() {\n return this.registry.tasks;\n }\n get hooks() {\n return this.registry.hooks;\n }\n get resources() {\n return this.registry.resources;\n }\n get events() {\n return this.registry.events;\n }\n get taskMiddlewares() {\n return this.registry.taskMiddlewares;\n }\n get resourceMiddlewares() {\n return this.registry.resourceMiddlewares;\n }\n get tags() {\n return this.registry.tags;\n }\n get overrides() {\n return this.overrideManager.overrides;\n }\n get overrideRequests() {\n return this.overrideManager.overrideRequests;\n }\n\n // Expose the shared MiddlewareManager instance so other components (like TaskRunner)\n // can compose runners using the same interceptor configuration.\n public getMiddlewareManager(): MiddlewareManager {\n return this.middlewareManager;\n }\n\n get isLocked() {\n return this.#isLocked;\n }\n\n lock() {\n this.#isLocked = true;\n }\n\n checkLock() {\n if (this.#isLocked) {\n throw new Error(\"Cannot modify the Store when it is locked.\");\n }\n }\n\n private registerGlobalComponents() {\n const builtInResourcesMap = new Map<\n IResource<any, any, any, any, any>,\n any\n >();\n builtInResourcesMap.set(globalResources.store, this);\n builtInResourcesMap.set(globalResources.eventManager, this.eventManager);\n builtInResourcesMap.set(globalResources.logger, this.logger);\n builtInResourcesMap.set(globalResources.taskRunner, this.taskRunner!);\n builtInResourcesMap.set(\n globalResources.middlewareManager,\n this.middlewareManager,\n );\n\n this.registry.storeGenericItem(globalResources.queue);\n\n for (const [resource, value] of builtInResourcesMap.entries()) {\n this.registry.storeGenericItem(resource);\n const entry = this.resources.get(resource.id);\n if (entry) {\n entry.value = value;\n entry.isInitialized = true;\n }\n }\n\n // Register global tags\n Object.values(globalTags).forEach((tag) => {\n this.registry.storeTag(tag);\n });\n\n // Register global events\n globalEventsArray.forEach((event) => {\n this.registry.storeEvent(event);\n });\n\n // Register built-in middlewares\n // Built-in middlewares currently target tasks only; adjust as needed per kind\n const builtInTaskMiddlewares = [\n requireContextTaskMiddleware,\n retryTaskMiddleware,\n timeoutTaskMiddleware,\n ];\n builtInTaskMiddlewares.forEach((middleware) => {\n this.registry.taskMiddlewares.set(middleware.id, {\n middleware: middleware as any,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n\n const builtInResourceMiddlewares = [\n retryResourceMiddleware,\n timeoutResourceMiddleware,\n ];\n builtInResourceMiddlewares.forEach((middleware) => {\n this.registry.resourceMiddlewares.set(middleware.id, {\n middleware: middleware as any,\n computedDependencies: {},\n isInitialized: false,\n });\n });\n }\n\n public setTaskRunner(taskRunner: TaskRunner) {\n this.taskRunner = taskRunner;\n }\n\n private setupRootResource(root: IResource<any>, config: any) {\n root.dependencies =\n typeof root.dependencies === \"function\"\n ? root.dependencies(config)\n : root.dependencies;\n\n this.root = {\n resource: root,\n computedDependencies: {},\n config,\n value: undefined,\n isInitialized: false,\n context: {},\n };\n\n this.registry.computeRegistrationDeeply(root, config);\n this.registry.resources.set(root.id, this.root);\n }\n\n public validateDependencyGraph() {\n // We verify that there isn't any circular dependencies before we begin computing the dependencies\n const dependentNodes = this.registry.getDependentNodes();\n const circularDependencies = findCircularDependencies(dependentNodes);\n if (circularDependencies.cycles.length > 0) {\n throw new CircularDependenciesError(circularDependencies.cycles);\n }\n }\n\n public validateEventEmissionGraph() {\n const eventNodes = this.registry.buildEventEmissionGraph();\n const circular = findCircularDependencies(eventNodes);\n if (circular.cycles.length > 0) {\n throw new EventEmissionCycleError(circular.cycles);\n }\n }\n\n public initializeStore(\n root: IResource<any, any, any, any, any>,\n config: any,\n ) {\n if (this.#isInitialized) {\n throw new StoreAlreadyInitializedError();\n }\n\n this.registerGlobalComponents();\n this.setupRootResource(root, config);\n this.validator.runSanityChecks();\n\n for (const resource of this.resources.values()) {\n this.overrideManager.storeOverridesDeeply(resource.resource);\n }\n\n this.#isInitialized = true;\n }\n\n public async dispose() {\n for (const resource of this.resources.values()) {\n if (resource.isInitialized && resource.resource.dispose) {\n await resource.resource.dispose(\n resource.value,\n resource.config,\n resource.computedDependencies as any,\n resource.context,\n );\n }\n }\n }\n\n public processOverrides() {\n this.overrideManager.processOverrides();\n }\n\n public storeGenericItem<C>(item: RegisterableItems) {\n return this.registry.storeGenericItem<C>(item);\n }\n\n /**\n * Returns all tasks with the given tag.\n * @param tag - The tag to filter by.\n * @returns The tasks with the given tag.\n */\n public getTasksWithTag(tag: string | ITag) {\n return this.registry.getTasksWithTag(tag);\n }\n\n public getResourcesWithTag(tag: string | ITag) {\n return this.registry.getResourcesWithTag(tag);\n }\n}\n","import { ITaggable } from \"../../../defs\";\nimport { debugTag } from \"./debug.tag\";\n\nexport type DebugConfig = {\n logResourceConfig: boolean;\n logResourceValue: boolean;\n logResourceBeforeRun: boolean;\n logResourceAfterRun: boolean;\n logTaskBeforeRun: boolean;\n logTaskInput: boolean;\n logTaskOutput: boolean;\n logTaskAfterRun: boolean;\n logMiddlewareBeforeRun: boolean;\n logMiddlewareAfterRun: boolean;\n logEventEmissionOnRun: boolean;\n logEventEmissionInput: boolean;\n logHookTriggered: boolean;\n logHookCompleted: boolean;\n};\n\nexport const allFalse: DebugConfig = Object.freeze({\n logResourceBeforeRun: false,\n logResourceAfterRun: false,\n logMiddlewareBeforeRun: false,\n logMiddlewareAfterRun: false,\n logTaskBeforeRun: false,\n logTaskAfterRun: false,\n logTaskInput: false,\n logTaskOutput: false,\n logResourceConfig: false,\n logResourceValue: false,\n logHookTriggered: false,\n logHookCompleted: false,\n logEventEmissionOnRun: false,\n logEventEmissionInput: false,\n});\n\nexport const levelNormal: DebugConfig = Object.freeze({\n ...allFalse,\n logTaskAfterRun: true,\n logTaskBeforeRun: true,\n logResourceBeforeRun: true,\n logResourceAfterRun: true,\n logMiddlewareBeforeRun: true,\n logMiddlewareAfterRun: true,\n logHookTriggered: true,\n logHookCompleted: true,\n logEventEmissionOnRun: true,\n});\n\nObject.freeze(levelNormal);\n\nexport const levelVerbose: DebugConfig = Object.freeze({\n ...levelNormal,\n logTaskInput: true,\n logTaskOutput: true,\n logResourceConfig: true,\n logResourceValue: true,\n logHookTriggered: true,\n logHookCompleted: true,\n});\n\nObject.freeze(levelVerbose);\n\n/**\n * If you choose to specify your own config, all values will be set to false by default and extended by your config.\n */\nexport type DebugFriendlyConfig = \"normal\" | \"verbose\" | Partial<DebugConfig>;\n\nfunction formatConfig(config: DebugFriendlyConfig): DebugConfig {\n if (config === \"normal\") {\n return { ...levelNormal };\n }\n if (config === \"verbose\") {\n return { ...levelVerbose };\n }\n return { ...allFalse, ...config };\n}\n\nexport const getConfig = (\n config: DebugFriendlyConfig,\n taggable?: ITaggable,\n): DebugConfig => {\n if (!taggable) {\n return formatConfig(config);\n }\n const debugTagConfig = debugTag.extract(taggable);\n\n if (debugTagConfig) {\n const debugTagConfigFormatted = formatConfig(debugTagConfig);\n return { ...formatConfig(config), ...debugTagConfigFormatted };\n }\n\n return formatConfig(config);\n};\n","import { defineResource } from \"../../../define\";\nimport { DebugFriendlyConfig, getConfig } from \"./types\";\nimport { globalTags } from \"../../../globals/globalTags\";\n\nexport const debugConfig = defineResource({\n id: \"globals.debug.resources.config\",\n meta: {\n title: \"Debug Config\",\n description: \"Debug config. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n init: async (config: DebugFriendlyConfig) => {\n const myConfig = { ...getConfig(config) };\n\n Object.freeze(myConfig);\n return myConfig;\n },\n});\n","import { ITaggable } from \"../../../defs\";\nimport { globalTags } from \"../../globalTags\";\n\nexport const hasSystemTag = (definition: ITaggable) => {\n const maybeTags = definition.tags;\n if (!Array.isArray(maybeTags)) {\n return false;\n }\n return globalTags.system.exists(definition);\n};\n","import { defineHook } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\nimport { globalEvents } from \"../../globalEvents\";\n\nexport const globalEventListener = defineHook({\n id: \"globals.debug.hooks.onAnyEvent\",\n on: \"*\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n },\n run: async (event, { logger, debugConfig }) => {\n if (hasSystemTag(event)) {\n return;\n }\n\n debugConfig = getConfig(debugConfig, event!);\n if (debugConfig.logEventEmissionOnRun) {\n const message = `Event ${String(event!.id)} emitted`;\n await logger.info(message, {\n source: \"globals.debug.hooks.onAnyEvent\",\n data: debugConfig.logEventEmissionInput\n ? { data: event!.data }\n : undefined,\n });\n }\n },\n meta: {\n title: \"Non-system Event Logger\",\n description: \"Logs all non-system events.\",\n },\n tags: [globalTags.system],\n});\n","import {\n defineTaskMiddleware,\n defineResourceMiddleware,\n} from \"../../../define\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\n\nexport const tasksTrackerMiddleware = defineTaskMiddleware({\n id: \"globals.debug.middleware.task.executionTracker\",\n everywhere: (task) => !globalTags.system.exists(task),\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n run: async ({ task, next }, { logger, debugConfig, store }) => {\n const start = Date.now();\n logger = logger.with({\n source: tasksTrackerMiddleware.id,\n });\n\n debugConfig = getConfig(debugConfig, task?.definition);\n const taskStartMessage = `Task ${task!.definition.id} is running...`;\n const shouldShowData = debugConfig.logTaskInput && task!.input;\n await logger.info(taskStartMessage, {\n data: shouldShowData ? { input: task!.input } : undefined,\n });\n\n const result = await next(task!.input);\n const duration = Date.now() - start;\n const taskCompleteMessage = `Task ${\n task!.definition.id\n } completed in ${duration}ms`;\n const shouldShowResult = debugConfig.logTaskOutput && result;\n await logger.info(taskCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n\nexport const resourcesTrackerMiddleware = defineResourceMiddleware({\n id: \"globals.debug.middleware.resource.executionTracker\",\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n store: globalResources.store,\n },\n everywhere: (resource) => !globalTags.system.exists(resource),\n run: async ({ resource, next }, { logger, debugConfig, store }) => {\n const start = Date.now();\n logger = logger.with({\n source: resourcesTrackerMiddleware.id,\n });\n debugConfig = getConfig(debugConfig, resource?.definition);\n const resourceStartMessage = `Resource ${\n resource!.definition.id\n } is initializing...`;\n\n const isConfigEmpty = Object.keys(resource!.config || {}).length === 0;\n const shouldShowConfig = debugConfig.logResourceConfig && !isConfigEmpty;\n\n await logger.info(resourceStartMessage, {\n data: shouldShowConfig ? { config: resource!.config } : undefined,\n });\n\n const result = await next(resource!.config);\n const duration = Date.now() - start;\n const resourceCompleteMessage = `Resource ${String(\n resource!.definition.id,\n )} initialized in ${duration}ms`;\n const shouldShowResult =\n debugConfig.logResourceValue && result !== undefined;\n\n await logger.info(resourceCompleteMessage, {\n data: shouldShowResult ? { result } : undefined,\n });\n return result;\n },\n meta: {\n title: \"Execution Tracker\",\n description: \"Tracks the execution of tasks and resources.\",\n },\n tags: [globalTags.system],\n});\n","import { defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { getConfig } from \"./types\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { hasSystemTag } from \"./utils\";\nimport { ITaskMiddlewareExecutionInput } from \"../../../types/taskMiddleware\";\nimport { IResourceMiddlewareExecutionInput } from \"../../../types/resourceMiddleware\";\n\nconst id = \"globals.debug.resources.middlewareInterceptor\";\nexport const middlewareInterceptorResource = defineResource({\n id,\n meta: {\n title: \"Middleware Interceptor\",\n description:\n \"Intercepts task and resource middleware, skipping system-tagged entities.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n middlewareManager: globalResources.middlewareManager,\n },\n init: async (event, deps) => {\n const { logger, debugConfig, middlewareManager } = deps;\n\n // Task middleware interceptor\n middlewareManager.intercept(\n \"task\",\n async (\n next: (input: ITaskMiddlewareExecutionInput<any>) => Promise<any>,\n input: ITaskMiddlewareExecutionInput<any>,\n ) => {\n const taskDef = input.task.definition;\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(taskDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for task ${String(taskDef.id)}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n\n // Resource middleware interceptor\n middlewareManager.intercept(\n \"resource\",\n async (\n next: (input: IResourceMiddlewareExecutionInput<any>) => Promise<any>,\n input: IResourceMiddlewareExecutionInput<any>,\n ) => {\n const resourceDef = input.resource.definition;\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareBeforeRun) {\n const msg = `Middleware triggered for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n const result = await next(input);\n\n if (!hasSystemTag(resourceDef)) {\n const cfg = getConfig(debugConfig, event!);\n if (cfg.logMiddlewareAfterRun) {\n const msg = `Middleware completed for resource ${String(\n resourceDef.id,\n )}`;\n await logger.info(msg, {\n source: id,\n });\n }\n }\n\n return result;\n },\n );\n },\n});\n","import { defineHook, defineResource } from \"../../../define\";\nimport { globalResources } from \"../../globalResources\";\nimport { globalTags } from \"../../globalTags\";\nimport { hasSystemTag } from \"./utils\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { getConfig } from \"./types\";\nimport { globalEvents } from \"../../globalEvents\";\nimport { safeStringify } from \"../../../models/utils/safeStringify\";\n\nexport const hookInterceptorResource = defineResource({\n id: \"globals.debug.resources.hookInterceptor\",\n meta: {\n title: \"Hook Interceptor\",\n description:\n \"Intercepts hooks for debug logging, skipping system-tagged hooks.\",\n },\n tags: [globalTags.system],\n dependencies: {\n logger: globalResources.logger,\n debugConfig,\n eventManager: globalResources.eventManager,\n },\n init: async (event, deps) => {\n deps.eventManager.interceptHook(async (next, hook, event) => {\n const { logger, debugConfig } = deps;\n\n // Skip logging for system-tagged observability events\n if (hasSystemTag(hook)) {\n return await next(hook, event);\n }\n\n const resolved = getConfig(debugConfig, event!);\n if (resolved.logHookTriggered) {\n const hookId = hook.id;\n let logString = `Hook triggered for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n\n await next(hook, event);\n\n if (resolved.logHookCompleted) {\n const hookId = hook.id;\n let logString = `Hook completed for ${String(hookId)}`;\n await logger.info(logString, {\n source: \"globals.debug.resources.hookInterceptor\",\n });\n }\n });\n },\n});\n","import { defineResource } from \"../../../define\";\nimport { debugConfig } from \"./debugConfig.resource\";\nimport { DebugFriendlyConfig } from \"./types\";\nimport { globalEventListener } from \"./globalEvent.hook\";\nimport {\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n} from \"./executionTracker.middleware\";\nimport { globalTags } from \"../../globalTags\";\nimport { middlewareInterceptorResource } from \"./middleware.hook\";\nimport { hookInterceptorResource } from \"./hook.hook\";\n\nexport const debugResource = defineResource({\n id: \"globals.resources.debug\",\n register: (config: DebugFriendlyConfig) => {\n return [\n debugConfig.with(config),\n globalEventListener,\n middlewareInterceptorResource,\n hookInterceptorResource,\n tasksTrackerMiddleware,\n resourcesTrackerMiddleware,\n ];\n },\n meta: {\n title: \"Debug\",\n description: \"Debug resource. This is used to debug the system.\",\n },\n tags: [globalTags.system],\n});\n","import { getPlatform } from \"./platform\";\nimport { PlatformUnsupportedFunction } from \"./errors\";\n\nconst platform = getPlatform();\n\n// Global registry of active error handlers for process-level safety nets\nconst activeErrorHandlers = new Set<\n (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>\n>();\nlet processSafetyNetsInstalled = false;\n\nfunction installGlobalProcessSafetyNetsOnce() {\n if (processSafetyNetsInstalled) return;\n processSafetyNetsInstalled = true;\n const onUncaughtException = async (err: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(err, \"uncaughtException\");\n } catch (_) {}\n }\n };\n const onUnhandledRejection = async (reason: any) => {\n for (const handler of activeErrorHandlers) {\n try {\n await handler(reason, \"unhandledRejection\");\n } catch (_) {}\n }\n };\n platform.onUncaughtException(onUncaughtException);\n platform.onUnhandledRejection(onUnhandledRejection);\n}\n\nexport function registerProcessLevelSafetyNets(\n handler: (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n ) => void | Promise<void>,\n) {\n installGlobalProcessSafetyNetsOnce();\n activeErrorHandlers.add(handler);\n return () => {\n activeErrorHandlers.delete(handler);\n };\n}\n\n// Global shutdown registry: one listener per signal, dispatching to active disposers\nconst activeDisposers = new Set<() => Promise<void>>();\nlet shutdownHooksInstalled = false;\n\nfunction installGlobalShutdownHooksOnce() {\n if (shutdownHooksInstalled) return;\n shutdownHooksInstalled = true;\n const handler = async () => {\n try {\n const disposers = Array.from(activeDisposers);\n for (const d of disposers) {\n try {\n await d();\n } catch {}\n activeDisposers.delete(d);\n }\n } finally {\n try {\n platform.exit(0);\n } catch (e) {\n if (!(e instanceof PlatformUnsupportedFunction)) {\n throw e;\n }\n }\n }\n };\n platform.onShutdownSignal(handler);\n}\n\nexport function registerShutdownHook(disposeOnce: () => Promise<void>) {\n installGlobalShutdownHooksOnce();\n activeDisposers.add(disposeOnce);\n return () => {\n activeDisposers.delete(disposeOnce);\n };\n}\n","import { Logger } from \"./Logger\";\n\nexport type UnhandledErrorKind =\n | \"process\"\n | \"task\"\n | \"middleware\"\n | \"resourceInit\"\n | \"hook\"\n | \"run\";\n\nexport interface OnUnhandledErrorInfo {\n error: unknown;\n kind?: UnhandledErrorKind;\n source?: string;\n}\n\nexport type OnUnhandledError = (\n info: OnUnhandledErrorInfo,\n) => void | Promise<void>;\n\nexport function createDefaultUnhandledError(logger: Logger): OnUnhandledError {\n return async ({ error, kind, source }: OnUnhandledErrorInfo) => {\n const normalizedError =\n error instanceof Error ? error : new Error(String(error));\n\n await logger.error(`${normalizedError.toString()}`, {\n source,\n error: normalizedError,\n data: {\n kind,\n },\n });\n };\n}\n\nexport function bindProcessErrorHandler(\n handler: OnUnhandledError,\n): (\n error: unknown,\n source: \"uncaughtException\" | \"unhandledRejection\",\n) => void | Promise<void> {\n return async (error, source) => {\n try {\n await handler({ error, kind: \"process\", source });\n } catch {}\n };\n}\n\nexport async function safeReportUnhandledError(\n handler: OnUnhandledError,\n info: OnUnhandledErrorInfo,\n): Promise<void> {\n try {\n await handler(info);\n } catch {}\n}\n","import { DependencyMapType, IEvent, ITask } from \"../defs\";\nimport { IResource } from \"../defs\";\nimport { ResourceNotFoundError, RuntimeError } from \"../errors\";\nimport { EventManager } from \"./EventManager\";\nimport { Logger } from \"./Logger\";\nimport { Store } from \"./Store\";\nimport { TaskRunner } from \"./TaskRunner\";\nimport { OnUnhandledError } from \"./UnhandledError\";\n\nexport class RunResult<V> {\n constructor(\n public readonly value: V,\n public readonly logger: Logger,\n public readonly store: Store,\n private readonly eventManager: EventManager,\n private readonly taskRunner: TaskRunner,\n private readonly disposeFn: () => Promise<void>,\n ) {}\n\n /**\n * Run a task within the context of the run result.\n * @param task - The task to run.\n * @param args - The arguments to pass to the task.\n * @returns The result of the task.\n */\n public runTask = <\n I = undefined,\n O extends Promise<any> = any,\n D extends DependencyMapType = any,\n >(\n task: ITask<I, O, D> | string,\n ...args: I extends undefined | void ? [] : [I]\n ) => {\n if (typeof task === \"string\") {\n const taskId = task;\n if (!this.store.tasks.has(taskId)) {\n throw new RuntimeError(`Task \"${taskId}\" not found.`);\n }\n task = this.store.tasks.get(taskId)!.task;\n }\n\n return this.taskRunner.run(task, ...args);\n };\n\n /**\n * Emit an event within the context of the run result.\n * @param event - The event to emit.\n * @param payload - The payload to emit.\n */\n public emitEvent = <P>(\n event: IEvent<P> | string,\n payload?: P extends undefined | void ? undefined : P,\n ) => {\n if (typeof event === \"string\") {\n const eventId = event;\n if (!this.store.events.has(eventId)) {\n throw new RuntimeError(`Event \"${eventId}\" not found.`);\n }\n event = this.store.events.get(eventId)!.event;\n }\n return this.eventManager.emit(event, payload, \"outside\");\n };\n\n /**\n * Get the value of a resource from the run result.\n * @param resource - The resource to get the value of.\n * @returns The value of the resource.\n */\n public getResourceValue = <Output extends Promise<any>>(\n resource: string | IResource<any, Output, any, any, any>,\n ): Output extends Promise<infer U> ? U : Output => {\n const resourceId = typeof resource === \"string\" ? resource : resource.id;\n if (!this.store.resources.has(resourceId)) {\n throw new ResourceNotFoundError(resourceId);\n }\n\n return this.store.resources.get(resourceId)!.value;\n };\n\n public dispose = () => {\n return this.disposeFn();\n };\n}\n","import { TaskRunner } from \"./models/TaskRunner\";\nimport { IResource, IResourceWithConfig } from \"./defs\";\nimport { DependencyProcessor } from \"./models/DependencyProcessor\";\nimport { EventManager } from \"./models/EventManager\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { Store } from \"./models/Store\";\nimport { findCircularDependencies } from \"./models/utils/findCircularDependencies\";\nimport { CircularDependenciesError } from \"./errors\";\nimport { Logger } from \"./models/Logger\";\nimport { isResourceWithConfig } from \"./define\";\nimport { debugResource } from \"./globals/resources/debug\";\nimport {\n registerProcessLevelSafetyNets,\n registerShutdownHook,\n} from \"./processHooks\";\nimport {\n OnUnhandledError,\n createDefaultUnhandledError,\n bindProcessErrorHandler,\n} from \"./models/UnhandledError\";\nimport { RunResult } from \"./models/RunResult\";\nimport { RunOptions } from \"./types/runner\";\nimport { getPlatform } from \"./platform\";\n\nconst platform = getPlatform();\n\n/**\n * This is the central function that kicks off you runner. You can run as many resources as you want in a single process, they will run in complete isolation.\n *\n * @param resourceOrResourceWithConfig - The resource or resource with config to run.\n * @param options - The options for the run.\n * @returns A promise that resolves to the result of the run.\n */\nexport async function run<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n options?: RunOptions,\n): Promise<RunResult<V extends Promise<infer U> ? U : V>> {\n await platform.init(); // ensure platform is initialized\n const {\n debug = undefined,\n logs = {},\n errorBoundary = true,\n shutdownHooks = true,\n dryRun = false,\n onUnhandledError: onUnhandledErrorOpt,\n runtimeCycleDetection = true,\n } = options || {};\n\n const {\n printThreshold = platform.getEnv(\"NODE_ENV\") === \"test\" ? null : \"info\",\n printStrategy = \"pretty\",\n bufferLogs = false,\n } = logs;\n\n const eventManager = new EventManager({\n runtimeCycleDetection,\n });\n\n let { resource, config } = extractResourceAndConfig(\n resourceOrResourceWithConfig,\n );\n\n // ensure for logger, that it can be used only after: computeAllDependencies() has executed\n const logger = new Logger({\n printThreshold,\n printStrategy,\n bufferLogs,\n });\n\n const onUnhandledError: OnUnhandledError =\n onUnhandledErrorOpt || createDefaultUnhandledError(logger);\n\n const store = new Store(eventManager, logger, onUnhandledError);\n const taskRunner = new TaskRunner(store, eventManager, logger);\n store.setTaskRunner(taskRunner);\n\n // Register this run's event manager for global process error safety nets\n let unhookProcessSafetyNets: (() => void) | undefined;\n if (errorBoundary) {\n unhookProcessSafetyNets = registerProcessLevelSafetyNets(\n bindProcessErrorHandler(onUnhandledError),\n );\n }\n\n const processor = new DependencyProcessor(\n store,\n eventManager,\n taskRunner,\n logger,\n );\n\n // We may install shutdown hooks; capture unhook function to remove them on dispose\n let unhookShutdown: (() => void) | undefined;\n\n // Helper dispose that always unhooks process listeners first\n const disposeAll = async () => {\n try {\n if (unhookProcessSafetyNets) {\n unhookProcessSafetyNets();\n unhookProcessSafetyNets = undefined;\n }\n if (unhookShutdown) {\n unhookShutdown();\n unhookShutdown = undefined;\n }\n } finally {\n await store.dispose();\n }\n };\n\n try {\n if (debug) {\n store.storeGenericItem(debugResource.with(debug));\n }\n\n // In the registration phase we register deeply all the resources, tasks, middleware and events\n store.initializeStore(resource, config);\n\n // the overrides that were registered now will override the other registered resources\n await store.processOverrides();\n\n store.validateDependencyGraph();\n // Compile-time event emission cycle detection (cheap, graph-based)\n store.validateEventEmissionGraph();\n\n const boundedLogger = logger.with({ source: \"run\" });\n if (dryRun) {\n await boundedLogger.debug(\"Dry run mode. Skipping initialization...\");\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n }\n\n // Beginning initialization\n await boundedLogger.debug(\"Events stored. Attaching listeners...\");\n await processor.attachListeners();\n await boundedLogger.debug(\"Listeners attached. Computing dependencies...\");\n await processor.computeAllDependencies();\n // After this stage, logger print policy could have been set.\n await boundedLogger.debug(\n \"Dependencies computed. Proceeding with initialization...\",\n );\n\n // Now we can safely compute dependencies without being afraid of an infinite loop.\n // The hooking part is done here.\n\n // Now we can initialise the root resource\n await processor.initializeRoot();\n\n // disallow manipulation or attaching more\n store.lock();\n eventManager.lock();\n await logger.lock();\n\n await eventManager.emit(\n globalEvents.ready,\n {\n root: store.root.resource,\n },\n \"system\",\n );\n\n await boundedLogger.info(\"Runner online. Awaiting tasks and events.\");\n\n if (shutdownHooks) {\n unhookShutdown = registerShutdownHook(() => store.dispose());\n }\n\n return new RunResult(\n store.root.value,\n logger,\n store,\n eventManager,\n taskRunner,\n disposeAll,\n );\n } catch (err) {\n // Rollback initialized resources\n await disposeAll();\n throw err;\n }\n}\n\n// process hooks moved to processHooks.ts for clarity\n\nfunction extractResourceAndConfig<C, V extends Promise<any>>(\n resourceOrResourceWithConfig:\n | IResourceWithConfig<C, V>\n | IResource<void, V, any, any> // For void configs\n | IResource<{ [K in any]?: any }, V, any, any>, // For optional config\n) {\n let resource: IResource<any, any, any, any>;\n let config: any;\n if (isResourceWithConfig(resourceOrResourceWithConfig)) {\n resource = resourceOrResourceWithConfig.resource;\n config = resourceOrResourceWithConfig.config;\n } else {\n resource = resourceOrResourceWithConfig as IResource<any, any, any, any>;\n config = undefined;\n }\n return { resource, config };\n}\n","import { defineResource } from \"./define\";\nimport { globalResources } from \"./globals/globalResources\";\nimport {\n IResource,\n IResourceWithConfig,\n ITaskMiddleware,\n IResourceMiddleware,\n ITask,\n RegisterableItems,\n IEvent,\n IEventEmission,\n DependencyMapType,\n DependencyValuesType,\n} from \"./defs\";\nimport { EventManager, Logger, Store, TaskRunner } from \"./models\";\nimport { ResourceNotFoundError } from \"./errors\";\n\nlet testResourceCounter = 0;\n\n/**\n * Helper to create a minimal test harness resource that wraps a root app (or any registerable)\n * and exposes convenient testing utilities while running the full ecosystem\n * (registration, overrides, middleware, events) without modifying the core API.\n * @deprecated Use `run` instead with your testResource, as it provides the necessary toolkit.\n */\nexport function createTestResource(\n root: RegisterableItems,\n options?: {\n overrides?: Array<\n | IResource\n | ITask\n | ITaskMiddleware\n | IResourceMiddleware\n | IResourceWithConfig\n >;\n },\n): IResource<void, Promise<ReturnType<typeof buildTestFacade>>> {\n return defineResource({\n id: `testing.${root.id}.${++testResourceCounter}`,\n register: [root],\n overrides: options?.overrides || [],\n dependencies: {\n taskRunner: globalResources.taskRunner,\n store: globalResources.store,\n logger: globalResources.logger,\n eventManager: globalResources.eventManager,\n },\n async init(_, deps) {\n return buildTestFacade(deps);\n },\n });\n}\nfunction buildTestFacade(deps: {\n taskRunner: TaskRunner;\n store: Store;\n logger: Logger;\n eventManager: EventManager;\n}) {\n return {\n // Run a task within the fully initialized ecosystem\n runTask: <I, O extends Promise<any>, D extends DependencyMapType>(\n task: ITask<I, O, D>,\n ...args: I extends undefined ? [] : [I]\n ): Promise<Awaited<O> | undefined> =>\n deps.taskRunner.run(task, ...args) as any,\n // Access a resource value by id (string or symbol)\n getResource: (id: string) => deps.store.resources.get(id)?.value,\n // Expose internals when needed in tests (not recommended for app usage)\n taskRunner: deps.taskRunner,\n store: deps.store,\n logger: deps.logger,\n eventManager: deps.eventManager,\n };\n}\n","interface WaitingOperation {\n resolve: () => void;\n reject: (error: Error) => void;\n timeout?: NodeJS.Timeout;\n abortController?: AbortController;\n}\n\n/**\n * A semaphore that limits the number of concurrent operations.\n * Used to prevent connection pool exhaustion by limiting concurrent\n * database operations to the pool size.\n */\nexport class Semaphore {\n private permits: number;\n private readonly waitingQueue: Array<WaitingOperation> = [];\n private disposed = false;\n private readonly maxPermits: number;\n\n constructor(maxPermits: number) {\n if (maxPermits <= 0) {\n throw new Error(\"maxPermits must be greater than 0\");\n }\n this.permits = maxPermits;\n this.maxPermits = maxPermits;\n }\n\n /**\n * Acquire a permit. If no permits are available, waits until one becomes available.\n */\n async acquire(options?: {\n timeout?: number;\n signal?: AbortSignal;\n }): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Semaphore has been disposed\");\n }\n\n if (options?.signal?.aborted) {\n throw new Error(\"Operation was aborted\");\n }\n\n if (this.permits > 0) {\n this.permits--;\n return;\n }\n\n // No permits available, wait in queue\n return new Promise<void>((resolve, reject) => {\n const operation: WaitingOperation = { resolve, reject };\n\n // Set up timeout if provided\n if (options?.timeout && options.timeout > 0) {\n operation.timeout = setTimeout(() => {\n this.removeFromQueue(operation);\n reject(\n new Error(`Semaphore acquire timeout after ${options.timeout}ms`),\n );\n }, options.timeout);\n }\n\n // Set up abort signal if provided\n if (options?.signal) {\n const abortHandler = () => {\n this.removeFromQueue(operation);\n reject(new Error(\"Operation was aborted\"));\n };\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n\n // Clean up the abort listener when operation completes\n const originalResolve = operation.resolve;\n const originalReject = operation.reject;\n\n operation.resolve = () => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalResolve();\n };\n\n operation.reject = (error: Error) => {\n options.signal!.removeEventListener(\"abort\", abortHandler);\n originalReject(error);\n };\n }\n\n this.waitingQueue.push(operation);\n });\n }\n\n /**\n * Release a permit, allowing waiting operations to proceed.\n */\n release(): void {\n if (this.disposed) {\n return;\n }\n\n if (this.waitingQueue.length > 0) {\n // Give permit directly to next waiting operation\n const nextOperation = this.waitingQueue.shift()!;\n\n // Clear timeout if it exists\n if (nextOperation.timeout) {\n clearTimeout(nextOperation.timeout);\n }\n\n nextOperation.resolve();\n } else {\n // No one waiting, increment available permits (but don't exceed max)\n this.permits = Math.min(this.permits + 1, this.maxPermits);\n }\n }\n\n private removeFromQueue(operation: WaitingOperation): void {\n const index = this.waitingQueue.indexOf(operation);\n if (index !== -1) {\n this.waitingQueue.splice(index, 1);\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n }\n }\n\n /**\n * Execute a function with a permit, automatically releasing it afterwards.\n */\n async withPermit<T>(\n fn: () => Promise<T>,\n options?: { timeout?: number; signal?: AbortSignal },\n ): Promise<T> {\n await this.acquire(options);\n try {\n return await fn();\n } finally {\n this.release();\n }\n }\n\n /**\n * Dispose the semaphore, rejecting all waiting operations and preventing new ones.\n */\n dispose(): void {\n if (this.disposed) {\n return;\n }\n\n this.disposed = true;\n\n // Reject all waiting operations\n while (this.waitingQueue.length > 0) {\n const operation = this.waitingQueue.shift()!;\n\n // Clear timeout if it exists\n if (operation.timeout) {\n clearTimeout(operation.timeout);\n }\n\n operation.reject(new Error(\"Semaphore has been disposed\"));\n }\n }\n\n /**\n * Get current number of available permits (for debugging)\n */\n getAvailablePermits(): number {\n return this.permits;\n }\n\n /**\n * Get current number of waiting operations (for debugging)\n */\n getWaitingCount(): number {\n return this.waitingQueue.length;\n }\n\n /**\n * Get maximum number of permits\n */\n getMaxPermits(): number {\n return this.maxPermits;\n }\n\n /**\n * Check if the semaphore has been disposed\n */\n isDisposed(): boolean {\n return this.disposed;\n }\n\n /**\n * Get metrics about the current state of the semaphore\n */\n getMetrics(): {\n availablePermits: number;\n waitingCount: number;\n maxPermits: number;\n utilization: number;\n disposed: boolean;\n } {\n return {\n availablePermits: this.permits,\n waitingCount: this.waitingQueue.length,\n maxPermits: this.maxPermits,\n utilization: (this.maxPermits - this.permits) / this.maxPermits,\n disposed: this.disposed,\n };\n }\n}\n","import {\n defineTask,\n defineResource,\n defineEvent,\n defineTaskMiddleware,\n defineResourceMiddleware,\n defineTag,\n defineOverride,\n defineHook,\n} from \"./define\";\nimport { createContext } from \"./context\";\nimport { globalEvents } from \"./globals/globalEvents\";\nimport { globalResources } from \"./globals/globalResources\";\nimport { globalMiddlewares } from \"./globals/globalMiddleware\";\nimport { globalTags } from \"./globals/globalTags\";\nimport { run } from \"./run\";\nimport { createTestResource } from \"./testing\";\n\nconst globals = {\n events: globalEvents,\n resources: globalResources,\n middleware: globalMiddlewares,\n tags: globalTags,\n};\n\nexport { globals };\nexport {\n defineTask as task,\n defineResource as resource,\n defineEvent as event,\n defineTaskMiddleware as taskMiddleware,\n defineResourceMiddleware as resourceMiddleware,\n defineTag as tag,\n defineOverride as override,\n defineHook as hook,\n run,\n createContext,\n createTestResource,\n};\n\nexport * as definitions from \"./defs\";\nexport * from \"./models\";\nexport * from \"./globals/types\";\nexport * as Errors from \"./errors\";\nexport { Context } from \"./context\";\n\n// Re-export types at the package root so consumer declaration emits can reference them directly\nexport type * from \"./defs\";\n"]}
|