@vived/host 5.2.2 → 5.2.3

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 (320) hide show
  1. package/dist/cjs/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js +24 -0
  2. package/dist/cjs/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js.map +1 -0
  3. package/dist/cjs/AppSandbox/Adapters/index.js +1 -0
  4. package/dist/cjs/AppSandbox/Adapters/index.js.map +1 -1
  5. package/dist/cjs/AppSandbox/Controller/index.js +1 -0
  6. package/dist/cjs/AppSandbox/Controller/index.js.map +1 -1
  7. package/dist/cjs/AppSandbox/Controller/setBabylonInspectorSupported.js +13 -0
  8. package/dist/cjs/AppSandbox/Controller/setBabylonInspectorSupported.js.map +1 -0
  9. package/dist/cjs/AppSandbox/Entities/AppSandboxEntity.js +7 -0
  10. package/dist/cjs/AppSandbox/Entities/AppSandboxEntity.js.map +1 -1
  11. package/dist/cjs/AppSandbox/Factories/AppSandboxFeatureFactory.js +1 -0
  12. package/dist/cjs/AppSandbox/Factories/AppSandboxFeatureFactory.js.map +1 -1
  13. package/dist/cjs/AppSandbox/Factories/index.js.map +1 -1
  14. package/dist/cjs/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js +16 -0
  15. package/dist/cjs/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js.map +1 -0
  16. package/dist/cjs/AppSandbox/Mocks/index.js +1 -0
  17. package/dist/cjs/AppSandbox/Mocks/index.js.map +1 -1
  18. package/dist/cjs/AppSandbox/PMs/BabylonInspectorSupportedPM.js +37 -0
  19. package/dist/cjs/AppSandbox/PMs/BabylonInspectorSupportedPM.js.map +1 -0
  20. package/dist/cjs/AppSandbox/PMs/DevFeaturesEnabledPM.js.map +1 -1
  21. package/dist/cjs/AppSandbox/PMs/ShowInspectorPM.js.map +1 -1
  22. package/dist/cjs/AppSandbox/PMs/StartInZSpacePM.js.map +1 -1
  23. package/dist/cjs/AppSandbox/PMs/index.js +1 -0
  24. package/dist/cjs/AppSandbox/PMs/index.js.map +1 -1
  25. package/dist/cjs/Apps/Entities/AppEntity.js.map +1 -1
  26. package/dist/cjs/Apps/Entities/AppRepo.js.map +1 -1
  27. package/dist/cjs/Apps/Factories/AppsFeatureFactory.js.map +1 -1
  28. package/dist/cjs/Apps/Factories/index.js.map +1 -1
  29. package/dist/cjs/Apps/UCs/Mounters/MounterUC.js.map +1 -1
  30. package/dist/cjs/Apps/UCs/Mounters/SandboxMounterUC.js.map +1 -1
  31. package/dist/cjs/Apps/UCs/StartAppUC.js.map +1 -1
  32. package/dist/cjs/Apps/UCs/StopAppUC.js.map +1 -1
  33. package/dist/cjs/Apps/index.js.map +1 -1
  34. package/dist/cjs/AssetPlugin/Factories/AssetPluginFeatureFactory.js.map +1 -1
  35. package/dist/cjs/AssetPlugin/Factories/index.js.map +1 -1
  36. package/dist/cjs/Assets/Adapters/assetFileAdapter.js.map +1 -1
  37. package/dist/cjs/Assets/Controllers/archiveAsset.js.map +1 -1
  38. package/dist/cjs/Assets/Controllers/deleteAsset.js.map +1 -1
  39. package/dist/cjs/Assets/Controllers/downloadAssetFile.js.map +1 -1
  40. package/dist/cjs/Assets/Controllers/editAppAsset.js.map +1 -1
  41. package/dist/cjs/Assets/Controllers/fetchAssetFile.js.map +1 -1
  42. package/dist/cjs/Assets/Controllers/getAppAssets.js.map +1 -1
  43. package/dist/cjs/Assets/Controllers/index.js.map +1 -1
  44. package/dist/cjs/Assets/Controllers/newAppAsset.js.map +1 -1
  45. package/dist/cjs/Assets/Controllers/toggleShowArchivedAssets.js.map +1 -1
  46. package/dist/cjs/Assets/Controllers/updateAppAssetMeta.js.map +1 -1
  47. package/dist/cjs/Assets/Controllers/updateAssetFile.js.map +1 -1
  48. package/dist/cjs/Assets/Entities/AppAssetsEntity.js.map +1 -1
  49. package/dist/cjs/Assets/Entities/AssetEntity.js.map +1 -1
  50. package/dist/cjs/Assets/Entities/AssetRepo.js.map +1 -1
  51. package/dist/cjs/Assets/Factories/AssetsFactory.js.map +1 -1
  52. package/dist/cjs/Assets/Factories/SandboxAssetsFactory.js.map +1 -1
  53. package/dist/cjs/Assets/Factories/index.js.map +1 -1
  54. package/dist/cjs/Assets/PMs/AssetFilePM.js.map +1 -1
  55. package/dist/cjs/Assets/PMs/AssetPM.js.map +1 -1
  56. package/dist/cjs/Assets/PMs/ShowArchivedAppAssetPM.js.map +1 -1
  57. package/dist/cjs/Assets/UCs/ArchiveAssetUC.js.map +1 -1
  58. package/dist/cjs/Assets/UCs/DeleteAssetUC.js.map +1 -1
  59. package/dist/cjs/Assets/UCs/DownloadAssetFileUC.js.map +1 -1
  60. package/dist/cjs/Assets/UCs/EditAppAssetUC.js.map +1 -1
  61. package/dist/cjs/Assets/UCs/GetAssetBlobURLUC.js.map +1 -1
  62. package/dist/cjs/Assets/UCs/GetAssetFileUC.js.map +1 -1
  63. package/dist/cjs/Assets/UCs/GetAssetUC.js.map +1 -1
  64. package/dist/cjs/Assets/UCs/NewAppAssetUC.js.map +1 -1
  65. package/dist/cjs/Assets/UCs/NewAssetUC.js.map +1 -1
  66. package/dist/cjs/Assets/UCs/UpdateAppAssetMetaUC.js.map +1 -1
  67. package/dist/cjs/Assets/UCs/UpdateAssetFileUC.js.map +1 -1
  68. package/dist/cjs/Assets/UCs/index.js.map +1 -1
  69. package/dist/cjs/Cache/Factories/CacheFeatureFactory.js.map +1 -1
  70. package/dist/cjs/Cache/Factories/index.js.map +1 -1
  71. package/dist/cjs/ChallengeResults/Entities/ChallengeResults.js.map +1 -1
  72. package/dist/cjs/ChallengeResults/Factories/ChallengeResultsFactory.js.map +1 -1
  73. package/dist/cjs/ChallengeResults/PMs/ChallengeResultsListPM.js.map +1 -1
  74. package/dist/cjs/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  75. package/dist/cjs/Dialog/Factories/SandboxDialogFactory.js +1 -2
  76. package/dist/cjs/Dialog/Factories/SandboxDialogFactory.js.map +1 -1
  77. package/dist/cjs/Handler/UCs/SubmitResultHandler.js.map +1 -1
  78. package/dist/cjs/Logger/Factories/SandboxLoggerFactory.js.map +1 -1
  79. package/dist/cjs/Logger/PMs/ForwardLogsToConsolePM.js.map +1 -1
  80. package/dist/cjs/StateMachine/Controllers/index.js.map +1 -1
  81. package/dist/cjs/StateMachine/Controllers/setTransitionDuration.js.map +1 -1
  82. package/dist/cjs/StateMachine/Factories/SandboxStateMachineFactory.js.map +1 -1
  83. package/dist/cjs/StateMachine/PMs/HostStatePM.js.map +1 -1
  84. package/dist/cjs/ThemeColors/Controllers/index.js.map +1 -1
  85. package/dist/cjs/ThemeColors/Controllers/setThemeByName.js.map +1 -1
  86. package/dist/cjs/ThemeColors/Factories/ThemeFactory.js.map +1 -1
  87. package/dist/cjs/ThemeColors/Mocks/MockSetThemeUC.js.map +1 -1
  88. package/dist/cjs/ThemeColors/Mocks/index.js.map +1 -1
  89. package/dist/cjs/VivedAPI/Adapters/apiStageAdapter.js.map +1 -1
  90. package/dist/cjs/VivedAPI/Adapters/index.js.map +1 -1
  91. package/dist/cjs/VivedAPI/Adapters/userTokenAdapter.js.map +1 -1
  92. package/dist/cjs/VivedAPI/Controllers/index.js.map +1 -1
  93. package/dist/cjs/VivedAPI/Controllers/loginUser.js.map +1 -1
  94. package/dist/cjs/VivedAPI/Controllers/logoutUser.js.map +1 -1
  95. package/dist/cjs/VivedAPI/Controllers/setApiStage.js.map +1 -1
  96. package/dist/cjs/VivedAPI/Entities/VivedAPIEntity.js.map +1 -1
  97. package/dist/cjs/VivedAPI/Entities/index.js.map +1 -1
  98. package/dist/cjs/VivedAPI/Factories/SandboxVivedAPIFactory.js.map +1 -1
  99. package/dist/cjs/VivedAPI/Factories/VivedAPIFactory.js.map +1 -1
  100. package/dist/cjs/VivedAPI/Factories/index.js.map +1 -1
  101. package/dist/cjs/VivedAPI/Factories/setupAPI.js.map +1 -1
  102. package/dist/cjs/VivedAPI/Factories/setupVivedAPIForSandbox.js.map +1 -1
  103. package/dist/cjs/VivedAPI/Mocks/MockJsonRequestUC.js.map +1 -1
  104. package/dist/cjs/VivedAPI/Mocks/index.js.map +1 -1
  105. package/dist/cjs/VivedAPI/PMs/ApiStagePM.js.map +1 -1
  106. package/dist/cjs/VivedAPI/PMs/UserTokenPM.js.map +1 -1
  107. package/dist/cjs/VivedAPI/PMs/index.js.map +1 -1
  108. package/dist/cjs/VivedAPI/UCs/BasicFetchUC.js.map +1 -1
  109. package/dist/cjs/VivedAPI/UCs/BlobRequestUC.js.map +1 -1
  110. package/dist/cjs/VivedAPI/UCs/DeleteAssetOnAPIUC.js.map +1 -1
  111. package/dist/cjs/VivedAPI/UCs/FileUploadUC.js.map +1 -1
  112. package/dist/cjs/VivedAPI/UCs/JsonRequestUC.js.map +1 -1
  113. package/dist/cjs/VivedAPI/UCs/PostNewAssetUC.js.map +1 -1
  114. package/dist/cjs/VivedAPI/UCs/SignedAuthTokenUC.js.map +1 -1
  115. package/dist/cjs/VivedAPI/UCs/UserAuthUC.js.map +1 -1
  116. package/dist/cjs/VivedAPI/UCs/index.js.map +1 -1
  117. package/dist/cjs/VivedAPI/index.js.map +1 -1
  118. package/dist/cjs/ZSpaceHost/Adapters/index.js +1 -0
  119. package/dist/cjs/ZSpaceHost/Adapters/index.js.map +1 -1
  120. package/dist/cjs/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js +24 -0
  121. package/dist/cjs/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js.map +1 -0
  122. package/dist/cjs/ZSpaceHost/Controllers/index.js.map +1 -1
  123. package/dist/cjs/ZSpaceHost/Controllers/setZSpaceIsSupported.js.map +1 -1
  124. package/dist/cjs/ZSpaceHost/Factories/SandboxZSpaceFactory.js +1 -0
  125. package/dist/cjs/ZSpaceHost/Factories/SandboxZSpaceFactory.js.map +1 -1
  126. package/dist/cjs/ZSpaceHost/Factories/setupZSpaceForSandbox.js +1 -0
  127. package/dist/cjs/ZSpaceHost/Factories/setupZSpaceForSandbox.js.map +1 -1
  128. package/dist/cjs/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js +16 -0
  129. package/dist/cjs/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js.map +1 -0
  130. package/dist/cjs/ZSpaceHost/Mocks/index.js +1 -0
  131. package/dist/cjs/ZSpaceHost/Mocks/index.js.map +1 -1
  132. package/dist/cjs/ZSpaceHost/PMs/EmulateZSpacePM.js.map +1 -1
  133. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsActivePM.js.map +1 -1
  134. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js +40 -0
  135. package/dist/cjs/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js.map +1 -0
  136. package/dist/cjs/ZSpaceHost/PMs/index.js +1 -0
  137. package/dist/cjs/ZSpaceHost/PMs/index.js.map +1 -1
  138. package/dist/esm/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js +21 -0
  139. package/dist/esm/AppSandbox/Adapters/babylonInspectorSupportedAdapter.js.map +1 -0
  140. package/dist/esm/AppSandbox/Adapters/index.js +1 -0
  141. package/dist/esm/AppSandbox/Adapters/index.js.map +1 -1
  142. package/dist/esm/AppSandbox/Controller/index.js +1 -0
  143. package/dist/esm/AppSandbox/Controller/index.js.map +1 -1
  144. package/dist/esm/AppSandbox/Controller/setBabylonInspectorSupported.js +10 -0
  145. package/dist/esm/AppSandbox/Controller/setBabylonInspectorSupported.js.map +1 -0
  146. package/dist/esm/AppSandbox/Entities/AppSandboxEntity.js +7 -0
  147. package/dist/esm/AppSandbox/Entities/AppSandboxEntity.js.map +1 -1
  148. package/dist/esm/AppSandbox/Factories/AppSandboxFeatureFactory.js +2 -1
  149. package/dist/esm/AppSandbox/Factories/AppSandboxFeatureFactory.js.map +1 -1
  150. package/dist/esm/AppSandbox/Factories/index.js.map +1 -1
  151. package/dist/esm/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js +11 -0
  152. package/dist/esm/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.js.map +1 -0
  153. package/dist/esm/AppSandbox/Mocks/index.js +1 -0
  154. package/dist/esm/AppSandbox/Mocks/index.js.map +1 -1
  155. package/dist/esm/AppSandbox/PMs/BabylonInspectorSupportedPM.js +32 -0
  156. package/dist/esm/AppSandbox/PMs/BabylonInspectorSupportedPM.js.map +1 -0
  157. package/dist/esm/AppSandbox/PMs/DevFeaturesEnabledPM.js.map +1 -1
  158. package/dist/esm/AppSandbox/PMs/ShowInspectorPM.js.map +1 -1
  159. package/dist/esm/AppSandbox/PMs/StartInZSpacePM.js.map +1 -1
  160. package/dist/esm/AppSandbox/PMs/index.js +1 -0
  161. package/dist/esm/AppSandbox/PMs/index.js.map +1 -1
  162. package/dist/esm/Apps/Entities/AppEntity.js.map +1 -1
  163. package/dist/esm/Apps/Entities/AppRepo.js.map +1 -1
  164. package/dist/esm/Apps/Factories/AppsFeatureFactory.js.map +1 -1
  165. package/dist/esm/Apps/Factories/index.js.map +1 -1
  166. package/dist/esm/Apps/UCs/Mounters/MounterUC.js.map +1 -1
  167. package/dist/esm/Apps/UCs/Mounters/SandboxMounterUC.js.map +1 -1
  168. package/dist/esm/Apps/UCs/StartAppUC.js.map +1 -1
  169. package/dist/esm/Apps/UCs/StopAppUC.js.map +1 -1
  170. package/dist/esm/Apps/index.js.map +1 -1
  171. package/dist/esm/AssetPlugin/Factories/AssetPluginFeatureFactory.js.map +1 -1
  172. package/dist/esm/AssetPlugin/Factories/index.js.map +1 -1
  173. package/dist/esm/Assets/Adapters/assetFileAdapter.js.map +1 -1
  174. package/dist/esm/Assets/Controllers/archiveAsset.js.map +1 -1
  175. package/dist/esm/Assets/Controllers/deleteAsset.js.map +1 -1
  176. package/dist/esm/Assets/Controllers/downloadAssetFile.js.map +1 -1
  177. package/dist/esm/Assets/Controllers/editAppAsset.js.map +1 -1
  178. package/dist/esm/Assets/Controllers/fetchAssetFile.js.map +1 -1
  179. package/dist/esm/Assets/Controllers/getAppAssets.js.map +1 -1
  180. package/dist/esm/Assets/Controllers/index.js.map +1 -1
  181. package/dist/esm/Assets/Controllers/newAppAsset.js.map +1 -1
  182. package/dist/esm/Assets/Controllers/toggleShowArchivedAssets.js.map +1 -1
  183. package/dist/esm/Assets/Controllers/updateAppAssetMeta.js.map +1 -1
  184. package/dist/esm/Assets/Controllers/updateAssetFile.js.map +1 -1
  185. package/dist/esm/Assets/Entities/AppAssetsEntity.js.map +1 -1
  186. package/dist/esm/Assets/Entities/AssetEntity.js.map +1 -1
  187. package/dist/esm/Assets/Entities/AssetRepo.js.map +1 -1
  188. package/dist/esm/Assets/Factories/AssetsFactory.js.map +1 -1
  189. package/dist/esm/Assets/Factories/SandboxAssetsFactory.js.map +1 -1
  190. package/dist/esm/Assets/Factories/index.js.map +1 -1
  191. package/dist/esm/Assets/PMs/AssetFilePM.js.map +1 -1
  192. package/dist/esm/Assets/PMs/AssetPM.js.map +1 -1
  193. package/dist/esm/Assets/PMs/ShowArchivedAppAssetPM.js.map +1 -1
  194. package/dist/esm/Assets/UCs/ArchiveAssetUC.js.map +1 -1
  195. package/dist/esm/Assets/UCs/DeleteAssetUC.js.map +1 -1
  196. package/dist/esm/Assets/UCs/DownloadAssetFileUC.js.map +1 -1
  197. package/dist/esm/Assets/UCs/EditAppAssetUC.js.map +1 -1
  198. package/dist/esm/Assets/UCs/GetAssetBlobURLUC.js.map +1 -1
  199. package/dist/esm/Assets/UCs/GetAssetFileUC.js.map +1 -1
  200. package/dist/esm/Assets/UCs/GetAssetUC.js.map +1 -1
  201. package/dist/esm/Assets/UCs/NewAppAssetUC.js.map +1 -1
  202. package/dist/esm/Assets/UCs/NewAssetUC.js.map +1 -1
  203. package/dist/esm/Assets/UCs/UpdateAppAssetMetaUC.js.map +1 -1
  204. package/dist/esm/Assets/UCs/UpdateAssetFileUC.js.map +1 -1
  205. package/dist/esm/Assets/UCs/index.js.map +1 -1
  206. package/dist/esm/Cache/Factories/CacheFeatureFactory.js.map +1 -1
  207. package/dist/esm/Cache/Factories/index.js.map +1 -1
  208. package/dist/esm/ChallengeResults/Entities/ChallengeResults.js.map +1 -1
  209. package/dist/esm/ChallengeResults/Factories/ChallengeResultsFactory.js.map +1 -1
  210. package/dist/esm/ChallengeResults/PMs/ChallengeResultsListPM.js.map +1 -1
  211. package/dist/esm/ChallengeResults/PMs/HasChallengeResultsPM.js.map +1 -1
  212. package/dist/esm/Dialog/Factories/SandboxDialogFactory.js +1 -2
  213. package/dist/esm/Dialog/Factories/SandboxDialogFactory.js.map +1 -1
  214. package/dist/esm/Handler/UCs/SubmitResultHandler.js.map +1 -1
  215. package/dist/esm/Logger/Factories/SandboxLoggerFactory.js.map +1 -1
  216. package/dist/esm/Logger/PMs/ForwardLogsToConsolePM.js.map +1 -1
  217. package/dist/esm/StateMachine/Controllers/index.js.map +1 -1
  218. package/dist/esm/StateMachine/Controllers/setTransitionDuration.js.map +1 -1
  219. package/dist/esm/StateMachine/Factories/SandboxStateMachineFactory.js.map +1 -1
  220. package/dist/esm/StateMachine/PMs/HostStatePM.js.map +1 -1
  221. package/dist/esm/ThemeColors/Controllers/index.js.map +1 -1
  222. package/dist/esm/ThemeColors/Controllers/setThemeByName.js.map +1 -1
  223. package/dist/esm/ThemeColors/Factories/ThemeFactory.js.map +1 -1
  224. package/dist/esm/ThemeColors/Mocks/MockSetThemeUC.js.map +1 -1
  225. package/dist/esm/ThemeColors/Mocks/index.js.map +1 -1
  226. package/dist/esm/VivedAPI/Adapters/apiStageAdapter.js.map +1 -1
  227. package/dist/esm/VivedAPI/Adapters/index.js.map +1 -1
  228. package/dist/esm/VivedAPI/Adapters/userTokenAdapter.js.map +1 -1
  229. package/dist/esm/VivedAPI/Controllers/index.js.map +1 -1
  230. package/dist/esm/VivedAPI/Controllers/loginUser.js.map +1 -1
  231. package/dist/esm/VivedAPI/Controllers/logoutUser.js.map +1 -1
  232. package/dist/esm/VivedAPI/Controllers/setApiStage.js.map +1 -1
  233. package/dist/esm/VivedAPI/Entities/VivedAPIEntity.js.map +1 -1
  234. package/dist/esm/VivedAPI/Entities/index.js.map +1 -1
  235. package/dist/esm/VivedAPI/Factories/SandboxVivedAPIFactory.js.map +1 -1
  236. package/dist/esm/VivedAPI/Factories/VivedAPIFactory.js.map +1 -1
  237. package/dist/esm/VivedAPI/Factories/index.js.map +1 -1
  238. package/dist/esm/VivedAPI/Factories/setupAPI.js.map +1 -1
  239. package/dist/esm/VivedAPI/Factories/setupVivedAPIForSandbox.js.map +1 -1
  240. package/dist/esm/VivedAPI/Mocks/MockJsonRequestUC.js.map +1 -1
  241. package/dist/esm/VivedAPI/Mocks/index.js.map +1 -1
  242. package/dist/esm/VivedAPI/PMs/ApiStagePM.js.map +1 -1
  243. package/dist/esm/VivedAPI/PMs/UserTokenPM.js.map +1 -1
  244. package/dist/esm/VivedAPI/PMs/index.js.map +1 -1
  245. package/dist/esm/VivedAPI/UCs/BasicFetchUC.js.map +1 -1
  246. package/dist/esm/VivedAPI/UCs/BlobRequestUC.js.map +1 -1
  247. package/dist/esm/VivedAPI/UCs/DeleteAssetOnAPIUC.js.map +1 -1
  248. package/dist/esm/VivedAPI/UCs/FileUploadUC.js.map +1 -1
  249. package/dist/esm/VivedAPI/UCs/JsonRequestUC.js.map +1 -1
  250. package/dist/esm/VivedAPI/UCs/PostNewAssetUC.js.map +1 -1
  251. package/dist/esm/VivedAPI/UCs/SignedAuthTokenUC.js.map +1 -1
  252. package/dist/esm/VivedAPI/UCs/UserAuthUC.js.map +1 -1
  253. package/dist/esm/VivedAPI/UCs/index.js.map +1 -1
  254. package/dist/esm/VivedAPI/index.js.map +1 -1
  255. package/dist/esm/ZSpaceHost/Adapters/index.js +1 -0
  256. package/dist/esm/ZSpaceHost/Adapters/index.js.map +1 -1
  257. package/dist/esm/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js +21 -0
  258. package/dist/esm/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.js.map +1 -0
  259. package/dist/esm/ZSpaceHost/Controllers/index.js.map +1 -1
  260. package/dist/esm/ZSpaceHost/Controllers/setZSpaceIsSupported.js.map +1 -1
  261. package/dist/esm/ZSpaceHost/Factories/SandboxZSpaceFactory.js +2 -1
  262. package/dist/esm/ZSpaceHost/Factories/SandboxZSpaceFactory.js.map +1 -1
  263. package/dist/esm/ZSpaceHost/Factories/setupZSpaceForSandbox.js +2 -1
  264. package/dist/esm/ZSpaceHost/Factories/setupZSpaceForSandbox.js.map +1 -1
  265. package/dist/esm/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js +11 -0
  266. package/dist/esm/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.js.map +1 -0
  267. package/dist/esm/ZSpaceHost/Mocks/index.js +1 -0
  268. package/dist/esm/ZSpaceHost/Mocks/index.js.map +1 -1
  269. package/dist/esm/ZSpaceHost/PMs/EmulateZSpacePM.js.map +1 -1
  270. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsActivePM.js.map +1 -1
  271. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js +35 -0
  272. package/dist/esm/ZSpaceHost/PMs/ZSpaceIsSupportedPM.js.map +1 -0
  273. package/dist/esm/ZSpaceHost/PMs/index.js +1 -0
  274. package/dist/esm/ZSpaceHost/PMs/index.js.map +1 -1
  275. package/dist/types/AppSandbox/Adapters/babylonInspectorSupportedAdapter.d.ts +3 -0
  276. package/dist/types/AppSandbox/Adapters/babylonInspectorSupportedAdapter.d.ts.map +1 -0
  277. package/dist/types/AppSandbox/Adapters/index.d.ts +1 -0
  278. package/dist/types/AppSandbox/Adapters/index.d.ts.map +1 -1
  279. package/dist/types/AppSandbox/Controller/index.d.ts +1 -0
  280. package/dist/types/AppSandbox/Controller/index.d.ts.map +1 -1
  281. package/dist/types/AppSandbox/Controller/setBabylonInspectorSupported.d.ts +3 -0
  282. package/dist/types/AppSandbox/Controller/setBabylonInspectorSupported.d.ts.map +1 -0
  283. package/dist/types/AppSandbox/Entities/AppSandboxEntity.d.ts +2 -0
  284. package/dist/types/AppSandbox/Entities/AppSandboxEntity.d.ts.map +1 -1
  285. package/dist/types/AppSandbox/Factories/AppSandboxFeatureFactory.d.ts.map +1 -1
  286. package/dist/types/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.d.ts +8 -0
  287. package/dist/types/AppSandbox/Mocks/BabylonInspectorSupportedPMMock.d.ts.map +1 -0
  288. package/dist/types/AppSandbox/Mocks/index.d.ts +1 -0
  289. package/dist/types/AppSandbox/Mocks/index.d.ts.map +1 -1
  290. package/dist/types/AppSandbox/PMs/BabylonInspectorSupportedPM.d.ts +7 -0
  291. package/dist/types/AppSandbox/PMs/BabylonInspectorSupportedPM.d.ts.map +1 -0
  292. package/dist/types/AppSandbox/PMs/index.d.ts +1 -0
  293. package/dist/types/AppSandbox/PMs/index.d.ts.map +1 -1
  294. package/dist/types/Apps/Factories/AppsFeatureFactory.d.ts.map +1 -1
  295. package/dist/types/AssetPlugin/Factories/AssetPluginFeatureFactory.d.ts.map +1 -1
  296. package/dist/types/Assets/Factories/AssetsFactory.d.ts.map +1 -1
  297. package/dist/types/Dialog/Factories/SandboxDialogFactory.d.ts.map +1 -1
  298. package/dist/types/StateMachine/Factories/SandboxStateMachineFactory.d.ts.map +1 -1
  299. package/dist/types/ZSpaceHost/Adapters/index.d.ts +1 -0
  300. package/dist/types/ZSpaceHost/Adapters/index.d.ts.map +1 -1
  301. package/dist/types/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.d.ts +3 -0
  302. package/dist/types/ZSpaceHost/Adapters/zSpaceIsSupportedAdapter.d.ts.map +1 -0
  303. package/dist/types/ZSpaceHost/Factories/SandboxZSpaceFactory.d.ts.map +1 -1
  304. package/dist/types/ZSpaceHost/Factories/setupZSpaceForSandbox.d.ts.map +1 -1
  305. package/dist/types/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.d.ts +8 -0
  306. package/dist/types/ZSpaceHost/Mocks/ZSpaceIsSupportedPMMock.d.ts.map +1 -0
  307. package/dist/types/ZSpaceHost/Mocks/index.d.ts +1 -0
  308. package/dist/types/ZSpaceHost/Mocks/index.d.ts.map +1 -1
  309. package/dist/types/ZSpaceHost/PMs/ZSpaceIsSupportedPM.d.ts +7 -0
  310. package/dist/types/ZSpaceHost/PMs/ZSpaceIsSupportedPM.d.ts.map +1 -0
  311. package/dist/types/ZSpaceHost/PMs/index.d.ts +1 -0
  312. package/dist/types/ZSpaceHost/PMs/index.d.ts.map +1 -1
  313. package/package.json +1 -1
  314. package/README.md +0 -105
  315. package/dist/cjs/Assets/Factories/setupAssets.js +0 -14
  316. package/dist/cjs/Assets/Factories/setupAssets.js.map +0 -1
  317. package/dist/esm/Assets/Factories/setupAssets.js +0 -11
  318. package/dist/esm/Assets/Factories/setupAssets.js.map +0 -1
  319. package/dist/types/Assets/Factories/setupAssets.d.ts +0 -8
  320. package/dist/types/Assets/Factories/setupAssets.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"GetAssetFileUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/GetAssetFileUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * GetAssetFileUC.ts\r\n *\r\n * This use case handles retrieval of asset files with advanced caching strategies,\r\n * returning File objects for use in web applications and file operations.\r\n *\r\n * Key Concepts:\r\n * - Retrieves asset files as File objects with multi-level caching optimization\r\n * - Checks memory cache (existing entities) first for immediate access\r\n * - Falls back to persistent cache (IndexedDB/localStorage) for faster retrieval\r\n * - Finally fetches from remote API when cache misses occur\r\n * - Manages fetch state indicators and error handling for user feedback\r\n * - Automatically stores fetched files in cache for future access\r\n *\r\n * Usage Patterns:\r\n * - Singleton use case accessed through static get() method\r\n * - Called with asset ID to retrieve File object for processing or display\r\n * - Handles async operations with comprehensive error handling\r\n * - Optimizes performance through intelligent caching strategies\r\n */\r\n\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { FetchAssetFileFromAPIUC } from \"../../VivedAPI\";\r\nimport { GetAssetFromCacheUC, StoreAssetInCacheUC } from \"../../Cache\";\r\nimport { AssetRepo } from \"../Entities/AssetRepo\";\r\nimport { GetAssetUC } from \"./GetAssetUC\";\r\n\r\n/**\r\n * GetAssetFileUC handles optimized retrieval of asset files as File objects.\r\n *\r\n * This singleton use case implements a multi-level caching strategy to minimize\r\n * network requests and provide fast access to asset files for web applications.\r\n */\r\nexport abstract class GetAssetFileUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"GetAssetFileUC\";\r\n\r\n /**\r\n * Retrieves a File object for the specified asset.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @returns Promise resolving to a File object for the asset\r\n */\r\n abstract getAssetFile(assetID: string): Promise<File>;\r\n\r\n /**\r\n * Retrieves the singleton GetAssetFileUC instance.\r\n *\r\n * @param appObjects - Repository for accessing the singleton component\r\n * @returns GetAssetFileUC instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo): GetAssetFileUC | undefined {\r\n return getSingletonComponent<GetAssetFileUC>(\r\n GetAssetFileUC.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new GetAssetFileUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n * @returns A new GetAssetFileUC implementation instance\r\n */\r\nexport function makeGetAssetFileUC(appObject: AppObject): GetAssetFileUC {\r\n return new GetAssetFileUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of GetAssetFileUC with advanced caching and error handling.\r\n *\r\n * Key Implementation Details:\r\n * - Implements three-tier caching: memory (entities), persistent cache, and remote API\r\n * - Uses async/await for cleaner error handling and flow control\r\n * - Manages fetch state indicators for user feedback during operations\r\n * - Automatically caches fetched files for future access optimization\r\n * - Handles cache failures gracefully with fallback to direct API access\r\n * - Converts between Blob and File objects maintaining metadata integrity\r\n * - Provides detailed error handling and logging for debugging\r\n */\r\nclass GetAssetFileUCImp extends GetAssetFileUC {\r\n /** Gets the asset repository for entity management and lookup */\r\n private get assetRepo() {\r\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\r\n }\r\n\r\n /** Gets the API use case for fetching asset files from remote sources */\r\n private get fetchAssetFile() {\r\n return this.getCachedSingleton<FetchAssetFileFromAPIUC>(\r\n FetchAssetFileFromAPIUC.type\r\n )?.doFetch;\r\n }\r\n\r\n /** Gets the use case for retrieving asset metadata */\r\n private get getAsset() {\r\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type)?.getAsset;\r\n }\r\n\r\n /** Gets the use case for retrieving assets from persistent cache */\r\n private get getAssetFromCache() {\r\n return this.getCachedSingleton<GetAssetFromCacheUC>(\r\n GetAssetFromCacheUC.type\r\n )?.getAsset;\r\n }\r\n\r\n /** Gets the use case for storing assets in persistent cache */\r\n private get storeAssetInCache() {\r\n return this.getCachedSingleton<StoreAssetInCacheUC>(\r\n StoreAssetInCacheUC.type\r\n )?.storeAsset;\r\n }\r\n\r\n /**\r\n * Retrieves an asset file using optimized multi-level caching.\r\n *\r\n * This method implements a three-tier caching strategy:\r\n * 1. Memory cache: Check if asset entity already has a File object\r\n * 2. Persistent cache: Check IndexedDB/localStorage for cached file\r\n * 3. Remote API: Fetch from backend as last resort\r\n *\r\n * Each level provides progressively better performance, with automatic\r\n * population of higher-level caches for future access optimization.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @returns Promise resolving to a File object for the asset\r\n */\r\n getAssetFile = async (assetID: string): Promise<File> => {\r\n const assetRepo = this.assetRepo;\r\n const getAsset = this.getAsset;\r\n const fetchAssetFile = this.fetchAssetFile;\r\n\r\n // Check for required dependencies\r\n if (!assetRepo || !getAsset || !fetchAssetFile) {\r\n return Promise.reject(new Error(\"Missing required dependencies\"));\r\n }\r\n\r\n // Level 1: Check memory cache (existing entities with File objects)\r\n const existingAsset = assetRepo.get(assetID);\r\n if (existingAsset?.file) {\r\n return existingAsset.file;\r\n }\r\n\r\n // Level 2 & 3: Try cache then API with comprehensive error handling\r\n try {\r\n return await this.tryGetFromCacheOrFetch(assetID);\r\n } catch (error) {\r\n // If cache access failed, try the normal flow\r\n this.warn(`Cache error: ${(error as Error).message}`);\r\n return this.fetchAssetDirectly(assetID);\r\n }\r\n };\r\n\r\n /**\r\n * Attempts to retrieve from cache or falls back to direct API fetch.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @returns Promise resolving to a File object\r\n */\r\n private async tryGetFromCacheOrFetch(assetID: string): Promise<File> {\r\n const getAssetFromCache = this.getAssetFromCache;\r\n\r\n // If no cache is available, go straight to normal fetching\r\n if (!getAssetFromCache) {\r\n return this.fetchAssetDirectly(assetID);\r\n }\r\n\r\n // Try to get the asset from cache\r\n const cachedBlob = await getAssetFromCache(assetID);\r\n\r\n if (cachedBlob) {\r\n // Asset found in cache, get metadata and create file\r\n return this.createFileFromCachedBlob(assetID, cachedBlob);\r\n } else {\r\n // Not in cache, fetch directly\r\n return this.fetchAssetDirectly(assetID);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a File object from cached blob data and asset metadata.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param cachedBlob - The cached blob data\r\n * @returns Promise resolving to a File object with proper metadata\r\n */\r\n private async createFileFromCachedBlob(\r\n assetID: string,\r\n cachedBlob: Blob\r\n ): Promise<File> {\r\n const getAsset = this.getAsset;\r\n\r\n if (!getAsset) {\r\n throw new Error(\"Required dependencies not found\");\r\n }\r\n\r\n // Get asset metadata\r\n const asset = await getAsset(assetID);\r\n\r\n // Convert blob to file with proper metadata\r\n const filename = asset.filename || \"cached-asset\";\r\n const file = new File([cachedBlob], filename, {\r\n type: cachedBlob.type\r\n });\r\n\r\n // Update asset state\r\n asset.setFile(file);\r\n asset.isFetchingFile = false;\r\n\r\n return file;\r\n }\r\n\r\n /**\r\n * Fetches asset file directly from API with state management.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @returns Promise resolving to a File object\r\n */\r\n private async fetchAssetDirectly(assetID: string): Promise<File> {\r\n const getAsset = this.getAsset;\r\n const fetchAssetFile = this.fetchAssetFile;\r\n\r\n if (!getAsset || !fetchAssetFile) {\r\n throw new Error(\"Required dependencies not found\");\r\n }\r\n\r\n try {\r\n // Get asset and prepare for fetching\r\n const asset = await getAsset(assetID);\r\n asset.isFetchingFile = true;\r\n asset.fetchError = undefined;\r\n\r\n // Fetch the file\r\n const file = await fetchAssetFile(asset);\r\n\r\n // Update asset state\r\n asset.setFile(file);\r\n asset.isFetchingFile = false;\r\n\r\n // Try to store in cache for future optimization\r\n await this.tryCacheAssetFile(assetID, file);\r\n\r\n return file;\r\n } catch (error) {\r\n await this.handleFetchError(assetID, error as Error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Handles fetch errors by updating asset state appropriately.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param error - The error that occurred during fetching\r\n */\r\n private async handleFetchError(assetID: string, error: Error): Promise<void> {\r\n const getAsset = this.getAsset;\r\n\r\n if (!getAsset) {\r\n return;\r\n }\r\n\r\n try {\r\n const asset = await getAsset(assetID);\r\n asset.fetchError = error;\r\n asset.isFetchingFile = false;\r\n } catch {\r\n // If we can't get the asset, we can't update its error state\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to cache the fetched file for future optimization.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param file - The file to cache\r\n */\r\n private async tryCacheAssetFile(assetID: string, file: File): Promise<void> {\r\n const storeAssetInCache = this.storeAssetInCache;\r\n\r\n if (!storeAssetInCache) {\r\n return;\r\n }\r\n\r\n try {\r\n await storeAssetInCache(\r\n assetID,\r\n new Blob([file], { type: file.type }),\r\n file.type\r\n );\r\n } catch (e) {\r\n this.warn(`Failed to cache asset: ${(e as Error).message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Initializes the GetAssetFileUC and registers it as a singleton.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, GetAssetFileUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GetAssetFileUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/GetAssetFileUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * GetAssetFileUC.ts\n *\n * This use case handles retrieval of asset files with advanced caching strategies,\n * returning File objects for use in web applications and file operations.\n *\n * Key Concepts:\n * - Retrieves asset files as File objects with multi-level caching optimization\n * - Checks memory cache (existing entities) first for immediate access\n * - Falls back to persistent cache (IndexedDB/localStorage) for faster retrieval\n * - Finally fetches from remote API when cache misses occur\n * - Manages fetch state indicators and error handling for user feedback\n * - Automatically stores fetched files in cache for future access\n *\n * Usage Patterns:\n * - Singleton use case accessed through static get() method\n * - Called with asset ID to retrieve File object for processing or display\n * - Handles async operations with comprehensive error handling\n * - Optimizes performance through intelligent caching strategies\n */\n\nimport {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { FetchAssetFileFromAPIUC } from \"../../VivedAPI\";\nimport { GetAssetFromCacheUC, StoreAssetInCacheUC } from \"../../Cache\";\nimport { AssetRepo } from \"../Entities/AssetRepo\";\nimport { GetAssetUC } from \"./GetAssetUC\";\n\n/**\n * GetAssetFileUC handles optimized retrieval of asset files as File objects.\n *\n * This singleton use case implements a multi-level caching strategy to minimize\n * network requests and provide fast access to asset files for web applications.\n */\nexport abstract class GetAssetFileUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"GetAssetFileUC\";\n\n /**\n * Retrieves a File object for the specified asset.\n *\n * @param assetID - The unique identifier of the asset\n * @returns Promise resolving to a File object for the asset\n */\n abstract getAssetFile(assetID: string): Promise<File>;\n\n /**\n * Retrieves the singleton GetAssetFileUC instance.\n *\n * @param appObjects - Repository for accessing the singleton component\n * @returns GetAssetFileUC instance or undefined if not found\n */\n static get(appObjects: AppObjectRepo): GetAssetFileUC | undefined {\n return getSingletonComponent<GetAssetFileUC>(\n GetAssetFileUC.type,\n appObjects\n );\n }\n}\n\n/**\n * Factory function to create a new GetAssetFileUC instance.\n *\n * @param appObject - The AppObject that will host this singleton use case\n * @returns A new GetAssetFileUC implementation instance\n */\nexport function makeGetAssetFileUC(appObject: AppObject): GetAssetFileUC {\n return new GetAssetFileUCImp(appObject);\n}\n\n/**\n * Private implementation of GetAssetFileUC with advanced caching and error handling.\n *\n * Key Implementation Details:\n * - Implements three-tier caching: memory (entities), persistent cache, and remote API\n * - Uses async/await for cleaner error handling and flow control\n * - Manages fetch state indicators for user feedback during operations\n * - Automatically caches fetched files for future access optimization\n * - Handles cache failures gracefully with fallback to direct API access\n * - Converts between Blob and File objects maintaining metadata integrity\n * - Provides detailed error handling and logging for debugging\n */\nclass GetAssetFileUCImp extends GetAssetFileUC {\n /** Gets the asset repository for entity management and lookup */\n private get assetRepo() {\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\n }\n\n /** Gets the API use case for fetching asset files from remote sources */\n private get fetchAssetFile() {\n return this.getCachedSingleton<FetchAssetFileFromAPIUC>(\n FetchAssetFileFromAPIUC.type\n )?.doFetch;\n }\n\n /** Gets the use case for retrieving asset metadata */\n private get getAsset() {\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type)?.getAsset;\n }\n\n /** Gets the use case for retrieving assets from persistent cache */\n private get getAssetFromCache() {\n return this.getCachedSingleton<GetAssetFromCacheUC>(\n GetAssetFromCacheUC.type\n )?.getAsset;\n }\n\n /** Gets the use case for storing assets in persistent cache */\n private get storeAssetInCache() {\n return this.getCachedSingleton<StoreAssetInCacheUC>(\n StoreAssetInCacheUC.type\n )?.storeAsset;\n }\n\n /**\n * Retrieves an asset file using optimized multi-level caching.\n *\n * This method implements a three-tier caching strategy:\n * 1. Memory cache: Check if asset entity already has a File object\n * 2. Persistent cache: Check IndexedDB/localStorage for cached file\n * 3. Remote API: Fetch from backend as last resort\n *\n * Each level provides progressively better performance, with automatic\n * population of higher-level caches for future access optimization.\n *\n * @param assetID - The unique identifier of the asset\n * @returns Promise resolving to a File object for the asset\n */\n getAssetFile = async (assetID: string): Promise<File> => {\n const assetRepo = this.assetRepo;\n const getAsset = this.getAsset;\n const fetchAssetFile = this.fetchAssetFile;\n\n // Check for required dependencies\n if (!assetRepo || !getAsset || !fetchAssetFile) {\n return Promise.reject(new Error(\"Missing required dependencies\"));\n }\n\n // Level 1: Check memory cache (existing entities with File objects)\n const existingAsset = assetRepo.get(assetID);\n if (existingAsset?.file) {\n return existingAsset.file;\n }\n\n // Level 2 & 3: Try cache then API with comprehensive error handling\n try {\n return await this.tryGetFromCacheOrFetch(assetID);\n } catch (error) {\n // If cache access failed, try the normal flow\n this.warn(`Cache error: ${(error as Error).message}`);\n return this.fetchAssetDirectly(assetID);\n }\n };\n\n /**\n * Attempts to retrieve from cache or falls back to direct API fetch.\n *\n * @param assetID - The unique identifier of the asset\n * @returns Promise resolving to a File object\n */\n private async tryGetFromCacheOrFetch(assetID: string): Promise<File> {\n const getAssetFromCache = this.getAssetFromCache;\n\n // If no cache is available, go straight to normal fetching\n if (!getAssetFromCache) {\n return this.fetchAssetDirectly(assetID);\n }\n\n // Try to get the asset from cache\n const cachedBlob = await getAssetFromCache(assetID);\n\n if (cachedBlob) {\n // Asset found in cache, get metadata and create file\n return this.createFileFromCachedBlob(assetID, cachedBlob);\n } else {\n // Not in cache, fetch directly\n return this.fetchAssetDirectly(assetID);\n }\n }\n\n /**\n * Creates a File object from cached blob data and asset metadata.\n *\n * @param assetID - The unique identifier of the asset\n * @param cachedBlob - The cached blob data\n * @returns Promise resolving to a File object with proper metadata\n */\n private async createFileFromCachedBlob(\n assetID: string,\n cachedBlob: Blob\n ): Promise<File> {\n const getAsset = this.getAsset;\n\n if (!getAsset) {\n throw new Error(\"Required dependencies not found\");\n }\n\n // Get asset metadata\n const asset = await getAsset(assetID);\n\n // Convert blob to file with proper metadata\n const filename = asset.filename || \"cached-asset\";\n const file = new File([cachedBlob], filename, {\n type: cachedBlob.type\n });\n\n // Update asset state\n asset.setFile(file);\n asset.isFetchingFile = false;\n\n return file;\n }\n\n /**\n * Fetches asset file directly from API with state management.\n *\n * @param assetID - The unique identifier of the asset\n * @returns Promise resolving to a File object\n */\n private async fetchAssetDirectly(assetID: string): Promise<File> {\n const getAsset = this.getAsset;\n const fetchAssetFile = this.fetchAssetFile;\n\n if (!getAsset || !fetchAssetFile) {\n throw new Error(\"Required dependencies not found\");\n }\n\n try {\n // Get asset and prepare for fetching\n const asset = await getAsset(assetID);\n asset.isFetchingFile = true;\n asset.fetchError = undefined;\n\n // Fetch the file\n const file = await fetchAssetFile(asset);\n\n // Update asset state\n asset.setFile(file);\n asset.isFetchingFile = false;\n\n // Try to store in cache for future optimization\n await this.tryCacheAssetFile(assetID, file);\n\n return file;\n } catch (error) {\n await this.handleFetchError(assetID, error as Error);\n throw error;\n }\n }\n\n /**\n * Handles fetch errors by updating asset state appropriately.\n *\n * @param assetID - The unique identifier of the asset\n * @param error - The error that occurred during fetching\n */\n private async handleFetchError(assetID: string, error: Error): Promise<void> {\n const getAsset = this.getAsset;\n\n if (!getAsset) {\n return;\n }\n\n try {\n const asset = await getAsset(assetID);\n asset.fetchError = error;\n asset.isFetchingFile = false;\n } catch {\n // If we can't get the asset, we can't update its error state\n }\n }\n\n /**\n * Attempts to cache the fetched file for future optimization.\n *\n * @param assetID - The unique identifier of the asset\n * @param file - The file to cache\n */\n private async tryCacheAssetFile(assetID: string, file: File): Promise<void> {\n const storeAssetInCache = this.storeAssetInCache;\n\n if (!storeAssetInCache) {\n return;\n }\n\n try {\n await storeAssetInCache(\n assetID,\n new Blob([file], { type: file.type }),\n file.type\n );\n } catch (e) {\n this.warn(`Failed to cache asset: ${(e as Error).message}`);\n }\n }\n\n /**\n * Initializes the GetAssetFileUC and registers it as a singleton.\n *\n * @param appObject - The AppObject that will host this singleton use case\n */\n constructor(appObject: AppObject) {\n super(appObject, GetAssetFileUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GetAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/GetAssetUC.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AA+CH,wCAEC;AA/CD,sCAKqB;AACrB,6CAAyD;AAEzD,qDAAkD;AAElD;;;;;GAKG;AACH,MAAsB,UAAW,SAAQ,kBAAW;IAYlD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAa,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;;AApBH,gCAqBC;AApBC,wDAAwD;AACjD,eAAI,GAAG,YAAY,CAAC;AAqB7B;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,SAAoB;IACjD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,aAAc,SAAQ,UAAU;IAIpC;;;OAGG;IACH,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,kCAAuB,CAAC,IAAI,CAC7B,EAAE,OAAO,CAAC;IACb,CAAC;IA2CD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QA/CpC;;;;;;;;;;;;WAYG;QACH,aAAQ,GAAG,CAAC,OAAe,EAAwB,EAAE;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAE3C,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,oDAAoD;YACpD,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,CAAC;YAClD,CAAC;YAED,mCAAmC;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,cAAc,CAAC,OAAO,CAAC;qBACpB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oBAChB,gDAAgD;oBAChD,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAChD,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrB,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;oBAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACrB,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QASA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,qDAAqD;QACrD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CAAY,qBAAS,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\r\n * GetAssetUC.ts\r\n *\r\n * This use case handles retrieval of asset metadata, managing both local\r\n * repository cache and remote API fetching to ensure asset entities exist\r\n * and are properly configured.\r\n *\r\n * Key Concepts:\r\n * - Retrieves asset entities with metadata from local cache or remote API\r\n * - Maintains asset repository consistency for entity management\r\n * - Uses lazy loading to fetch assets only when needed\r\n * - Transforms API DTOs to local asset entities automatically\r\n * - Provides singleton access for system-wide asset retrieval\r\n *\r\n * Usage Patterns:\r\n * - Singleton use case accessed through static get() method\r\n * - Called with asset ID to ensure asset entity exists and is loaded\r\n * - Returns existing entities immediately or fetches from API as needed\r\n * - Used by other UCs that need asset entities for operations\r\n */\r\n\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { FetchAssetMetaFromAPIUC } from \"../../VivedAPI\";\r\nimport { AssetEntity } from \"../Entities/AssetEntity\";\r\nimport { AssetRepo } from \"../Entities/AssetRepo\";\r\n\r\n/**\r\n * GetAssetUC handles retrieval and caching of asset entities with metadata.\r\n *\r\n * This singleton use case ensures asset entities exist in the local repository,\r\n * fetching from the API when necessary and maintaining consistent entity state.\r\n */\r\nexport abstract class GetAssetUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"GetAssetUC\";\r\n\r\n /**\r\n * Retrieves an asset entity, fetching from API if not already cached.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @returns Promise resolving to the asset entity with loaded metadata\r\n */\r\n abstract getAsset(assetID: string): Promise<AssetEntity>;\r\n\r\n /**\r\n * Retrieves the singleton GetAssetUC instance.\r\n *\r\n * @param appObjects - Repository for accessing the singleton component\r\n * @returns GetAssetUC instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo): GetAssetUC | undefined {\r\n return getSingletonComponent<GetAssetUC>(GetAssetUC.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new GetAssetUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case (must have AssetRepo)\r\n * @returns A new GetAssetUC implementation instance\r\n */\r\nexport function makeGetAssetUC(appObject: AppObject): GetAssetUC {\r\n return new GetAssetUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of GetAssetUC with caching and API integration.\r\n *\r\n * Key Implementation Details:\r\n * - Checks local asset repository first for immediate access\r\n * - Falls back to API fetch when asset is not cached locally\r\n * - Transforms API DTOs to asset entities using repository methods\r\n * - Provides error handling and logging for debugging\r\n * - Validates required dependencies during initialization\r\n */\r\nclass GetAssetUCImp extends GetAssetUC {\r\n /** The asset repository for entity management and caching */\r\n private assetRepo?: AssetRepo;\r\n\r\n /**\r\n * Gets the API use case for fetching asset metadata from remote sources\r\n * Used when assets are not available in the local repository\r\n */\r\n private get fetchAssetMeta() {\r\n return this.getCachedSingleton<FetchAssetMetaFromAPIUC>(\r\n FetchAssetMetaFromAPIUC.type\r\n )?.doFetch;\r\n }\r\n\r\n /**\r\n * Retrieves an asset entity with intelligent caching.\r\n *\r\n * This method implements a two-tier strategy:\r\n * 1. Check local repository for existing entity (immediate return)\r\n * 2. Fetch from API and create entity if not cached\r\n *\r\n * The method ensures all requested assets are available as entities\r\n * in the local repository for subsequent operations.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @returns Promise resolving to the asset entity with loaded metadata\r\n */\r\n getAsset = (assetID: string): Promise<AssetEntity> => {\r\n const assetRepo = this.assetRepo;\r\n const fetchAssetMeta = this.fetchAssetMeta;\r\n\r\n if (!assetRepo || !fetchAssetMeta) {\r\n return Promise.reject();\r\n }\r\n\r\n // Check local repository first for immediate access\r\n if (assetRepo.has(assetID)) {\r\n return Promise.resolve(assetRepo.get(assetID)!);\r\n }\r\n\r\n // Asset not cached, fetch from API\r\n return new Promise((resolve, reject) => {\r\n fetchAssetMeta(assetID)\r\n .then((baseDTO) => {\r\n // Transform DTO to entity and add to repository\r\n const baseAsset = assetRepo.addFromDTO(baseDTO);\r\n resolve(baseAsset);\r\n })\r\n .catch((e: Error) => {\r\n this.warn(e.message);\r\n reject(e);\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Initializes the GetAssetUC with required dependencies and validation.\r\n *\r\n * @param appObject - The AppObject that should contain the AssetRepo for entity management\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, GetAssetUC.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n // Validate and cache the asset repository dependency\r\n this.assetRepo = appObject.getComponent<AssetRepo>(AssetRepo.type);\r\n if (!this.assetRepo) {\r\n this.error(\"UC added to an App Object that does not have AssetRepo\");\r\n return;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GetAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/GetAssetUC.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AA+CH,wCAEC;AA/CD,sCAKqB;AACrB,6CAAyD;AAEzD,qDAAkD;AAElD;;;;;GAKG;AACH,MAAsB,UAAW,SAAQ,kBAAW;IAYlD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAa,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;;AApBH,gCAqBC;AApBC,wDAAwD;AACjD,eAAI,GAAG,YAAY,CAAC;AAqB7B;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,SAAoB;IACjD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,aAAc,SAAQ,UAAU;IAIpC;;;OAGG;IACH,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,kCAAuB,CAAC,IAAI,CAC7B,EAAE,OAAO,CAAC;IACb,CAAC;IA2CD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QA/CpC;;;;;;;;;;;;WAYG;QACH,aAAQ,GAAG,CAAC,OAAe,EAAwB,EAAE;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAE3C,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,oDAAoD;YACpD,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,CAAC;YAClD,CAAC;YAED,mCAAmC;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,cAAc,CAAC,OAAO,CAAC;qBACpB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oBAChB,gDAAgD;oBAChD,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAChD,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrB,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;oBAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACrB,MAAM,CAAC,CAAC,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QASA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,qDAAqD;QACrD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CAAY,qBAAS,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\n * GetAssetUC.ts\n *\n * This use case handles retrieval of asset metadata, managing both local\n * repository cache and remote API fetching to ensure asset entities exist\n * and are properly configured.\n *\n * Key Concepts:\n * - Retrieves asset entities with metadata from local cache or remote API\n * - Maintains asset repository consistency for entity management\n * - Uses lazy loading to fetch assets only when needed\n * - Transforms API DTOs to local asset entities automatically\n * - Provides singleton access for system-wide asset retrieval\n *\n * Usage Patterns:\n * - Singleton use case accessed through static get() method\n * - Called with asset ID to ensure asset entity exists and is loaded\n * - Returns existing entities immediately or fetches from API as needed\n * - Used by other UCs that need asset entities for operations\n */\n\nimport {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { FetchAssetMetaFromAPIUC } from \"../../VivedAPI\";\nimport { AssetEntity } from \"../Entities/AssetEntity\";\nimport { AssetRepo } from \"../Entities/AssetRepo\";\n\n/**\n * GetAssetUC handles retrieval and caching of asset entities with metadata.\n *\n * This singleton use case ensures asset entities exist in the local repository,\n * fetching from the API when necessary and maintaining consistent entity state.\n */\nexport abstract class GetAssetUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"GetAssetUC\";\n\n /**\n * Retrieves an asset entity, fetching from API if not already cached.\n *\n * @param assetID - The unique identifier of the asset\n * @returns Promise resolving to the asset entity with loaded metadata\n */\n abstract getAsset(assetID: string): Promise<AssetEntity>;\n\n /**\n * Retrieves the singleton GetAssetUC instance.\n *\n * @param appObjects - Repository for accessing the singleton component\n * @returns GetAssetUC instance or undefined if not found\n */\n static get(appObjects: AppObjectRepo): GetAssetUC | undefined {\n return getSingletonComponent<GetAssetUC>(GetAssetUC.type, appObjects);\n }\n}\n\n/**\n * Factory function to create a new GetAssetUC instance.\n *\n * @param appObject - The AppObject that will host this singleton use case (must have AssetRepo)\n * @returns A new GetAssetUC implementation instance\n */\nexport function makeGetAssetUC(appObject: AppObject): GetAssetUC {\n return new GetAssetUCImp(appObject);\n}\n\n/**\n * Private implementation of GetAssetUC with caching and API integration.\n *\n * Key Implementation Details:\n * - Checks local asset repository first for immediate access\n * - Falls back to API fetch when asset is not cached locally\n * - Transforms API DTOs to asset entities using repository methods\n * - Provides error handling and logging for debugging\n * - Validates required dependencies during initialization\n */\nclass GetAssetUCImp extends GetAssetUC {\n /** The asset repository for entity management and caching */\n private assetRepo?: AssetRepo;\n\n /**\n * Gets the API use case for fetching asset metadata from remote sources\n * Used when assets are not available in the local repository\n */\n private get fetchAssetMeta() {\n return this.getCachedSingleton<FetchAssetMetaFromAPIUC>(\n FetchAssetMetaFromAPIUC.type\n )?.doFetch;\n }\n\n /**\n * Retrieves an asset entity with intelligent caching.\n *\n * This method implements a two-tier strategy:\n * 1. Check local repository for existing entity (immediate return)\n * 2. Fetch from API and create entity if not cached\n *\n * The method ensures all requested assets are available as entities\n * in the local repository for subsequent operations.\n *\n * @param assetID - The unique identifier of the asset\n * @returns Promise resolving to the asset entity with loaded metadata\n */\n getAsset = (assetID: string): Promise<AssetEntity> => {\n const assetRepo = this.assetRepo;\n const fetchAssetMeta = this.fetchAssetMeta;\n\n if (!assetRepo || !fetchAssetMeta) {\n return Promise.reject();\n }\n\n // Check local repository first for immediate access\n if (assetRepo.has(assetID)) {\n return Promise.resolve(assetRepo.get(assetID)!);\n }\n\n // Asset not cached, fetch from API\n return new Promise((resolve, reject) => {\n fetchAssetMeta(assetID)\n .then((baseDTO) => {\n // Transform DTO to entity and add to repository\n const baseAsset = assetRepo.addFromDTO(baseDTO);\n resolve(baseAsset);\n })\n .catch((e: Error) => {\n this.warn(e.message);\n reject(e);\n });\n });\n };\n\n /**\n * Initializes the GetAssetUC with required dependencies and validation.\n *\n * @param appObject - The AppObject that should contain the AssetRepo for entity management\n */\n constructor(appObject: AppObject) {\n super(appObject, GetAssetUC.type);\n this.appObjects.registerSingleton(this);\n\n // Validate and cache the asset repository dependency\n this.assetRepo = appObject.getComponent<AssetRepo>(AssetRepo.type);\n if (!this.assetRepo) {\n this.error(\"UC added to an App Object that does not have AssetRepo\");\n return;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NewAppAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAppAssetUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * NewAppAssetUC.ts\r\n *\r\n * This use case handles creation of new assets within application contexts,\r\n * managing the complete workflow from file upload to UI state transitions.\r\n */\r\n\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { AppSandboxEntity, SandboxState } from \"../../AppSandbox/Entities\";\r\nimport {\r\n DialogAlertDTO,\r\n MakeAlertDialogUC,\r\n MakeSpinnerDialogUC\r\n} from \"../../Dialog\";\r\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\r\nimport { AppAssetsEntity, AssetRepo } from \"../Entities\";\r\n\r\n/**\r\n * Data transfer object for new application asset creation requests.\r\n */\r\nexport interface NewAppAssetDTO {\r\n /** The file object to be uploaded and stored as the asset */\r\n file: File;\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n}\r\n\r\n/**\r\n * NewAppAssetUC handles creation of new assets within application contexts.\r\n *\r\n * This singleton use case manages asset creation with UI feedback and state transitions.\r\n */\r\nexport abstract class NewAppAssetUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"NewAppAssetUC\";\r\n\r\n /**\r\n * Creates a new asset with the provided data.\r\n *\r\n * @param data - Complete asset information including file and metadata\r\n * @returns Promise that resolves when the asset is successfully created\r\n */\r\n abstract create(data: NewAppAssetDTO): Promise<void>;\r\n\r\n /**\r\n * Retrieves the singleton NewAppAssetUC instance.\r\n *\r\n * @param appObjects - Repository for accessing the singleton component\r\n * @returns NewAppAssetUC instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo): NewAppAssetUC | undefined {\r\n return getSingletonComponent(NewAppAssetUC.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new NewAppAssetUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n * @returns A new NewAppAssetUC implementation instance\r\n */\r\nexport function makeNewAppAssetUC(appObject: AppObject): NewAppAssetUC {\r\n return new NewAppAssetUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of NewAppAssetUC with app context and state management.\r\n */\r\nclass NewAppAssetUCImp extends NewAppAssetUC {\r\n private appAssets?: AppAssetsEntity;\r\n\r\n private get postNewAsset() {\r\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\r\n }\r\n\r\n private get assetRepo() {\r\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\r\n }\r\n\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n private get spinnerFactory() {\r\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\r\n MakeSpinnerDialogUC.type\r\n );\r\n }\r\n\r\n private get alertFactory() {\r\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\r\n }\r\n\r\n create = (data: NewAppAssetDTO): Promise<void> => {\r\n const appAssets = this.appAssets;\r\n const postNewAsset = this.postNewAsset;\r\n const sandbox = this.sandbox;\r\n const assetRepo = this.assetRepo;\r\n\r\n if (!appAssets || !postNewAsset || !sandbox || !assetRepo) {\r\n return Promise.reject();\r\n }\r\n\r\n return new Promise<void>((resolve) => {\r\n const { description, file, name } = data;\r\n\r\n const newAssetData: NewAssetApiDto = {\r\n description,\r\n name,\r\n file,\r\n ownerID: sandbox.appID\r\n };\r\n\r\n const spinnerDialog = this.spinnerFactory?.make({\r\n title: \"New App Asset\",\r\n message: \"Posting new app asset...\"\r\n });\r\n\r\n postNewAsset(newAssetData)\r\n .then((resp) => {\r\n appAssets.add(resp.id);\r\n\r\n const newAsset = assetRepo.assetFactory(resp.id);\r\n newAsset.setFile(file);\r\n newAsset.description = description;\r\n newAsset.name = name;\r\n newAsset.filename = resp.filename;\r\n\r\n assetRepo.add(newAsset);\r\n this.sandbox!.state = SandboxState.MOUNTED;\r\n\r\n spinnerDialog?.close();\r\n resolve();\r\n })\r\n .catch((e: Error) => {\r\n this.error(\"create new asset error: \" + e.message);\r\n spinnerDialog?.close();\r\n\r\n const dialogDTO: DialogAlertDTO = {\r\n buttonLabel: \"OK\",\r\n message: `Something went wrong when creating a new app asset. Check the console. ${e.message}`,\r\n title: \"New App Asset Error\"\r\n };\r\n this.alertFactory?.make(dialogDTO);\r\n\r\n resolve();\r\n });\r\n });\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, NewAppAssetUC.type);\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.appAssets = appObject.getComponent<AppAssetsEntity>(\r\n AppAssetsEntity.type\r\n );\r\n if (!this.appAssets) {\r\n this.error(\r\n \"UC added to an App Object that does not have AppAssetsEntity\"\r\n );\r\n return;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"NewAppAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAppAssetUC.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA+DH,8CAEC;AA/DD,sCAKqB;AACrB,wDAA2E;AAC3E,yCAIsB;AACtB,4CAAoE;AACpE,0CAAyD;AAczD;;;;GAIG;AACH,MAAsB,aAAc,SAAQ,kBAAW;IAYrD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;;AApBH,sCAqBC;AApBC,wDAAwD;AACjD,kBAAI,GAAG,eAAe,CAAC;AAqBhC;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,SAAoB;IACpD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,gBAAiB,SAAQ,aAAa;IAG1C,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,oBAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9E,CAAC;IAED,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAY,oBAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,2BAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAY,cAAc;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,4BAAmB,CAAC,IAAI,CACzB,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAoB,0BAAiB,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IA2DD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QA1DvC,WAAM,GAAG,CAAC,IAAoB,EAAiB,EAAE;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAEjC,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC1D,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,CAAC;YAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACnC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBAEzC,MAAM,YAAY,GAAmB;oBACnC,WAAW;oBACX,IAAI;oBACJ,IAAI;oBACJ,OAAO,EAAE,OAAO,CAAC,KAAK;iBACvB,CAAC;gBAEF,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC;oBAC9C,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,0BAA0B;iBACpC,CAAC,CAAC;gBAEH,YAAY,CAAC,YAAY,CAAC;qBACvB,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBACb,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEvB,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACvB,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;oBACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;oBACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAElC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACxB,IAAI,CAAC,OAAQ,CAAC,KAAK,GAAG,uBAAY,CAAC,OAAO,CAAC;oBAE3C,aAAa,EAAE,KAAK,EAAE,CAAC;oBACvB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;oBAClB,IAAI,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;oBACnD,aAAa,EAAE,KAAK,EAAE,CAAC;oBAEvB,MAAM,SAAS,GAAmB;wBAChC,WAAW,EAAE,IAAI;wBACjB,OAAO,EAAE,0EAA0E,CAAC,CAAC,OAAO,EAAE;wBAC9F,KAAK,EAAE,qBAAqB;qBAC7B,CAAC;oBACF,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAEnC,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CACrC,0BAAe,CAAC,IAAI,CACrB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CACR,8DAA8D,CAC/D,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;CACF","sourcesContent":["/**\n * NewAppAssetUC.ts\n *\n * This use case handles creation of new assets within application contexts,\n * managing the complete workflow from file upload to UI state transitions.\n */\n\nimport {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { AppSandboxEntity, SandboxState } from \"../../AppSandbox/Entities\";\nimport {\n DialogAlertDTO,\n MakeAlertDialogUC,\n MakeSpinnerDialogUC\n} from \"../../Dialog\";\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\nimport { AppAssetsEntity, AssetRepo } from \"../Entities\";\n\n/**\n * Data transfer object for new application asset creation requests.\n */\nexport interface NewAppAssetDTO {\n /** The file object to be uploaded and stored as the asset */\n file: File;\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n}\n\n/**\n * NewAppAssetUC handles creation of new assets within application contexts.\n *\n * This singleton use case manages asset creation with UI feedback and state transitions.\n */\nexport abstract class NewAppAssetUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"NewAppAssetUC\";\n\n /**\n * Creates a new asset with the provided data.\n *\n * @param data - Complete asset information including file and metadata\n * @returns Promise that resolves when the asset is successfully created\n */\n abstract create(data: NewAppAssetDTO): Promise<void>;\n\n /**\n * Retrieves the singleton NewAppAssetUC instance.\n *\n * @param appObjects - Repository for accessing the singleton component\n * @returns NewAppAssetUC instance or undefined if not found\n */\n static get(appObjects: AppObjectRepo): NewAppAssetUC | undefined {\n return getSingletonComponent(NewAppAssetUC.type, appObjects);\n }\n}\n\n/**\n * Factory function to create a new NewAppAssetUC instance.\n *\n * @param appObject - The AppObject that will host this singleton use case\n * @returns A new NewAppAssetUC implementation instance\n */\nexport function makeNewAppAssetUC(appObject: AppObject): NewAppAssetUC {\n return new NewAppAssetUCImp(appObject);\n}\n\n/**\n * Private implementation of NewAppAssetUC with app context and state management.\n */\nclass NewAppAssetUCImp extends NewAppAssetUC {\n private appAssets?: AppAssetsEntity;\n\n private get postNewAsset() {\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\n }\n\n private get assetRepo() {\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\n }\n\n private get sandbox() {\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\n }\n\n private get spinnerFactory() {\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\n MakeSpinnerDialogUC.type\n );\n }\n\n private get alertFactory() {\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\n }\n\n create = (data: NewAppAssetDTO): Promise<void> => {\n const appAssets = this.appAssets;\n const postNewAsset = this.postNewAsset;\n const sandbox = this.sandbox;\n const assetRepo = this.assetRepo;\n\n if (!appAssets || !postNewAsset || !sandbox || !assetRepo) {\n return Promise.reject();\n }\n\n return new Promise<void>((resolve) => {\n const { description, file, name } = data;\n\n const newAssetData: NewAssetApiDto = {\n description,\n name,\n file,\n ownerID: sandbox.appID\n };\n\n const spinnerDialog = this.spinnerFactory?.make({\n title: \"New App Asset\",\n message: \"Posting new app asset...\"\n });\n\n postNewAsset(newAssetData)\n .then((resp) => {\n appAssets.add(resp.id);\n\n const newAsset = assetRepo.assetFactory(resp.id);\n newAsset.setFile(file);\n newAsset.description = description;\n newAsset.name = name;\n newAsset.filename = resp.filename;\n\n assetRepo.add(newAsset);\n this.sandbox!.state = SandboxState.MOUNTED;\n\n spinnerDialog?.close();\n resolve();\n })\n .catch((e: Error) => {\n this.error(\"create new asset error: \" + e.message);\n spinnerDialog?.close();\n\n const dialogDTO: DialogAlertDTO = {\n buttonLabel: \"OK\",\n message: `Something went wrong when creating a new app asset. Check the console. ${e.message}`,\n title: \"New App Asset Error\"\n };\n this.alertFactory?.make(dialogDTO);\n\n resolve();\n });\n });\n };\n\n constructor(appObject: AppObject) {\n super(appObject, NewAppAssetUC.type);\n this.appObjects.registerSingleton(this);\n\n this.appAssets = appObject.getComponent<AppAssetsEntity>(\n AppAssetsEntity.type\n );\n if (!this.appAssets) {\n this.error(\n \"UC added to an App Object that does not have AppAssetsEntity\"\n );\n return;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"NewAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAssetUC.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AA6DH,wCAEC;AA7DD,sCAKqB;AACrB,4CAAoE;AACpE,0CAAwC;AAiBxC;;;;;GAKG;AACH,MAAsB,UAAW,SAAQ,kBAAW;IAYlD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;;AApBH,gCAqBC;AApBC,wDAAwD;AACjD,eAAI,GAAG,YAAY,CAAC;AAqB7B;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,SAAoB;IACjD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,aAAc,SAAQ,UAAU;IACpC;;;OAGG;IACH,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,oBAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACH,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAY,oBAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IA8CD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAlDpC;;;;;;;;;;;;;WAaG;QACH,WAAM,GAAG,CAAC,IAAiB,EAAmB,EAAE;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAEjC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAChD,MAAM,YAAY,GAAmB;gBACnC,WAAW;gBACX,IAAI;gBACJ,IAAI;gBACJ,OAAO,EAAE,KAAK;aACf,CAAC;YAEF,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9C,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;gBACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAElC,mCAAmC;gBACnC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QASA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["/**\r\n * NewAssetUC.ts\r\n *\r\n * This use case handles the creation of new assets, managing the complete workflow\r\n * from file upload through API persistence to local entity creation and storage.\r\n *\r\n * Key Concepts:\r\n * - Singleton use case that handles asset creation operations\r\n * - Coordinates file upload with metadata persistence via API\r\n * - Creates and configures new asset entities in the local repository\r\n * - Transforms between DTO formats for API and internal use\r\n * - Provides unique asset IDs for tracking and reference\r\n *\r\n * Usage Patterns:\r\n * - Accessed as a singleton through static get() method\r\n * - Called with complete asset data including file and metadata\r\n * - Returns asset ID for immediate reference by calling code\r\n * - Handles async operations with proper error propagation\r\n */\r\n\r\nimport {\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\r\nimport { AssetRepo } from \"../Entities\";\r\n\r\n/**\r\n * Data transfer object for new asset creation requests.\r\n * Contains all necessary information to create a new asset in the system.\r\n */\r\nexport interface NewAssetDto {\r\n /** The file object to be uploaded and stored as the asset */\r\n file: File;\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n /** ID of the user or entity that owns this asset */\r\n owner: string;\r\n}\r\n\r\n/**\r\n * NewAssetUC handles the creation of new assets in the VIVED system.\r\n *\r\n * This singleton use case manages the complete asset creation workflow,\r\n * from initial file upload through API persistence to local entity creation.\r\n */\r\nexport abstract class NewAssetUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"NewAssetUC\";\r\n\r\n /**\r\n * Creates a new asset with the provided data.\r\n *\r\n * @param data - Complete asset information including file and metadata\r\n * @returns Promise resolving to the unique ID of the newly created asset\r\n */\r\n abstract create(data: NewAssetDto): Promise<string>;\r\n\r\n /**\r\n * Retrieves the singleton NewAssetUC instance.\r\n *\r\n * @param appObjects - Repository for accessing the singleton component\r\n * @returns NewAssetUC instance or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo): NewAssetUC | undefined {\r\n return getSingletonComponent(NewAssetUC.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new NewAssetUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n * @returns A new NewAssetUC implementation instance\r\n */\r\nexport function makeNewAssetUC(appObject: AppObject): NewAssetUC {\r\n return new NewAssetUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of NewAssetUC that handles the concrete asset creation operations.\r\n *\r\n * Key Implementation Details:\r\n * - Validates required dependencies (API and repository components)\r\n * - Transforms NewAssetDto to NewAssetApiDto for API communication\r\n * - Creates and configures new asset entities with file and metadata\r\n * - Adds created assets to the repository for management and access\r\n * - Handles async operations with proper error propagation\r\n * - Registers itself as a singleton for system-wide access\r\n */\r\nclass NewAssetUCImp extends NewAssetUC {\r\n /**\r\n * Gets the API use case for posting new assets to the backend\r\n * Cached for efficient repeated access during operations\r\n */\r\n private get postNewAsset() {\r\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\r\n }\r\n\r\n /**\r\n * Gets the asset repository for entity creation and management\r\n * Cached for efficient repeated access during operations\r\n */\r\n private get assetRepo() {\r\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\r\n }\r\n\r\n /**\r\n * Creates a new asset with complete workflow handling.\r\n *\r\n * This method handles the complete asset creation process:\r\n * 1. Validates required dependencies are available\r\n * 2. Transforms the DTO to API format\r\n * 3. Posts the asset data to the backend API\r\n * 4. Creates a new asset entity with the returned information\r\n * 5. Configures the entity with file and metadata\r\n * 6. Adds the entity to the repository for management\r\n *\r\n * @param data - Complete asset creation data\r\n * @returns Promise resolving to the unique asset ID\r\n */\r\n create = (data: NewAssetDto): Promise<string> => {\r\n const postNewAsset = this.postNewAsset;\r\n const assetRepo = this.assetRepo;\r\n\r\n if (!postNewAsset || !assetRepo) {\r\n return Promise.reject(new Error(\"Missing dependencies\"));\r\n }\r\n\r\n const { description, file, name, owner } = data;\r\n const newAssetData: NewAssetApiDto = {\r\n description,\r\n name,\r\n file,\r\n ownerID: owner\r\n };\r\n\r\n return postNewAsset(newAssetData).then((resp) => {\r\n // Create and configure the new asset entity\r\n const newAsset = assetRepo.assetFactory(resp.id);\r\n newAsset.setFile(file);\r\n newAsset.description = description;\r\n newAsset.name = name;\r\n newAsset.filename = resp.filename;\r\n\r\n // Add to repository for management\r\n assetRepo.add(newAsset);\r\n return resp.id;\r\n });\r\n };\r\n\r\n /**\r\n * Initializes the NewAssetUC and registers it as a singleton.\r\n *\r\n * @param appObject - The AppObject that will host this singleton use case\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, NewAssetUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"NewAssetUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/NewAssetUC.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AA6DH,wCAEC;AA7DD,sCAKqB;AACrB,4CAAoE;AACpE,0CAAwC;AAiBxC;;;;;GAKG;AACH,MAAsB,UAAW,SAAQ,kBAAW;IAYlD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;;AApBH,gCAqBC;AApBC,wDAAwD;AACjD,eAAI,GAAG,YAAY,CAAC;AAqB7B;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,SAAoB;IACjD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,aAAc,SAAQ,UAAU;IACpC;;;OAGG;IACH,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAiB,oBAAc,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACH,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAY,oBAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IA8CD;;;;OAIG;IACH,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QAlDpC;;;;;;;;;;;;;WAaG;QACH,WAAM,GAAG,CAAC,IAAiB,EAAmB,EAAE;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAEjC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YAChD,MAAM,YAAY,GAAmB;gBACnC,WAAW;gBACX,IAAI;gBACJ,IAAI;gBACJ,OAAO,EAAE,KAAK;aACf,CAAC;YAEF,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC9C,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;gBACnC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAElC,mCAAmC;gBACnC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QASA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["/**\n * NewAssetUC.ts\n *\n * This use case handles the creation of new assets, managing the complete workflow\n * from file upload through API persistence to local entity creation and storage.\n *\n * Key Concepts:\n * - Singleton use case that handles asset creation operations\n * - Coordinates file upload with metadata persistence via API\n * - Creates and configures new asset entities in the local repository\n * - Transforms between DTO formats for API and internal use\n * - Provides unique asset IDs for tracking and reference\n *\n * Usage Patterns:\n * - Accessed as a singleton through static get() method\n * - Called with complete asset data including file and metadata\n * - Returns asset ID for immediate reference by calling code\n * - Handles async operations with proper error propagation\n */\n\nimport {\n AppObject,\n AppObjectRepo,\n AppObjectUC,\n getSingletonComponent\n} from \"@vived/core\";\nimport { NewAssetApiDto, PostNewAssetUC } from \"../../VivedAPI/UCs\";\nimport { AssetRepo } from \"../Entities\";\n\n/**\n * Data transfer object for new asset creation requests.\n * Contains all necessary information to create a new asset in the system.\n */\nexport interface NewAssetDto {\n /** The file object to be uploaded and stored as the asset */\n file: File;\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n /** ID of the user or entity that owns this asset */\n owner: string;\n}\n\n/**\n * NewAssetUC handles the creation of new assets in the VIVED system.\n *\n * This singleton use case manages the complete asset creation workflow,\n * from initial file upload through API persistence to local entity creation.\n */\nexport abstract class NewAssetUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"NewAssetUC\";\n\n /**\n * Creates a new asset with the provided data.\n *\n * @param data - Complete asset information including file and metadata\n * @returns Promise resolving to the unique ID of the newly created asset\n */\n abstract create(data: NewAssetDto): Promise<string>;\n\n /**\n * Retrieves the singleton NewAssetUC instance.\n *\n * @param appObjects - Repository for accessing the singleton component\n * @returns NewAssetUC instance or undefined if not found\n */\n static get(appObjects: AppObjectRepo): NewAssetUC | undefined {\n return getSingletonComponent(NewAssetUC.type, appObjects);\n }\n}\n\n/**\n * Factory function to create a new NewAssetUC instance.\n *\n * @param appObject - The AppObject that will host this singleton use case\n * @returns A new NewAssetUC implementation instance\n */\nexport function makeNewAssetUC(appObject: AppObject): NewAssetUC {\n return new NewAssetUCImp(appObject);\n}\n\n/**\n * Private implementation of NewAssetUC that handles the concrete asset creation operations.\n *\n * Key Implementation Details:\n * - Validates required dependencies (API and repository components)\n * - Transforms NewAssetDto to NewAssetApiDto for API communication\n * - Creates and configures new asset entities with file and metadata\n * - Adds created assets to the repository for management and access\n * - Handles async operations with proper error propagation\n * - Registers itself as a singleton for system-wide access\n */\nclass NewAssetUCImp extends NewAssetUC {\n /**\n * Gets the API use case for posting new assets to the backend\n * Cached for efficient repeated access during operations\n */\n private get postNewAsset() {\n return this.getCachedSingleton<PostNewAssetUC>(PostNewAssetUC.type)?.doPost;\n }\n\n /**\n * Gets the asset repository for entity creation and management\n * Cached for efficient repeated access during operations\n */\n private get assetRepo() {\n return this.getCachedSingleton<AssetRepo>(AssetRepo.type);\n }\n\n /**\n * Creates a new asset with complete workflow handling.\n *\n * This method handles the complete asset creation process:\n * 1. Validates required dependencies are available\n * 2. Transforms the DTO to API format\n * 3. Posts the asset data to the backend API\n * 4. Creates a new asset entity with the returned information\n * 5. Configures the entity with file and metadata\n * 6. Adds the entity to the repository for management\n *\n * @param data - Complete asset creation data\n * @returns Promise resolving to the unique asset ID\n */\n create = (data: NewAssetDto): Promise<string> => {\n const postNewAsset = this.postNewAsset;\n const assetRepo = this.assetRepo;\n\n if (!postNewAsset || !assetRepo) {\n return Promise.reject(new Error(\"Missing dependencies\"));\n }\n\n const { description, file, name, owner } = data;\n const newAssetData: NewAssetApiDto = {\n description,\n name,\n file,\n ownerID: owner\n };\n\n return postNewAsset(newAssetData).then((resp) => {\n // Create and configure the new asset entity\n const newAsset = assetRepo.assetFactory(resp.id);\n newAsset.setFile(file);\n newAsset.description = description;\n newAsset.name = name;\n newAsset.filename = resp.filename;\n\n // Add to repository for management\n assetRepo.add(newAsset);\n return resp.id;\n });\n };\n\n /**\n * Initializes the NewAssetUC and registers it as a singleton.\n *\n * @param appObject - The AppObject that will host this singleton use case\n */\n constructor(appObject: AppObject) {\n super(appObject, NewAssetUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateAppAssetMetaUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAppAssetMetaUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * UpdateAppAssetMetaUC.ts\r\n *\r\n * This use case handles updating asset metadata (name, description, archived status)\r\n * for existing assets. It provides a complete workflow for modifying asset information\r\n * with user feedback and sandbox state management.\r\n *\r\n * Key Concepts:\r\n * - Updates asset metadata without affecting the actual file content\r\n * - Uses API calls to persist metadata changes on the backend\r\n * - Provides user feedback through spinner and error dialogs\r\n * - Manages sandbox state transitions after successful updates\r\n * - Supports partial metadata updates through DTO pattern\r\n *\r\n * Usage Patterns:\r\n * - Created per-asset during factory setup\r\n * - Accessed through static get() method with asset ID\r\n * - Called with metadata DTO containing updated field values\r\n * - Handles async operations with proper error handling and user feedback\r\n */\r\n\r\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\r\nimport {\r\n AppSandboxEntity,\r\n SandboxState\r\n} from \"../../AppSandbox/Entities/AppSandboxEntity\";\r\nimport { DialogAlertDTO } from \"../../Dialog/Entities\";\r\nimport { MakeAlertDialogUC, MakeSpinnerDialogUC } from \"../../Dialog/UCs\";\r\nimport { PatchAssetMetaUC } from \"../../VivedAPI/UCs/PatchAssetMetaUC\";\r\nimport { AssetEntity } from \"../Entities\";\r\n\r\n/**\r\n * Data transfer object for asset metadata updates.\r\n * Contains all the metadata fields that can be modified for an asset.\r\n */\r\nexport interface UpdateAppAssetMetaDTO {\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n /** Whether the asset should be archived (hidden from normal views) */\r\n archived: boolean;\r\n}\r\n\r\n/**\r\n * UpdateAppAssetMetaUC manages updating the metadata of individual assets.\r\n *\r\n * This use case provides the business logic for modifying asset metadata,\r\n * handling API persistence, and managing user feedback during the operation.\r\n */\r\nexport abstract class UpdateAppAssetMetaUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"UpdateAppAssetMetaUC\";\r\n\r\n /**\r\n * Updates the metadata of the associated asset.\r\n *\r\n * @param data - DTO containing the updated metadata fields\r\n * @returns Promise that resolves when the operation completes successfully\r\n */\r\n abstract updateMeta(data: UpdateAppAssetMetaDTO): Promise<void>;\r\n\r\n /**\r\n * Retrieves an UpdateAppAssetMetaUC component for a specific asset.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param appObjects - Repository for accessing app objects and components\r\n * @returns UpdateAppAssetMetaUC instance or undefined if not found\r\n */\r\n static get(\r\n assetID: string,\r\n appObjects: AppObjectRepo\r\n ): UpdateAppAssetMetaUC | undefined {\r\n const appObject = appObjects.get(assetID);\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"UpdateAppAssetMetaUC.get\",\r\n \"Unable to find app object\"\r\n );\r\n return undefined;\r\n }\r\n\r\n const uc = appObject.getComponent<UpdateAppAssetMetaUC>(\r\n UpdateAppAssetMetaUC.type\r\n );\r\n if (!uc) {\r\n appObjects.submitWarning(\r\n \"UpdateAppAssetMetaUC.get\",\r\n \"App Object does not have UpdateAssetMetaUC\"\r\n );\r\n return undefined;\r\n }\r\n\r\n return uc;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new UpdateAppAssetMetaUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\r\n * @returns A new UpdateAppAssetMetaUC implementation instance\r\n */\r\nexport function makeUpdateAppAssetMetaUC(\r\n appObject: AppObject\r\n): UpdateAppAssetMetaUC {\r\n return new UpdateAppAssetMetaUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of UpdateAppAssetMetaUC that handles the concrete metadata update operations.\r\n *\r\n * Key Implementation Details:\r\n * - Gets asset entity from local AppObject components\r\n * - Uses PatchAssetMetaUC for backend API persistence\r\n * - Shows spinner dialogs during metadata update operations\r\n * - Handles errors gracefully with alert dialogs and logging\r\n * - Updates local asset state after successful API operations\r\n * - Manages sandbox state transitions for UI consistency\r\n */\r\nclass UpdateAppAssetMetaUCImp extends UpdateAppAssetMetaUC {\r\n /** Gets the asset entity from the local AppObject this UC operates on */\r\n private get asset() {\r\n return this.getCachedLocalComponent<AssetEntity>(AssetEntity.type);\r\n }\r\n\r\n /** Gets the spinner dialog factory for showing user feedback during operations */\r\n private get spinnerFactory() {\r\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\r\n MakeSpinnerDialogUC.type\r\n );\r\n }\r\n\r\n /** Gets the API use case for patching asset metadata on the backend */\r\n private get patchAssetMeta() {\r\n return this.getCachedSingleton<PatchAssetMetaUC>(PatchAssetMetaUC.type)\r\n ?.doPatch;\r\n }\r\n\r\n /** Gets the alert dialog factory for showing error messages to users */\r\n private get alertFactory() {\r\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\r\n }\r\n\r\n /** Gets the sandbox entity for managing application state transitions */\r\n private get sandbox() {\r\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\r\n }\r\n\r\n /**\r\n * Updates the asset metadata with full error handling and user feedback.\r\n *\r\n * This method handles the complete metadata update workflow:\r\n * 1. Validates the asset exists and required dependencies are available\r\n * 2. Shows a spinner dialog during the API operation\r\n * 3. Patches the metadata on the backend via API\r\n * 4. Updates the local asset entity with the new metadata\r\n * 5. Manages sandbox state transitions for UI consistency\r\n * 6. Shows error dialogs and logs failures appropriately\r\n *\r\n * @param data - DTO containing the updated metadata fields\r\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\r\n */\r\n updateMeta = (data: UpdateAppAssetMetaDTO): Promise<void> => {\r\n const asset = this.asset;\r\n\r\n if (!asset) {\r\n return Promise.reject(new Error(\"No Asset Entity\"));\r\n }\r\n\r\n const patchAssetMeta = this.patchAssetMeta;\r\n if (!patchAssetMeta) {\r\n return Promise.reject(new Error(\"No Patch UC\"));\r\n }\r\n\r\n const { archived, description, name } = data;\r\n\r\n // Show user feedback during operation\r\n const spinnerDialog = this.spinnerFactory?.make({\r\n title: \"Asset Meta\",\r\n message: \"Updating asset's meta...\"\r\n });\r\n\r\n return new Promise((resolve, reject) => {\r\n patchAssetMeta({\r\n archived,\r\n description,\r\n id: asset.id,\r\n name\r\n })\r\n .then(() => {\r\n // Update local asset state with new metadata\r\n asset.archived = archived;\r\n asset.name = name;\r\n asset.description = description;\r\n\r\n spinnerDialog?.close();\r\n\r\n // Manage sandbox state for UI consistency\r\n if (this.sandbox) this.sandbox.state = SandboxState.MOUNTED;\r\n\r\n resolve();\r\n })\r\n .catch((e) => {\r\n // Handle errors with user feedback\r\n this.error(\"Patch asset error: \" + e.message);\r\n spinnerDialog?.close();\r\n const dialogDTO: DialogAlertDTO = {\r\n buttonLabel: \"OK\",\r\n message: `Something went wrong when updating the assets meta. Check the console. ${e.message}`,\r\n title: \"Update Asset Error\"\r\n };\r\n this.alertFactory?.make(dialogDTO);\r\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Initializes the UpdateAppAssetMetaUC.\r\n *\r\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, UpdateAppAssetMetaUC.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UpdateAppAssetMetaUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAppAssetMetaUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UpdateAppAssetMetaUC.ts\n *\n * This use case handles updating asset metadata (name, description, archived status)\n * for existing assets. It provides a complete workflow for modifying asset information\n * with user feedback and sandbox state management.\n *\n * Key Concepts:\n * - Updates asset metadata without affecting the actual file content\n * - Uses API calls to persist metadata changes on the backend\n * - Provides user feedback through spinner and error dialogs\n * - Manages sandbox state transitions after successful updates\n * - Supports partial metadata updates through DTO pattern\n *\n * Usage Patterns:\n * - Created per-asset during factory setup\n * - Accessed through static get() method with asset ID\n * - Called with metadata DTO containing updated field values\n * - Handles async operations with proper error handling and user feedback\n */\n\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\nimport {\n AppSandboxEntity,\n SandboxState\n} from \"../../AppSandbox/Entities/AppSandboxEntity\";\nimport { DialogAlertDTO } from \"../../Dialog/Entities\";\nimport { MakeAlertDialogUC, MakeSpinnerDialogUC } from \"../../Dialog/UCs\";\nimport { PatchAssetMetaUC } from \"../../VivedAPI/UCs/PatchAssetMetaUC\";\nimport { AssetEntity } from \"../Entities\";\n\n/**\n * Data transfer object for asset metadata updates.\n * Contains all the metadata fields that can be modified for an asset.\n */\nexport interface UpdateAppAssetMetaDTO {\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n /** Whether the asset should be archived (hidden from normal views) */\n archived: boolean;\n}\n\n/**\n * UpdateAppAssetMetaUC manages updating the metadata of individual assets.\n *\n * This use case provides the business logic for modifying asset metadata,\n * handling API persistence, and managing user feedback during the operation.\n */\nexport abstract class UpdateAppAssetMetaUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"UpdateAppAssetMetaUC\";\n\n /**\n * Updates the metadata of the associated asset.\n *\n * @param data - DTO containing the updated metadata fields\n * @returns Promise that resolves when the operation completes successfully\n */\n abstract updateMeta(data: UpdateAppAssetMetaDTO): Promise<void>;\n\n /**\n * Retrieves an UpdateAppAssetMetaUC component for a specific asset.\n *\n * @param assetID - The unique identifier of the asset\n * @param appObjects - Repository for accessing app objects and components\n * @returns UpdateAppAssetMetaUC instance or undefined if not found\n */\n static get(\n assetID: string,\n appObjects: AppObjectRepo\n ): UpdateAppAssetMetaUC | undefined {\n const appObject = appObjects.get(assetID);\n if (!appObject) {\n appObjects.submitWarning(\n \"UpdateAppAssetMetaUC.get\",\n \"Unable to find app object\"\n );\n return undefined;\n }\n\n const uc = appObject.getComponent<UpdateAppAssetMetaUC>(\n UpdateAppAssetMetaUC.type\n );\n if (!uc) {\n appObjects.submitWarning(\n \"UpdateAppAssetMetaUC.get\",\n \"App Object does not have UpdateAssetMetaUC\"\n );\n return undefined;\n }\n\n return uc;\n }\n}\n\n/**\n * Factory function to create a new UpdateAppAssetMetaUC instance.\n *\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\n * @returns A new UpdateAppAssetMetaUC implementation instance\n */\nexport function makeUpdateAppAssetMetaUC(\n appObject: AppObject\n): UpdateAppAssetMetaUC {\n return new UpdateAppAssetMetaUCImp(appObject);\n}\n\n/**\n * Private implementation of UpdateAppAssetMetaUC that handles the concrete metadata update operations.\n *\n * Key Implementation Details:\n * - Gets asset entity from local AppObject components\n * - Uses PatchAssetMetaUC for backend API persistence\n * - Shows spinner dialogs during metadata update operations\n * - Handles errors gracefully with alert dialogs and logging\n * - Updates local asset state after successful API operations\n * - Manages sandbox state transitions for UI consistency\n */\nclass UpdateAppAssetMetaUCImp extends UpdateAppAssetMetaUC {\n /** Gets the asset entity from the local AppObject this UC operates on */\n private get asset() {\n return this.getCachedLocalComponent<AssetEntity>(AssetEntity.type);\n }\n\n /** Gets the spinner dialog factory for showing user feedback during operations */\n private get spinnerFactory() {\n return this.getCachedSingleton<MakeSpinnerDialogUC>(\n MakeSpinnerDialogUC.type\n );\n }\n\n /** Gets the API use case for patching asset metadata on the backend */\n private get patchAssetMeta() {\n return this.getCachedSingleton<PatchAssetMetaUC>(PatchAssetMetaUC.type)\n ?.doPatch;\n }\n\n /** Gets the alert dialog factory for showing error messages to users */\n private get alertFactory() {\n return this.getCachedSingleton<MakeAlertDialogUC>(MakeAlertDialogUC.type);\n }\n\n /** Gets the sandbox entity for managing application state transitions */\n private get sandbox() {\n return this.getCachedSingleton<AppSandboxEntity>(AppSandboxEntity.type);\n }\n\n /**\n * Updates the asset metadata with full error handling and user feedback.\n *\n * This method handles the complete metadata update workflow:\n * 1. Validates the asset exists and required dependencies are available\n * 2. Shows a spinner dialog during the API operation\n * 3. Patches the metadata on the backend via API\n * 4. Updates the local asset entity with the new metadata\n * 5. Manages sandbox state transitions for UI consistency\n * 6. Shows error dialogs and logs failures appropriately\n *\n * @param data - DTO containing the updated metadata fields\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\n */\n updateMeta = (data: UpdateAppAssetMetaDTO): Promise<void> => {\n const asset = this.asset;\n\n if (!asset) {\n return Promise.reject(new Error(\"No Asset Entity\"));\n }\n\n const patchAssetMeta = this.patchAssetMeta;\n if (!patchAssetMeta) {\n return Promise.reject(new Error(\"No Patch UC\"));\n }\n\n const { archived, description, name } = data;\n\n // Show user feedback during operation\n const spinnerDialog = this.spinnerFactory?.make({\n title: \"Asset Meta\",\n message: \"Updating asset's meta...\"\n });\n\n return new Promise((resolve, reject) => {\n patchAssetMeta({\n archived,\n description,\n id: asset.id,\n name\n })\n .then(() => {\n // Update local asset state with new metadata\n asset.archived = archived;\n asset.name = name;\n asset.description = description;\n\n spinnerDialog?.close();\n\n // Manage sandbox state for UI consistency\n if (this.sandbox) this.sandbox.state = SandboxState.MOUNTED;\n\n resolve();\n })\n .catch((e) => {\n // Handle errors with user feedback\n this.error(\"Patch asset error: \" + e.message);\n spinnerDialog?.close();\n const dialogDTO: DialogAlertDTO = {\n buttonLabel: \"OK\",\n message: `Something went wrong when updating the assets meta. Check the console. ${e.message}`,\n title: \"Update Asset Error\"\n };\n this.alertFactory?.make(dialogDTO);\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\n });\n });\n };\n\n /**\n * Initializes the UpdateAppAssetMetaUC.\n *\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\n */\n constructor(appObject: AppObject) {\n super(appObject, UpdateAppAssetMetaUC.type);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateAssetFileUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAssetFileUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * UpdateAssetFileUC.ts\r\n *\r\n * This use case handles updating the file content of existing assets while\r\n * preserving metadata and relationships. It provides a complete workflow\r\n * for replacing asset files with user feedback and error handling.\r\n *\r\n * Key Concepts:\r\n * - Updates asset file content while preserving metadata and relationships\r\n * - Uses API calls to persist file changes on the backend\r\n * - Provides user feedback through spinner and error dialogs\r\n * - Manages local asset state updates after successful operations\r\n * - Handles filename updates from backend processing\r\n *\r\n * Usage Patterns:\r\n * - Created per-asset during factory setup\r\n * - Accessed through static get() method with asset ID\r\n * - Called with new File object to replace existing asset content\r\n * - Handles async operations with proper error handling and user feedback\r\n */\r\n\r\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\r\nimport {\r\n DialogAlertDTO,\r\n DialogQueue,\r\n MakeAlertDialogUC,\r\n MakeSpinnerDialogUC\r\n} from \"../../Dialog\";\r\nimport { PatchAssetFileUC } from \"../../VivedAPI\";\r\nimport { AssetEntity } from \"../Entities/AssetEntity\";\r\n\r\n/**\r\n * Data transfer object for asset metadata updates.\r\n * Contains the basic metadata fields that can be modified for an asset.\r\n */\r\nexport interface UpdateAssetMetaDTO {\r\n /** Display name for the asset */\r\n name: string;\r\n /** Detailed description of the asset's purpose or content */\r\n description: string;\r\n /** Whether the asset should be archived (hidden from normal views) */\r\n archived: boolean;\r\n}\r\n\r\n/**\r\n * UpdateAssetFileUC manages updating the file content of individual assets.\r\n *\r\n * This use case provides the business logic for replacing asset files,\r\n * handling API persistence, and managing user feedback during the operation.\r\n */\r\nexport abstract class UpdateAssetFileUC extends AppObjectUC {\r\n /** Static type identifier for component registration */\r\n static type = \"UpdateAssetFileUC\";\r\n\r\n /**\r\n * Updates the file content of the associated asset.\r\n *\r\n * @param file - The new file to replace the existing asset content\r\n * @returns Promise that resolves when the operation completes successfully\r\n */\r\n abstract updateFile(file: File): Promise<void>;\r\n\r\n /**\r\n * Retrieves an UpdateAssetFileUC component for a specific asset.\r\n *\r\n * @param assetID - The unique identifier of the asset\r\n * @param appObjects - Repository for accessing app objects and components\r\n * @returns UpdateAssetFileUC instance or undefined if not found\r\n */\r\n static get(\r\n assetID: string,\r\n appObjects: AppObjectRepo\r\n ): UpdateAssetFileUC | undefined {\r\n const appObject = appObjects.get(assetID);\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"UpdateAssetFileUC.get\",\r\n \"Unable to find app object\"\r\n );\r\n return undefined;\r\n }\r\n\r\n const uc = appObject.getComponent<UpdateAssetFileUC>(\r\n UpdateAssetFileUC.type\r\n );\r\n if (!uc) {\r\n appObjects.submitWarning(\r\n \"UpdateAssetFileUC.get\",\r\n \"App Object does not have UpdateAssetFileUC\"\r\n );\r\n return undefined;\r\n }\r\n\r\n return uc;\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new UpdateAssetFileUC instance.\r\n *\r\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\r\n * @returns A new UpdateAssetFileUC implementation instance\r\n */\r\nexport function makeUpdateAssetFileUC(appObject: AppObject): UpdateAssetFileUC {\r\n return new UpdateAssetFileUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Private implementation of UpdateAssetFileUC that handles the concrete file update operations.\r\n *\r\n * Key Implementation Details:\r\n * - Validates asset entity existence before operations\r\n * - Uses PatchAssetFileUC for backend API persistence\r\n * - Shows spinner dialogs during file upload operations\r\n * - Handles errors gracefully with alert dialogs and logging\r\n * - Updates local asset state including file content and filename\r\n * - Preserves asset metadata and relationships during file replacement\r\n */\r\nclass UpdateAssetFileUCImp extends UpdateAssetFileUC {\r\n /** The asset entity this use case operates on */\r\n private asset?: AssetEntity;\r\n\r\n /**\r\n * Gets the API use case for patching asset files on the backend\r\n * Cached for efficient repeated access during operations\r\n */\r\n private get patchAssetFile() {\r\n return this.getCachedSingleton<PatchAssetFileUC>(PatchAssetFileUC.type)\r\n ?.doPatch;\r\n }\r\n\r\n /**\r\n * Updates the asset file with full error handling and user feedback.\r\n *\r\n * This method handles the complete file update workflow:\r\n * 1. Validates the asset exists\r\n * 2. Shows a spinner dialog during the API operation\r\n * 3. Uploads the new file to the backend via API\r\n * 4. Updates the local asset with the new file and filename\r\n * 5. Shows error dialogs and logs failures appropriately\r\n *\r\n * @param file - The new file to replace the existing asset content\r\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\r\n */\r\n updateFile = (file: File): Promise<void> => {\r\n const asset = this.asset;\r\n\r\n if (!asset) {\r\n return Promise.reject(new Error(\"No Asset Entity\"));\r\n }\r\n\r\n const patchAssetFile = this.patchAssetFile;\r\n if (!patchAssetFile) {\r\n return Promise.reject();\r\n }\r\n\r\n // Show user feedback during operation\r\n const spinnerDialog = MakeSpinnerDialogUC.make(\r\n {\r\n title: \"Asset File\",\r\n message: \"Updating asset's file...\"\r\n },\r\n this.appObjects\r\n );\r\n\r\n return new Promise((resolve, reject) => {\r\n patchAssetFile(asset.id, file)\r\n .then((newFilename) => {\r\n // Update local asset state with new file and filename\r\n asset.setFile(file);\r\n asset.filename = newFilename;\r\n\r\n spinnerDialog?.close();\r\n resolve();\r\n })\r\n .catch((e) => {\r\n // Handle errors with user feedback\r\n this.error(\"Patch asset file error: \" + e.message);\r\n spinnerDialog?.close();\r\n const dialogDTO: DialogAlertDTO = {\r\n buttonLabel: \"OK\",\r\n message: `Something went wrong when updating the asset's file. Check the console. ${e.message}`,\r\n title: \"Update Asset File Error\"\r\n };\r\n MakeAlertDialogUC.make(dialogDTO, this.appObjects);\r\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\r\n });\r\n });\r\n };\r\n\r\n /**\r\n * Initializes the UpdateAssetFileUC with validation of required components.\r\n *\r\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\r\n */\r\n constructor(appObject: AppObject) {\r\n super(appObject, UpdateAssetFileUC.type);\r\n\r\n this.asset = appObject.getComponent<AssetEntity>(AssetEntity.type);\r\n if (!this.asset) {\r\n this.error(\r\n \"UC has been added to an App Object that does not have ArchiveAssetUC\"\r\n );\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UpdateAssetFileUC.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/UpdateAssetFileUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UpdateAssetFileUC.ts\n *\n * This use case handles updating the file content of existing assets while\n * preserving metadata and relationships. It provides a complete workflow\n * for replacing asset files with user feedback and error handling.\n *\n * Key Concepts:\n * - Updates asset file content while preserving metadata and relationships\n * - Uses API calls to persist file changes on the backend\n * - Provides user feedback through spinner and error dialogs\n * - Manages local asset state updates after successful operations\n * - Handles filename updates from backend processing\n *\n * Usage Patterns:\n * - Created per-asset during factory setup\n * - Accessed through static get() method with asset ID\n * - Called with new File object to replace existing asset content\n * - Handles async operations with proper error handling and user feedback\n */\n\nimport { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\nimport {\n DialogAlertDTO,\n DialogQueue,\n MakeAlertDialogUC,\n MakeSpinnerDialogUC\n} from \"../../Dialog\";\nimport { PatchAssetFileUC } from \"../../VivedAPI\";\nimport { AssetEntity } from \"../Entities/AssetEntity\";\n\n/**\n * Data transfer object for asset metadata updates.\n * Contains the basic metadata fields that can be modified for an asset.\n */\nexport interface UpdateAssetMetaDTO {\n /** Display name for the asset */\n name: string;\n /** Detailed description of the asset's purpose or content */\n description: string;\n /** Whether the asset should be archived (hidden from normal views) */\n archived: boolean;\n}\n\n/**\n * UpdateAssetFileUC manages updating the file content of individual assets.\n *\n * This use case provides the business logic for replacing asset files,\n * handling API persistence, and managing user feedback during the operation.\n */\nexport abstract class UpdateAssetFileUC extends AppObjectUC {\n /** Static type identifier for component registration */\n static type = \"UpdateAssetFileUC\";\n\n /**\n * Updates the file content of the associated asset.\n *\n * @param file - The new file to replace the existing asset content\n * @returns Promise that resolves when the operation completes successfully\n */\n abstract updateFile(file: File): Promise<void>;\n\n /**\n * Retrieves an UpdateAssetFileUC component for a specific asset.\n *\n * @param assetID - The unique identifier of the asset\n * @param appObjects - Repository for accessing app objects and components\n * @returns UpdateAssetFileUC instance or undefined if not found\n */\n static get(\n assetID: string,\n appObjects: AppObjectRepo\n ): UpdateAssetFileUC | undefined {\n const appObject = appObjects.get(assetID);\n if (!appObject) {\n appObjects.submitWarning(\n \"UpdateAssetFileUC.get\",\n \"Unable to find app object\"\n );\n return undefined;\n }\n\n const uc = appObject.getComponent<UpdateAssetFileUC>(\n UpdateAssetFileUC.type\n );\n if (!uc) {\n appObjects.submitWarning(\n \"UpdateAssetFileUC.get\",\n \"App Object does not have UpdateAssetFileUC\"\n );\n return undefined;\n }\n\n return uc;\n }\n}\n\n/**\n * Factory function to create a new UpdateAssetFileUC instance.\n *\n * @param appObject - The AppObject that will host this use case (should contain an AssetEntity)\n * @returns A new UpdateAssetFileUC implementation instance\n */\nexport function makeUpdateAssetFileUC(appObject: AppObject): UpdateAssetFileUC {\n return new UpdateAssetFileUCImp(appObject);\n}\n\n/**\n * Private implementation of UpdateAssetFileUC that handles the concrete file update operations.\n *\n * Key Implementation Details:\n * - Validates asset entity existence before operations\n * - Uses PatchAssetFileUC for backend API persistence\n * - Shows spinner dialogs during file upload operations\n * - Handles errors gracefully with alert dialogs and logging\n * - Updates local asset state including file content and filename\n * - Preserves asset metadata and relationships during file replacement\n */\nclass UpdateAssetFileUCImp extends UpdateAssetFileUC {\n /** The asset entity this use case operates on */\n private asset?: AssetEntity;\n\n /**\n * Gets the API use case for patching asset files on the backend\n * Cached for efficient repeated access during operations\n */\n private get patchAssetFile() {\n return this.getCachedSingleton<PatchAssetFileUC>(PatchAssetFileUC.type)\n ?.doPatch;\n }\n\n /**\n * Updates the asset file with full error handling and user feedback.\n *\n * This method handles the complete file update workflow:\n * 1. Validates the asset exists\n * 2. Shows a spinner dialog during the API operation\n * 3. Uploads the new file to the backend via API\n * 4. Updates the local asset with the new file and filename\n * 5. Shows error dialogs and logs failures appropriately\n *\n * @param file - The new file to replace the existing asset content\n * @returns Promise that resolves when the operation completes (successfully or with handled error)\n */\n updateFile = (file: File): Promise<void> => {\n const asset = this.asset;\n\n if (!asset) {\n return Promise.reject(new Error(\"No Asset Entity\"));\n }\n\n const patchAssetFile = this.patchAssetFile;\n if (!patchAssetFile) {\n return Promise.reject();\n }\n\n // Show user feedback during operation\n const spinnerDialog = MakeSpinnerDialogUC.make(\n {\n title: \"Asset File\",\n message: \"Updating asset's file...\"\n },\n this.appObjects\n );\n\n return new Promise((resolve, reject) => {\n patchAssetFile(asset.id, file)\n .then((newFilename) => {\n // Update local asset state with new file and filename\n asset.setFile(file);\n asset.filename = newFilename;\n\n spinnerDialog?.close();\n resolve();\n })\n .catch((e) => {\n // Handle errors with user feedback\n this.error(\"Patch asset file error: \" + e.message);\n spinnerDialog?.close();\n const dialogDTO: DialogAlertDTO = {\n buttonLabel: \"OK\",\n message: `Something went wrong when updating the asset's file. Check the console. ${e.message}`,\n title: \"Update Asset File Error\"\n };\n MakeAlertDialogUC.make(dialogDTO, this.appObjects);\n resolve(); // Resolve to prevent unhandled rejections, error is already handled\n });\n });\n };\n\n /**\n * Initializes the UpdateAssetFileUC with validation of required components.\n *\n * @param appObject - The AppObject that should contain the AssetEntity this UC will operate on\n */\n constructor(appObject: AppObject) {\n super(appObject, UpdateAssetFileUC.type);\n\n this.asset = appObject.getComponent<AssetEntity>(AssetEntity.type);\n if (!this.asset) {\n this.error(\n \"UC has been added to an App Object that does not have ArchiveAssetUC\"\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;AAEH,mDAAiC;AACjC,kDAAgC;AAChC,wDAAsC;AACtC,mDAAiC;AACjC,mDAAiC;AACjC,sDAAoC;AACpC,mDAAiC;AACjC,+CAA6B;AAC7B,kDAAgC;AAChC,+CAA6B;AAC7B,qDAAmC;AACnC,yDAAuC;AACvC,sDAAoC","sourcesContent":["/**\r\n * Assets Use Cases Index\r\n *\r\n * This module exports all use case classes for the Assets feature.\r\n * Use cases contain the business logic for asset operations and coordinate\r\n * between entities, external services, and user interface components.\r\n *\r\n * Key Concepts:\r\n * - Use cases implement specific business operations and workflows\r\n * - They coordinate between entities, APIs, and UI components\r\n * - Each UC handles validation, error management, and state updates\r\n * - Singleton UCs manage system-wide operations, per-asset UCs handle individual items\r\n * - UCs provide clean interfaces for controllers and other components\r\n *\r\n * Available Use Cases:\r\n * - Asset lifecycle: create, archive, delete, update\r\n * - File management: download, fetch, update file content\r\n * - Metadata management: update asset information and properties\r\n * - Collection management: get assets for apps, prefetch for performance\r\n * - Caching and optimization: blob URL generation, file caching strategies\r\n */\r\n\r\nexport * from \"./ArchiveAssetUC\";\r\nexport * from \"./DeleteAssetUC\";\r\nexport * from \"./DownloadAssetFileUC\";\r\nexport * from \"./EditAppAssetUC\";\r\nexport * from \"./GetAppAssetsUC\";\r\nexport * from \"./GetAssetBlobURLUC\";\r\nexport * from \"./GetAssetFileUC\";\r\nexport * from \"./GetAssetUC\";\r\nexport * from \"./NewAppAssetUC\";\r\nexport * from \"./NewAssetUC\";\r\nexport * from \"./PrefetchAssetsUC\";\r\nexport * from \"./UpdateAppAssetMetaUC\";\r\nexport * from \"./UpdateAssetFileUC\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Assets/UCs/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;AAEH,mDAAiC;AACjC,kDAAgC;AAChC,wDAAsC;AACtC,mDAAiC;AACjC,mDAAiC;AACjC,sDAAoC;AACpC,mDAAiC;AACjC,+CAA6B;AAC7B,kDAAgC;AAChC,+CAA6B;AAC7B,qDAAmC;AACnC,yDAAuC;AACvC,sDAAoC","sourcesContent":["/**\n * Assets Use Cases Index\n *\n * This module exports all use case classes for the Assets feature.\n * Use cases contain the business logic for asset operations and coordinate\n * between entities, external services, and user interface components.\n *\n * Key Concepts:\n * - Use cases implement specific business operations and workflows\n * - They coordinate between entities, APIs, and UI components\n * - Each UC handles validation, error management, and state updates\n * - Singleton UCs manage system-wide operations, per-asset UCs handle individual items\n * - UCs provide clean interfaces for controllers and other components\n *\n * Available Use Cases:\n * - Asset lifecycle: create, archive, delete, update\n * - File management: download, fetch, update file content\n * - Metadata management: update asset information and properties\n * - Collection management: get assets for apps, prefetch for performance\n * - Caching and optimization: blob URL generation, file caching strategies\n */\n\nexport * from \"./ArchiveAssetUC\";\nexport * from \"./DeleteAssetUC\";\nexport * from \"./DownloadAssetFileUC\";\nexport * from \"./EditAppAssetUC\";\nexport * from \"./GetAppAssetsUC\";\nexport * from \"./GetAssetBlobURLUC\";\nexport * from \"./GetAssetFileUC\";\nexport * from \"./GetAssetUC\";\nexport * from \"./NewAppAssetUC\";\nexport * from \"./NewAssetUC\";\nexport * from \"./PrefetchAssetsUC\";\nexport * from \"./UpdateAppAssetMetaUC\";\nexport * from \"./UpdateAssetFileUC\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CacheFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/CacheFeatureFactory.ts"],"names":[],"mappings":";;;AAyDA,0DAKC;AA9DD,sCAAsE;AACtE,0CAA0E;AAC1E,gCAKgB;AAEhB;;;;GAIG;AACH,MAAa,mBAAoB,SAAQ,oBAAa;IAIpD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,qBAAqB,CAAC;IAI7C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAA,gCAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,+BAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,kBAAkB;QAClB,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,sDAAsD;IACxD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,yCAAyC;IAC3C,CAAC;CACF;AAzCD,kDAyCC;AAED,SAAgB,uBAAuB,CACrC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeAssetCacheEntity, makeScriptCacheEntity } from \"../Entities\";\r\nimport {\r\n makeGetAssetFromCacheUC,\r\n makeGetScriptFromCacheUC,\r\n makeStoreAssetInCacheUC,\r\n makeStoreScriptInCacheUC\r\n} from \"../UCs\";\r\n\r\n/**\r\n * Factory responsible for setting up the Cache domain components.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the Cache functionality.\r\n */\r\nexport class CacheFeatureFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"CacheFeatureFactory\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the Cache system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n makeScriptCacheEntity(this.appObject);\r\n makeAssetCacheEntity(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the Cache system\r\n */\r\n setupUCs(): void {\r\n // Cache use cases\r\n makeGetScriptFromCacheUC(this.appObject);\r\n makeStoreScriptInCacheUC(this.appObject);\r\n makeGetAssetFromCacheUC(this.appObject);\r\n makeStoreAssetInCacheUC(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the Cache system\r\n */\r\n setupPMs(): void {\r\n // No presentation managers exist for the Cache system\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n // No additional setup required for cache\r\n }\r\n}\r\n\r\nexport function makeCacheFeatureFactory(\r\n appObjects: AppObjectRepo\r\n): CacheFeatureFactory {\r\n const ao = appObjects.getOrCreate(\"Cache\");\r\n return new CacheFeatureFactory(ao);\r\n}\r\n"]}
1
+ {"version":3,"file":"CacheFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/CacheFeatureFactory.ts"],"names":[],"mappings":";;;AAyDA,0DAKC;AA9DD,sCAAsE;AACtE,0CAA0E;AAC1E,gCAKgB;AAEhB;;;;GAIG;AACH,MAAa,mBAAoB,SAAQ,oBAAa;IAIpD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,qBAAqB,CAAC;IAI7C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAA,gCAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,IAAA,+BAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,kBAAkB;QAClB,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,sDAAsD;IACxD,CAAC;IAED;;OAEG;IACH,UAAU;QACR,yCAAyC;IAC3C,CAAC;CACF;AAzCD,kDAyCC;AAED,SAAgB,uBAAuB,CACrC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeAssetCacheEntity, makeScriptCacheEntity } from \"../Entities\";\nimport {\n makeGetAssetFromCacheUC,\n makeGetScriptFromCacheUC,\n makeStoreAssetInCacheUC,\n makeStoreScriptInCacheUC\n} from \"../UCs\";\n\n/**\n * Factory responsible for setting up the Cache domain components.\n * This factory initializes all entities, use cases, and presentation models\n * required for the Cache functionality.\n */\nexport class CacheFeatureFactory extends DomainFactory {\n // Unique name for this factory\n readonly factoryName = \"CacheFeatureFactory\";\n\n constructor(appObject: AppObject) {\n super(appObject);\n }\n\n /**\n * Sets up all entities required for the Cache system\n */\n setupEntities(): void {\n // Initialize entities\n makeScriptCacheEntity(this.appObject);\n makeAssetCacheEntity(this.appObject);\n }\n\n /**\n * Sets up all use cases for the Cache system\n */\n setupUCs(): void {\n // Cache use cases\n makeGetScriptFromCacheUC(this.appObject);\n makeStoreScriptInCacheUC(this.appObject);\n makeGetAssetFromCacheUC(this.appObject);\n makeStoreAssetInCacheUC(this.appObject);\n }\n\n /**\n * Sets up all presentation managers for the Cache system\n */\n setupPMs(): void {\n // No presentation managers exist for the Cache system\n }\n\n /**\n * Performs any final setup operations after all components are initialized\n */\n finalSetup(): void {\n // No additional setup required for cache\n }\n}\n\nexport function makeCacheFeatureFactory(\n appObjects: AppObjectRepo\n): CacheFeatureFactory {\n const ao = appObjects.getOrCreate(\"Cache\");\n return new CacheFeatureFactory(ao);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,wDAAsC","sourcesContent":["export * from \"./setupCache\";\r\nexport * from \"./CacheFeatureFactory\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Cache/Factories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,wDAAsC","sourcesContent":["export * from \"./setupCache\";\nexport * from \"./CacheFeatureFactory\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeResults.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Entities/ChallengeResults.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\n\r\nexport type ChallengeResultType =\r\n | \"HIT\"\r\n | \"MULTIHIT\"\r\n | \"QUALITY\"\r\n | \"SCORE\"\r\n | \"PROGRESS\";\r\n\r\nexport interface ChallengeResult {\r\n slideID: string;\r\n tries: number;\r\n message: string;\r\n type: ChallengeResultType;\r\n resultData:\r\n | ChallengeResultHitData\r\n | ChallengeResultMultiHitData\r\n | ChallengeResultQualityData\r\n | ChallengeResultScoreData\r\n | ChallengeResultProgressData;\r\n}\r\n\r\nexport interface ChallengeResultHitData {\r\n success: boolean;\r\n}\r\n\r\nexport interface ChallengeResultProgressData {\r\n maxProgress: number;\r\n}\r\n\r\nexport interface ChallengeResultMultiHitData {\r\n hits: number;\r\n misses: number;\r\n unanswered: number;\r\n}\r\n\r\nexport interface ChallengeResultQualityData {\r\n stars: number;\r\n maxStars: number;\r\n}\r\n\r\nexport interface ChallengeResultScoreData {\r\n score: number;\r\n maxScore: number;\r\n}\r\n\r\nexport interface ChallengeResultsState {\r\n [slideID: string]: ChallengeResult;\r\n}\r\n\r\nexport interface ActivityProgressState {\r\n slide: string;\r\n progress: number;\r\n results: ChallengeResultsState;\r\n}\r\n\r\nexport abstract class ChallengeResultsEntity extends AppObjectEntity {\r\n static type = \"ChallengeResultsEntity\";\r\n\r\n abstract get results(): ChallengeResult[];\r\n abstract submitHitResult: (\r\n slideID: string,\r\n success: boolean,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitMultiHitResult: (\r\n slideID: string,\r\n hits: number,\r\n misses: number,\r\n unanswered: number,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitQualityResult: (\r\n slideID: string,\r\n stars: number,\r\n maxStars: number,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitScoreResult: (\r\n slideID: string,\r\n score: number,\r\n maxScore: number,\r\n tries: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract submitProgressResult: (\r\n slideID: string,\r\n maxProgress: number,\r\n message: string\r\n ) => void;\r\n\r\n abstract getResultForSlide: (slideID: string) => ChallengeResult | undefined;\r\n\r\n abstract getScoreForSlide: (slideID: string) => number;\r\n\r\n abstract getResultsState: () => ChallengeResultsState;\r\n\r\n abstract getInitialResultsState: () => ChallengeResultsState;\r\n\r\n abstract setResultsState: (state: ChallengeResultsState) => void;\r\n\r\n abstract get postActivityProgress():\r\n | ((progressState: ActivityProgressState) => Promise<void>)\r\n | undefined;\r\n\r\n abstract set postActivityProgress(\r\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\r\n );\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeResults(\r\n appObject: AppObject\r\n): ChallengeResultsEntity {\r\n return new ChallengeResultsImp(appObject);\r\n}\r\n\r\nclass ChallengeResultsImp extends ChallengeResultsEntity {\r\n private resultLookup = new Map<string, ChallengeResult>();\r\n private newAttemptInProgress = new Set<string>();\r\n private initialResultsState: ChallengeResultsState = {};\r\n private _postActivityProgress:\r\n | ((progressState: ActivityProgressState) => Promise<void>)\r\n | undefined;\r\n\r\n get results(): ChallengeResult[] {\r\n return Array.from(this.resultLookup.values());\r\n }\r\n\r\n submitHitResult = (\r\n slideID: string,\r\n success: boolean,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const existingResult = this.resultLookup.get(slideID);\r\n if (existingResult && existingResult.type === \"HIT\") {\r\n const existingData = existingResult.resultData as ChallengeResultHitData;\r\n if (existingData.success === true) {\r\n return; // Already have a successful result\r\n }\r\n }\r\n\r\n const resultData: ChallengeResultHitData = {\r\n success\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"HIT\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n submitMultiHitResult = (\r\n slideID: string,\r\n hits: number,\r\n misses: number,\r\n unanswered: number,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const existingResult = this.resultLookup.get(slideID);\r\n if (existingResult && existingResult.type === \"MULTIHIT\") {\r\n const existingData =\r\n existingResult.resultData as ChallengeResultMultiHitData;\r\n\r\n if (existingData.hits > hits) {\r\n this.newAttemptInProgress.add(slideID); // Already have a better result, so a new attempt is in progress\r\n return;\r\n }\r\n\r\n if (existingData.hits === hits && existingData.misses <= misses) {\r\n return; // Already have an equal or better result, but it might not be a new attempt\r\n }\r\n }\r\n\r\n const isNewAttempt = this.newAttemptInProgress.has(slideID);\r\n if (isNewAttempt) {\r\n tries += 1;\r\n this.newAttemptInProgress.delete(slideID);\r\n }\r\n\r\n const resultData: ChallengeResultMultiHitData = {\r\n hits,\r\n misses,\r\n unanswered\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"MULTIHIT\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n submitQualityResult = (\r\n slideID: string,\r\n stars: number,\r\n maxStars: number,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const resultData: ChallengeResultQualityData = {\r\n stars,\r\n maxStars\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"QUALITY\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n submitScoreResult = (\r\n slideID: string,\r\n score: number,\r\n maxScore: number,\r\n tries: number,\r\n message: string\r\n ): void => {\r\n const resultData: ChallengeResultScoreData = {\r\n score,\r\n maxScore\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries,\r\n type: \"SCORE\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n getResultForSlide = (slideID: string): ChallengeResult | undefined => {\r\n const result = this.resultLookup.get(slideID);\r\n\r\n return result;\r\n };\r\n\r\n getScoreForSlide = (slideID: string): number => {\r\n const result = this.getResultForSlide(slideID);\r\n if (!result) {\r\n return 0;\r\n }\r\n\r\n switch (result.type) {\r\n case \"HIT\": {\r\n const hitData = result.resultData as ChallengeResultHitData;\r\n return hitData.success ? 1 : 0;\r\n }\r\n case \"MULTIHIT\": {\r\n const multiHitData = result.resultData as ChallengeResultMultiHitData;\r\n const total = multiHitData.hits + multiHitData.unanswered;\r\n return total > 0 ? multiHitData.hits / total : 0;\r\n }\r\n case \"QUALITY\": {\r\n const qualityData = result.resultData as ChallengeResultQualityData;\r\n return qualityData.maxStars > 0\r\n ? qualityData.stars / qualityData.maxStars\r\n : 0;\r\n }\r\n case \"SCORE\": {\r\n const scoreData = result.resultData as ChallengeResultScoreData;\r\n return scoreData.maxScore > 0\r\n ? scoreData.score / scoreData.maxScore\r\n : 0;\r\n }\r\n case \"PROGRESS\": {\r\n const progressData = result.resultData as ChallengeResultProgressData;\r\n return progressData.maxProgress / 100;\r\n }\r\n default:\r\n return 0;\r\n }\r\n };\r\n\r\n submitProgressResult = (\r\n slideID: string,\r\n maxProgress: number,\r\n message: string\r\n ): void => {\r\n const currentResult = this.getResultForSlide(slideID);\r\n if (\r\n currentResult &&\r\n (currentResult.resultData as ChallengeResultProgressData).maxProgress >\r\n maxProgress\r\n ) {\r\n return;\r\n }\r\n\r\n const resultData: ChallengeResultProgressData = {\r\n maxProgress\r\n };\r\n const result: ChallengeResult = {\r\n slideID,\r\n message,\r\n resultData,\r\n tries: 1,\r\n type: \"PROGRESS\"\r\n };\r\n\r\n this.resultLookup.set(slideID, result);\r\n this.notifyOnChange();\r\n };\r\n\r\n getResultsState = (): ChallengeResultsState => {\r\n const state: ChallengeResultsState = {};\r\n this.resultLookup.forEach((result, slideID) => {\r\n state[slideID] = result;\r\n });\r\n return state;\r\n };\r\n\r\n getInitialResultsState = (): ChallengeResultsState => {\r\n return this.initialResultsState;\r\n };\r\n\r\n setResultsState = (state: ChallengeResultsState): void => {\r\n this.resultLookup.clear();\r\n this.newAttemptInProgress.clear();\r\n this.initialResultsState = { ...state };\r\n Object.entries(state).forEach(([slideID, result]) => {\r\n this.resultLookup.set(slideID, result);\r\n });\r\n this.notifyOnChange();\r\n };\r\n\r\n get postActivityProgress() {\r\n return this._postActivityProgress;\r\n }\r\n\r\n set postActivityProgress(\r\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\r\n ) {\r\n if (this._postActivityProgress !== fn) {\r\n this._postActivityProgress = fn;\r\n this.notifyOnChange();\r\n }\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeResultsEntity.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeResults.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Entities/ChallengeResults.ts"],"names":[],"mappings":";;;AAiIA,oDAIC;AArID,sCAKqB;AAwDrB,MAAsB,sBAAuB,SAAQ,sBAAe;IA4DlE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AAjEH,wDAkEC;AAjEQ,2BAAI,GAAG,wBAAwB,CAAC;AAmEzC,SAAgB,oBAAoB,CAClC,SAAoB;IAEpB,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,mBAAoB,SAAQ,sBAAsB;IAQtD,IAAI,OAAO;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IAyND,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,IAAI,oBAAoB,CACtB,EAAyE;QAEzE,IAAI,IAAI,CAAC,qBAAqB,KAAK,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;YAChC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAhPxC,iBAAY,GAAG,IAAI,GAAG,EAA2B,CAAC;QAClD,yBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,wBAAmB,GAA0B,EAAE,CAAC;QASxD,oBAAe,GAAG,CAChB,OAAe,EACf,OAAgB,EAChB,KAAa,EACb,OAAe,EACT,EAAE;YACR,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;gBACpD,MAAM,YAAY,GAAG,cAAc,CAAC,UAAoC,CAAC;gBACzE,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBAClC,OAAO,CAAC,mCAAmC;gBAC7C,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAA2B;gBACzC,OAAO;aACR,CAAC;YACF,MAAM,MAAM,GAAoB;gBAC9B,OAAO;gBACP,OAAO;gBACP,UAAU;gBACV,KAAK;gBACL,IAAI,EAAE,KAAK;aACZ,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,yBAAoB,GAAG,CACrB,OAAe,EACf,IAAY,EACZ,MAAc,EACd,UAAkB,EAClB,KAAa,EACb,OAAe,EACT,EAAE;YACR,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,cAAc,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACzD,MAAM,YAAY,GAChB,cAAc,CAAC,UAAyC,CAAC;gBAE3D,IAAI,YAAY,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;oBAC7B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gEAAgE;oBACxG,OAAO;gBACT,CAAC;gBAED,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;oBAChE,OAAO,CAAC,4EAA4E;gBACtF,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,IAAI,CAAC,CAAC;gBACX,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,UAAU,GAAgC;gBAC9C,IAAI;gBACJ,MAAM;gBACN,UAAU;aACX,CAAC;YACF,MAAM,MAAM,GAAoB;gBAC9B,OAAO;gBACP,OAAO;gBACP,UAAU;gBACV,KAAK;gBACL,IAAI,EAAE,UAAU;aACjB,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,wBAAmB,GAAG,CACpB,OAAe,EACf,KAAa,EACb,QAAgB,EAChB,KAAa,EACb,OAAe,EACT,EAAE;YACR,MAAM,UAAU,GAA+B;gBAC7C,KAAK;gBACL,QAAQ;aACT,CAAC;YACF,MAAM,MAAM,GAAoB;gBAC9B,OAAO;gBACP,OAAO;gBACP,UAAU;gBACV,KAAK;gBACL,IAAI,EAAE,SAAS;aAChB,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,sBAAiB,GAAG,CAClB,OAAe,EACf,KAAa,EACb,QAAgB,EAChB,KAAa,EACb,OAAe,EACT,EAAE;YACR,MAAM,UAAU,GAA6B;gBAC3C,KAAK;gBACL,QAAQ;aACT,CAAC;YACF,MAAM,MAAM,GAAoB;gBAC9B,OAAO;gBACP,OAAO;gBACP,UAAU;gBACV,KAAK;gBACL,IAAI,EAAE,OAAO;aACd,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,sBAAiB,GAAG,CAAC,OAAe,EAA+B,EAAE;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE9C,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,qBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,CAAC;YACX,CAAC;YAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,OAAO,GAAG,MAAM,CAAC,UAAoC,CAAC;oBAC5D,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,YAAY,GAAG,MAAM,CAAC,UAAyC,CAAC;oBACtE,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;oBAC1D,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,WAAW,GAAG,MAAM,CAAC,UAAwC,CAAC;oBACpE,OAAO,WAAW,CAAC,QAAQ,GAAG,CAAC;wBAC7B,CAAC,CAAC,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,QAAQ;wBAC1C,CAAC,CAAC,CAAC,CAAC;gBACR,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,SAAS,GAAG,MAAM,CAAC,UAAsC,CAAC;oBAChE,OAAO,SAAS,CAAC,QAAQ,GAAG,CAAC;wBAC3B,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ;wBACtC,CAAC,CAAC,CAAC,CAAC;gBACR,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,MAAM,YAAY,GAAG,MAAM,CAAC,UAAyC,CAAC;oBACtE,OAAO,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC;gBACxC,CAAC;gBACD;oBACE,OAAO,CAAC,CAAC;YACb,CAAC;QACH,CAAC,CAAC;QAEF,yBAAoB,GAAG,CACrB,OAAe,EACf,WAAmB,EACnB,OAAe,EACT,EAAE;YACR,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACtD,IACE,aAAa;gBACZ,aAAa,CAAC,UAA0C,CAAC,WAAW;oBACnE,WAAW,EACb,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAgC;gBAC9C,WAAW;aACZ,CAAC;YACF,MAAM,MAAM,GAAoB;gBAC9B,OAAO;gBACP,OAAO;gBACP,UAAU;gBACV,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,UAAU;aACjB,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,oBAAe,GAAG,GAA0B,EAAE;YAC5C,MAAM,KAAK,GAA0B,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;gBAC5C,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,2BAAsB,GAAG,GAA0B,EAAE;YACnD,OAAO,IAAI,CAAC,mBAAmB,CAAC;QAClC,CAAC,CAAC;QAEF,oBAAe,GAAG,CAAC,KAA4B,EAAQ,EAAE;YACvD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAiBA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectEntity,\n AppObjectRepo\n} from \"@vived/core\";\n\nexport type ChallengeResultType =\n | \"HIT\"\n | \"MULTIHIT\"\n | \"QUALITY\"\n | \"SCORE\"\n | \"PROGRESS\";\n\nexport interface ChallengeResult {\n slideID: string;\n tries: number;\n message: string;\n type: ChallengeResultType;\n resultData:\n | ChallengeResultHitData\n | ChallengeResultMultiHitData\n | ChallengeResultQualityData\n | ChallengeResultScoreData\n | ChallengeResultProgressData;\n}\n\nexport interface ChallengeResultHitData {\n success: boolean;\n}\n\nexport interface ChallengeResultProgressData {\n maxProgress: number;\n}\n\nexport interface ChallengeResultMultiHitData {\n hits: number;\n misses: number;\n unanswered: number;\n}\n\nexport interface ChallengeResultQualityData {\n stars: number;\n maxStars: number;\n}\n\nexport interface ChallengeResultScoreData {\n score: number;\n maxScore: number;\n}\n\nexport interface ChallengeResultsState {\n [slideID: string]: ChallengeResult;\n}\n\nexport interface ActivityProgressState {\n slide: string;\n progress: number;\n results: ChallengeResultsState;\n}\n\nexport abstract class ChallengeResultsEntity extends AppObjectEntity {\n static type = \"ChallengeResultsEntity\";\n\n abstract get results(): ChallengeResult[];\n abstract submitHitResult: (\n slideID: string,\n success: boolean,\n tries: number,\n message: string\n ) => void;\n\n abstract submitMultiHitResult: (\n slideID: string,\n hits: number,\n misses: number,\n unanswered: number,\n tries: number,\n message: string\n ) => void;\n\n abstract submitQualityResult: (\n slideID: string,\n stars: number,\n maxStars: number,\n tries: number,\n message: string\n ) => void;\n\n abstract submitScoreResult: (\n slideID: string,\n score: number,\n maxScore: number,\n tries: number,\n message: string\n ) => void;\n\n abstract submitProgressResult: (\n slideID: string,\n maxProgress: number,\n message: string\n ) => void;\n\n abstract getResultForSlide: (slideID: string) => ChallengeResult | undefined;\n\n abstract getScoreForSlide: (slideID: string) => number;\n\n abstract getResultsState: () => ChallengeResultsState;\n\n abstract getInitialResultsState: () => ChallengeResultsState;\n\n abstract setResultsState: (state: ChallengeResultsState) => void;\n\n abstract get postActivityProgress():\n | ((progressState: ActivityProgressState) => Promise<void>)\n | undefined;\n\n abstract set postActivityProgress(\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\n );\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<ChallengeResultsEntity>(\n ChallengeResultsEntity.type,\n appObjects\n );\n }\n}\n\nexport function makeChallengeResults(\n appObject: AppObject\n): ChallengeResultsEntity {\n return new ChallengeResultsImp(appObject);\n}\n\nclass ChallengeResultsImp extends ChallengeResultsEntity {\n private resultLookup = new Map<string, ChallengeResult>();\n private newAttemptInProgress = new Set<string>();\n private initialResultsState: ChallengeResultsState = {};\n private _postActivityProgress:\n | ((progressState: ActivityProgressState) => Promise<void>)\n | undefined;\n\n get results(): ChallengeResult[] {\n return Array.from(this.resultLookup.values());\n }\n\n submitHitResult = (\n slideID: string,\n success: boolean,\n tries: number,\n message: string\n ): void => {\n const existingResult = this.resultLookup.get(slideID);\n if (existingResult && existingResult.type === \"HIT\") {\n const existingData = existingResult.resultData as ChallengeResultHitData;\n if (existingData.success === true) {\n return; // Already have a successful result\n }\n }\n\n const resultData: ChallengeResultHitData = {\n success\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"HIT\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n submitMultiHitResult = (\n slideID: string,\n hits: number,\n misses: number,\n unanswered: number,\n tries: number,\n message: string\n ): void => {\n const existingResult = this.resultLookup.get(slideID);\n if (existingResult && existingResult.type === \"MULTIHIT\") {\n const existingData =\n existingResult.resultData as ChallengeResultMultiHitData;\n\n if (existingData.hits > hits) {\n this.newAttemptInProgress.add(slideID); // Already have a better result, so a new attempt is in progress\n return;\n }\n\n if (existingData.hits === hits && existingData.misses <= misses) {\n return; // Already have an equal or better result, but it might not be a new attempt\n }\n }\n\n const isNewAttempt = this.newAttemptInProgress.has(slideID);\n if (isNewAttempt) {\n tries += 1;\n this.newAttemptInProgress.delete(slideID);\n }\n\n const resultData: ChallengeResultMultiHitData = {\n hits,\n misses,\n unanswered\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"MULTIHIT\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n submitQualityResult = (\n slideID: string,\n stars: number,\n maxStars: number,\n tries: number,\n message: string\n ): void => {\n const resultData: ChallengeResultQualityData = {\n stars,\n maxStars\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"QUALITY\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n submitScoreResult = (\n slideID: string,\n score: number,\n maxScore: number,\n tries: number,\n message: string\n ): void => {\n const resultData: ChallengeResultScoreData = {\n score,\n maxScore\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries,\n type: \"SCORE\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n getResultForSlide = (slideID: string): ChallengeResult | undefined => {\n const result = this.resultLookup.get(slideID);\n\n return result;\n };\n\n getScoreForSlide = (slideID: string): number => {\n const result = this.getResultForSlide(slideID);\n if (!result) {\n return 0;\n }\n\n switch (result.type) {\n case \"HIT\": {\n const hitData = result.resultData as ChallengeResultHitData;\n return hitData.success ? 1 : 0;\n }\n case \"MULTIHIT\": {\n const multiHitData = result.resultData as ChallengeResultMultiHitData;\n const total = multiHitData.hits + multiHitData.unanswered;\n return total > 0 ? multiHitData.hits / total : 0;\n }\n case \"QUALITY\": {\n const qualityData = result.resultData as ChallengeResultQualityData;\n return qualityData.maxStars > 0\n ? qualityData.stars / qualityData.maxStars\n : 0;\n }\n case \"SCORE\": {\n const scoreData = result.resultData as ChallengeResultScoreData;\n return scoreData.maxScore > 0\n ? scoreData.score / scoreData.maxScore\n : 0;\n }\n case \"PROGRESS\": {\n const progressData = result.resultData as ChallengeResultProgressData;\n return progressData.maxProgress / 100;\n }\n default:\n return 0;\n }\n };\n\n submitProgressResult = (\n slideID: string,\n maxProgress: number,\n message: string\n ): void => {\n const currentResult = this.getResultForSlide(slideID);\n if (\n currentResult &&\n (currentResult.resultData as ChallengeResultProgressData).maxProgress >\n maxProgress\n ) {\n return;\n }\n\n const resultData: ChallengeResultProgressData = {\n maxProgress\n };\n const result: ChallengeResult = {\n slideID,\n message,\n resultData,\n tries: 1,\n type: \"PROGRESS\"\n };\n\n this.resultLookup.set(slideID, result);\n this.notifyOnChange();\n };\n\n getResultsState = (): ChallengeResultsState => {\n const state: ChallengeResultsState = {};\n this.resultLookup.forEach((result, slideID) => {\n state[slideID] = result;\n });\n return state;\n };\n\n getInitialResultsState = (): ChallengeResultsState => {\n return this.initialResultsState;\n };\n\n setResultsState = (state: ChallengeResultsState): void => {\n this.resultLookup.clear();\n this.newAttemptInProgress.clear();\n this.initialResultsState = { ...state };\n Object.entries(state).forEach(([slideID, result]) => {\n this.resultLookup.set(slideID, result);\n });\n this.notifyOnChange();\n };\n\n get postActivityProgress() {\n return this._postActivityProgress;\n }\n\n set postActivityProgress(\n fn: ((progressState: ActivityProgressState) => Promise<void>) | undefined\n ) {\n if (this._postActivityProgress !== fn) {\n this._postActivityProgress = fn;\n this.notifyOnChange();\n }\n }\n\n constructor(appObject: AppObject) {\n super(appObject, ChallengeResultsEntity.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeResultsFactory.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Factories/ChallengeResultsFactory.ts"],"names":[],"mappings":";;;AAsDA,kEAKC;AA3DD,sCAAsE;AACtE,0CAAmD;AACnD,gCAIgB;AAEhB;;;;GAIG;AACH,MAAa,uBAAwB,SAAQ,oBAAa;IAIxD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,yBAAyB,CAAC;IAIjD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAA,+BAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,oCAAoC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,IAAA,4BAAsB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,+BAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,oDAAoD;IACtD,CAAC;CACF;AAvCD,0DAuCC;AAED,SAAgB,2BAA2B,CACzC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeChallengeResults } from \"../Entities\";\r\nimport {\r\n makeChallengeResultsPM,\r\n makeChallengeScoreListPM,\r\n makeHasChallengeResultsPM\r\n} from \"../PMs\";\r\n\r\n/**\r\n * Factory responsible for setting up the ChallengeResults domain components.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the ChallengeResults functionality.\r\n */\r\nexport class ChallengeResultsFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"ChallengeResultsFactory\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the ChallengeResults system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n makeChallengeResults(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the ChallengeResults system\r\n */\r\n setupUCs(): void {\r\n // No use cases for ChallengeResults\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the ChallengeResults system\r\n */\r\n setupPMs(): void {\r\n // Initialize presentation managers\r\n makeChallengeResultsPM(this.appObject);\r\n makeChallengeScoreListPM(this.appObject);\r\n makeHasChallengeResultsPM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n // No additional setup required for ChallengeResults\r\n }\r\n}\r\n\r\nexport function makeChallengeResultsFactory(\r\n appObjects: AppObjectRepo\r\n): ChallengeResultsFactory {\r\n const ao = appObjects.getOrCreate(\"ChallengeResults\");\r\n return new ChallengeResultsFactory(ao);\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeResultsFactory.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/Factories/ChallengeResultsFactory.ts"],"names":[],"mappings":";;;AAsDA,kEAKC;AA3DD,sCAAsE;AACtE,0CAAmD;AACnD,gCAIgB;AAEhB;;;;GAIG;AACH,MAAa,uBAAwB,SAAQ,oBAAa;IAIxD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,yBAAyB,CAAC;IAIjD,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAA,+BAAoB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,oCAAoC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,IAAA,4BAAsB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,+BAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,oDAAoD;IACtD,CAAC;CACF;AAvCD,0DAuCC;AAED,SAAgB,2BAA2B,CACzC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeChallengeResults } from \"../Entities\";\nimport {\n makeChallengeResultsPM,\n makeChallengeScoreListPM,\n makeHasChallengeResultsPM\n} from \"../PMs\";\n\n/**\n * Factory responsible for setting up the ChallengeResults domain components.\n * This factory initializes all entities, use cases, and presentation models\n * required for the ChallengeResults functionality.\n */\nexport class ChallengeResultsFactory extends DomainFactory {\n // Unique name for this factory\n readonly factoryName = \"ChallengeResultsFactory\";\n\n constructor(appObject: AppObject) {\n super(appObject);\n }\n\n /**\n * Sets up all entities required for the ChallengeResults system\n */\n setupEntities(): void {\n // Initialize entities\n makeChallengeResults(this.appObject);\n }\n\n /**\n * Sets up all use cases for the ChallengeResults system\n */\n setupUCs(): void {\n // No use cases for ChallengeResults\n }\n\n /**\n * Sets up all presentation managers for the ChallengeResults system\n */\n setupPMs(): void {\n // Initialize presentation managers\n makeChallengeResultsPM(this.appObject);\n makeChallengeScoreListPM(this.appObject);\n makeHasChallengeResultsPM(this.appObject);\n }\n\n /**\n * Performs any final setup operations after all components are initialized\n */\n finalSetup(): void {\n // No additional setup required for ChallengeResults\n }\n}\n\nexport function makeChallengeResultsFactory(\n appObjects: AppObjectRepo\n): ChallengeResultsFactory {\n const ao = appObjects.getOrCreate(\"ChallengeResults\");\n return new ChallengeResultsFactory(ao);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ChallengeResultsListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeResultsListPM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport {\r\n ChallengeResultHitData,\r\n ChallengeResultMultiHitData,\r\n ChallengeResultProgressData,\r\n ChallengeResultQualityData,\r\n ChallengeResultScoreData,\r\n ChallengeResultsEntity,\r\n ChallengeResultType\r\n} from \"../Entities/ChallengeResults\";\r\nimport { ChallengeResponse } from \"../../StateMachine\";\r\n\r\nexport interface ChallengeResultVM {\r\n id: string;\r\n slideName: string;\r\n attempts: number;\r\n message: string;\r\n resultType?: ChallengeResultType;\r\n stateIndex: number;\r\n resultData?:\r\n | ChallengeResultHitData\r\n | ChallengeResultMultiHitData\r\n | ChallengeResultQualityData\r\n | ChallengeResultScoreData\r\n | ChallengeResultProgressData;\r\n}\r\n\r\nexport abstract class ChallengeResultsListPM extends AppObjectPM<\r\n ChallengeResultVM[]\r\n> {\r\n static type = \"ChallengeResultsListPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return appObjects.getSingleton<ChallengeResultsListPM>(\r\n ChallengeResultsListPM.type\r\n );\r\n }\r\n}\r\n\r\nexport function makeChallengeResultsPM(\r\n appObject: AppObject\r\n): ChallengeResultsListPM {\r\n return new ChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass ChallengeResultsPMImp extends ChallengeResultsListPM {\r\n private get results() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: ChallengeResultVM[], b: ChallengeResultVM[]): boolean {\r\n if (a.length !== b.length) return false;\r\n\r\n let areEqual = true;\r\n a.forEach((aResult, i) => {\r\n const bResult = b[i];\r\n if (aResult.id !== bResult.id) areEqual = false;\r\n else if (aResult.attempts !== bResult.attempts) areEqual = false;\r\n else if (aResult.resultData !== bResult.resultData) areEqual = false;\r\n });\r\n return areEqual;\r\n }\r\n\r\n onEntityChange = (): void => {\r\n if (!this.results || !this.stateMachine) return;\r\n\r\n const organizedResults: ChallengeResultVM[] = [];\r\n\r\n // Get all states from state machine\r\n const stateIds = this.stateMachine.states;\r\n\r\n // Process each state\r\n stateIds.forEach((stateId) => {\r\n const state = this.stateMachine!.getStateByID(stateId);\r\n if (!state) return;\r\n\r\n const stateIndex = this.stateMachine!.getStateIndex(stateId) ?? -1;\r\n const result = this.results!.getResultForSlide(stateId);\r\n\r\n // If state has a result, add it with all result data\r\n if (result) {\r\n const vm: ChallengeResultVM = {\r\n id: stateId,\r\n slideName: state.name,\r\n attempts: result.tries,\r\n resultType: result.type,\r\n message: result.message,\r\n stateIndex,\r\n resultData: result.resultData\r\n };\r\n\r\n organizedResults.push(vm);\r\n }\r\n // If state has no result but has expected response that's not NONE, add it with partial data\r\n else if (\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n const vm: ChallengeResultVM = {\r\n id: stateId,\r\n slideName: state.name,\r\n attempts: 0,\r\n stateIndex,\r\n message: \"Incomplete\"\r\n };\r\n\r\n organizedResults.push(vm);\r\n }\r\n });\r\n\r\n this.doUpdateView(organizedResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ChallengeResultsListPM.type);\r\n this.doUpdateView([]);\r\n this.results?.addChangeObserver(this.onEntityChange);\r\n this.stateMachine?.addChangeObserver(this.onEntityChange);\r\n\r\n // Initial update\r\n this.onEntityChange();\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ChallengeResultsListPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/ChallengeResultsListPM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\nimport {\n ChallengeResultHitData,\n ChallengeResultMultiHitData,\n ChallengeResultProgressData,\n ChallengeResultQualityData,\n ChallengeResultScoreData,\n ChallengeResultsEntity,\n ChallengeResultType\n} from \"../Entities/ChallengeResults\";\nimport { ChallengeResponse } from \"../../StateMachine\";\n\nexport interface ChallengeResultVM {\n id: string;\n slideName: string;\n attempts: number;\n message: string;\n resultType?: ChallengeResultType;\n stateIndex: number;\n resultData?:\n | ChallengeResultHitData\n | ChallengeResultMultiHitData\n | ChallengeResultQualityData\n | ChallengeResultScoreData\n | ChallengeResultProgressData;\n}\n\nexport abstract class ChallengeResultsListPM extends AppObjectPM<\n ChallengeResultVM[]\n> {\n static type = \"ChallengeResultsListPM\";\n\n static get(appObjects: AppObjectRepo) {\n return appObjects.getSingleton<ChallengeResultsListPM>(\n ChallengeResultsListPM.type\n );\n }\n}\n\nexport function makeChallengeResultsPM(\n appObject: AppObject\n): ChallengeResultsListPM {\n return new ChallengeResultsPMImp(appObject);\n}\n\nclass ChallengeResultsPMImp extends ChallengeResultsListPM {\n private get results() {\n return this.getCachedSingleton<ChallengeResultsEntity>(\n ChallengeResultsEntity.type\n );\n }\n\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n vmsAreEqual(a: ChallengeResultVM[], b: ChallengeResultVM[]): boolean {\n if (a.length !== b.length) return false;\n\n let areEqual = true;\n a.forEach((aResult, i) => {\n const bResult = b[i];\n if (aResult.id !== bResult.id) areEqual = false;\n else if (aResult.attempts !== bResult.attempts) areEqual = false;\n else if (aResult.resultData !== bResult.resultData) areEqual = false;\n });\n return areEqual;\n }\n\n onEntityChange = (): void => {\n if (!this.results || !this.stateMachine) return;\n\n const organizedResults: ChallengeResultVM[] = [];\n\n // Get all states from state machine\n const stateIds = this.stateMachine.states;\n\n // Process each state\n stateIds.forEach((stateId) => {\n const state = this.stateMachine!.getStateByID(stateId);\n if (!state) return;\n\n const stateIndex = this.stateMachine!.getStateIndex(stateId) ?? -1;\n const result = this.results!.getResultForSlide(stateId);\n\n // If state has a result, add it with all result data\n if (result) {\n const vm: ChallengeResultVM = {\n id: stateId,\n slideName: state.name,\n attempts: result.tries,\n resultType: result.type,\n message: result.message,\n stateIndex,\n resultData: result.resultData\n };\n\n organizedResults.push(vm);\n }\n // If state has no result but has expected response that's not NONE, add it with partial data\n else if (\n state.expectedResponse !== undefined &&\n state.expectedResponse !== ChallengeResponse.NONE\n ) {\n const vm: ChallengeResultVM = {\n id: stateId,\n slideName: state.name,\n attempts: 0,\n stateIndex,\n message: \"Incomplete\"\n };\n\n organizedResults.push(vm);\n }\n });\n\n this.doUpdateView(organizedResults);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, ChallengeResultsListPM.type);\n this.doUpdateView([]);\n this.results?.addChangeObserver(this.onEntityChange);\n this.stateMachine?.addChangeObserver(this.onEntityChange);\n\n // Initial update\n this.onEntityChange();\n\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":";;;AAqBA,8DAIC;AAzBD,sCAKqB;AACrB,0CAAqD;AACrD,mFAAgF;AAChF,iFAAgF;AAEhF,MAAsB,qBAAsB,SAAQ,2BAA6B;IAG/E,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,sDASC;AARQ,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,SAAgB,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAG1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,iCAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IA2BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QA1C/C,cAAS,GAAG,KAAK,CAAC;QAgBlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,IAAI,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3E,kEAAkE;YAClE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtD,IACE,KAAK;wBACL,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,KAAK,mCAAiB,CAAC,IAAI,EACjD,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n AppObject,\r\n AppObjectSingletonPM,\r\n AppObjectRepo,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\nimport { ChallengeResultsEntity } from \"../Entities\";\r\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\r\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\r\n\r\nexport abstract class HasChallengeResultsPM extends AppObjectSingletonPM<boolean> {\r\n static type = \"HasChallengeResultsPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HasChallengeResultsPM>(\r\n HasChallengeResultsPM.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeHasChallengeResultsPM(\r\n appObject: AppObject\r\n): HasChallengeResultsPM {\r\n return new HasChallengeResultsPMImp(appObject);\r\n}\r\n\r\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\r\n defaultVM = false;\r\n\r\n private get resultsEntity() {\r\n return this.getCachedSingleton<ChallengeResultsEntity>(\r\n ChallengeResultsEntity.type\r\n );\r\n }\r\n\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n vmsAreEqual(a: boolean, b: boolean): boolean {\r\n return a === b;\r\n }\r\n\r\n formVM = (): void => {\r\n if (!this.resultsEntity) return;\r\n\r\n let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;\r\n\r\n // If no results are found, check for expected responses in states\r\n if (!hasAssessmentResults && this.stateMachine) {\r\n const stateIds = this.stateMachine.states;\r\n\r\n for (const stateId of stateIds) {\r\n const state = this.stateMachine.getStateByID(stateId);\r\n if (\r\n state &&\r\n state.expectedResponse !== undefined &&\r\n state.expectedResponse !== ChallengeResponse.NONE\r\n ) {\r\n hasAssessmentResults = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.doUpdateView(hasAssessmentResults);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HasChallengeResultsPM.type);\r\n\r\n if (this.resultsEntity) {\r\n this.observeEntity(this.resultsEntity);\r\n }\r\n if (this.stateMachine) {\r\n this.observeEntity(this.stateMachine);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HasChallengeResultsPM.js","sourceRoot":"","sources":["../../../../src/ChallengeResults/PMs/HasChallengeResultsPM.ts"],"names":[],"mappings":";;;AAqBA,8DAIC;AAzBD,sCAKqB;AACrB,0CAAqD;AACrD,mFAAgF;AAChF,iFAAgF;AAEhF,MAAsB,qBAAsB,SAAQ,2BAA6B;IAG/E,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,IAAA,4BAAqB,EAC1B,qBAAqB,CAAC,IAAI,EAC1B,UAAU,CACX,CAAC;IACJ,CAAC;;AARH,sDASC;AARQ,0BAAI,GAAG,uBAAuB,CAAC;AAUxC,SAAgB,yBAAyB,CACvC,SAAoB;IAEpB,OAAO,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,wBAAyB,SAAQ,qBAAqB;IAG1D,IAAY,aAAa;QACvB,OAAO,IAAI,CAAC,kBAAkB,CAC5B,iCAAsB,CAAC,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,mCAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,CAAU,EAAE,CAAU;QAChC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IA2BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QA1C/C,cAAS,GAAG,KAAK,CAAC;QAgBlB,WAAM,GAAG,GAAS,EAAE;YAClB,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAEhC,IAAI,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3E,kEAAkE;YAClE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtD,IACE,KAAK;wBACL,KAAK,CAAC,gBAAgB,KAAK,SAAS;wBACpC,KAAK,CAAC,gBAAgB,KAAK,mCAAiB,CAAC,IAAI,EACjD,CAAC;wBACD,oBAAoB,GAAG,IAAI,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC1C,CAAC,CAAC;QAKA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectSingletonPM,\n AppObjectRepo,\n getSingletonComponent\n} from \"@vived/core\";\nimport { ChallengeResultsEntity } from \"../Entities\";\nimport { HostStateMachine } from \"../../StateMachine/Entities/HostStateMachine\";\nimport { ChallengeResponse } from \"../../StateMachine/Entities/HostStateEntity\";\n\nexport abstract class HasChallengeResultsPM extends AppObjectSingletonPM<boolean> {\n static type = \"HasChallengeResultsPM\";\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<HasChallengeResultsPM>(\n HasChallengeResultsPM.type,\n appObjects\n );\n }\n}\n\nexport function makeHasChallengeResultsPM(\n appObject: AppObject\n): HasChallengeResultsPM {\n return new HasChallengeResultsPMImp(appObject);\n}\n\nclass HasChallengeResultsPMImp extends HasChallengeResultsPM {\n defaultVM = false;\n\n private get resultsEntity() {\n return this.getCachedSingleton<ChallengeResultsEntity>(\n ChallengeResultsEntity.type\n );\n }\n\n private get stateMachine() {\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\n }\n\n vmsAreEqual(a: boolean, b: boolean): boolean {\n return a === b;\n }\n\n formVM = (): void => {\n if (!this.resultsEntity) return;\n\n let hasAssessmentResults = this.resultsEntity.results?.length > 0 || false;\n\n // If no results are found, check for expected responses in states\n if (!hasAssessmentResults && this.stateMachine) {\n const stateIds = this.stateMachine.states;\n\n for (const stateId of stateIds) {\n const state = this.stateMachine.getStateByID(stateId);\n if (\n state &&\n state.expectedResponse !== undefined &&\n state.expectedResponse !== ChallengeResponse.NONE\n ) {\n hasAssessmentResults = true;\n break;\n }\n }\n }\n\n this.doUpdateView(hasAssessmentResults);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, HasChallengeResultsPM.type);\n\n if (this.resultsEntity) {\n this.observeEntity(this.resultsEntity);\n }\n if (this.stateMachine) {\n this.observeEntity(this.stateMachine);\n }\n }\n}\n"]}
@@ -32,8 +32,7 @@ class SandboxDialogFactory extends core_1.DomainFactory {
32
32
  /**
33
33
  * Sets up all use cases for the Dialog system
34
34
  */
35
- setupUCs() {
36
- }
35
+ setupUCs() { }
37
36
  /**
38
37
  * Sets up all presentation managers for the Dialog system
39
38
  */
@@ -1 +1 @@
1
- {"version":3,"file":"SandboxDialogFactory.js","sourceRoot":"","sources":["../../../../src/Dialog/Factories/SandboxDialogFactory.ts"],"names":[],"mappings":";;;AAwEA,4DAKC;AA7ED,sCAAsE;AACtE,0CAA8C;AAC9C,gCAA2C;AAC3C,gCAMgB;AAChB,6DAAwD;AACxD,iEAA4D;AAC5D,+EAA0E;AAC1E,yEAAoE;AACpE,iEAA4D;AAE5D;;;;GAIG;AACH,MAAa,oBAAqB,SAAQ,oBAAa;IAIrD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,sBAAsB,CAAC;IAI9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAA,0BAAe,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ;IACR,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,IAAA,uBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,wCAAwC;QACxC,IAAA,2BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAA,qCAAgB,EAC9D,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAA,yCAAkB,EAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YAC9C,IAAA,uDAAyB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAA,yCAAkB,EAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAA,iCAA2B,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YACjD,IAAA,iDAAsB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;CACF;AAjDD,oDAiDC;AAED,SAAgB,wBAAwB,CACtC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\r\nimport { makeDialogQueue } from \"../Entities\";\r\nimport { makeDialogQueuePM } from \"../PMs\";\r\nimport {\r\n makeMakeAlertDialogUC,\r\n makeMakeConfirmDialogUC,\r\n makeMakeMarkdownDialogUC,\r\n makeMakeSelectModelDialogUC,\r\n makeMakeSpinnerDialogUC\r\n} from \"../UCs\";\r\nimport { makeAlertFactory } from \"./alertDialogFactory\";\r\nimport { makeConfirmFactory } from \"./confirmDialogFactory\";\r\nimport { makeMarkdownEditorFactory } from \"./markdownDialogEditorFactory\";\r\nimport { makeSelectModelFactory } from \"./selectDialogModelFactory\";\r\nimport { makeSpinnerFactory } from \"./spinnerDialogFactory\";\r\n\r\n/**\r\n * Factory responsible for setting up the Dialog domain components for sandbox.\r\n * This factory initializes all entities, use cases, and presentation models\r\n * required for the Dialog functionality.\r\n */\r\nexport class SandboxDialogFactory extends DomainFactory {\r\n // Unique name for this factory\r\n readonly factoryName = \"SandboxDialogFactory\";\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject);\r\n }\r\n\r\n /**\r\n * Sets up all entities required for the Dialog system\r\n */\r\n setupEntities(): void {\r\n // Initialize entities\r\n makeDialogQueue(this.appObject);\r\n }\r\n\r\n /**\r\n * Sets up all use cases for the Dialog system\r\n */\r\n setupUCs(): void {\r\n }\r\n\r\n /**\r\n * Sets up all presentation managers for the Dialog system\r\n */\r\n setupPMs(): void {\r\n // Initialize presentation managers\r\n makeDialogQueuePM(this.appObject);\r\n }\r\n\r\n /**\r\n * Performs any final setup operations after all components are initialized\r\n */\r\n finalSetup(): void {\r\n // Assign factory functions to use cases\r\n makeMakeAlertDialogUC(this.appObject).factory = makeAlertFactory(\r\n this.appObjects\r\n );\r\n makeMakeConfirmDialogUC(this.appObject).factory = makeConfirmFactory(\r\n this.appObjects\r\n );\r\n makeMakeMarkdownDialogUC(this.appObject).factory =\r\n makeMarkdownEditorFactory(this.appObjects);\r\n makeMakeSpinnerDialogUC(this.appObject).factory = makeSpinnerFactory(\r\n this.appObjects\r\n );\r\n makeMakeSelectModelDialogUC(this.appObject).factory =\r\n makeSelectModelFactory(this.appObjects);\r\n }\r\n}\r\n\r\nexport function makeSandboxDialogFactory(\r\n appObjects: AppObjectRepo\r\n): SandboxDialogFactory {\r\n const ao = appObjects.getOrCreate(\"Dialog\");\r\n return new SandboxDialogFactory(ao);\r\n}\r\n"]}
1
+ {"version":3,"file":"SandboxDialogFactory.js","sourceRoot":"","sources":["../../../../src/Dialog/Factories/SandboxDialogFactory.ts"],"names":[],"mappings":";;;AAuEA,4DAKC;AA5ED,sCAAsE;AACtE,0CAA8C;AAC9C,gCAA2C;AAC3C,gCAMgB;AAChB,6DAAwD;AACxD,iEAA4D;AAC5D,+EAA0E;AAC1E,yEAAoE;AACpE,iEAA4D;AAE5D;;;;GAIG;AACH,MAAa,oBAAqB,SAAQ,oBAAa;IAIrD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,CAAC,CAAC;QAJnB,+BAA+B;QACtB,gBAAW,GAAG,sBAAsB,CAAC;IAI9C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,sBAAsB;QACtB,IAAA,0BAAe,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ,KAAU,CAAC;IAEnB;;OAEG;IACH,QAAQ;QACN,mCAAmC;QACnC,IAAA,uBAAiB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,wCAAwC;QACxC,IAAA,2BAAqB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAA,qCAAgB,EAC9D,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAA,yCAAkB,EAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAA,8BAAwB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YAC9C,IAAA,uDAAyB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAA,yCAAkB,EAClE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAA,iCAA2B,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO;YACjD,IAAA,iDAAsB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;CACF;AAhDD,oDAgDC;AAED,SAAgB,wBAAwB,CACtC,UAAyB;IAEzB,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC","sourcesContent":["import { AppObject, AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeDialogQueue } from \"../Entities\";\nimport { makeDialogQueuePM } from \"../PMs\";\nimport {\n makeMakeAlertDialogUC,\n makeMakeConfirmDialogUC,\n makeMakeMarkdownDialogUC,\n makeMakeSelectModelDialogUC,\n makeMakeSpinnerDialogUC\n} from \"../UCs\";\nimport { makeAlertFactory } from \"./alertDialogFactory\";\nimport { makeConfirmFactory } from \"./confirmDialogFactory\";\nimport { makeMarkdownEditorFactory } from \"./markdownDialogEditorFactory\";\nimport { makeSelectModelFactory } from \"./selectDialogModelFactory\";\nimport { makeSpinnerFactory } from \"./spinnerDialogFactory\";\n\n/**\n * Factory responsible for setting up the Dialog domain components for sandbox.\n * This factory initializes all entities, use cases, and presentation models\n * required for the Dialog functionality.\n */\nexport class SandboxDialogFactory extends DomainFactory {\n // Unique name for this factory\n readonly factoryName = \"SandboxDialogFactory\";\n\n constructor(appObject: AppObject) {\n super(appObject);\n }\n\n /**\n * Sets up all entities required for the Dialog system\n */\n setupEntities(): void {\n // Initialize entities\n makeDialogQueue(this.appObject);\n }\n\n /**\n * Sets up all use cases for the Dialog system\n */\n setupUCs(): void {}\n\n /**\n * Sets up all presentation managers for the Dialog system\n */\n setupPMs(): void {\n // Initialize presentation managers\n makeDialogQueuePM(this.appObject);\n }\n\n /**\n * Performs any final setup operations after all components are initialized\n */\n finalSetup(): void {\n // Assign factory functions to use cases\n makeMakeAlertDialogUC(this.appObject).factory = makeAlertFactory(\n this.appObjects\n );\n makeMakeConfirmDialogUC(this.appObject).factory = makeConfirmFactory(\n this.appObjects\n );\n makeMakeMarkdownDialogUC(this.appObject).factory =\n makeMarkdownEditorFactory(this.appObjects);\n makeMakeSpinnerDialogUC(this.appObject).factory = makeSpinnerFactory(\n this.appObjects\n );\n makeMakeSelectModelDialogUC(this.appObject).factory =\n makeSelectModelFactory(this.appObjects);\n }\n}\n\nexport function makeSandboxDialogFactory(\n appObjects: AppObjectRepo\n): SandboxDialogFactory {\n const ao = appObjects.getOrCreate(\"Dialog\");\n return new SandboxDialogFactory(ao);\n}\n"]}