@powerhousedao/connect 6.0.0-dev.53 → 6.0.0-dev.54

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.
Files changed (226) hide show
  1. package/dist/assets/AddDriveModal-CUlc2LVq.js +2 -0
  2. package/dist/assets/AddDriveModal-CUlc2LVq.js.map +1 -0
  3. package/dist/assets/AnalyticsSubscriptionManager-B5G_L5RP.js +3 -0
  4. package/dist/assets/AnalyticsSubscriptionManager-B5G_L5RP.js.map +1 -0
  5. package/dist/assets/ClearStorageModal-xiZInXK_.js +2 -0
  6. package/dist/assets/ClearStorageModal-xiZInXK_.js.map +1 -0
  7. package/dist/assets/CookiesPolicyModal-DVXJp787.js +2 -0
  8. package/dist/assets/CookiesPolicyModal-DVXJp787.js.map +1 -0
  9. package/dist/assets/CreateDocumentModal-Cjpq1PBD.js +2 -0
  10. package/dist/assets/CreateDocumentModal-Cjpq1PBD.js.map +1 -0
  11. package/dist/assets/DebugSettingsModal-BvEPWw2E.js +7 -0
  12. package/dist/assets/DebugSettingsModal-BvEPWw2E.js.map +1 -0
  13. package/dist/assets/DeleteDriveModal-BEq8v3-E.js +2 -0
  14. package/dist/assets/DeleteDriveModal-BEq8v3-E.js.map +1 -0
  15. package/dist/assets/DeleteItemModal-B3ziER8J.js +2 -0
  16. package/dist/assets/DeleteItemModal-B3ziER8J.js.map +1 -0
  17. package/dist/assets/DisclaimerModal-CFnBcICu.js +2 -0
  18. package/dist/assets/DisclaimerModal-CFnBcICu.js.map +1 -0
  19. package/dist/assets/DriveSettingsModal-BOdnkWJn.js +2 -0
  20. package/dist/assets/DriveSettingsModal-BOdnkWJn.js.map +1 -0
  21. package/dist/assets/ExportDocumentWithErrorsModal--uHwELhU.js +2 -0
  22. package/dist/assets/ExportDocumentWithErrorsModal--uHwELhU.js.map +1 -0
  23. package/dist/assets/SettingsModal-BntFjuQb.js +2 -0
  24. package/dist/assets/SettingsModal-BntFjuQb.js.map +1 -0
  25. package/dist/assets/UpgradeDriveModal-DmbwNsbG.js +2 -0
  26. package/dist/assets/UpgradeDriveModal-DmbwNsbG.js.map +1 -0
  27. package/dist/assets/__vite-browser-external-D7Ct-6yo.js +2 -0
  28. package/dist/assets/__vite-browser-external-D7Ct-6yo.js.map +1 -0
  29. package/dist/assets/_virtual_ph_external-packages-CM1tCR4L.js +1 -0
  30. package/dist/assets/_virtual_ph_external-packages-CM1tCR4L.js.map +1 -0
  31. package/dist/assets/analytics-2CJbiDed.js +3 -0
  32. package/dist/assets/analytics-2CJbiDed.js.map +1 -0
  33. package/dist/assets/ccip-BEAjQRKG.js +2 -0
  34. package/dist/assets/ccip-BEAjQRKG.js.map +1 -0
  35. package/dist/assets/confirmation-modal-BOwR5ZQq.js +2 -0
  36. package/dist/assets/confirmation-modal-BOwR5ZQq.js.map +1 -0
  37. package/dist/assets/core-BmuZEe8D.js +2 -0
  38. package/dist/assets/core-BmuZEe8D.js.map +1 -0
  39. package/dist/assets/disclosure-BhnV_XS1.js +2 -0
  40. package/dist/assets/disclosure-BhnV_XS1.js.map +1 -0
  41. package/dist/assets/drive-by-id-DvdlB_kB.js +2 -0
  42. package/dist/assets/drive-by-id-DvdlB_kB.js.map +1 -0
  43. package/dist/assets/drives-DjHuIXXn.js +2 -0
  44. package/dist/assets/drives-DjHuIXXn.js.map +1 -0
  45. package/dist/assets/dropdown-menu-BzZBDp_E.js +2 -0
  46. package/dist/assets/dropdown-menu-BzZBDp_E.js.map +1 -0
  47. package/dist/assets/editor-DBekHIfI.js +2 -0
  48. package/dist/assets/editor-DBekHIfI.js.map +1 -0
  49. package/dist/assets/editor-DV2TvDV5.js +46 -0
  50. package/dist/assets/editor-DV2TvDV5.js.map +1 -0
  51. package/dist/assets/exports-CQVZRuji.js +3 -0
  52. package/dist/assets/exports-CQVZRuji.js.map +1 -0
  53. package/dist/assets/form-input-CPs_z-6y.js +2 -0
  54. package/dist/assets/form-input-CPs_z-6y.js.map +1 -0
  55. package/dist/assets/graphql-editor-CcDLLpoK.js +74 -0
  56. package/dist/assets/graphql-editor-CcDLLpoK.js.map +1 -0
  57. package/dist/assets/hmr-BfH10IPs.js +2 -0
  58. package/dist/assets/hmr-BfH10IPs.js.map +1 -0
  59. package/dist/assets/hmr-LMNkvzP7.js +1 -0
  60. package/dist/assets/hmr-LMNkvzP7.js.map +1 -0
  61. package/dist/assets/{hooks-53pCkdY-.js → hooks--iZen3H-.js} +13 -12
  62. package/dist/assets/hooks--iZen3H-.js.map +1 -0
  63. package/dist/assets/index-BDI8rK1R.js +2 -0
  64. package/dist/assets/index-BDI8rK1R.js.map +1 -0
  65. package/dist/assets/index-BWgPOeS2.js +500 -0
  66. package/dist/assets/index-BWgPOeS2.js.map +1 -0
  67. package/dist/assets/index-BeyYTlkr.js +2 -0
  68. package/dist/assets/index-BeyYTlkr.js.map +1 -0
  69. package/dist/assets/index-CUlo2oTb.js +199 -0
  70. package/dist/assets/index-CUlo2oTb.js.map +1 -0
  71. package/dist/assets/index-DN20Z-2K.js +222 -0
  72. package/dist/assets/index-DN20Z-2K.js.map +1 -0
  73. package/dist/assets/index-DPCEN2cB.js +2 -0
  74. package/dist/assets/index-DPCEN2cB.js.map +1 -0
  75. package/dist/assets/index-DcvFnjR9.css +1 -0
  76. package/dist/assets/index-RTtoSfzq.js +2 -0
  77. package/dist/assets/index-RTtoSfzq.js.map +1 -0
  78. package/dist/assets/index-WdPlK4TH.js +32 -0
  79. package/dist/assets/index-WdPlK4TH.js.map +1 -0
  80. package/dist/assets/index.esm-BeYGM8vk.js +2 -0
  81. package/dist/assets/index.esm-BeYGM8vk.js.map +1 -0
  82. package/dist/assets/index.modern-BKQ3hpRq.js +2 -0
  83. package/dist/assets/index.modern-BKQ3hpRq.js.map +1 -0
  84. package/dist/assets/json-editor-CfHUc1UK.js +2 -0
  85. package/dist/assets/json-editor-CfHUc1UK.js.map +1 -0
  86. package/dist/assets/load-D23NmM_n.js +4 -0
  87. package/dist/assets/load-D23NmM_n.js.map +1 -0
  88. package/dist/assets/location-info-N8RPWokW.js +2 -0
  89. package/dist/assets/location-info-N8RPWokW.js.map +1 -0
  90. package/dist/assets/message-list-0i5gk_8j.js +2 -0
  91. package/dist/assets/message-list-0i5gk_8j.js.map +1 -0
  92. package/dist/assets/migrator-CmQyl4ZK.js +78 -0
  93. package/dist/assets/migrator-CmQyl4ZK.js.map +1 -0
  94. package/dist/assets/node-input-DnUl9CxT.js +2 -0
  95. package/dist/assets/node-input-DnUl9CxT.js.map +1 -0
  96. package/dist/assets/nodefs-BP-sxN1O.js +2 -0
  97. package/dist/assets/nodefs-BP-sxN1O.js.map +1 -0
  98. package/dist/assets/nodefs-_NvywCGz.js +1 -0
  99. package/dist/assets/nodefs-_NvywCGz.js.map +1 -0
  100. package/dist/assets/opfs-ahp-DN9nZuJs.js +1 -0
  101. package/dist/assets/opfs-ahp-DN9nZuJs.js.map +1 -0
  102. package/dist/assets/opfs-ahp-DtmzPaVs.js +4 -0
  103. package/dist/assets/opfs-ahp-DtmzPaVs.js.map +1 -0
  104. package/dist/assets/options-CBc6-sTL.js +2 -0
  105. package/dist/assets/options-CBc6-sTL.js.map +1 -0
  106. package/dist/assets/pglite.db-B2bT8QML.js +133 -0
  107. package/dist/assets/pglite.db-B2bT8QML.js.map +1 -0
  108. package/dist/assets/pglite.worker-Ca6pWokV.js +1 -0
  109. package/dist/assets/pglite.worker-Ca6pWokV.js.map +1 -0
  110. package/dist/assets/processor-host-module-B89Dt9nZ.js +3 -0
  111. package/dist/assets/processor-host-module-B89Dt9nZ.js.map +1 -0
  112. package/dist/assets/queue-CxFgA-r3.js +2 -0
  113. package/dist/assets/queue-CxFgA-r3.js.map +1 -0
  114. package/dist/assets/reactor-7tK-WVaY.js +16 -0
  115. package/dist/assets/reactor-7tK-WVaY.js.map +1 -0
  116. package/dist/assets/reactor-Bsjwm88i.js +193 -0
  117. package/dist/assets/reactor-Bsjwm88i.js.map +1 -0
  118. package/dist/assets/reactor-CRqBKYEo.css +1 -0
  119. package/dist/assets/read-required-modal-BKEkfucI.js +2 -0
  120. package/dist/assets/read-required-modal-BKEkfucI.js.map +1 -0
  121. package/dist/assets/renown-CgfQ6oBU.js +2 -0
  122. package/dist/assets/renown-CgfQ6oBU.js.map +1 -0
  123. package/dist/assets/state-schemas-DK8TnzfC.js +3 -0
  124. package/dist/assets/state-schemas-DK8TnzfC.js.map +1 -0
  125. package/dist/assets/tabs-DY_DEdtI.js +2 -0
  126. package/dist/assets/tabs-DY_DEdtI.js.map +1 -0
  127. package/dist/assets/use-get-switchboard-link-B47eB8lt.js +12 -0
  128. package/dist/assets/use-get-switchboard-link-B47eB8lt.js.map +1 -0
  129. package/dist/assets/user-permissions-BJ8c2UOP.js +2 -0
  130. package/dist/assets/user-permissions-BJ8c2UOP.js.map +1 -0
  131. package/dist/assets/vetra-Bu3fuZWc.js +221 -0
  132. package/dist/assets/vetra-Bu3fuZWc.js.map +1 -0
  133. package/dist/index.html +2 -20
  134. package/lib/package.copy.json +3 -4
  135. package/lib/src/components/app-loader.d.ts.map +1 -1
  136. package/lib/src/components/app-loader.js +5 -16
  137. package/lib/src/components/app-loader.js.map +1 -1
  138. package/lib/src/components/index.d.ts +0 -1
  139. package/lib/src/components/index.d.ts.map +1 -1
  140. package/lib/src/components/index.js +0 -1
  141. package/lib/src/components/index.js.map +1 -1
  142. package/lib/src/components/load.d.ts +8 -0
  143. package/lib/src/components/load.d.ts.map +1 -0
  144. package/lib/src/components/load.js +17 -0
  145. package/lib/src/components/load.js.map +1 -0
  146. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.d.ts.map +1 -1
  147. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.js +2 -1
  148. package/lib/src/components/modal/modals/InspectorModal/InspectorModal.js.map +1 -1
  149. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.d.ts +1 -0
  150. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.d.ts.map +1 -1
  151. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.js +2 -0
  152. package/lib/src/components/modal/modals/InspectorModal/useRemotesInspector.js.map +1 -1
  153. package/lib/src/components/modal/modals/SettingsModal.d.ts.map +1 -1
  154. package/lib/src/components/modal/modals/SettingsModal.js +4 -1
  155. package/lib/src/components/modal/modals/SettingsModal.js.map +1 -1
  156. package/lib/src/components/modal/modals-container.d.ts +1 -1
  157. package/lib/src/components/modal/modals-container.d.ts.map +1 -1
  158. package/lib/src/components/modal/modals-container.js +12 -8
  159. package/lib/src/components/modal/modals-container.js.map +1 -1
  160. package/lib/src/main.js +3 -0
  161. package/lib/src/main.js.map +1 -1
  162. package/lib/src/services/storage/base-storage.d.ts.map +1 -1
  163. package/lib/src/services/storage/base-storage.js.map +1 -1
  164. package/lib/src/store/processor-host-module.d.ts.map +1 -1
  165. package/lib/src/store/processor-host-module.js +2 -2
  166. package/lib/src/store/processor-host-module.js.map +1 -1
  167. package/lib/src/store/reactor.d.ts.map +1 -1
  168. package/lib/src/store/reactor.js +1 -1
  169. package/lib/src/store/reactor.js.map +1 -1
  170. package/lib/style.css +15 -0
  171. package/lib/tsconfig.tsbuildinfo +1 -1
  172. package/lib/vite.config.d.ts.map +1 -1
  173. package/lib/vite.config.js +1 -29
  174. package/lib/vite.config.js.map +1 -1
  175. package/package.copy.json +3 -4
  176. package/package.json +12 -13
  177. package/dist/assets/AddDriveModal-BZ11MHBB.js +0 -1
  178. package/dist/assets/ClearStorageModal-BC3gq6BT.js +0 -1
  179. package/dist/assets/CookiesPolicyModal-Bdf-jIqf.js +0 -1
  180. package/dist/assets/CreateDocumentModal-CExWso4S.js +0 -1
  181. package/dist/assets/DebugSettingsModal-MIi3iDrt.js +0 -1
  182. package/dist/assets/DeleteDriveModal-Cj_y-Bmk.js +0 -1
  183. package/dist/assets/DeleteItemModal-DLPEfn21.js +0 -1
  184. package/dist/assets/DisclaimerModal-uqaE0dfB.js +0 -1
  185. package/dist/assets/DriveSettingsModal-0o6Em8ZV.js +0 -1
  186. package/dist/assets/ExportDocumentWithErrorsModal-BWd92B7i.js +0 -1
  187. package/dist/assets/SettingsModal-Ca4V2Rxs.js +0 -1
  188. package/dist/assets/UpgradeDriveModal-ByNuxxET.js +0 -1
  189. package/dist/assets/config-0mYxXHFp.js +0 -1
  190. package/dist/assets/design_system-Q9KmzSmh.js +0 -45
  191. package/dist/assets/design_system_connect-MVhUhmHT.js +0 -47
  192. package/dist/assets/design_system_ui-BQ-CYVFb.js +0 -1
  193. package/dist/assets/document_drive-DiwReQ7A.js +0 -154
  194. package/dist/assets/document_engineering-BMBT2RYA.js +0 -1
  195. package/dist/assets/document_model-ly1Z8uco.js +0 -241
  196. package/dist/assets/document_model_editor-D_cNq26d.js +0 -25
  197. package/dist/assets/drive_explorer-508O2XxT.js +0 -2
  198. package/dist/assets/editor-DAyyI5MD.js +0 -1
  199. package/dist/assets/graphql-BXSeDpaV.js +0 -75
  200. package/dist/assets/graphql-editor-Buhxp36K.js +0 -73
  201. package/dist/assets/graphql_request-BHyPFzlZ.js +0 -3
  202. package/dist/assets/index-B6A7sjLB.css +0 -1
  203. package/dist/assets/index-D0gnc_IY.js +0 -208
  204. package/dist/assets/index-DQyPoyxC.js +0 -149
  205. package/dist/assets/index-DnR9iRBe.js +0 -29
  206. package/dist/assets/json-editor-dXLfmMol.js +0 -1
  207. package/dist/assets/nodefs-2HQmaeC9.js +0 -1
  208. package/dist/assets/nodefs-DzAAA-1u.js +0 -1
  209. package/dist/assets/opfs-ahp-CwNbpJAw.js +0 -3
  210. package/dist/assets/opfs-ahp-xYZANhiQ.js +0 -3
  211. package/dist/assets/postgres-CkP7QCDB.data +0 -0
  212. package/dist/assets/postgres-CyuUVpXN.wasm +0 -0
  213. package/dist/assets/react/jsx-runtime-DldvXD6N.js +0 -1
  214. package/dist/assets/react-D_vzfE_e.js +0 -1
  215. package/dist/assets/react-dom/client-SoBEzBdt.js +0 -9
  216. package/dist/assets/react-dom-Cz_KAjfm.js +0 -1
  217. package/dist/assets/reactor_browser-D2taHyRs.js +0 -136
  218. package/dist/assets/sentry_browser-TIBDlywD.js +0 -498
  219. package/dist/assets/sentry_react-CVx4Qq7f.js +0 -3
  220. package/dist/assets/state-schemas-C876MuV7.js +0 -2
  221. package/dist/assets/tailwind_merge-CXl88Wxt.js +0 -1
  222. package/dist/assets/zod-Cc38s6JG.js +0 -39
  223. package/lib/src/components/modal/index.d.ts +0 -18
  224. package/lib/src/components/modal/index.d.ts.map +0 -1
  225. package/lib/src/components/modal/index.js +0 -18
  226. package/lib/src/components/modal/index.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/pglite.db-B2bT8QML.js","assets/reactor-Bsjwm88i.js","assets/index-DN20Z-2K.js","assets/index-DcvFnjR9.css","assets/vetra-Bu3fuZWc.js","assets/renown-CgfQ6oBU.js","assets/reactor-7tK-WVaY.js","assets/migrator-CmQyl4ZK.js","assets/queue-CxFgA-r3.js","assets/drives-DjHuIXXn.js","assets/reactor-CRqBKYEo.css","assets/analytics-2CJbiDed.js","assets/core-BmuZEe8D.js"])))=>i.map(i=>d[i]);
2
+ import{aS as r}from"./index-DN20Z-2K.js";const s="analytics-db";async function _(){try{const{getDb:t}=await r(async()=>{const{getDb:o}=await import("./pglite.db-B2bT8QML.js");return{getDb:o}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),{createOrGetAnalyticsStore:e}=await r(async()=>{const{createOrGetAnalyticsStore:o}=await import("./analytics-2CJbiDed.js");return{createOrGetAnalyticsStore:o}},__vite__mapDeps([11,2,3,12])),a=await t(),c=await e({databaseName:s});return{relationalDb:a,analyticsStore:c,processorApp:"connect"}}catch(t){console.error("Failed to initialize processor host module:"),console.error(t)}}export{_ as createProcessorHostModule};
3
+ //# sourceMappingURL=processor-host-module-B89Dt9nZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":";yCAEO,MAAMA,EAAsC,eCGnD,eAAsBC,GAEpB,CACA,GAAI,CACF,KAAM,CAAE,MAAAC,CAAA,EAAU,MAAAC,EAAA,sBAAAD,GAAA,KAAM,QAAO,yBAAiB,eAAAA,CAAA,8CAC1C,CAAE,0BAAAE,CAAA,EACN,MAAAD,EAAA,0CAAAC,GAAA,KAAM,QAAO,yBAA0C,mCAAAA,CAAA,iCACnDC,EAAe,MAAMH,EAAA,EACrBI,EAAiB,MAAMF,EAA0B,CACrD,aAAcJ,CAAA,CACf,EAED,MAAO,CACL,aAAAK,EACA,eAAAC,EACA,aAJmB,SAInB,CAEJ,OAASC,EAAO,CACd,QAAQ,MAAM,6CAA6C,EAC3D,QAAQ,MAAMA,CAAK,CACrB,CACF","names":["DEFAULT_ANALYTICS_PROCESSOR_DB_NAME","createProcessorHostModule","getDb","__vitePreload","createOrGetAnalyticsStore","relationalDb","analyticsStore","error"],"ignoreList":[],"sources":["../../../../packages/shared/dist/processors/constants.js","../../src/store/processor-host-module.ts"],"sourcesContent":["export const PROCESSOR_APPS = [\"connect\", \"switchboard\"];\nexport const DEFAULT_RELATIONAL_PROCESSOR_DB_NAME = \"relational-db\";\nexport const DEFAULT_ANALYTICS_PROCESSOR_DB_NAME = \"analytics-db\";\n//# sourceMappingURL=constants.js.map","import {\n DEFAULT_ANALYTICS_PROCESSOR_DB_NAME,\n type IProcessorHostModule,\n} from \"@powerhousedao/shared/processors\";\n\nexport async function createProcessorHostModule(): Promise<\n IProcessorHostModule | undefined\n> {\n try {\n const { getDb } = await import(\"../pglite.db.js\");\n const { createOrGetAnalyticsStore } =\n await import(\"@powerhousedao/reactor-browser/analytics\");\n const relationalDb = await getDb();\n const analyticsStore = await createOrGetAnalyticsStore({\n databaseName: DEFAULT_ANALYTICS_PROCESSOR_DB_NAME,\n });\n const processorApp = \"connect\" as const;\n return {\n relationalDb,\n analyticsStore,\n processorApp,\n };\n } catch (error) {\n console.error(`Failed to initialize processor host module:`);\n console.error(error);\n }\n}\n"],"file":"processor-host-module-B89Dt9nZ.js"}
@@ -0,0 +1,2 @@
1
+ import{b7 as m}from"./index-DN20Z-2K.js";var r;(function(n){n[n.UNKNOWN=-1]="UNKNOWN",n[n.PREPROCESSING=0]="PREPROCESSING",n[n.PENDING=1]="PENDING",n[n.READY=2]="READY",n[n.RUNNING=3]="RUNNING",n[n.RESOLVED=4]="RESOLVED"})(r||(r={}));const d={JOB_AVAILABLE:1e4};class l{_state;_job;onStart;onComplete;onFail;getStateName(e){switch(e){case r.PREPROCESSING:return"PREPROCESSING";case r.PENDING:return"PENDING";case r.READY:return"READY";case r.RUNNING:return"RUNNING";case r.RESOLVED:return"RESOLVED";default:return"UNKNOWN"}}constructor(e,t,s){this._job=e,this._state=t,this.onStart=s?.onStart,this.onComplete=s?.onComplete,this.onFail=s?.onFail}get job(){return this._job}get state(){return this._state}start(){if(this._state!==r.READY)throw new Error(`Cannot start job in state ${this.getStateName(this._state)}`);this._state=r.RUNNING,this.onStart?.()}complete(){if(this._state!==r.RUNNING)throw new Error(`Cannot complete job in state ${this.getStateName(this._state)}`);this._state=r.RESOLVED,this.onComplete?.()}fail(e){if(this._state!==r.RUNNING)throw new Error(`Cannot fail job in state ${this.getStateName(this._state)}`);this._state=r.RESOLVED,this.onFail?.(e)}}class I{eventBus;registry;loader;queues=new Map;jobIdToQueueKey=new Map;docIdToJobId=new Map;jobIdToDocId=new Map;completedJobs=new Set;jobIndex=new Map;isBlocked=!1;onDrainedCallback;isPausedFlag=!1;loadingModels=new Map;failedModelTypes=new Set;constructor(e,t,s){this.eventBus=e,this.registry=t,this.loader=s}toErrorInfo(e){return e instanceof Error?{message:e.message,stack:e.stack||new Error().stack||""}:{message:e,stack:new Error().stack||""}}createQueueKey(e,t,s){return`${e}:${t}:${s}`}getQueue(e){let t=this.queues.get(e);return t||(t=[],this.queues.set(e,t)),t}isDocumentExecuting(e){const t=this.docIdToJobId.get(e);return t?t.size>0:!1}markJobExecuting(e){let t=this.docIdToJobId.get(e.documentId);t||(t=new Set,this.docIdToJobId.set(e.documentId,t)),t.add(e.id),this.jobIdToDocId.set(e.id,e.documentId)}markJobComplete(e,t){const s=this.docIdToJobId.get(t);s&&(s.delete(e),s.size===0&&this.docIdToJobId.delete(t)),this.jobIdToDocId.delete(e)}areDependenciesMet(e){return e.queueHint.length===0?!0:e.queueHint.every(t=>this.completedJobs.has(t))}getNextJobWithMetDependencies(e){for(const t of e)if(this.areDependenciesMet(t))return t;return null}getCreateDocumentType(e){for(const t of e.actions)if(t.type==="CREATE_DOCUMENT")return t.input.model;for(const t of e.operations)if(t.action.type==="CREATE_DOCUMENT")return t.action.input.model}async ensureModelLoaded(e){if(!this.registry)return;try{this.registry.getModule(e);return}catch(o){if(!m.isError(o))throw o}if(!this.loader)throw new Error(`No document model loader configured for type: ${e}`);if(this.failedModelTypes.has(e))throw new Error(`Document model type previously failed to load: ${e}`);const t=this.loadingModels.get(e);if(t)return t;const s=(async()=>{try{const o=await this.loader.load(e);try{this.registry.registerModules(o)}catch{}}catch(o){throw this.failedModelTypes.add(e),o}finally{this.loadingModels.delete(e)}})();return this.loadingModels.set(e,s),s}async enqueue(e){if(this.isBlocked)throw new Error("Queue is blocked");const t=this.createQueueKey(e.documentId,e.scope,e.branch);this.getQueue(t).push(e),this.jobIdToQueueKey.set(e.id,t),this.jobIndex.set(e.id,e);const o=this.getCreateDocumentType(e);if(o)try{await this.ensureModelLoaded(o)}catch{await this.failJob(e.id,{message:`Failed to load document model for type: ${o}`,stack:new Error().stack||""});return}const i={documentId:e.documentId,scope:e.scope,branch:e.branch,jobId:e.id};await this.eventBus.emit(d.JOB_AVAILABLE,i)}dequeue(e,t,s,o){const i=this.createQueueKey(e,t,s),u=this.queues.get(i);if(o?.aborted)return Promise.reject(new Error("Operation aborted"));if(!u||u.length===0)return Promise.resolve(null);const a=this.getNextJobWithMetDependencies(u);if(!a)return Promise.resolve(null);const c=u.indexOf(a);u.splice(c,1),this.jobIdToQueueKey.delete(a.id),this.markJobExecuting(a),u.length===0&&this.queues.delete(i);const h=new l(a,r.READY,{onStart:()=>{},onComplete:()=>{this.completeJob(a.id)},onFail:f=>{this.failJob(a.id,f)}});return Promise.resolve(h)}dequeueNext(e){if(e?.aborted)return Promise.reject(new Error("Operation aborted"));if(this.isPausedFlag)return Promise.resolve(null);for(const[t,s]of this.queues.entries())if(s.length>0){const o=this.getNextJobWithMetDependencies(s);if(!o)continue;if(!this.isDocumentExecuting(o.documentId)){const i=s.indexOf(o);s.splice(i,1),this.jobIdToQueueKey.delete(o.id),this.markJobExecuting(o),s.length===0&&this.queues.delete(t);const u=new l(o,r.READY,{onStart:()=>{},onComplete:()=>{this.completeJob(o.id)},onFail:a=>{this.failJob(o.id,a)}});return Promise.resolve(u)}}return Promise.resolve(null)}size(e,t,s){const o=this.createQueueKey(e,t,s),i=this.queues.get(o);return Promise.resolve(i?i.length:0)}totalSize(){let e=0;for(const t of this.queues.values())e+=t.length;return Promise.resolve(e)}remove(e){const t=this.jobIdToQueueKey.get(e);if(!t)return Promise.resolve(!1);const s=this.queues.get(t);if(!s)return this.jobIdToQueueKey.delete(e),this.jobIndex.delete(e),Promise.resolve(!1);const o=s.findIndex(i=>i.id===e);return o===-1?(this.jobIdToQueueKey.delete(e),this.jobIndex.delete(e),Promise.resolve(!1)):(s.splice(o,1),this.jobIdToQueueKey.delete(e),this.jobIndex.delete(e),s.length===0&&this.queues.delete(t),Promise.resolve(!0))}clear(e,t,s){const o=this.createQueueKey(e,t,s),i=this.queues.get(o);if(i){for(const u of i)this.jobIdToQueueKey.delete(u.id),this.jobIndex.delete(u.id);this.queues.delete(o)}return Promise.resolve()}clearAll(){return this.jobIdToQueueKey.clear(),this.jobIndex.clear(),this.completedJobs.clear(),this.queues.clear(),Promise.resolve()}hasJobs(){return Promise.resolve(this.queues.size>0&&Array.from(this.queues.values()).some(e=>e.length>0))}async completeJob(e){const t=this.jobIdToDocId.get(e);t&&this.markJobComplete(e,t),this.completedJobs.add(e),this.jobIndex.delete(e),await this.remove(e),this.checkDrained()}async failJob(e,t){const s=this.jobIdToDocId.get(e);s&&this.markJobComplete(e,s);const o=this.jobIndex.get(e);o&&(o.lastError=t,t&&o.errorHistory.push(t)),this.jobIndex.delete(e),await this.remove(e),this.checkDrained()}async retryJob(e,t){const s=this.jobIndex.get(e);if(!s)return;s.lastError=t;const o=this.jobIdToDocId.get(e);o&&this.markJobComplete(e,o),this.jobIndex.delete(e),this.jobIdToQueueKey.delete(e),t&&s.errorHistory.push(t);const i={...s,retryCount:(s.retryCount||0)+1,lastError:t};await this.enqueue(i)}checkDrained(){if(this.isDrained&&this.onDrainedCallback){const e=this.onDrainedCallback;this.onDrainedCallback=void 0,e()}}get isDrained(){const e=this.queues.size>0&&Array.from(this.queues.values()).some(s=>s.length>0),t=this.docIdToJobId.size>0&&Array.from(this.docIdToJobId.values()).some(s=>s.size>0);return!e&&!t}block(e){this.isBlocked=!0,this.onDrainedCallback=e,this.checkDrained()}unblock(){this.isBlocked=!1,this.onDrainedCallback=void 0}pause(){this.isPausedFlag=!0}async resume(){this.isPausedFlag=!1;for(const[,e]of this.queues.entries())if(e.length>0){const t=e[0];await this.eventBus.emit(d.JOB_AVAILABLE,{documentId:t.documentId,scope:t.scope,branch:t.branch,jobId:t.id})}}get paused(){return this.isPausedFlag}getPendingJobs(){const e=[];for(const t of this.queues.values())e.push(...t);return e}getExecutingJobIds(){return new Map(Array.from(this.docIdToJobId.entries()).map(([e,t])=>[e,new Set(t)]))}getJob(e){return this.jobIndex.get(e)}}export{I,d as Q};
2
+ //# sourceMappingURL=queue-CxFgA-r3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-CxFgA-r3.js","sources":["../../../../packages/reactor/dist/src/queue/types.js","../../../../packages/reactor/dist/src/queue/job-execution-handle.js","../../../../packages/reactor/dist/src/queue/queue.js"],"sourcesContent":["/**\n * State of a job in the queue\n */\nexport var JobQueueState;\n(function (JobQueueState) {\n JobQueueState[JobQueueState[\"UNKNOWN\"] = -1] = \"UNKNOWN\";\n JobQueueState[JobQueueState[\"PREPROCESSING\"] = 0] = \"PREPROCESSING\";\n JobQueueState[JobQueueState[\"PENDING\"] = 1] = \"PENDING\";\n JobQueueState[JobQueueState[\"READY\"] = 2] = \"READY\";\n JobQueueState[JobQueueState[\"RUNNING\"] = 3] = \"RUNNING\";\n JobQueueState[JobQueueState[\"RESOLVED\"] = 4] = \"RESOLVED\";\n})(JobQueueState || (JobQueueState = {}));\n/**\n * Event types for the queue system\n */\nexport const QueueEventTypes = {\n JOB_AVAILABLE: 10000,\n};\n//# sourceMappingURL=types.js.map","import { JobQueueState } from \"./types.js\";\n/**\n * Implementation of the IJobExecutionHandle interface\n */\nexport class JobExecutionHandle {\n _state;\n _job;\n onStart;\n onComplete;\n onFail;\n getStateName(state) {\n switch (state) {\n case JobQueueState.PREPROCESSING:\n return \"PREPROCESSING\";\n case JobQueueState.PENDING:\n return \"PENDING\";\n case JobQueueState.READY:\n return \"READY\";\n case JobQueueState.RUNNING:\n return \"RUNNING\";\n case JobQueueState.RESOLVED:\n return \"RESOLVED\";\n default:\n return `UNKNOWN`;\n }\n }\n constructor(job, initialState, callbacks) {\n this._job = job;\n this._state = initialState;\n this.onStart = callbacks?.onStart;\n this.onComplete = callbacks?.onComplete;\n this.onFail = callbacks?.onFail;\n }\n get job() {\n return this._job;\n }\n get state() {\n return this._state;\n }\n start() {\n if (this._state !== JobQueueState.READY) {\n throw new Error(`Cannot start job in state ${this.getStateName(this._state)}`);\n }\n this._state = JobQueueState.RUNNING;\n this.onStart?.();\n }\n complete() {\n if (this._state !== JobQueueState.RUNNING) {\n throw new Error(`Cannot complete job in state ${this.getStateName(this._state)}`);\n }\n this._state = JobQueueState.RESOLVED;\n this.onComplete?.();\n }\n fail(error) {\n if (this._state !== JobQueueState.RUNNING) {\n throw new Error(`Cannot fail job in state ${this.getStateName(this._state)}`);\n }\n this._state = JobQueueState.RESOLVED;\n this.onFail?.(error);\n }\n}\n//# sourceMappingURL=job-execution-handle.js.map","import { ModuleNotFoundError } from \"../registry/implementation.js\";\nimport { JobExecutionHandle } from \"./job-execution-handle.js\";\nimport { JobQueueState, QueueEventTypes } from \"./types.js\";\n/**\n * In-memory implementation of the IQueue interface.\n * Organizes jobs by documentId, scope, and branch to ensure proper ordering.\n * Ensures serial execution per document by tracking executing jobs.\n * Implements dependency management through queue hints.\n */\nexport class InMemoryQueue {\n eventBus;\n registry;\n loader;\n queues = new Map();\n jobIdToQueueKey = new Map();\n docIdToJobId = new Map();\n jobIdToDocId = new Map();\n completedJobs = new Set();\n jobIndex = new Map();\n isBlocked = false;\n onDrainedCallback;\n isPausedFlag = false;\n loadingModels = new Map();\n failedModelTypes = new Set();\n constructor(eventBus, registry, loader) {\n this.eventBus = eventBus;\n this.registry = registry;\n this.loader = loader;\n }\n toErrorInfo(error) {\n if (error instanceof Error) {\n return {\n message: error.message,\n stack: error.stack || new Error().stack || \"\",\n };\n }\n return {\n message: error,\n stack: new Error().stack || \"\",\n };\n }\n /**\n * Creates a unique key for a document/scope/branch combination\n */\n createQueueKey(documentId, scope, branch) {\n return `${documentId}:${scope}:${branch}`;\n }\n /**\n * Gets or creates a queue for the given key\n */\n getQueue(queueKey) {\n let queue = this.queues.get(queueKey);\n if (!queue) {\n queue = [];\n this.queues.set(queueKey, queue);\n }\n return queue;\n }\n /**\n * Check if a document has any jobs currently executing\n */\n isDocumentExecuting(documentId) {\n const executingSet = this.docIdToJobId.get(documentId);\n return executingSet ? executingSet.size > 0 : false;\n }\n /**\n * Mark a job as executing for its document\n */\n markJobExecuting(job) {\n let executingSet = this.docIdToJobId.get(job.documentId);\n if (!executingSet) {\n executingSet = new Set();\n this.docIdToJobId.set(job.documentId, executingSet);\n }\n executingSet.add(job.id);\n this.jobIdToDocId.set(job.id, job.documentId);\n }\n /**\n * Mark a job as no longer executing for its document\n */\n markJobComplete(jobId, documentId) {\n const executingSet = this.docIdToJobId.get(documentId);\n if (executingSet) {\n executingSet.delete(jobId);\n if (executingSet.size === 0) {\n this.docIdToJobId.delete(documentId);\n }\n }\n this.jobIdToDocId.delete(jobId);\n }\n /**\n * Check if all dependencies for a job have been completed\n */\n areDependenciesMet(job) {\n if (job.queueHint.length === 0) {\n return true;\n }\n return job.queueHint.every((depId) => this.completedJobs.has(depId));\n }\n /**\n * Get the next job that has all its dependencies met\n */\n getNextJobWithMetDependencies(queue) {\n for (const job of queue) {\n if (this.areDependenciesMet(job)) {\n return job;\n }\n }\n return null;\n }\n getCreateDocumentType(job) {\n for (const action of job.actions) {\n if (action.type === \"CREATE_DOCUMENT\") {\n return action.input.model;\n }\n }\n for (const operation of job.operations) {\n if (operation.action.type === \"CREATE_DOCUMENT\") {\n return operation.action.input.model;\n }\n }\n return undefined;\n }\n async ensureModelLoaded(documentType) {\n if (!this.registry) {\n return;\n }\n try {\n this.registry.getModule(documentType);\n return;\n }\n catch (error) {\n if (!ModuleNotFoundError.isError(error)) {\n throw error;\n }\n }\n if (!this.loader) {\n throw new Error(`No document model loader configured for type: ${documentType}`);\n }\n if (this.failedModelTypes.has(documentType)) {\n throw new Error(`Document model type previously failed to load: ${documentType}`);\n }\n const existing = this.loadingModels.get(documentType);\n if (existing) {\n return existing;\n }\n const loadPromise = (async () => {\n try {\n const module = await this.loader.load(documentType);\n try {\n this.registry.registerModules(module);\n }\n catch {\n // DuplicateModuleError is fine - another path registered it\n }\n }\n catch (error) {\n this.failedModelTypes.add(documentType);\n throw error;\n }\n finally {\n this.loadingModels.delete(documentType);\n }\n })();\n this.loadingModels.set(documentType, loadPromise);\n return loadPromise;\n }\n async enqueue(job) {\n // Throw error if queue is blocked\n if (this.isBlocked) {\n throw new Error(\"Queue is blocked\");\n }\n const queueKey = this.createQueueKey(job.documentId, job.scope, job.branch);\n const queue = this.getQueue(queueKey);\n // Add job to the end of the queue (FIFO)\n queue.push(job);\n // Track job location for removal and dependency resolution\n this.jobIdToQueueKey.set(job.id, queueKey);\n this.jobIndex.set(job.id, job);\n // Gate CREATE_DOCUMENT jobs on model availability\n const documentType = this.getCreateDocumentType(job);\n if (documentType) {\n try {\n await this.ensureModelLoaded(documentType);\n }\n catch {\n await this.failJob(job.id, {\n message: `Failed to load document model for type: ${documentType}`,\n stack: new Error().stack || \"\",\n });\n return;\n }\n }\n // Emit job available event\n const eventData = {\n documentId: job.documentId,\n scope: job.scope,\n branch: job.branch,\n jobId: job.id,\n };\n await this.eventBus.emit(QueueEventTypes.JOB_AVAILABLE, eventData);\n }\n dequeue(documentId, scope, branch, signal) {\n const queueKey = this.createQueueKey(documentId, scope, branch);\n const queue = this.queues.get(queueKey);\n if (signal?.aborted) {\n return Promise.reject(new Error(\"Operation aborted\"));\n }\n if (!queue || queue.length === 0) {\n return Promise.resolve(null);\n }\n // Find the first job with met dependencies\n const job = this.getNextJobWithMetDependencies(queue);\n if (!job) {\n return Promise.resolve(null);\n }\n // Remove job from queue\n const jobIndex = queue.indexOf(job);\n queue.splice(jobIndex, 1);\n // Remove from queue tracking but keep in job index for retry\n this.jobIdToQueueKey.delete(job.id);\n // Mark this job as executing for its document\n this.markJobExecuting(job);\n // Clean up empty queue\n if (queue.length === 0) {\n this.queues.delete(queueKey);\n }\n // Create and return the execution handle\n const handle = new JobExecutionHandle(job, JobQueueState.READY, {\n onStart: () => {\n // Job is now running\n },\n onComplete: () => {\n void this.completeJob(job.id);\n },\n onFail: (error) => {\n void this.failJob(job.id, error);\n },\n });\n return Promise.resolve(handle);\n }\n dequeueNext(signal) {\n if (signal?.aborted) {\n return Promise.reject(new Error(\"Operation aborted\"));\n }\n if (this.isPausedFlag) {\n return Promise.resolve(null);\n }\n // Find the first non-empty queue for a document that's not currently executing\n for (const [queueKey, queue] of this.queues.entries()) {\n if (queue.length > 0) {\n // Find the first job with met dependencies\n const job = this.getNextJobWithMetDependencies(queue);\n if (!job) {\n continue; // No job with met dependencies in this queue\n }\n // Only dequeue if the document is not currently executing jobs\n if (!this.isDocumentExecuting(job.documentId)) {\n // Remove job from queue\n const jobIdx = queue.indexOf(job);\n queue.splice(jobIdx, 1);\n // Remove from queue tracking but keep in job index for retry\n this.jobIdToQueueKey.delete(job.id);\n // Keep job in jobIndex so we can retry it if needed\n // Mark this job as executing for its document\n this.markJobExecuting(job);\n // Clean up empty queue\n if (queue.length === 0) {\n this.queues.delete(queueKey);\n }\n // Create and return the execution handle\n const handle = new JobExecutionHandle(job, JobQueueState.READY, {\n onStart: () => {\n // Job is now running\n },\n onComplete: () => {\n void this.completeJob(job.id);\n },\n onFail: (error) => {\n void this.failJob(job.id, error);\n },\n });\n return Promise.resolve(handle);\n }\n }\n }\n return Promise.resolve(null);\n }\n size(documentId, scope, branch) {\n const queueKey = this.createQueueKey(documentId, scope, branch);\n const queue = this.queues.get(queueKey);\n return Promise.resolve(queue ? queue.length : 0);\n }\n totalSize() {\n let total = 0;\n for (const queue of this.queues.values()) {\n total += queue.length;\n }\n return Promise.resolve(total);\n }\n remove(jobId) {\n const queueKey = this.jobIdToQueueKey.get(jobId);\n if (!queueKey) {\n return Promise.resolve(false);\n }\n const queue = this.queues.get(queueKey);\n if (!queue) {\n // Clean up orphaned index entry\n this.jobIdToQueueKey.delete(jobId);\n this.jobIndex.delete(jobId);\n return Promise.resolve(false);\n }\n const jobIdx = queue.findIndex((job) => job.id === jobId);\n if (jobIdx === -1) {\n // Clean up orphaned index entry\n this.jobIdToQueueKey.delete(jobId);\n this.jobIndex.delete(jobId);\n return Promise.resolve(false);\n }\n // Remove job from queue\n queue.splice(jobIdx, 1);\n // Remove from job index\n this.jobIdToQueueKey.delete(jobId);\n this.jobIndex.delete(jobId);\n // Clean up empty queue\n if (queue.length === 0) {\n this.queues.delete(queueKey);\n }\n return Promise.resolve(true);\n }\n clear(documentId, scope, branch) {\n const queueKey = this.createQueueKey(documentId, scope, branch);\n const queue = this.queues.get(queueKey);\n if (queue) {\n // Remove all jobs from the job index\n for (const job of queue) {\n this.jobIdToQueueKey.delete(job.id);\n this.jobIndex.delete(job.id);\n }\n // Remove the queue\n this.queues.delete(queueKey);\n }\n return Promise.resolve();\n }\n clearAll() {\n // Clear all job indices\n this.jobIdToQueueKey.clear();\n this.jobIndex.clear();\n this.completedJobs.clear();\n // Clear all queues\n this.queues.clear();\n return Promise.resolve();\n }\n hasJobs() {\n return Promise.resolve(this.queues.size > 0 &&\n Array.from(this.queues.values()).some((q) => q.length > 0));\n }\n async completeJob(jobId) {\n // Get the documentId for the executing job\n const documentId = this.jobIdToDocId.get(jobId);\n if (documentId) {\n // Mark the job as no longer executing\n this.markJobComplete(jobId, documentId);\n }\n // Track the job as completed for dependency resolution\n this.completedJobs.add(jobId);\n // Remove from job index\n this.jobIndex.delete(jobId);\n // For in-memory queue, completing just removes the job\n // In a persistent queue, this would update the job status\n await this.remove(jobId);\n // Check if queue is now drained\n this.checkDrained();\n }\n async failJob(jobId, error) {\n // Get the documentId for the executing job\n const documentId = this.jobIdToDocId.get(jobId);\n if (documentId) {\n // Mark the job as no longer executing\n this.markJobComplete(jobId, documentId);\n }\n // update the job lastError and errorHistory\n const job = this.jobIndex.get(jobId);\n if (job) {\n job.lastError = error;\n if (error) {\n job.errorHistory.push(error);\n }\n }\n // Remove from job index\n this.jobIndex.delete(jobId);\n // For in-memory queue, failing just removes the job\n // In a persistent queue, this would update the job status and store the error\n await this.remove(jobId);\n // Check if queue is now drained\n this.checkDrained();\n }\n async retryJob(jobId, error) {\n // Get the job from the index (it might be executing, not in queue)\n const job = this.jobIndex.get(jobId);\n if (!job) {\n return;\n }\n // update the job lastError\n job.lastError = error;\n // Mark it as no longer executing if it was\n const documentId = this.jobIdToDocId.get(jobId);\n if (documentId) {\n this.markJobComplete(jobId, documentId);\n }\n // Remove from indices\n this.jobIndex.delete(jobId);\n this.jobIdToQueueKey.delete(jobId);\n // Add error to history\n if (error) {\n job.errorHistory.push(error);\n }\n // Update retry count\n const updatedJob = {\n ...job,\n retryCount: (job.retryCount || 0) + 1,\n lastError: error,\n };\n // Re-enqueue with updated retry count\n await this.enqueue(updatedJob);\n }\n /**\n * Check if the queue is drained and call the callback if it is\n */\n checkDrained() {\n if (this.isDrained && this.onDrainedCallback) {\n const callback = this.onDrainedCallback;\n this.onDrainedCallback = undefined;\n callback();\n }\n }\n /**\n * Returns true if and only if all jobs have been resolved.\n */\n get isDrained() {\n // Queue is drained if there are no pending jobs and no executing jobs\n const hasPendingJobs = this.queues.size > 0 &&\n Array.from(this.queues.values()).some((q) => q.length > 0);\n const hasExecutingJobs = this.docIdToJobId.size > 0 &&\n Array.from(this.docIdToJobId.values()).some((set) => set.size > 0);\n return !hasPendingJobs && !hasExecutingJobs;\n }\n /**\n * Blocks the queue from accepting new jobs.\n * @param onDrained - Optional callback to call when the queue is drained\n */\n block(onDrained) {\n this.isBlocked = true;\n this.onDrainedCallback = onDrained;\n // Check if already drained\n this.checkDrained();\n }\n /**\n * Unblocks the queue from accepting new jobs.\n */\n unblock() {\n this.isBlocked = false;\n this.onDrainedCallback = undefined;\n }\n /**\n * Pauses job dequeuing. Jobs can still be enqueued but dequeueNext() will return null.\n */\n pause() {\n this.isPausedFlag = true;\n }\n /**\n * Resumes job dequeuing and emits JOB_AVAILABLE events for pending jobs to wake up executors.\n */\n async resume() {\n this.isPausedFlag = false;\n // Emit JOB_AVAILABLE for each queue with pending jobs to wake up the executor manager\n for (const [, queue] of this.queues.entries()) {\n if (queue.length > 0) {\n const job = queue[0];\n await this.eventBus.emit(QueueEventTypes.JOB_AVAILABLE, {\n documentId: job.documentId,\n scope: job.scope,\n branch: job.branch,\n jobId: job.id,\n });\n }\n }\n }\n /**\n * Returns whether job dequeuing is paused.\n */\n get paused() {\n return this.isPausedFlag;\n }\n /**\n * Returns all pending jobs across all queues.\n */\n getPendingJobs() {\n const jobs = [];\n for (const queue of this.queues.values()) {\n jobs.push(...queue);\n }\n return jobs;\n }\n /**\n * Returns a map of document IDs to sets of executing job IDs.\n */\n getExecutingJobIds() {\n return new Map(Array.from(this.docIdToJobId.entries()).map(([k, v]) => [k, new Set(v)]));\n }\n /**\n * Returns a job by ID from the job index.\n */\n getJob(jobId) {\n return this.jobIndex.get(jobId);\n }\n}\n//# sourceMappingURL=queue.js.map"],"names":["JobQueueState","QueueEventTypes","JobExecutionHandle","state","job","initialState","callbacks","error","InMemoryQueue","eventBus","registry","loader","documentId","scope","branch","queueKey","queue","executingSet","jobId","depId","action","operation","documentType","ModuleNotFoundError","existing","loadPromise","module","eventData","signal","jobIndex","handle","jobIdx","total","q","updatedJob","callback","hasPendingJobs","hasExecutingJobs","set","onDrained","jobs","k","v"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import{aU as E,bW as p}from"./index-DN20Z-2K.js";import{R as D}from"./migrator-CmQyl4ZK.js";var u;(function(s){s.Created="created",s.Deleted="deleted",s.Updated="updated",s.ParentAdded="parent_added",s.ParentRemoved="parent_removed",s.ChildAdded="child_added",s.ChildRemoved="child_removed"})(u||(u={}));function P(s){if("status"in s)return s;const e=s;return e.status="pending",e.then(t=>{e.status="fulfilled",e.value=t},t=>{throw e.status="rejected",e.reason=t,t}),e}function R(s){return"status"in s?s:{status:"pending"}}const h=E("toast"),C=h.useValue,S=h.setValue,O=h.addEventHandler;async function f(s,e){await s.exec(`
2
+ DO $$
3
+ DECLARE
4
+ _schemaname text := '${e}';
5
+ _tablename text;
6
+ BEGIN
7
+ FOR _tablename IN SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = _schemaname LOOP
8
+ RAISE INFO 'Dropping table %.%', _schemaname, _tablename;
9
+ EXECUTE format('DROP TABLE %I.%I CASCADE;', _schemaname, _tablename);
10
+ END LOOP;
11
+ IF NOT FOUND THEN
12
+ RAISE WARNING 'Schema % does not exist', _schemaname;
13
+ END IF;
14
+ END $$;
15
+ `)}async function F(s){await f(s,D),await f(s,"public")}class I{client;documents=new Map;batchPromises=new Map;listeners=new Map;unsubscribe=null;constructor(e){this.client=e,this.unsubscribe=e.subscribe({},t=>{this.handleDocumentChange(t)})}handleDocumentChange(e){if(e.type===u.Deleted){const t=e.context?.childId;t&&this.handleDocumentDeleted(t)}else if(e.type===u.Updated)for(const t of e.documents)this.handleDocumentUpdated(t.header.id).catch(console.warn)}handleDocumentDeleted(e){const t=this.listeners.get(e);this.documents.delete(e),this.invalidateBatchesContaining(e),t&&t.forEach(a=>a()),this.listeners.delete(e)}async handleDocumentUpdated(e){if(this.documents.has(e)){await this.get(e,!0);const t=this.listeners.get(e);t&&t.forEach(a=>a())}}invalidateBatchesContaining(e){for(const t of this.batchPromises.keys())t.split(",").includes(e)&&this.batchPromises.delete(t)}get(e,t){const a=this.documents.get(e);if(a&&(a.status==="pending"||!t))return a;const i=this.client.get(e);return this.documents.set(e,P(i)),i}getBatch(e){const t=e.join(","),a=this.batchPromises.get(t),i=e.some(n=>!this.documents.has(n)),r=e.map(n=>this.get(n));if(i){const n=Promise.all(r);return this.batchPromises.set(t,{promises:r,promise:n}),n}if(a&&r.every((c,d)=>c===a.promises[d]))return a.promise;const o=r.map(n=>R(n));if(o.every(n=>n.status==="fulfilled")){const n=o.map(d=>d.value),c=Promise.resolve(n);return c.status="fulfilled",c.value=n,this.batchPromises.set(t,{promises:r,promise:c}),c}if(a)return a.promise;const l=Promise.all(r);return this.batchPromises.set(t,{promises:r,promise:l}),l}subscribe(e,t){const a=Array.isArray(e)?e:[e];for(const i of a){const r=this.listeners.get(i)??[];this.listeners.set(i,[...r,t])}return()=>{for(const i of a){const r=this.listeners.get(i)??[];this.listeners.set(i,r.filter(o=>o!==t))}}}dispose(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)}}const _=200,v=1e3;async function b(s){if(!s)return;const e=await s.find({type:"powerhouse/document-drive"});p(e.results)}function A(s=_,e=v){let t=null,a=0;return(i,r=!1)=>{const o=Date.now(),m=o-a;return t!==null&&clearTimeout(t),r||m>=e?(a=o,b(i)):new Promise(l=>{t=setTimeout(()=>{a=Date.now(),b(i).then(l)},s)})}}const N=A();export{u as D,I as R,P as a,N as b,O as c,F as d,R as r,S as s,C as u};
16
+ //# sourceMappingURL=reactor-7tK-WVaY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor-7tK-WVaY.js","sources":["../../../../packages/reactor/dist/src/client/types.js","../../../../packages/reactor-browser/dist/src/document-cache.js","../../../../packages/reactor-browser/dist/src/hooks/toast.js","../../../../packages/reactor-browser/dist/src/pglite/drop.js","../../../../packages/reactor-browser/dist/src/reactor-client-document-cache.js","../../../../packages/reactor-browser/dist/src/reactor.js"],"sourcesContent":["/**\n * Describes the types of document changes that can occur.\n */\nexport var DocumentChangeType;\n(function (DocumentChangeType) {\n DocumentChangeType[\"Created\"] = \"created\";\n DocumentChangeType[\"Deleted\"] = \"deleted\";\n DocumentChangeType[\"Updated\"] = \"updated\";\n DocumentChangeType[\"ParentAdded\"] = \"parent_added\";\n DocumentChangeType[\"ParentRemoved\"] = \"parent_removed\";\n DocumentChangeType[\"ChildAdded\"] = \"child_added\";\n DocumentChangeType[\"ChildRemoved\"] = \"child_removed\";\n})(DocumentChangeType || (DocumentChangeType = {}));\n//# sourceMappingURL=types.js.map","export function addPromiseState(promise) {\n if (\"status\" in promise) {\n return promise;\n }\n const promiseWithState = promise;\n promiseWithState.status = \"pending\";\n promiseWithState.then((value) => {\n promiseWithState.status = \"fulfilled\";\n promiseWithState.value = value;\n }, (reason) => {\n promiseWithState.status = \"rejected\";\n promiseWithState.reason = reason;\n // Re-throw to preserve unhandled rejection behavior\n // This allows React's error boundaries to catch the error\n throw reason;\n });\n return promiseWithState;\n}\nexport function readPromiseState(promise) {\n return \"status\" in promise ? promise : { status: \"pending\" };\n}\nexport class DocumentCache {\n reactor;\n documents = new Map();\n batchPromises = new Map();\n listeners = new Map();\n constructor(reactor) {\n this.reactor = reactor;\n reactor.on(\"documentDeleted\", (documentId) => {\n const listeners = this.listeners.get(documentId);\n this.documents.delete(documentId);\n // Invalidate any batch that includes this document\n this.#invalidateBatchesContaining(documentId);\n if (listeners) {\n listeners.forEach((listener) => listener());\n }\n this.listeners.delete(documentId);\n });\n reactor.on(\"operationsAdded\", (documentId) => {\n if (this.documents.has(documentId)) {\n this.#updateDocument(documentId).catch(console.warn);\n }\n });\n }\n #invalidateBatchesContaining(documentId) {\n for (const key of this.batchPromises.keys()) {\n if (key.split(\",\").includes(documentId)) {\n this.batchPromises.delete(key);\n }\n }\n }\n async #updateDocument(documentId) {\n // Only updates listeners when document refetch is completed.\n // Listeners use stale data while refetch is in progress.\n const result = this.get(documentId, true);\n await result;\n const listeners = this.listeners.get(documentId);\n if (listeners) {\n listeners.forEach((listener) => listener());\n }\n }\n get(id, refetch) {\n const currentData = this.documents.get(id);\n if (currentData) {\n // If pending then deduplicate requests\n if (currentData.status === \"pending\") {\n return currentData;\n }\n if (!refetch) {\n return currentData;\n }\n }\n const documentPromise = this.reactor.getDocument(id);\n this.documents.set(id, addPromiseState(documentPromise));\n return documentPromise;\n }\n getBatch(ids) {\n const key = ids.join(\",\");\n const cached = this.batchPromises.get(key);\n // Check if any documents have been removed from cache (deleted)\n // This must be done BEFORE calling get() which would re-add them\n const hasDeletedDocuments = ids.some((id) => !this.documents.has(id));\n // Get current individual promises\n const currentPromises = ids.map((id) => this.get(id));\n // If documents were deleted, don't return stale data - let it fail\n if (hasDeletedDocuments) {\n const batchPromise = Promise.all(currentPromises);\n this.batchPromises.set(key, {\n promises: currentPromises,\n promise: batchPromise,\n });\n return batchPromise;\n }\n // Check if we have a valid cached batch (same underlying promises)\n if (cached) {\n const samePromises = currentPromises.every((p, i) => p === cached.promises[i]);\n if (samePromises) {\n return cached.promise;\n }\n }\n // Check the state of all individual promises\n const states = currentPromises.map((p) => readPromiseState(p));\n const allFulfilled = states.every((s) => s.status === \"fulfilled\");\n if (allFulfilled) {\n // All promises are fulfilled - create a pre-resolved batch promise\n // with status already set to avoid suspending in use()\n const values = states.map((s) => s.value);\n const batchPromise = Promise.resolve(values);\n batchPromise.status = \"fulfilled\";\n batchPromise.value = values;\n this.batchPromises.set(key, {\n promises: currentPromises,\n promise: batchPromise,\n });\n return batchPromise;\n }\n // Some promises are pending (refetch in progress) - return stale data if available\n if (cached) {\n return cached.promise;\n }\n // Initial load - create new batch promise\n const batchPromise = Promise.all(currentPromises);\n this.batchPromises.set(key, {\n promises: currentPromises,\n promise: batchPromise,\n });\n return batchPromise;\n }\n subscribe(id, callback) {\n const ids = Array.isArray(id) ? id : [id];\n for (const id of ids) {\n const listeners = this.listeners.get(id) ?? [];\n this.listeners.set(id, [...listeners, callback]);\n }\n return () => {\n for (const id of ids) {\n const listeners = this.listeners.get(id) ?? [];\n this.listeners.set(id, listeners.filter((listener) => listener !== callback));\n }\n };\n }\n}\n//# sourceMappingURL=document-cache.js.map","import { makePHEventFunctions } from \"./make-ph-event-functions.js\";\nconst toastEventFunctions = makePHEventFunctions(\"toast\");\n/** Returns the toast function */\nexport const usePHToast = toastEventFunctions.useValue;\n/** Sets the toast function */\nexport const setPHToast = toastEventFunctions.setValue;\n/** Adds an event handler for the toast */\nexport const addToastEventHandler = toastEventFunctions.addEventHandler;\n//# sourceMappingURL=toast.js.map","import { REACTOR_SCHEMA } from \"@powerhousedao/reactor\";\nasync function dropTablesInSchema(pg, schema) {\n await pg.exec(`\nDO $$\nDECLARE\n _schemaname text := '${schema}';\n _tablename text;\nBEGIN\n FOR _tablename IN SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname = _schemaname LOOP\n RAISE INFO 'Dropping table %.%', _schemaname, _tablename;\n EXECUTE format('DROP TABLE %I.%I CASCADE;', _schemaname, _tablename);\n END LOOP;\n IF NOT FOUND THEN\n RAISE WARNING 'Schema % does not exist', _schemaname;\n END IF;\nEND $$;\n`);\n}\nexport async function dropAllTables(pg, schema = REACTOR_SCHEMA) {\n await dropTablesInSchema(pg, schema);\n}\nexport async function dropAllReactorStorage(pg) {\n await dropTablesInSchema(pg, REACTOR_SCHEMA);\n // legacy\n await dropTablesInSchema(pg, \"public\");\n}\n//# sourceMappingURL=drop.js.map","import { DocumentChangeType, } from \"@powerhousedao/reactor\";\nimport { addPromiseState, readPromiseState } from \"./document-cache.js\";\n/**\n * Document cache implementation that uses the new ReactorClient API.\n *\n * This cache subscribes to document change events via IReactorClient.subscribe()\n * and automatically updates the cache when documents are created, updated, or deleted.\n *\n * Use this implementation when FEATURE_LEGACY_READ_ENABLED is false.\n */\nexport class ReactorClientDocumentCache {\n client;\n documents = new Map();\n batchPromises = new Map();\n listeners = new Map();\n unsubscribe = null;\n constructor(client) {\n this.client = client;\n this.unsubscribe = client.subscribe({}, (event) => {\n this.handleDocumentChange(event);\n });\n }\n handleDocumentChange(event) {\n if (event.type === DocumentChangeType.Deleted) {\n const documentId = event.context?.childId;\n if (documentId) {\n this.handleDocumentDeleted(documentId);\n }\n }\n else if (event.type === DocumentChangeType.Updated) {\n for (const doc of event.documents) {\n this.handleDocumentUpdated(doc.header.id).catch(console.warn);\n }\n }\n }\n handleDocumentDeleted(documentId) {\n const listeners = this.listeners.get(documentId);\n this.documents.delete(documentId);\n this.invalidateBatchesContaining(documentId);\n if (listeners) {\n listeners.forEach((listener) => listener());\n }\n this.listeners.delete(documentId);\n }\n async handleDocumentUpdated(documentId) {\n if (this.documents.has(documentId)) {\n await this.get(documentId, true);\n const listeners = this.listeners.get(documentId);\n if (listeners) {\n listeners.forEach((listener) => listener());\n }\n }\n }\n invalidateBatchesContaining(documentId) {\n for (const key of this.batchPromises.keys()) {\n if (key.split(\",\").includes(documentId)) {\n this.batchPromises.delete(key);\n }\n }\n }\n get(id, refetch) {\n const currentData = this.documents.get(id);\n if (currentData) {\n if (currentData.status === \"pending\") {\n return currentData;\n }\n if (!refetch) {\n return currentData;\n }\n }\n const documentPromise = this.client.get(id);\n this.documents.set(id, addPromiseState(documentPromise));\n return documentPromise;\n }\n getBatch(ids) {\n const key = ids.join(\",\");\n const cached = this.batchPromises.get(key);\n const hasDeletedDocuments = ids.some((id) => !this.documents.has(id));\n const currentPromises = ids.map((id) => this.get(id));\n if (hasDeletedDocuments) {\n const batchPromise = Promise.all(currentPromises);\n this.batchPromises.set(key, {\n promises: currentPromises,\n promise: batchPromise,\n });\n return batchPromise;\n }\n if (cached) {\n const samePromises = currentPromises.every((p, i) => p === cached.promises[i]);\n if (samePromises) {\n return cached.promise;\n }\n }\n const states = currentPromises.map((p) => readPromiseState(p));\n const allFulfilled = states.every((s) => s.status === \"fulfilled\");\n if (allFulfilled) {\n const values = states.map((s) => s.value);\n const batchPromise = Promise.resolve(values);\n batchPromise.status = \"fulfilled\";\n batchPromise.value = values;\n this.batchPromises.set(key, {\n promises: currentPromises,\n promise: batchPromise,\n });\n return batchPromise;\n }\n if (cached) {\n return cached.promise;\n }\n const batchPromise = Promise.all(currentPromises);\n this.batchPromises.set(key, {\n promises: currentPromises,\n promise: batchPromise,\n });\n return batchPromise;\n }\n subscribe(id, callback) {\n const ids = Array.isArray(id) ? id : [id];\n for (const docId of ids) {\n const listeners = this.listeners.get(docId) ?? [];\n this.listeners.set(docId, [...listeners, callback]);\n }\n return () => {\n for (const docId of ids) {\n const listeners = this.listeners.get(docId) ?? [];\n this.listeners.set(docId, listeners.filter((listener) => listener !== callback));\n }\n };\n }\n /**\n * Disposes of the cache and unsubscribes from document change events.\n */\n dispose() {\n if (this.unsubscribe) {\n this.unsubscribe();\n this.unsubscribe = null;\n }\n }\n}\n//# sourceMappingURL=reactor-client-document-cache.js.map","import { BrowserKeyStorage, RenownCryptoBuilder } from \"@renown/sdk\";\nimport {} from \"document-drive\";\nimport { setDrives } from \"./hooks/drives.js\";\nimport { getDrives } from \"./utils/drives.js\";\nexport const getReactorDefaultDrivesConfig = (config = {}) => {\n const defaultDrivesUrl = config.defaultDrivesUrl || [];\n const remoteDrives = defaultDrivesUrl.map((driveUrl) => ({\n url: driveUrl,\n options: {\n sharingType: \"PUBLIC\",\n availableOffline: true,\n listeners: [\n {\n block: true,\n callInfo: {\n data: driveUrl,\n name: \"switchboard-push\",\n transmitterType: \"SwitchboardPush\",\n },\n filter: {\n branch: [\"main\"],\n documentId: [\"*\"],\n documentType: [\"*\"],\n scope: [\"global\"],\n },\n label: \"Switchboard Sync\",\n listenerId: \"1\",\n system: true,\n },\n ],\n triggers: [],\n },\n }));\n return {\n defaultDrives: {\n remoteDrives,\n removeOldRemoteDrives: defaultDrivesUrl.length > 0\n ? {\n strategy: \"preserve-by-url-and-detach\",\n urls: defaultDrivesUrl,\n }\n : { strategy: \"preserve-all\" },\n },\n };\n};\nconst DEFAULT_DEBOUNCE_DELAY_MS = 200;\nconst DEFAULT_IMMEDIATE_THRESHOLD_MS = 1000;\nasync function _refreshReactorData(reactor) {\n const drives = await getDrives(reactor);\n setDrives(drives);\n}\nasync function _refreshReactorDataClient(reactor) {\n if (!reactor)\n return;\n const result = await reactor.find({ type: \"powerhouse/document-drive\" });\n setDrives(result.results);\n}\nfunction createDebouncedRefreshReactorData(debounceDelayMs = DEFAULT_DEBOUNCE_DELAY_MS, immediateThresholdMs = DEFAULT_IMMEDIATE_THRESHOLD_MS) {\n let timeout = null;\n let lastRefreshTime = 0;\n return (reactor, immediate = false) => {\n const now = Date.now();\n const timeSinceLastRefresh = now - lastRefreshTime;\n // Clear any pending timeout\n if (timeout !== null) {\n clearTimeout(timeout);\n }\n // If caller requests immediate execution or enough time has passed, execute immediately\n if (immediate || timeSinceLastRefresh >= immediateThresholdMs) {\n lastRefreshTime = now;\n return _refreshReactorData(reactor);\n }\n // Otherwise, debounce the call\n return new Promise((resolve) => {\n timeout = setTimeout(() => {\n lastRefreshTime = Date.now();\n void _refreshReactorData(reactor).then(resolve);\n }, debounceDelayMs);\n });\n };\n}\nfunction createDebouncedRefreshReactorDataClient(debounceDelayMs = DEFAULT_DEBOUNCE_DELAY_MS, immediateThresholdMs = DEFAULT_IMMEDIATE_THRESHOLD_MS) {\n let timeout = null;\n let lastRefreshTime = 0;\n return (reactor, immediate = false) => {\n const now = Date.now();\n const timeSinceLastRefresh = now - lastRefreshTime;\n // Clear any pending timeout\n if (timeout !== null) {\n clearTimeout(timeout);\n }\n // If caller requests immediate execution or enough time has passed, execute immediately\n if (immediate || timeSinceLastRefresh >= immediateThresholdMs) {\n lastRefreshTime = now;\n return _refreshReactorDataClient(reactor);\n }\n // Otherwise, debounce the call\n return new Promise((resolve) => {\n timeout = setTimeout(() => {\n lastRefreshTime = Date.now();\n void _refreshReactorDataClient(reactor).then(resolve);\n }, debounceDelayMs);\n });\n };\n}\nexport const refreshReactorData = createDebouncedRefreshReactorData();\nexport const refreshReactorDataClient = createDebouncedRefreshReactorDataClient();\nexport async function initLegacyReactor(legacyReactor, renown) {\n await initJwtHandler(legacyReactor, renown);\n const errors = await legacyReactor.initialize();\n const error = errors?.at(0);\n if (error) {\n throw error;\n }\n}\nasync function initJwtHandler(legacyReactor, renown) {\n const user = renown?.user;\n if (!renown || !user) {\n return;\n }\n legacyReactor.setGenerateJwtHandler(async (driveUrl) => {\n return renown.getBearerToken({\n expiresIn: 10,\n aud: driveUrl,\n });\n });\n}\n/**\n * @deprecated Use {@link initRenownCrypto} instead\n *\n * Initialize ConnectCrypto\n * @returns ConnectCrypto instance\n */\nexport async function initConnectCrypto() {\n return initRenownCrypto();\n}\n/**\n * Initialize RenownCrypto\n * @returns RenownCrypto instance\n */\nexport async function initRenownCrypto() {\n const keyStorage = await BrowserKeyStorage.create();\n return await new RenownCryptoBuilder().withKeyPairStorage(keyStorage).build();\n}\n//# sourceMappingURL=reactor.js.map"],"names":["DocumentChangeType","addPromiseState","promise","promiseWithState","value","reason","readPromiseState","toastEventFunctions","makePHEventFunctions","usePHToast","setPHToast","addToastEventHandler","dropTablesInSchema","pg","schema","dropAllReactorStorage","REACTOR_SCHEMA","ReactorClientDocumentCache","client","event","documentId","doc","listeners","listener","key","id","refetch","currentData","documentPromise","ids","cached","hasDeletedDocuments","currentPromises","batchPromise","p","i","states","s","values","callback","docId","DEFAULT_DEBOUNCE_DELAY_MS","DEFAULT_IMMEDIATE_THRESHOLD_MS","_refreshReactorDataClient","reactor","result","setDrives","createDebouncedRefreshReactorDataClient","debounceDelayMs","immediateThresholdMs","timeout","lastRefreshTime","immediate","now","timeSinceLastRefresh","resolve","refreshReactorDataClient"],"mappings":"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"}