@vived/host 4.6.0 → 4.8.0

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 (177) hide show
  1. package/dist/cjs/Assets/UCs/GetAssetBlobURLUC.js +104 -27
  2. package/dist/cjs/Assets/UCs/GetAssetBlobURLUC.js.map +1 -1
  3. package/dist/cjs/Assets/UCs/GetAssetFileUC.js +111 -34
  4. package/dist/cjs/Assets/UCs/GetAssetFileUC.js.map +1 -1
  5. package/dist/cjs/Cache/Controllers/clearCache.js +13 -0
  6. package/dist/cjs/Cache/Controllers/clearCache.js.map +1 -0
  7. package/dist/cjs/Cache/Controllers/index.js +18 -0
  8. package/dist/cjs/Cache/Controllers/index.js.map +1 -0
  9. package/dist/cjs/Cache/Entities/AssetCacheEntity.js +95 -0
  10. package/dist/cjs/Cache/Entities/AssetCacheEntity.js.map +1 -0
  11. package/dist/cjs/Cache/Entities/CacheEntity.js +54 -0
  12. package/dist/cjs/Cache/Entities/CacheEntity.js.map +1 -0
  13. package/dist/cjs/Cache/Entities/ScriptCacheEntity.js +137 -0
  14. package/dist/cjs/Cache/Entities/ScriptCacheEntity.js.map +1 -0
  15. package/dist/cjs/Cache/Entities/index.js +25 -0
  16. package/dist/cjs/Cache/Entities/index.js.map +1 -0
  17. package/dist/cjs/Cache/Factories/index.js +18 -0
  18. package/dist/cjs/Cache/Factories/index.js.map +1 -0
  19. package/dist/cjs/Cache/Factories/setupCache.js +27 -0
  20. package/dist/cjs/Cache/Factories/setupCache.js.map +1 -0
  21. package/dist/cjs/Cache/Mocks/MockCacheEntity.js +22 -0
  22. package/dist/cjs/Cache/Mocks/MockCacheEntity.js.map +1 -0
  23. package/dist/cjs/Cache/Mocks/MockGetAssetFromCacheUC.js +19 -0
  24. package/dist/cjs/Cache/Mocks/MockGetAssetFromCacheUC.js.map +1 -0
  25. package/dist/cjs/Cache/Mocks/MockGetScriptFromCacheUC.js +22 -0
  26. package/dist/cjs/Cache/Mocks/MockGetScriptFromCacheUC.js.map +1 -0
  27. package/dist/cjs/Cache/Mocks/MockStoreAssetInCacheUC.js +17 -0
  28. package/dist/cjs/Cache/Mocks/MockStoreAssetInCacheUC.js.map +1 -0
  29. package/dist/cjs/Cache/Mocks/MockStoreScriptInCacheUC.js +22 -0
  30. package/dist/cjs/Cache/Mocks/MockStoreScriptInCacheUC.js.map +1 -0
  31. package/dist/cjs/Cache/Mocks/index.js +22 -0
  32. package/dist/cjs/Cache/Mocks/index.js.map +1 -0
  33. package/dist/cjs/Cache/UCs/GetAssetFromCacheUC.js +40 -0
  34. package/dist/cjs/Cache/UCs/GetAssetFromCacheUC.js.map +1 -0
  35. package/dist/cjs/Cache/UCs/GetScriptFromCacheUC.js +49 -0
  36. package/dist/cjs/Cache/UCs/GetScriptFromCacheUC.js.map +1 -0
  37. package/dist/cjs/Cache/UCs/StoreAssetInCacheUC.js +39 -0
  38. package/dist/cjs/Cache/UCs/StoreAssetInCacheUC.js.map +1 -0
  39. package/dist/cjs/Cache/UCs/StoreScriptInCacheUC.js +48 -0
  40. package/dist/cjs/Cache/UCs/StoreScriptInCacheUC.js.map +1 -0
  41. package/dist/cjs/Cache/UCs/index.js +26 -0
  42. package/dist/cjs/Cache/UCs/index.js.map +1 -0
  43. package/dist/cjs/Cache/index.js +21 -0
  44. package/dist/cjs/Cache/index.js.map +1 -0
  45. package/dist/cjs/StateMachine/Entities/HostEditingStateEntity.js +62 -0
  46. package/dist/cjs/StateMachine/Entities/HostEditingStateEntity.js.map +1 -1
  47. package/dist/cjs/StateMachine/Entities/HostStateEntity.js +91 -2
  48. package/dist/cjs/StateMachine/Entities/HostStateEntity.js.map +1 -1
  49. package/dist/cjs/StateMachine/Entities/HostStateMachine.js +127 -0
  50. package/dist/cjs/StateMachine/Entities/HostStateMachine.js.map +1 -1
  51. package/dist/cjs/StateMachine/Mocks/MockHostStateEntity.js +1 -0
  52. package/dist/cjs/StateMachine/Mocks/MockHostStateEntity.js.map +1 -1
  53. package/dist/cjs/StateMachine/PMs/HostStatePM.js +6 -2
  54. package/dist/cjs/StateMachine/PMs/HostStatePM.js.map +1 -1
  55. package/dist/cjs/StateMachine/UCs/DeleteStateUC.js +1 -1
  56. package/dist/cjs/StateMachine/UCs/DeleteStateUC.js.map +1 -1
  57. package/dist/cjs/StateMachine/UCs/DuplicateStateUC.js +1 -1
  58. package/dist/cjs/StateMachine/UCs/DuplicateStateUC.js.map +1 -1
  59. package/dist/cjs/StateMachine/UCs/SavePersistentStates.js.map +1 -1
  60. package/dist/cjs/index.js +1 -0
  61. package/dist/cjs/index.js.map +1 -1
  62. package/dist/esm/Assets/UCs/GetAssetBlobURLUC.js +104 -27
  63. package/dist/esm/Assets/UCs/GetAssetBlobURLUC.js.map +1 -1
  64. package/dist/esm/Assets/UCs/GetAssetFileUC.js +111 -34
  65. package/dist/esm/Assets/UCs/GetAssetFileUC.js.map +1 -1
  66. package/dist/esm/Cache/Controllers/clearCache.js +10 -0
  67. package/dist/esm/Cache/Controllers/clearCache.js.map +1 -0
  68. package/dist/esm/Cache/Controllers/index.js +2 -0
  69. package/dist/esm/Cache/Controllers/index.js.map +1 -0
  70. package/dist/esm/Cache/Entities/AssetCacheEntity.js +90 -0
  71. package/dist/esm/Cache/Entities/AssetCacheEntity.js.map +1 -0
  72. package/dist/esm/Cache/Entities/CacheEntity.js +49 -0
  73. package/dist/esm/Cache/Entities/CacheEntity.js.map +1 -0
  74. package/dist/esm/Cache/Entities/ScriptCacheEntity.js +132 -0
  75. package/dist/esm/Cache/Entities/ScriptCacheEntity.js.map +1 -0
  76. package/dist/esm/Cache/Entities/index.js +9 -0
  77. package/dist/esm/Cache/Entities/index.js.map +1 -0
  78. package/dist/esm/Cache/Factories/index.js +2 -0
  79. package/dist/esm/Cache/Factories/index.js.map +1 -0
  80. package/dist/esm/Cache/Factories/setupCache.js +24 -0
  81. package/dist/esm/Cache/Factories/setupCache.js.map +1 -0
  82. package/dist/esm/Cache/Mocks/MockCacheEntity.js +17 -0
  83. package/dist/esm/Cache/Mocks/MockCacheEntity.js.map +1 -0
  84. package/dist/esm/Cache/Mocks/MockGetAssetFromCacheUC.js +14 -0
  85. package/dist/esm/Cache/Mocks/MockGetAssetFromCacheUC.js.map +1 -0
  86. package/dist/esm/Cache/Mocks/MockGetScriptFromCacheUC.js +17 -0
  87. package/dist/esm/Cache/Mocks/MockGetScriptFromCacheUC.js.map +1 -0
  88. package/dist/esm/Cache/Mocks/MockStoreAssetInCacheUC.js +12 -0
  89. package/dist/esm/Cache/Mocks/MockStoreAssetInCacheUC.js.map +1 -0
  90. package/dist/esm/Cache/Mocks/MockStoreScriptInCacheUC.js +17 -0
  91. package/dist/esm/Cache/Mocks/MockStoreScriptInCacheUC.js.map +1 -0
  92. package/dist/esm/Cache/Mocks/index.js +6 -0
  93. package/dist/esm/Cache/Mocks/index.js.map +1 -0
  94. package/dist/esm/Cache/UCs/GetAssetFromCacheUC.js +35 -0
  95. package/dist/esm/Cache/UCs/GetAssetFromCacheUC.js.map +1 -0
  96. package/dist/esm/Cache/UCs/GetScriptFromCacheUC.js +44 -0
  97. package/dist/esm/Cache/UCs/GetScriptFromCacheUC.js.map +1 -0
  98. package/dist/esm/Cache/UCs/StoreAssetInCacheUC.js +34 -0
  99. package/dist/esm/Cache/UCs/StoreAssetInCacheUC.js.map +1 -0
  100. package/dist/esm/Cache/UCs/StoreScriptInCacheUC.js +43 -0
  101. package/dist/esm/Cache/UCs/StoreScriptInCacheUC.js.map +1 -0
  102. package/dist/esm/Cache/UCs/index.js +10 -0
  103. package/dist/esm/Cache/UCs/index.js.map +1 -0
  104. package/dist/esm/Cache/index.js +5 -0
  105. package/dist/esm/Cache/index.js.map +1 -0
  106. package/dist/esm/StateMachine/Entities/HostEditingStateEntity.js +62 -0
  107. package/dist/esm/StateMachine/Entities/HostEditingStateEntity.js.map +1 -1
  108. package/dist/esm/StateMachine/Entities/HostStateEntity.js +90 -1
  109. package/dist/esm/StateMachine/Entities/HostStateEntity.js.map +1 -1
  110. package/dist/esm/StateMachine/Entities/HostStateMachine.js +127 -0
  111. package/dist/esm/StateMachine/Entities/HostStateMachine.js.map +1 -1
  112. package/dist/esm/StateMachine/Mocks/MockHostStateEntity.js +2 -1
  113. package/dist/esm/StateMachine/Mocks/MockHostStateEntity.js.map +1 -1
  114. package/dist/esm/StateMachine/PMs/HostStatePM.js +7 -3
  115. package/dist/esm/StateMachine/PMs/HostStatePM.js.map +1 -1
  116. package/dist/esm/StateMachine/UCs/DeleteStateUC.js +1 -1
  117. package/dist/esm/StateMachine/UCs/DeleteStateUC.js.map +1 -1
  118. package/dist/esm/StateMachine/UCs/DuplicateStateUC.js +1 -1
  119. package/dist/esm/StateMachine/UCs/DuplicateStateUC.js.map +1 -1
  120. package/dist/esm/StateMachine/UCs/SavePersistentStates.js.map +1 -1
  121. package/dist/esm/index.js +1 -0
  122. package/dist/esm/index.js.map +1 -1
  123. package/dist/types/Assets/UCs/GetAssetBlobURLUC.d.ts.map +1 -1
  124. package/dist/types/Cache/Controllers/clearCache.d.ts +3 -0
  125. package/dist/types/Cache/Controllers/clearCache.d.ts.map +1 -0
  126. package/dist/types/Cache/Controllers/index.d.ts +2 -0
  127. package/dist/types/Cache/Controllers/index.d.ts.map +1 -0
  128. package/dist/types/Cache/Entities/AssetCacheEntity.d.ts +43 -0
  129. package/dist/types/Cache/Entities/AssetCacheEntity.d.ts.map +1 -0
  130. package/dist/types/Cache/Entities/CacheEntity.d.ts +57 -0
  131. package/dist/types/Cache/Entities/CacheEntity.d.ts.map +1 -0
  132. package/dist/types/Cache/Entities/ScriptCacheEntity.d.ts +64 -0
  133. package/dist/types/Cache/Entities/ScriptCacheEntity.d.ts.map +1 -0
  134. package/dist/types/Cache/Entities/index.d.ts +9 -0
  135. package/dist/types/Cache/Entities/index.d.ts.map +1 -0
  136. package/dist/types/Cache/Factories/index.d.ts +2 -0
  137. package/dist/types/Cache/Factories/index.d.ts.map +1 -0
  138. package/dist/types/Cache/Factories/setupCache.d.ts +6 -0
  139. package/dist/types/Cache/Factories/setupCache.d.ts.map +1 -0
  140. package/dist/types/Cache/Mocks/MockCacheEntity.d.ts +13 -0
  141. package/dist/types/Cache/Mocks/MockCacheEntity.d.ts.map +1 -0
  142. package/dist/types/Cache/Mocks/MockGetAssetFromCacheUC.d.ts +8 -0
  143. package/dist/types/Cache/Mocks/MockGetAssetFromCacheUC.d.ts.map +1 -0
  144. package/dist/types/Cache/Mocks/MockGetScriptFromCacheUC.d.ts +9 -0
  145. package/dist/types/Cache/Mocks/MockGetScriptFromCacheUC.d.ts.map +1 -0
  146. package/dist/types/Cache/Mocks/MockStoreAssetInCacheUC.d.ts +8 -0
  147. package/dist/types/Cache/Mocks/MockStoreAssetInCacheUC.d.ts.map +1 -0
  148. package/dist/types/Cache/Mocks/MockStoreScriptInCacheUC.d.ts +9 -0
  149. package/dist/types/Cache/Mocks/MockStoreScriptInCacheUC.d.ts.map +1 -0
  150. package/dist/types/Cache/Mocks/index.d.ts +6 -0
  151. package/dist/types/Cache/Mocks/index.d.ts.map +1 -0
  152. package/dist/types/Cache/UCs/GetAssetFromCacheUC.d.ts +8 -0
  153. package/dist/types/Cache/UCs/GetAssetFromCacheUC.d.ts.map +1 -0
  154. package/dist/types/Cache/UCs/GetScriptFromCacheUC.d.ts +13 -0
  155. package/dist/types/Cache/UCs/GetScriptFromCacheUC.d.ts.map +1 -0
  156. package/dist/types/Cache/UCs/StoreAssetInCacheUC.d.ts +8 -0
  157. package/dist/types/Cache/UCs/StoreAssetInCacheUC.d.ts.map +1 -0
  158. package/dist/types/Cache/UCs/StoreScriptInCacheUC.d.ts +13 -0
  159. package/dist/types/Cache/UCs/StoreScriptInCacheUC.d.ts.map +1 -0
  160. package/dist/types/Cache/UCs/index.d.ts +10 -0
  161. package/dist/types/Cache/UCs/index.d.ts.map +1 -0
  162. package/dist/types/Cache/index.d.ts +5 -0
  163. package/dist/types/Cache/index.d.ts.map +1 -0
  164. package/dist/types/StateMachine/Entities/HostEditingStateEntity.d.ts +42 -0
  165. package/dist/types/StateMachine/Entities/HostEditingStateEntity.d.ts.map +1 -1
  166. package/dist/types/StateMachine/Entities/HostStateEntity.d.ts +72 -5
  167. package/dist/types/StateMachine/Entities/HostStateEntity.d.ts.map +1 -1
  168. package/dist/types/StateMachine/Entities/HostStateMachine.d.ts +77 -0
  169. package/dist/types/StateMachine/Entities/HostStateMachine.d.ts.map +1 -1
  170. package/dist/types/StateMachine/Mocks/MockHostStateEntity.d.ts +2 -1
  171. package/dist/types/StateMachine/Mocks/MockHostStateEntity.d.ts.map +1 -1
  172. package/dist/types/StateMachine/PMs/HostStatePM.d.ts +2 -0
  173. package/dist/types/StateMachine/PMs/HostStatePM.d.ts.map +1 -1
  174. package/dist/types/StateMachine/UCs/SavePersistentStates.d.ts.map +1 -1
  175. package/dist/types/index.d.ts +1 -0
  176. package/dist/types/index.d.ts.map +1 -1
  177. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"HostStateMachine.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/HostStateMachine.ts"],"names":[],"mappings":"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","sourcesContent":["import { generateUniqueID, MemoizedBoolean } from \"@vived/core\";\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { HostStateEntity, makeHostStateEntity } from \"./HostStateEntity\";\r\n\r\nexport abstract class HostStateMachine extends AppObjectEntity {\r\n static type = \"HostStateMachine\";\r\n\r\n abstract states: string[];\r\n abstract stateCount: number;\r\n\r\n abstract activeState: string | undefined;\r\n abstract previousState: string | undefined;\r\n abstract nextState: string | undefined;\r\n\r\n abstract transitionDuration: number;\r\n\r\n abstract setActiveStateByID: (id: string) => void;\r\n abstract setActiveStateByIndex: (index: number) => void;\r\n abstract clearActiveState: () => void;\r\n abstract setStates: (states: HostStateEntity[]) => void;\r\n abstract createNewState: () => HostStateEntity;\r\n abstract getStateByID: (id: string) => HostStateEntity | undefined;\r\n abstract deleteState: (id: string) => void;\r\n abstract deleteAllStates: () => void;\r\n abstract getStateIndex: (id: string) => number | undefined;\r\n abstract hasState: (id: string) => boolean;\r\n abstract stateFactory: (id: string) => HostStateEntity;\r\n abstract setPreviousStateActive: () => void;\r\n abstract setNextStateActive: () => void;\r\n abstract setStateIndex: (stateID: string, index: number) => void;\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HostStateMachine>(\r\n HostStateMachine.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeHostStateMachine(appObject: AppObject): HostStateMachine {\r\n return new HostStateMachineImp(appObject);\r\n}\r\n\r\nclass HostStateMachineImp extends HostStateMachine {\r\n private _states: HostStateEntity[] = [];\r\n\r\n transitionDuration = 1;\r\n\r\n get states() {\r\n return this._states.map((state) => state.id);\r\n }\r\n\r\n get stateCount(): number {\r\n return this._states.length;\r\n }\r\n\r\n private _activeState: string | undefined;\r\n get activeState() {\r\n return this._activeState;\r\n }\r\n\r\n get previousState(): string | undefined {\r\n if (!this._activeState) return undefined;\r\n \r\n const currentIndex = this.getStateIndex(this._activeState);\r\n if (currentIndex === undefined || currentIndex === 0) return undefined;\r\n \r\n return this._states[currentIndex - 1].id;\r\n }\r\n\r\n get nextState(): string | undefined {\r\n if (!this._activeState) return undefined;\r\n \r\n const currentIndex = this.getStateIndex(this._activeState);\r\n if (currentIndex === undefined || currentIndex >= this._states.length - 1) return undefined;\r\n \r\n return this._states[currentIndex + 1].id;\r\n }\r\n\r\n private memoizedIsAuthoring = new MemoizedBoolean(false, this.notifyOnChange);\r\n get isAuthoring() {\r\n return this.memoizedIsAuthoring.val;\r\n }\r\n set isAuthoring(val: boolean) {\r\n this.memoizedIsAuthoring.val = val;\r\n }\r\n\r\n public initialEditingState?: string;\r\n\r\n private _lastEditingState: object | undefined;\r\n get lastEditingState(): object | undefined {\r\n return this._lastEditingState;\r\n }\r\n set lastEditingState(val: object | undefined) {\r\n if (this._lastEditingState === undefined && val === undefined) return;\r\n\r\n const lastStateStr =\r\n this.lastEditingState === undefined\r\n ? \"\"\r\n : JSON.stringify(this.lastEditingState);\r\n const valStateStr = val === undefined ? \"\" : JSON.stringify(val);\r\n\r\n if (lastStateStr === valStateStr) return;\r\n\r\n this._lastEditingState = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n private _lastAssets: string[] = [];\r\n get lastAssets(): string[] {\r\n return this._lastAssets;\r\n }\r\n\r\n set lastAssets(lastAssets: string[]) {\r\n this._lastAssets = lastAssets;\r\n }\r\n\r\n public validationErrorMessage?: string;\r\n\r\n hasState = (id: string): boolean => {\r\n const state = this.findStateByID(id);\r\n if (state) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n setActiveStateByID = (id: string): void => {\r\n const state = this.findStateByID(id);\r\n\r\n if (!state) return;\r\n\r\n if (state.id === this._activeState) return;\r\n this._activeState = state.id;\r\n\r\n this.notifyOnChange();\r\n };\r\n\r\n setActiveStateByIndex = (index: number): void => {\r\n if (index < 0 || index >= this._states.length) return;\r\n\r\n const state = this._states[index];\r\n this.setActiveStateByID(state.id);\r\n };\r\n\r\n clearActiveState = (): void => {\r\n if (!this.activeState) return;\r\n\r\n this._activeState = undefined;\r\n this.notifyOnChange();\r\n };\r\n\r\n setStates = (states: HostStateEntity[]): void => {\r\n this._states = states;\r\n this.notifyOnChange();\r\n };\r\n\r\n stateFactory = (id: string): HostStateEntity => {\r\n const ao = this.appObjects.getOrCreate(id);\r\n return makeHostStateEntity(ao);\r\n };\r\n\r\n createNewState = (): HostStateEntity => {\r\n const newState = this.stateFactory(generateUniqueID());\r\n\r\n this._states.push(newState);\r\n this.notifyOnChange();\r\n return newState;\r\n };\r\n\r\n getStateByID = (id: string): HostStateEntity | undefined => {\r\n return this.findStateByID(id);\r\n };\r\n\r\n deleteState = (id: string): void => {\r\n const index = this.getStateIndex(id);\r\n\r\n if (index === undefined) {\r\n return;\r\n }\r\n\r\n const state = this.getStateByID(id);\r\n state?.appObject.dispose();\r\n\r\n this._states.splice(index, 1);\r\n this.notifyOnChange();\r\n };\r\n\r\n deleteAllStates = (): void => {\r\n if (this._states.length === 0) return;\r\n\r\n // Dispose all state app objects\r\n this._states.forEach((state) => {\r\n state.appObject.dispose();\r\n });\r\n\r\n this._states = [];\r\n this.clearActiveState();\r\n this.notifyOnChange();\r\n };\r\n\r\n getStateIndex = (id: string): number | undefined => {\r\n let index = -1;\r\n\r\n this._states.forEach((state, i) => {\r\n if (state.id === id) {\r\n index = i;\r\n }\r\n });\r\n\r\n if (index >= 0) {\r\n return index;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n private findStateByID(id: string): HostStateEntity | undefined {\r\n for (const state of this._states) {\r\n if (state.id === id) {\r\n return state;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n setPreviousStateActive = (): void => {\r\n if (!this.previousState) return;\r\n\r\n this.setActiveStateByID(this.previousState);\r\n };\r\n\r\n setNextStateActive = (): void => {\r\n if (!this.nextState) return;\r\n\r\n this.setActiveStateByID(this.nextState);\r\n };\r\n\r\n setStateIndex = (stateID: string, index: number): void => {\r\n // Check if the state exists\r\n const state = this.getStateByID(stateID);\r\n if (!state) return;\r\n\r\n // Check if the index is valid\r\n if (index < 0 || index >= this._states.length) return;\r\n\r\n // Get the current index\r\n const currentIndex = this.getStateIndex(stateID);\r\n if (currentIndex === undefined) return;\r\n\r\n // If the index is the same, do nothing\r\n if (currentIndex === index) return;\r\n\r\n // Remove the state from the current position\r\n const stateToMove = this._states.splice(currentIndex, 1)[0];\r\n\r\n // Insert it at the new position\r\n this._states.splice(index, 0, stateToMove);\r\n\r\n // If the moved state was active, update previous and next states\r\n if (stateID === this._activeState) {\r\n this.setActiveStateByID(stateID);\r\n }\r\n\r\n this.notifyOnChange();\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStateMachine.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HostStateMachine.js","sourceRoot":"","sources":["../../../../src/StateMachine/Entities/HostStateMachine.ts"],"names":[],"mappings":"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","sourcesContent":["import { generateUniqueID, MemoizedBoolean } from \"@vived/core\";\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { HostStateEntity, makeHostStateEntity } from \"./HostStateEntity\";\r\n\r\n/**\r\n * HostStateMachine manages a collection of states and controls state transitions.\r\n *\r\n * This singleton component serves as the central controller for the VIVED platform's\r\n * state-based application model. It maintains an ordered collection of states,\r\n * tracks the currently active state, and provides methods for state transitions,\r\n * creation, deletion, and reordering.\r\n *\r\n * The state machine can be used in both runtime and authoring modes:\r\n * - In runtime: For navigating between predefined states in an application\r\n * - In authoring: For creating and organizing states through a content editor\r\n *\r\n * This entity works closely with HostStateEntity (individual states) and\r\n * HostEditingStateEntity (for state authoring).\r\n */\r\nexport abstract class HostStateMachine extends AppObjectEntity {\r\n static type = \"HostStateMachine\";\r\n\r\n /** Array of all state IDs in order */\r\n abstract states: string[];\r\n\r\n /** Total number of states in the machine */\r\n abstract stateCount: number;\r\n\r\n /** ID of the currently active state, if any */\r\n abstract activeState: string | undefined;\r\n\r\n /** ID of the state preceding the active state, if any */\r\n abstract previousState: string | undefined;\r\n\r\n /** ID of the state following the active state, if any */\r\n abstract nextState: string | undefined;\r\n\r\n /** Duration of transition animations between states (in seconds) */\r\n abstract transitionDuration: number;\r\n\r\n /**\r\n * Sets a state as active by its ID\r\n * @param id ID of the state to activate\r\n */\r\n abstract setActiveStateByID: (id: string) => void;\r\n\r\n /**\r\n * Sets a state as active by its position in the states array\r\n * @param index Zero-based index of the state to activate\r\n */\r\n abstract setActiveStateByIndex: (index: number) => void;\r\n\r\n /** Deactivates the current state (no state will be active) */\r\n abstract clearActiveState: () => void;\r\n\r\n /**\r\n * Replaces all states with a new collection\r\n * @param states Array of state entities to use\r\n */\r\n abstract setStates: (states: HostStateEntity[]) => void;\r\n\r\n /** Creates a new empty state and adds it to the end of the states array */\r\n abstract createNewState: () => HostStateEntity;\r\n\r\n /**\r\n * Retrieves a state entity by its ID\r\n * @param id The ID of the state to retrieve\r\n * @returns The state entity or undefined if not found\r\n */\r\n abstract getStateByID: (id: string) => HostStateEntity | undefined;\r\n\r\n /**\r\n * Removes a state from the machine\r\n * @param id ID of the state to remove\r\n */\r\n abstract deleteState: (id: string) => void;\r\n\r\n /** Removes all states from the machine */\r\n abstract deleteAllStates: () => void;\r\n\r\n /**\r\n * Gets the index of a state in the states array\r\n * @param id ID of the state\r\n * @returns Zero-based index or undefined if not found\r\n */\r\n abstract getStateIndex: (id: string) => number | undefined;\r\n\r\n /**\r\n * Checks if a state with the given ID exists in the machine\r\n * @param id ID to check\r\n * @returns true if the state exists, false otherwise\r\n */\r\n abstract hasState: (id: string) => boolean;\r\n\r\n /**\r\n * Factory function for creating state entities\r\n * @param id ID for the new state\r\n * @returns A new HostStateEntity instance\r\n */\r\n abstract stateFactory: (id: string) => HostStateEntity;\r\n\r\n /** Activates the state before the current active state */\r\n abstract setPreviousStateActive: () => void;\r\n\r\n /** Activates the state after the current active state */\r\n abstract setNextStateActive: () => void;\r\n\r\n /**\r\n * Moves a state to a different position in the states array\r\n * @param stateID ID of the state to move\r\n * @param index Destination index\r\n */\r\n abstract setStateIndex: (stateID: string, index: number) => void;\r\n\r\n /**\r\n * Gets the singleton instance of HostStateMachine\r\n * @param appObjects The app object repository\r\n * @returns The HostStateMachine instance\r\n */\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<HostStateMachine>(\r\n HostStateMachine.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Factory function for creating a HostStateMachine instance\r\n * @param appObject The AppObject to associate with this entity\r\n * @returns A new HostStateMachine instance\r\n */\r\nexport function makeHostStateMachine(appObject: AppObject): HostStateMachine {\r\n return new HostStateMachineImp(appObject);\r\n}\r\n\r\n/**\r\n * Implementation of the HostStateMachine abstract class\r\n * Provides concrete implementation of state machine functionality\r\n */\r\nclass HostStateMachineImp extends HostStateMachine {\r\n /** Internal storage for state entities */\r\n private _states: HostStateEntity[] = [];\r\n\r\n /** Duration for transitions between states (in seconds) */\r\n transitionDuration = 1;\r\n\r\n /**\r\n * List of all state IDs in order\r\n * @returns Array of state IDs\r\n */\r\n get states() {\r\n return this._states.map((state) => state.id);\r\n }\r\n\r\n /**\r\n * Total number of states in the machine\r\n * @returns Number of states\r\n */\r\n get stateCount(): number {\r\n return this._states.length;\r\n }\r\n\r\n /** ID of the currently active state */\r\n private _activeState: string | undefined;\r\n get activeState() {\r\n return this._activeState;\r\n }\r\n\r\n /**\r\n * ID of the state preceding the active state\r\n * Returns undefined if:\r\n * - No active state\r\n * - Active state is the first state\r\n */\r\n get previousState(): string | undefined {\r\n if (!this._activeState) return undefined;\r\n\r\n const currentIndex = this.getStateIndex(this._activeState);\r\n if (currentIndex === undefined || currentIndex === 0) return undefined;\r\n\r\n return this._states[currentIndex - 1].id;\r\n }\r\n\r\n /**\r\n * ID of the state following the active state\r\n * Returns undefined if:\r\n * - No active state\r\n * - Active state is the last state\r\n */\r\n get nextState(): string | undefined {\r\n if (!this._activeState) return undefined;\r\n\r\n const currentIndex = this.getStateIndex(this._activeState);\r\n if (currentIndex === undefined || currentIndex >= this._states.length - 1)\r\n return undefined;\r\n\r\n return this._states[currentIndex + 1].id;\r\n }\r\n\r\n /**\r\n * Whether the state machine is in authoring mode\r\n * In authoring mode, additional editing features are enabled\r\n */\r\n private memoizedIsAuthoring = new MemoizedBoolean(false, this.notifyOnChange);\r\n get isAuthoring() {\r\n return this.memoizedIsAuthoring.val;\r\n }\r\n set isAuthoring(val: boolean) {\r\n this.memoizedIsAuthoring.val = val;\r\n }\r\n\r\n /** State to initially show in editing mode */\r\n public initialEditingState?: string;\r\n\r\n /**\r\n * Last state data that was being edited\r\n * Used to restore editing state when returning to editor\r\n */\r\n private _lastEditingState: object | undefined;\r\n get lastEditingState(): object | undefined {\r\n return this._lastEditingState;\r\n }\r\n set lastEditingState(val: object | undefined) {\r\n if (this._lastEditingState === undefined && val === undefined) return;\r\n\r\n const lastStateStr =\r\n this.lastEditingState === undefined\r\n ? \"\"\r\n : JSON.stringify(this.lastEditingState);\r\n const valStateStr = val === undefined ? \"\" : JSON.stringify(val);\r\n\r\n if (lastStateStr === valStateStr) return;\r\n\r\n this._lastEditingState = val;\r\n this.notifyOnChange();\r\n }\r\n\r\n /**\r\n * Tracks assets used in previous state for preloading optimization\r\n * Helps optimize asset loading between state transitions\r\n */\r\n private _lastAssets: string[] = [];\r\n get lastAssets(): string[] {\r\n return this._lastAssets;\r\n }\r\n set lastAssets(lastAssets: string[]) {\r\n this._lastAssets = lastAssets;\r\n }\r\n\r\n /** Error message for state validation failures */\r\n public validationErrorMessage?: string;\r\n\r\n /**\r\n * Checks if a state with the given ID exists\r\n * @param id ID to check\r\n * @returns true if state exists, false otherwise\r\n */\r\n hasState = (id: string): boolean => {\r\n const state = this.findStateByID(id);\r\n if (state) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n /**\r\n * Sets the active state by its ID\r\n * @param id ID of the state to activate\r\n */\r\n setActiveStateByID = (id: string): void => {\r\n const state = this.findStateByID(id);\r\n\r\n if (!state) return;\r\n\r\n if (state.id === this._activeState) return;\r\n this._activeState = state.id;\r\n\r\n this.notifyOnChange();\r\n };\r\n\r\n /**\r\n * Sets the active state by its index in the states array\r\n * @param index Zero-based index of the state to activate\r\n */\r\n setActiveStateByIndex = (index: number): void => {\r\n if (index < 0 || index >= this._states.length) return;\r\n\r\n const state = this._states[index];\r\n this.setActiveStateByID(state.id);\r\n };\r\n\r\n /**\r\n * Clears the active state (no state will be active)\r\n */\r\n clearActiveState = (): void => {\r\n if (!this.activeState) return;\r\n\r\n this._activeState = undefined;\r\n this.notifyOnChange();\r\n };\r\n\r\n /**\r\n * Replaces all states with a new collection\r\n * @param states Array of state entities to use\r\n */\r\n setStates = (states: HostStateEntity[]): void => {\r\n this._states = states;\r\n this.notifyOnChange();\r\n };\r\n\r\n /**\r\n * Factory function for creating state entities\r\n * Creates a new AppObject with the given ID and wraps it in a HostStateEntity\r\n * @param id ID for the new state\r\n * @returns A new HostStateEntity instance\r\n */\r\n stateFactory = (id: string): HostStateEntity => {\r\n const ao = this.appObjects.getOrCreate(id);\r\n return makeHostStateEntity(ao);\r\n };\r\n\r\n /**\r\n * Creates a new empty state and adds it to the end of the states array\r\n * @returns The newly created state entity\r\n */\r\n createNewState = (): HostStateEntity => {\r\n const newState = this.stateFactory(generateUniqueID());\r\n\r\n this._states.push(newState);\r\n this.notifyOnChange();\r\n return newState;\r\n };\r\n\r\n /**\r\n * Gets a state entity by its ID\r\n * @param id ID of the state to retrieve\r\n * @returns The state entity or undefined if not found\r\n */\r\n getStateByID = (id: string): HostStateEntity | undefined => {\r\n return this.findStateByID(id);\r\n };\r\n\r\n /**\r\n * Deletes a state from the machine by its ID\r\n * Also disposes the associated AppObject\r\n * @param id ID of the state to delete\r\n */\r\n deleteState = (id: string): void => {\r\n const index = this.getStateIndex(id);\r\n\r\n if (index === undefined) {\r\n return;\r\n }\r\n\r\n const state = this.getStateByID(id);\r\n state?.appObject.dispose();\r\n\r\n this._states.splice(index, 1);\r\n this.notifyOnChange();\r\n };\r\n\r\n /**\r\n * Deletes all states from the machine\r\n * Also disposes all associated AppObjects\r\n */\r\n deleteAllStates = (): void => {\r\n if (this._states.length === 0) return;\r\n\r\n // Dispose all state app objects\r\n this._states.forEach((state) => {\r\n state.appObject.dispose();\r\n });\r\n\r\n this._states = [];\r\n this.clearActiveState();\r\n this.notifyOnChange();\r\n };\r\n\r\n /**\r\n * Gets the index of a state in the states array\r\n * @param id ID of the state\r\n * @returns Zero-based index or undefined if not found\r\n */\r\n getStateIndex = (id: string): number | undefined => {\r\n let index = -1;\r\n\r\n this._states.forEach((state, i) => {\r\n if (state.id === id) {\r\n index = i;\r\n }\r\n });\r\n\r\n if (index >= 0) {\r\n return index;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n /**\r\n * Helper method to find a state by ID\r\n * @param id ID to search for\r\n * @returns The state entity or undefined if not found\r\n */\r\n private findStateByID(id: string): HostStateEntity | undefined {\r\n for (const state of this._states) {\r\n if (state.id === id) {\r\n return state;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Activates the state before the current active state\r\n * Does nothing if there is no previous state\r\n */\r\n setPreviousStateActive = (): void => {\r\n if (!this.previousState) return;\r\n\r\n this.setActiveStateByID(this.previousState);\r\n };\r\n\r\n /**\r\n * Activates the state after the current active state\r\n * Does nothing if there is no next state\r\n */\r\n setNextStateActive = (): void => {\r\n if (!this.nextState) return;\r\n\r\n this.setActiveStateByID(this.nextState);\r\n };\r\n\r\n /**\r\n * Moves a state to a different position in the states array\r\n * Used for reordering states in the state machine\r\n * @param stateID ID of the state to move\r\n * @param index Destination index\r\n */\r\n setStateIndex = (stateID: string, index: number): void => {\r\n // Check if the state exists\r\n const state = this.getStateByID(stateID);\r\n if (!state) return;\r\n\r\n // Check if the index is valid\r\n if (index < 0 || index >= this._states.length) return;\r\n\r\n // Get the current index\r\n const currentIndex = this.getStateIndex(stateID);\r\n if (currentIndex === undefined) return;\r\n\r\n // If the index is the same, do nothing\r\n if (currentIndex === index) return;\r\n\r\n // Remove the state from the current position\r\n const stateToMove = this._states.splice(currentIndex, 1)[0];\r\n\r\n // Insert it at the new position\r\n this._states.splice(index, 0, stateToMove);\r\n\r\n // If the moved state was active, update previous and next states\r\n if (stateID === this._activeState) {\r\n this.setActiveStateByID(stateID);\r\n }\r\n\r\n this.notifyOnChange();\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStateMachine.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
@@ -1,4 +1,4 @@
1
- import { ChallengeResponse, HostStateEntity } from "../Entities/HostStateEntity";
1
+ import { ChallengeResponse, HostStateEntity, StreamState } from "../Entities/HostStateEntity";
2
2
  export class MockHostStateEntity extends HostStateEntity {
3
3
  get id() {
4
4
  return this.appObject.id;
@@ -8,6 +8,7 @@ export class MockHostStateEntity extends HostStateEntity {
8
8
  }
9
9
  constructor(appObject) {
10
10
  super(appObject, HostStateEntity.type);
11
+ this.streamState = StreamState.INIT;
11
12
  this.name = "State Name";
12
13
  this.assets = [];
13
14
  this.expectedResponse = ChallengeResponse.NONE;
@@ -1 +1 @@
1
- {"version":3,"file":"MockHostStateEntity.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/MockHostStateEntity.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAErC,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3B,CAAC;IAQD,IAAI,SAAS;QACX,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAID,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAdzC,SAAI,GAAG,YAAY,CAAC;QACpB,WAAM,GAAG,EAAE,CAAC;QACZ,qBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC;QAC1C,UAAK,GAAG,OAAO,CAAC;QAChB,WAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACnB,WAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAMnB,iBAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIzB,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,EAAU,EAAE,UAAyB;IAC3E,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport {\r\n ChallengeResponse,\r\n HostStateEntity\r\n} from \"../Entities/HostStateEntity\";\r\n\r\nexport class MockHostStateEntity extends HostStateEntity {\r\n get id() {\r\n return this.appObject.id;\r\n }\r\n name = \"State Name\";\r\n assets = [];\r\n expectedResponse = ChallengeResponse.NONE;\r\n appID = \"AppID\";\r\n getDTO = jest.fn();\r\n setDTO = jest.fn();\r\n\r\n get stateData(): object {\r\n return { foo: \"bar\" };\r\n }\r\n\r\n setStateData = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStateEntity.type);\r\n }\r\n}\r\n\r\nexport function makeMockHostStateEntity(id: string, appObjects: AppObjectRepo) {\r\n return new MockHostStateEntity(appObjects.getOrCreate(id));\r\n}\r\n"]}
1
+ {"version":3,"file":"MockHostStateEntity.js","sourceRoot":"","sources":["../../../../src/StateMachine/Mocks/MockHostStateEntity.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACZ,MAAM,6BAA6B,CAAC;AAErC,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IAEtD,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3B,CAAC;IAQD,IAAI,SAAS;QACX,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IAID,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAlBzC,gBAAW,GAAgB,WAAW,CAAC,IAAI,CAAC;QAI5C,SAAI,GAAG,YAAY,CAAC;QACpB,WAAM,GAAG,EAAE,CAAC;QACZ,qBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC;QAC1C,UAAK,GAAG,OAAO,CAAC;QAChB,WAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACnB,WAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAMnB,iBAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIzB,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,EAAU,EAAE,UAAyB;IAC3E,OAAO,IAAI,mBAAmB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport {\r\n ChallengeResponse,\r\n HostStateEntity,\r\n StreamState\r\n} from \"../Entities/HostStateEntity\";\r\n\r\nexport class MockHostStateEntity extends HostStateEntity {\r\n streamState: StreamState = StreamState.INIT;\r\n get id() {\r\n return this.appObject.id;\r\n }\r\n name = \"State Name\";\r\n assets = [];\r\n expectedResponse = ChallengeResponse.NONE;\r\n appID = \"AppID\";\r\n getDTO = jest.fn();\r\n setDTO = jest.fn();\r\n\r\n get stateData(): object {\r\n return { foo: \"bar\" };\r\n }\r\n\r\n setStateData = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStateEntity.type);\r\n }\r\n}\r\n\r\nexport function makeMockHostStateEntity(id: string, appObjects: AppObjectRepo) {\r\n return new MockHostStateEntity(appObjects.getOrCreate(id));\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { AppObjectPM } from "@vived/core";
2
2
  import { AppRepoEntity } from "../../Apps/Entities/AppRepo";
3
- import { HostStateEntity } from "../Entities/HostStateEntity";
3
+ import { HostStateEntity, StreamState } from "../Entities/HostStateEntity";
4
4
  import { HostStateMachine } from "../Entities/HostStateMachine";
5
5
  export class HostStatePM extends AppObjectPM {
6
6
  // Non-singleton getter pattern
@@ -18,7 +18,8 @@ HostStatePM.defaultVM = {
18
18
  appName: "",
19
19
  canBumpBackwards: false,
20
20
  canBumpForward: false,
21
- index: -1
21
+ index: -1,
22
+ streamState: StreamState.INIT
22
23
  };
23
24
  export function makeHostStatePM(appObject) {
24
25
  return new HostStatePMImp(appObject);
@@ -52,6 +53,8 @@ class HostStatePMImp extends HostStatePM {
52
53
  return false;
53
54
  if (a.index !== b.index)
54
55
  return false;
56
+ if (a.streamState !== b.streamState)
57
+ return false;
55
58
  // Deep comparison for the data object
56
59
  const aData = JSON.stringify(a.data);
57
60
  const bData = JSON.stringify(b.data);
@@ -100,7 +103,8 @@ class HostStatePMImp extends HostStatePM {
100
103
  appName,
101
104
  canBumpBackwards,
102
105
  canBumpForward,
103
- index
106
+ index,
107
+ streamState: entity.streamState
104
108
  };
105
109
  // Update the view with the new view model
106
110
  this.doUpdateView(newVM);
@@ -1 +1 @@
1
- {"version":3,"file":"HostStatePM.js","sourceRoot":"","sources":["../../../../src/StateMachine/PMs/HostStatePM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { AppRepoEntity } from \"../../Apps/Entities/AppRepo\";\r\nimport { HostStateEntity } from \"../Entities/HostStateEntity\";\r\nimport { HostStateMachine } from \"../Entities/HostStateMachine\";\r\n\r\nexport interface HostStateVM {\r\n readonly id: string;\r\n readonly name: string;\r\n readonly data: object;\r\n readonly isActive: boolean;\r\n readonly appName: string;\r\n readonly canBumpBackwards: boolean;\r\n readonly canBumpForward: boolean;\r\n readonly index: number;\r\n}\r\n\r\nexport abstract class HostStatePM extends AppObjectPM<HostStateVM> {\r\n static readonly type = \"HostStatePM\";\r\n\r\n // Default view model\r\n static readonly defaultVM: HostStateVM = {\r\n id: \"\",\r\n name: \"\",\r\n data: {},\r\n isActive: false,\r\n appName: \"\",\r\n canBumpBackwards: false,\r\n canBumpForward: false,\r\n index: -1\r\n };\r\n\r\n // Non-singleton getter pattern\r\n static getById(\r\n id: string,\r\n appObjects: AppObjectRepo\r\n ): HostStatePM | undefined {\r\n return appObjects.get(id)?.getComponent<HostStatePM>(HostStatePM.type);\r\n }\r\n}\r\n\r\nexport function makeHostStatePM(appObject: AppObject): HostStatePM {\r\n return new HostStatePMImp(appObject);\r\n}\r\n\r\nclass HostStatePMImp extends HostStatePM {\r\n // Get the entity from the same AppObject\r\n private get hostStateEntity() {\r\n return this.getCachedLocalComponent<HostStateEntity>(HostStateEntity.type);\r\n }\r\n\r\n // Get the state machine which is a singleton\r\n private get hostStateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n // Get the app repo which is a singleton\r\n private get appRepo() {\r\n return this.getCachedSingleton<AppRepoEntity>(AppRepoEntity.type);\r\n }\r\n\r\n // Required equality check method for view models\r\n vmsAreEqual(a: HostStateVM, b: HostStateVM): boolean {\r\n if (a.id !== b.id) return false;\r\n if (a.name !== b.name) return false;\r\n if (a.isActive !== b.isActive) return false;\r\n if (a.appName !== b.appName) return false;\r\n if (a.canBumpBackwards !== b.canBumpBackwards) return false;\r\n if (a.canBumpForward !== b.canBumpForward) return false;\r\n if (a.index !== b.index) return false;\r\n\r\n // Deep comparison for the data object\r\n const aData = JSON.stringify(a.data);\r\n const bData = JSON.stringify(b.data);\r\n if (aData !== bData) return false;\r\n\r\n return true;\r\n }\r\n\r\n // Handler for entity changes\r\n private onEntityChange = (): void => {\r\n this.updateViewModel();\r\n };\r\n\r\n // Handler for state machine changes\r\n private onStateMachineChange = (): void => {\r\n this.updateViewModel();\r\n };\r\n\r\n private updateViewModel(): void {\r\n const entity = this.hostStateEntity;\r\n const stateMachine = this.hostStateMachine;\r\n const appRepo = this.appRepo;\r\n\r\n if (!entity) {\r\n this.doUpdateView(HostStatePM.defaultVM);\r\n return;\r\n }\r\n\r\n // Check if this state is the active one in the state machine\r\n const isActive = stateMachine?.activeState === entity.id;\r\n\r\n // Look up the app name using the appID from the state entity\r\n let appName = \"\";\r\n if (appRepo && entity.appID) {\r\n const app = appRepo.getApp(entity.appID);\r\n if (app) {\r\n appName = app.name;\r\n }\r\n }\r\n\r\n // Determine if the state can be bumped backwards or forwards\r\n let canBumpBackwards = false;\r\n let canBumpForward = false;\r\n let index = -1;\r\n\r\n if (stateMachine) {\r\n const stateIndex = stateMachine.getStateIndex(entity.id);\r\n if (stateIndex !== undefined) {\r\n index = stateIndex;\r\n // Can bump backwards if index > 0\r\n canBumpBackwards = stateIndex > 0;\r\n // Can bump forward if index < length-1\r\n canBumpForward = stateIndex < stateMachine.stateCount - 1;\r\n }\r\n }\r\n\r\n // Create a new immutable view model based on entity state\r\n const newVM: HostStateVM = {\r\n id: entity.id,\r\n name: entity.name,\r\n data: entity.stateData,\r\n isActive: isActive || false,\r\n appName,\r\n canBumpBackwards,\r\n canBumpForward,\r\n index\r\n };\r\n\r\n // Update the view with the new view model\r\n this.doUpdateView(newVM);\r\n }\r\n\r\n dispose = (): void => {\r\n this.hostStateEntity?.removeChangeObserver(this.onEntityChange);\r\n this.hostStateMachine?.removeChangeObserver(this.onStateMachineChange);\r\n super.dispose();\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStatePM.type);\r\n\r\n // Subscribe to entity changes\r\n this.hostStateEntity?.addChangeObserver(this.onEntityChange);\r\n\r\n // Subscribe to state machine changes\r\n this.hostStateMachine?.addChangeObserver(this.onStateMachineChange);\r\n\r\n // Initialize the view model\r\n this.updateViewModel();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HostStatePM.js","sourceRoot":"","sources":["../../../../src/StateMachine/PMs/HostStatePM.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectPM, AppObjectRepo } from \"@vived/core\";\r\nimport { AppRepoEntity } from \"../../Apps/Entities/AppRepo\";\r\nimport { HostStateEntity, StreamState } from \"../Entities/HostStateEntity\";\r\nimport { HostStateMachine } from \"../Entities/HostStateMachine\";\r\n\r\nexport interface HostStateVM {\r\n readonly id: string;\r\n readonly name: string;\r\n readonly data: object;\r\n readonly isActive: boolean;\r\n readonly appName: string;\r\n readonly canBumpBackwards: boolean;\r\n readonly canBumpForward: boolean;\r\n readonly index: number;\r\n readonly streamState: StreamState;\r\n}\r\n\r\nexport abstract class HostStatePM extends AppObjectPM<HostStateVM> {\r\n static readonly type = \"HostStatePM\";\r\n\r\n // Default view model\r\n static readonly defaultVM: HostStateVM = {\r\n id: \"\",\r\n name: \"\",\r\n data: {},\r\n isActive: false,\r\n appName: \"\",\r\n canBumpBackwards: false,\r\n canBumpForward: false,\r\n index: -1,\r\n streamState: StreamState.INIT\r\n };\r\n\r\n // Non-singleton getter pattern\r\n static getById(\r\n id: string,\r\n appObjects: AppObjectRepo\r\n ): HostStatePM | undefined {\r\n return appObjects.get(id)?.getComponent<HostStatePM>(HostStatePM.type);\r\n }\r\n}\r\n\r\nexport function makeHostStatePM(appObject: AppObject): HostStatePM {\r\n return new HostStatePMImp(appObject);\r\n}\r\n\r\nclass HostStatePMImp extends HostStatePM {\r\n // Get the entity from the same AppObject\r\n private get hostStateEntity() {\r\n return this.getCachedLocalComponent<HostStateEntity>(HostStateEntity.type);\r\n }\r\n\r\n // Get the state machine which is a singleton\r\n private get hostStateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n // Get the app repo which is a singleton\r\n private get appRepo() {\r\n return this.getCachedSingleton<AppRepoEntity>(AppRepoEntity.type);\r\n }\r\n\r\n // Required equality check method for view models\r\n vmsAreEqual(a: HostStateVM, b: HostStateVM): boolean {\r\n if (a.id !== b.id) return false;\r\n if (a.name !== b.name) return false;\r\n if (a.isActive !== b.isActive) return false;\r\n if (a.appName !== b.appName) return false;\r\n if (a.canBumpBackwards !== b.canBumpBackwards) return false;\r\n if (a.canBumpForward !== b.canBumpForward) return false;\r\n if (a.index !== b.index) return false;\r\n if (a.streamState !== b.streamState) return false;\r\n\r\n // Deep comparison for the data object\r\n const aData = JSON.stringify(a.data);\r\n const bData = JSON.stringify(b.data);\r\n if (aData !== bData) return false;\r\n\r\n return true;\r\n }\r\n\r\n // Handler for entity changes\r\n private onEntityChange = (): void => {\r\n this.updateViewModel();\r\n };\r\n\r\n // Handler for state machine changes\r\n private onStateMachineChange = (): void => {\r\n this.updateViewModel();\r\n };\r\n\r\n private updateViewModel(): void {\r\n const entity = this.hostStateEntity;\r\n const stateMachine = this.hostStateMachine;\r\n const appRepo = this.appRepo;\r\n\r\n if (!entity) {\r\n this.doUpdateView(HostStatePM.defaultVM);\r\n return;\r\n }\r\n\r\n // Check if this state is the active one in the state machine\r\n const isActive = stateMachine?.activeState === entity.id;\r\n\r\n // Look up the app name using the appID from the state entity\r\n let appName = \"\";\r\n if (appRepo && entity.appID) {\r\n const app = appRepo.getApp(entity.appID);\r\n if (app) {\r\n appName = app.name;\r\n }\r\n }\r\n\r\n // Determine if the state can be bumped backwards or forwards\r\n let canBumpBackwards = false;\r\n let canBumpForward = false;\r\n let index = -1;\r\n\r\n if (stateMachine) {\r\n const stateIndex = stateMachine.getStateIndex(entity.id);\r\n if (stateIndex !== undefined) {\r\n index = stateIndex;\r\n // Can bump backwards if index > 0\r\n canBumpBackwards = stateIndex > 0;\r\n // Can bump forward if index < length-1\r\n canBumpForward = stateIndex < stateMachine.stateCount - 1;\r\n }\r\n }\r\n\r\n // Create a new immutable view model based on entity state\r\n const newVM: HostStateVM = {\r\n id: entity.id,\r\n name: entity.name,\r\n data: entity.stateData,\r\n isActive: isActive || false,\r\n appName,\r\n canBumpBackwards,\r\n canBumpForward,\r\n index,\r\n streamState: entity.streamState\r\n };\r\n\r\n // Update the view with the new view model\r\n this.doUpdateView(newVM);\r\n }\r\n\r\n dispose = (): void => {\r\n this.hostStateEntity?.removeChangeObserver(this.onEntityChange);\r\n this.hostStateMachine?.removeChangeObserver(this.onStateMachineChange);\r\n super.dispose();\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostStatePM.type);\r\n\r\n // Subscribe to entity changes\r\n this.hostStateEntity?.addChangeObserver(this.onEntityChange);\r\n\r\n // Subscribe to state machine changes\r\n this.hostStateMachine?.addChangeObserver(this.onStateMachineChange);\r\n\r\n // Initialize the view model\r\n this.updateViewModel();\r\n }\r\n}\r\n"]}
@@ -11,7 +11,7 @@ export function makeDeleteStateUC(appObject) {
11
11
  }
12
12
  class DeleteStateUCImp extends DeleteStateUC {
13
13
  get stateMachine() {
14
- return this.getCachedLocalComponent(HostStateMachine.type);
14
+ return this.getCachedSingleton(HostStateMachine.type);
15
15
  }
16
16
  constructor(appObject) {
17
17
  super(appObject, DeleteStateUC.type);
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteStateUC.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/DeleteStateUC.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAgB,aAAc,SAAQ,WAAW;IAGrD,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;;AAJM,kBAAI,GAAG,eAAe,CAAC;AAShC,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAiB,SAAQ,aAAa;IAC1C,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,uBAAuB,CACjC,gBAAgB,CAAC,IAAI,CACtB,CAAC;IACJ,CAAC;IAcD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAbvC,gBAAW,GAAG,CAAC,EAAU,EAAQ,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;QACH,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\n\r\nexport abstract class DeleteStateUC extends AppObjectUC {\r\n static type = \"DeleteStateUC\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DeleteStateUC>(DeleteStateUC.type, appObjects);\r\n }\r\n\r\n abstract deleteState(id: string): void;\r\n}\r\n\r\nexport function makeDeleteStateUC(appObject: AppObject): DeleteStateUC {\r\n return new DeleteStateUCImp(appObject);\r\n}\r\n\r\nclass DeleteStateUCImp extends DeleteStateUC {\r\n private get stateMachine() {\r\n return this.getCachedLocalComponent<HostStateMachine>(\r\n HostStateMachine.type\r\n );\r\n }\r\n\r\n deleteState = (id: string): void => {\r\n if (!this.stateMachine) return;\r\n\r\n const state = this.stateMachine.getStateByID(id);\r\n if (this.stateMachine.hasState(id)) {\r\n this.stateMachine.deleteState(id);\r\n } else {\r\n this.warn(\"Unable to find state to delete\");\r\n return;\r\n }\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DeleteStateUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DeleteStateUC.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/DeleteStateUC.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAgB,aAAc,SAAQ,WAAW;IAGrD,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;;AAJM,kBAAI,GAAG,eAAe,CAAC;AAShC,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAiB,SAAQ,aAAa;IAC1C,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAcD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAbvC,gBAAW,GAAG,CAAC,EAAU,EAAQ,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;QACH,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\n\r\nexport abstract class DeleteStateUC extends AppObjectUC {\r\n static type = \"DeleteStateUC\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DeleteStateUC>(DeleteStateUC.type, appObjects);\r\n }\r\n\r\n abstract deleteState(id: string): void;\r\n}\r\n\r\nexport function makeDeleteStateUC(appObject: AppObject): DeleteStateUC {\r\n return new DeleteStateUCImp(appObject);\r\n}\r\n\r\nclass DeleteStateUCImp extends DeleteStateUC {\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n deleteState = (id: string): void => {\r\n if (!this.stateMachine) return;\r\n\r\n const state = this.stateMachine.getStateByID(id);\r\n if (this.stateMachine.hasState(id)) {\r\n this.stateMachine.deleteState(id);\r\n } else {\r\n this.warn(\"Unable to find state to delete\");\r\n return;\r\n }\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DeleteStateUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
@@ -11,7 +11,7 @@ export function makeDuplicateStateUC(appObject) {
11
11
  }
12
12
  class DuplicateStateUCImp extends DuplicateStateUC {
13
13
  get stateMachine() {
14
- return this.getCachedLocalComponent(HostStateMachine.type);
14
+ return this.getCachedSingleton(HostStateMachine.type);
15
15
  }
16
16
  constructor(appObject) {
17
17
  super(appObject, DuplicateStateUC.type);
@@ -1 +1 @@
1
- {"version":3,"file":"DuplicateStateUC.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/DuplicateStateUC.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAgB,gBAAiB,SAAQ,WAAW;IAGxD,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,gBAAgB,CAAC,IAAI,EACrB,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,qBAAI,GAAG,kBAAkB,CAAC;AAYnC,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,mBAAoB,SAAQ,gBAAgB;IAChD,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,uBAAuB,CACjC,gBAAgB,CAAC,IAAI,CACtB,CAAC;IACJ,CAAC;IAkBD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAjB1C,mBAAc,GAAG,CAAC,EAAU,EAAQ,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;YAC9B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\n\r\nexport abstract class DuplicateStateUC extends AppObjectUC {\r\n static type = \"DuplicateStateUC\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DuplicateStateUC>(\r\n DuplicateStateUC.type,\r\n appObjects\r\n );\r\n }\r\n\r\n abstract duplicateState(id: string): void;\r\n}\r\n\r\nexport function makeDuplicateStateUC(appObject: AppObject): DuplicateStateUC {\r\n return new DuplicateStateUCImp(appObject);\r\n}\r\n\r\nclass DuplicateStateUCImp extends DuplicateStateUC {\r\n private get stateMachine() {\r\n return this.getCachedLocalComponent<HostStateMachine>(\r\n HostStateMachine.type\r\n );\r\n }\r\n\r\n duplicateState = (id: string): void => {\r\n if (!this.stateMachine) return;\r\n\r\n const state = this.stateMachine.getStateByID(id);\r\n if (!state) {\r\n this.warn(\"Unable to find state to duplicate\");\r\n return;\r\n }\r\n\r\n const newState = this.stateMachine.createNewState();\r\n const dto = state.getDTO();\r\n dto.id = newState.id;\r\n dto.name = dto.name + \" Copy\";\r\n newState.setDTO(dto);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DuplicateStateUC.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DuplicateStateUC.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/DuplicateStateUC.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAgB,gBAAiB,SAAQ,WAAW;IAGxD,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,gBAAgB,CAAC,IAAI,EACrB,UAAU,CACX,CAAC;IACJ,CAAC;;AAPM,qBAAI,GAAG,kBAAkB,CAAC;AAYnC,MAAM,UAAU,oBAAoB,CAAC,SAAoB;IACvD,OAAO,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,mBAAoB,SAAQ,gBAAgB;IAChD,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAkBD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAjB1C,mBAAc,GAAG,CAAC,EAAU,EAAQ,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;YAC9B,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\n\r\nexport abstract class DuplicateStateUC extends AppObjectUC {\r\n static type = \"DuplicateStateUC\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DuplicateStateUC>(\r\n DuplicateStateUC.type,\r\n appObjects\r\n );\r\n }\r\n\r\n abstract duplicateState(id: string): void;\r\n}\r\n\r\nexport function makeDuplicateStateUC(appObject: AppObject): DuplicateStateUC {\r\n return new DuplicateStateUCImp(appObject);\r\n}\r\n\r\nclass DuplicateStateUCImp extends DuplicateStateUC {\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n duplicateState = (id: string): void => {\r\n if (!this.stateMachine) return;\r\n\r\n const state = this.stateMachine.getStateByID(id);\r\n if (!state) {\r\n this.warn(\"Unable to find state to duplicate\");\r\n return;\r\n }\r\n\r\n const newState = this.stateMachine.createNewState();\r\n const dto = state.getDTO();\r\n dto.id = newState.id;\r\n dto.name = dto.name + \" Copy\";\r\n newState.setDTO(dto);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DuplicateStateUC.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SavePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAgB,sBAAuB,SAAQ,WAAW;IAK9D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AATM,2BAAI,GAAG,wBAAwB,CAAC;AAYzC,MAAM,UAAU,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AASD,MAAM,yBAA0B,SAAQ,sBAAsB;IAC5D,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IA4BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QA3BhD,gBAAW,GAAG,GAAS,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,MAAM,GAAuB,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,GAAqB;wBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,KAAK,CAAC,SAAS;wBACrB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB,CAAC;oBAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC,QAAQ,GAAG,uBAAuB,CAAC;YACrC,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\n\r\nexport abstract class SavePersistentStatesUC extends AppObjectUC {\r\n static type = \"SavePersistentStatesUC\";\r\n\r\n abstract saveLocally(): void;\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<SavePersistentStatesUC>(\r\n SavePersistentStatesUC.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeSavePersistentStatesUC(\r\n appObject: AppObject\r\n): SavePersistentStatesUC {\r\n return new SavePersistentStatesUCImp(appObject);\r\n}\r\n\r\ninterface SandboxStateData {\r\n id: string;\r\n name: string;\r\n data: object;\r\n assets: string[];\r\n}\r\n\r\nclass SavePersistentStatesUCImp extends SavePersistentStatesUC {\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n saveLocally = (): void => {\r\n if (!this.stateMachine) return;\r\n\r\n const states: SandboxStateData[] = [];\r\n this.stateMachine.states.forEach((stateID) => {\r\n const state = this.stateMachine?.getStateByID(stateID);\r\n if (state) {\r\n const rVal: SandboxStateData = {\r\n assets: state.assets,\r\n data: state.stateData,\r\n id: state.id,\r\n name: state.name\r\n };\r\n\r\n states.push(rVal);\r\n }\r\n });\r\n\r\n const statesData = JSON.stringify(states);\r\n const a = document.createElement(\"a\");\r\n const file = new Blob([statesData], { type: \"text/plain\" });\r\n a.href = URL.createObjectURL(file);\r\n a.download = \"persistentStates.json\";\r\n a.click();\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SavePersistentStatesUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SavePersistentStates.js","sourceRoot":"","sources":["../../../../src/StateMachine/UCs/SavePersistentStates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGrB,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,OAAgB,sBAAuB,SAAQ,WAAW;IAK9D,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAC1B,sBAAsB,CAAC,IAAI,EAC3B,UAAU,CACX,CAAC;IACJ,CAAC;;AATM,2BAAI,GAAG,wBAAwB,CAAC;AAYzC,MAAM,UAAU,0BAA0B,CACxC,SAAoB;IAEpB,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,yBAA0B,SAAQ,sBAAsB;IAC5D,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IA4BD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QA3BhD,gBAAW,GAAG,GAAS,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE/B,MAAM,MAAM,GAAuB,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,GAAqB;wBAC7B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,IAAI,EAAE,KAAK,CAAC,SAAS;wBACrB,EAAE,EAAE,KAAK,CAAC,EAAE;wBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;qBACjB,CAAC;oBAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC,QAAQ,GAAG,uBAAuB,CAAC;YACrC,CAAC,CAAC,KAAK,EAAE,CAAC;QACZ,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectRepo,\r\n AppObjectUC\r\n} from \"@vived/core\";\r\nimport { HostStateMachine } from \"../Entities\";\r\nimport { SandboxStateData } from \"./setSandboxStatesFromData\";\r\n\r\nexport abstract class SavePersistentStatesUC extends AppObjectUC {\r\n static type = \"SavePersistentStatesUC\";\r\n\r\n abstract saveLocally(): void;\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<SavePersistentStatesUC>(\r\n SavePersistentStatesUC.type,\r\n appObjects\r\n );\r\n }\r\n}\r\n\r\nexport function makeSavePersistentStatesUC(\r\n appObject: AppObject\r\n): SavePersistentStatesUC {\r\n return new SavePersistentStatesUCImp(appObject);\r\n}\r\n\r\nclass SavePersistentStatesUCImp extends SavePersistentStatesUC {\r\n private get stateMachine() {\r\n return this.getCachedSingleton<HostStateMachine>(HostStateMachine.type);\r\n }\r\n\r\n saveLocally = (): void => {\r\n if (!this.stateMachine) return;\r\n\r\n const states: SandboxStateData[] = [];\r\n this.stateMachine.states.forEach((stateID) => {\r\n const state = this.stateMachine?.getStateByID(stateID);\r\n if (state) {\r\n const rVal: SandboxStateData = {\r\n assets: state.assets,\r\n data: state.stateData,\r\n id: state.id,\r\n name: state.name\r\n };\r\n\r\n states.push(rVal);\r\n }\r\n });\r\n\r\n const statesData = JSON.stringify(states);\r\n const a = document.createElement(\"a\");\r\n const file = new Blob([statesData], { type: \"text/plain\" });\r\n a.href = URL.createObjectURL(file);\r\n a.download = \"persistentStates.json\";\r\n a.click();\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, SavePersistentStatesUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
package/dist/esm/index.js CHANGED
@@ -2,6 +2,7 @@ export * from "./Apps";
2
2
  export * from "./AppSandbox";
3
3
  export * from "./AssetPlugin";
4
4
  export * from "./Assets";
5
+ export * from "./Cache";
5
6
  export * from "./ChallengeResults";
6
7
  export * from "./Dialog";
7
8
  export * from "./Dispatcher";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC","sourcesContent":["export * from \"./Apps\";\r\nexport * from \"./AppSandbox\";\r\nexport * from \"./AssetPlugin\";\r\nexport * from \"./Assets\";\r\nexport * from \"./ChallengeResults\";\r\nexport * from \"./Dialog\";\r\nexport * from \"./Dispatcher\";\r\nexport * from \"./Events\";\r\nexport * from \"./Handler\";\r\nexport * from \"./Logger\";\r\nexport * from \"./Snackbar\";\r\nexport * from \"./StateMachine\";\r\nexport * from \"./ThemeColors\";\r\nexport * from \"./VivedAPI\";\r\nexport * from \"./ZSpaceHost\";\r\n\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC","sourcesContent":["export * from \"./Apps\";\r\nexport * from \"./AppSandbox\";\r\nexport * from \"./AssetPlugin\";\r\nexport * from \"./Assets\";\r\nexport * from \"./Cache\";\r\nexport * from \"./ChallengeResults\";\r\nexport * from \"./Dialog\";\r\nexport * from \"./Dispatcher\";\r\nexport * from \"./Events\";\r\nexport * from \"./Handler\";\r\nexport * from \"./Logger\";\r\nexport * from \"./Snackbar\";\r\nexport * from \"./StateMachine\";\r\nexport * from \"./ThemeColors\";\r\nexport * from \"./VivedAPI\";\r\nexport * from \"./ZSpaceHost\";\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GetAssetBlobURLUC.d.ts","sourceRoot":"","sources":["../../../../src/Assets/UCs/GetAssetBlobURLUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,aAAa,CAAC;AAMrB,8BAAsB,iBAAkB,SAAQ,WAAW;IACzD,MAAM,CAAC,IAAI,SAAuB;IAElC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE1D,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS;CAMrE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,iBAAiB,CAE7E"}
1
+ {"version":3,"file":"GetAssetBlobURLUC.d.ts","sourceRoot":"","sources":["../../../../src/Assets/UCs/GetAssetBlobURLUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,aAAa,CAAC;AAOrB,8BAAsB,iBAAkB,SAAQ,WAAW;IACzD,MAAM,CAAC,IAAI,SAAuB;IAElC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE1D,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS;CAMrE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,iBAAiB,CAE7E"}
@@ -0,0 +1,3 @@
1
+ import { AppObjectRepo } from "@vived/core";
2
+ export declare function clearCache(appObjects: AppObjectRepo): Promise<void>;
3
+ //# sourceMappingURL=clearCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearCache.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Controllers/clearCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,wBAAgB,UAAU,CAAC,UAAU,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnE"}
@@ -0,0 +1,2 @@
1
+ export * from "./clearCache";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Controllers/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { AppObject, AppObjectEntity, AppObjectRepo } from "@vived/core";
2
+ /**
3
+ * AssetCacheEntity provides functionality for caching binary assets in the application.
4
+ * It serves as a specialized cache storage for assets such as images, videos, or other binary content.
5
+ * This entity is implemented as a singleton component and requires a CacheEntity instance to function.
6
+ */
7
+ export declare abstract class AssetCacheEntity extends AppObjectEntity {
8
+ static readonly type = "AssetCacheEntity";
9
+ /**
10
+ * Retrieves an asset from the cache by its unique identifier.
11
+ * @param assetId - The unique identifier of the asset to retrieve
12
+ * @returns A Promise that resolves to the cached Blob if found, otherwise undefined
13
+ */
14
+ abstract getAsset(assetId: string): Promise<Blob | undefined>;
15
+ /**
16
+ * Stores an asset in the cache with the specified identifier.
17
+ * @param assetId - The unique identifier to associate with the asset
18
+ * @param content - The binary content to cache as a Blob
19
+ * @param contentType - Optional MIME type of the content
20
+ * @returns A Promise that resolves when the asset has been stored
21
+ */
22
+ abstract storeAsset(assetId: string, content: Blob, contentType?: string): Promise<void>;
23
+ /**
24
+ * Checks if an asset exists in the cache.
25
+ * @param assetId - The unique identifier of the asset to check
26
+ * @returns A Promise that resolves to true if the asset exists, otherwise false
27
+ */
28
+ abstract hasAsset(assetId: string): Promise<boolean>;
29
+ /**
30
+ * Removes an asset from the cache.
31
+ * @param assetId - The unique identifier of the asset to invalidate
32
+ * @returns A Promise that resolves when the asset has been invalidated
33
+ */
34
+ abstract invalidateAsset(assetId: string): Promise<void>;
35
+ /**
36
+ * Gets the singleton instance of AssetCacheEntity from the app objects repository.
37
+ * @param appObjects - The app objects repository
38
+ * @returns The AssetCacheEntity instance if found, otherwise undefined
39
+ */
40
+ static get(appObjects: AppObjectRepo): AssetCacheEntity | undefined;
41
+ }
42
+ export declare function makeAssetCacheEntity(appObject: AppObject): AssetCacheEntity;
43
+ //# sourceMappingURL=AssetCacheEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetCacheEntity.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Entities/AssetCacheEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EAEd,MAAM,aAAa,CAAC;AAGrB;;;;GAIG;AACH,8BAAsB,gBAAiB,SAAQ,eAAe;IAC5D,MAAM,CAAC,QAAQ,CAAC,IAAI,sBAAsB;IAE1C;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAE7D;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,IAAI,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAEhB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpD;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAExD;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS;CAMpE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAE3E"}
@@ -0,0 +1,57 @@
1
+ import { AppObject, AppObjectEntity, AppObjectRepo } from "@vived/core";
2
+ /**
3
+ * Abstract entity that provides caching functionality for the application.
4
+ * CacheEntity is a singleton component that stores key-value pairs with optional metadata.
5
+ * It provides methods for storing, retrieving, checking existence, and invalidating cached values.
6
+ */
7
+ export declare abstract class CacheEntity extends AppObjectEntity {
8
+ static readonly type = "CacheEntity";
9
+ /**
10
+ * Retrieves a value from the cache by its key.
11
+ * @param key - The unique identifier for the cached item
12
+ * @returns Promise resolving to an object containing the cached value and optional metadata
13
+ * @throws Error if the key does not exist in the cache
14
+ */
15
+ abstract get(key: string): Promise<{
16
+ value: any;
17
+ metadata?: Record<string, any>;
18
+ }>;
19
+ /**
20
+ * Stores a value in the cache with an associated key and optional metadata.
21
+ * @param key - The unique identifier for the cached item
22
+ * @param value - The value to cache
23
+ * @param metadata - Optional metadata associated with the cached value
24
+ * @returns Promise that resolves when the value has been stored
25
+ */
26
+ abstract store(key: string, value: any, metadata?: Record<string, any>): Promise<void>;
27
+ /**
28
+ * Checks if a key exists in the cache.
29
+ * @param key - The key to check
30
+ * @returns Promise resolving to boolean indicating if the key exists
31
+ */
32
+ abstract has(key: string): Promise<boolean>;
33
+ /**
34
+ * Removes an item from the cache by its key.
35
+ * @param key - The key to remove
36
+ * @returns Promise that resolves when the key has been invalidated
37
+ */
38
+ abstract invalidate(key: string): Promise<void>;
39
+ /**
40
+ * Removes all items from the cache.
41
+ * @returns Promise that resolves when the cache has been cleared
42
+ */
43
+ abstract clear(): Promise<void>;
44
+ /**
45
+ * Gets the number of items in the cache.
46
+ * @returns Promise resolving to the number of cached items
47
+ */
48
+ abstract size(): Promise<number>;
49
+ /**
50
+ * Gets the singleton instance of CacheEntity from the AppObjectRepo.
51
+ * @param appObjects - The application object repository
52
+ * @returns The CacheEntity instance or undefined if not registered
53
+ */
54
+ static get(appObjects: AppObjectRepo): CacheEntity | undefined;
55
+ }
56
+ export declare function makeCacheEntity(appObject: AppObject): CacheEntity;
57
+ //# sourceMappingURL=CacheEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheEntity.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Entities/CacheEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EAEd,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,8BAAsB,WAAY,SAAQ,eAAe;IACvD,MAAM,CAAC,QAAQ,CAAC,IAAI,iBAAiB;IAErC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CACV,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;IAE1D;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CACZ,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,GAAG,EACV,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC;IAEhB;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAE3C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/C;;;OAGG;IACH,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAEhC;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS;CAG/D;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,CAEjE"}
@@ -0,0 +1,64 @@
1
+ import { AppObject, AppObjectEntity, AppObjectRepo } from "@vived/core";
2
+ /**
3
+ * Entity responsible for managing script caching operations.
4
+ * Provides functionality to store, retrieve, check existence, and invalidate scripts
5
+ * in the cache based on app ID, version, and script path.
6
+ */
7
+ export declare abstract class ScriptCacheEntity extends AppObjectEntity {
8
+ static readonly type = "ScriptCacheEntity";
9
+ /**
10
+ * Retrieves a script from the cache.
11
+ * @param appId - Unique identifier of the app
12
+ * @param version - Version of the app
13
+ * @param scriptPath - Path of the script within the app
14
+ * @returns Promise with the script content if found, undefined otherwise
15
+ */
16
+ abstract getScript(appId: string, version: string, scriptPath: string): Promise<string | undefined>;
17
+ /**
18
+ * Stores a script in the cache.
19
+ * @param appId - Unique identifier of the app
20
+ * @param version - Version of the app
21
+ * @param scriptPath - Path of the script within the app
22
+ * @param content - Content of the script to store
23
+ */
24
+ abstract storeScript(appId: string, version: string, scriptPath: string, content: string): Promise<void>;
25
+ /**
26
+ * Checks if a script exists in the cache.
27
+ * @param appId - Unique identifier of the app
28
+ * @param version - Version of the app
29
+ * @param scriptPath - Path of the script within the app
30
+ * @returns Promise resolving to true if script exists, false otherwise
31
+ */
32
+ abstract hasScript(appId: string, version: string, scriptPath: string): Promise<boolean>;
33
+ /**
34
+ * Invalidates scripts in the cache.
35
+ * Can invalidate a specific script, all scripts for a version, or all scripts for an app.
36
+ * @param appId - Unique identifier of the app
37
+ * @param version - Optional version of the app
38
+ * @param scriptPath - Optional path of the script within the app
39
+ */
40
+ abstract invalidateScript(appId: string, version?: string, scriptPath?: string): Promise<void>;
41
+ /**
42
+ * Extracts app ID, version, and script path from a script URL.
43
+ * @param url - The URL to parse
44
+ * @returns Object containing extracted appId, version, and scriptPath
45
+ */
46
+ abstract extractScriptInfo(url: string): {
47
+ appId: string;
48
+ version: string;
49
+ scriptPath: string;
50
+ };
51
+ /**
52
+ * Gets the singleton ScriptCacheEntity instance from the AppObjectRepo.
53
+ * @param appObjects - Repository of application objects
54
+ * @returns ScriptCacheEntity instance if registered, undefined otherwise
55
+ */
56
+ static get(appObjects: AppObjectRepo): ScriptCacheEntity | undefined;
57
+ }
58
+ /**
59
+ * Factory function to create a new ScriptCacheEntity instance.
60
+ * @param appObject - The parent AppObject
61
+ * @returns A new ScriptCacheEntity instance
62
+ */
63
+ export declare function makeScriptCacheEntity(appObject: AppObject): ScriptCacheEntity;
64
+ //# sourceMappingURL=ScriptCacheEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScriptCacheEntity.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Entities/ScriptCacheEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EAEd,MAAM,aAAa,CAAC;AAGrB;;;;GAIG;AACH,8BAAsB,iBAAkB,SAAQ,eAAe;IAC7D,MAAM,CAAC,QAAQ,CAAC,IAAI,uBAAuB;IAE3C;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAE9B;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAEnB;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAEhB;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;QACvC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS;CAMrE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,iBAAiB,CAE7E"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Cache Entities
3
+ *
4
+ * Core domain models for the Cache feature
5
+ */
6
+ export * from "./CacheEntity";
7
+ export * from "./ScriptCacheEntity";
8
+ export * from "./AssetCacheEntity";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Entities/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./setupCache";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Factories/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { AppObjectRepo } from "@vived/core";
2
+ /**
3
+ * Sets up the Cache feature components
4
+ */
5
+ export declare function setupCache(appObjects: AppObjectRepo): void;
6
+ //# sourceMappingURL=setupCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupCache.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Factories/setupCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,CAc1D"}
@@ -0,0 +1,13 @@
1
+ import { AppObject, AppObjectRepo } from "@vived/core";
2
+ import { CacheEntity } from "../Entities/CacheEntity";
3
+ export declare class MockCacheEntity extends CacheEntity {
4
+ get: jest.Mock<any, any, any>;
5
+ store: jest.Mock<any, any, any>;
6
+ has: jest.Mock<any, any, any>;
7
+ invalidate: jest.Mock<any, any, any>;
8
+ clear: jest.Mock<any, any, any>;
9
+ size: jest.Mock<any, any, any>;
10
+ constructor(appObject: AppObject);
11
+ }
12
+ export declare function makeMockCacheEntity(appObjects: AppObjectRepo): MockCacheEntity;
13
+ //# sourceMappingURL=MockCacheEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockCacheEntity.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Mocks/MockCacheEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,GAAG,2BAAuD;IAC1D,KAAK,2BAA0C;IAC/C,GAAG,2BAAqC;IACxC,UAAU,2BAA0C;IACpD,KAAK,2BAA0C;IAC/C,IAAI,2BAAkC;gBAE1B,SAAS,EAAE,SAAS;CAIjC;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,mBAE5D"}
@@ -0,0 +1,8 @@
1
+ import { AppObject, AppObjectRepo } from "@vived/core";
2
+ import { GetAssetFromCacheUC } from "../UCs/GetAssetFromCacheUC";
3
+ export declare class MockGetAssetFromCacheUC extends GetAssetFromCacheUC {
4
+ getAsset: jest.Mock<any, any, any>;
5
+ constructor(appObject: AppObject);
6
+ }
7
+ export declare function makeMockGetAssetFromCacheUC(appObjects: AppObjectRepo): MockGetAssetFromCacheUC;
8
+ //# sourceMappingURL=MockGetAssetFromCacheUC.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockGetAssetFromCacheUC.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Mocks/MockGetAssetFromCacheUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,qBAAa,uBAAwB,SAAQ,mBAAmB;IAC9D,QAAQ,2BAEiE;gBAE7D,SAAS,EAAE,SAAS;CAIjC;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,aAAa,2BAIpE"}
@@ -0,0 +1,9 @@
1
+ import { AppObject, AppObjectRepo } from "@vived/core";
2
+ import { GetScriptFromCacheUC } from "../UCs/GetScriptFromCacheUC";
3
+ export declare class MockGetScriptFromCacheUC extends GetScriptFromCacheUC {
4
+ getScript: jest.Mock<any, any, any>;
5
+ extractScriptInfo: jest.Mock<any, any, any>;
6
+ constructor(appObject: AppObject);
7
+ }
8
+ export declare function makeMockGetScriptFromCacheUC(appObjects: AppObjectRepo): MockGetScriptFromCacheUC;
9
+ //# sourceMappingURL=MockGetScriptFromCacheUC.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockGetScriptFromCacheUC.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Mocks/MockGetScriptFromCacheUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,qBAAa,wBAAyB,SAAQ,oBAAoB;IAChE,SAAS,2BAA6D;IACtE,iBAAiB,2BAId;gBAES,SAAS,EAAE,SAAS;CAIjC;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,aAAa,4BAIrE"}
@@ -0,0 +1,8 @@
1
+ import { AppObject, AppObjectRepo } from "@vived/core";
2
+ import { StoreAssetInCacheUC } from "../UCs/StoreAssetInCacheUC";
3
+ export declare class MockStoreAssetInCacheUC extends StoreAssetInCacheUC {
4
+ storeAsset: jest.Mock<any, any, any>;
5
+ constructor(appObject: AppObject);
6
+ }
7
+ export declare function makeMockStoreAssetInCacheUC(appObjects: AppObjectRepo): MockStoreAssetInCacheUC;
8
+ //# sourceMappingURL=MockStoreAssetInCacheUC.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockStoreAssetInCacheUC.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Mocks/MockStoreAssetInCacheUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,qBAAa,uBAAwB,SAAQ,mBAAmB;IAC9D,UAAU,2BAA0C;gBAExC,SAAS,EAAE,SAAS;CAIjC;AAED,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,aAAa,2BAIpE"}
@@ -0,0 +1,9 @@
1
+ import { AppObject, AppObjectRepo } from "@vived/core";
2
+ import { StoreScriptInCacheUC } from "../UCs/StoreScriptInCacheUC";
3
+ export declare class MockStoreScriptInCacheUC extends StoreScriptInCacheUC {
4
+ storeScript: jest.Mock<any, any, any>;
5
+ extractScriptInfo: jest.Mock<any, any, any>;
6
+ constructor(appObject: AppObject);
7
+ }
8
+ export declare function makeMockStoreScriptInCacheUC(appObjects: AppObjectRepo): MockStoreScriptInCacheUC;
9
+ //# sourceMappingURL=MockStoreScriptInCacheUC.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockStoreScriptInCacheUC.d.ts","sourceRoot":"","sources":["../../../../src/Cache/Mocks/MockStoreScriptInCacheUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,qBAAa,wBAAyB,SAAQ,oBAAoB;IAChE,WAAW,2BAA0C;IACrD,iBAAiB,2BAId;gBAES,SAAS,EAAE,SAAS;CAIjC;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,aAAa,4BAIrE"}