@vived/host 5.8.1 → 5.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/cjs/AppSandbox/Adapters/devModeAdapter.js.map +1 -1
  2. package/dist/cjs/AppSandbox/Adapters/index.js.map +1 -1
  3. package/dist/cjs/AppSandbox/Controller/index.js.map +1 -1
  4. package/dist/cjs/AppSandbox/Controller/setDevMode.js.map +1 -1
  5. package/dist/cjs/AppSandbox/Entities/AppSandboxEntity.js.map +1 -1
  6. package/dist/cjs/AppSandbox/Factories/AppSandboxFeatureFactory.js.map +1 -1
  7. package/dist/cjs/AppSandbox/Factories/setupAppSandbox.js.map +1 -1
  8. package/dist/cjs/AppSandbox/Mocks/DevModePMMock.js.map +1 -1
  9. package/dist/cjs/AppSandbox/Mocks/MockSetDevModeUC.js.map +1 -1
  10. package/dist/cjs/AppSandbox/Mocks/index.js.map +1 -1
  11. package/dist/cjs/AppSandbox/PMs/DevModePM.js.map +1 -1
  12. package/dist/cjs/AppSandbox/PMs/index.js.map +1 -1
  13. package/dist/cjs/AppSandbox/UCs/RedispatchThemeToAppUC.js.map +1 -1
  14. package/dist/cjs/AppSandbox/UCs/SetDevModeUC.js.map +1 -1
  15. package/dist/cjs/AppSandbox/UCs/index.js.map +1 -1
  16. package/dist/cjs/AppSandbox/UCs/submitActivityAssetHandlerSandbox.js +5 -1
  17. package/dist/cjs/AppSandbox/UCs/submitActivityAssetHandlerSandbox.js.map +1 -1
  18. package/dist/cjs/Assets/UCs/NewAppAssetUC.js.map +1 -1
  19. package/dist/cjs/Assets/UCs/NewAssetUC.js +3 -2
  20. package/dist/cjs/Assets/UCs/NewAssetUC.js.map +1 -1
  21. package/dist/cjs/BoundaryLog/Adapters/boundaryLogAdapter.js.map +1 -1
  22. package/dist/cjs/BoundaryLog/Adapters/index.js.map +1 -1
  23. package/dist/cjs/BoundaryLog/Controllers/clearBoundaryLog.js.map +1 -1
  24. package/dist/cjs/BoundaryLog/Controllers/index.js.map +1 -1
  25. package/dist/cjs/BoundaryLog/Entities/BoundaryLogEntity.js.map +1 -1
  26. package/dist/cjs/BoundaryLog/Entities/index.js.map +1 -1
  27. package/dist/cjs/BoundaryLog/Entities/snapshotPayload.js.map +1 -1
  28. package/dist/cjs/BoundaryLog/Factories/BoundaryLogFactory.js.map +1 -1
  29. package/dist/cjs/BoundaryLog/Factories/index.js.map +1 -1
  30. package/dist/cjs/BoundaryLog/Mocks/BoundaryLogPMMock.js.map +1 -1
  31. package/dist/cjs/BoundaryLog/Mocks/index.js.map +1 -1
  32. package/dist/cjs/BoundaryLog/PMs/BoundaryLogPM.js.map +1 -1
  33. package/dist/cjs/BoundaryLog/PMs/index.js.map +1 -1
  34. package/dist/cjs/BoundaryLog/index.js.map +1 -1
  35. package/dist/cjs/Dialog/Entities/DialogQueue.js.map +1 -1
  36. package/dist/cjs/Dispatcher/Entities/HostDispatchEntity.js.map +1 -1
  37. package/dist/cjs/Dispatcher/Mocks/MockDispatchSetDevModeUC.js.map +1 -1
  38. package/dist/cjs/Dispatcher/Mocks/MockHostDispatcher.js.map +1 -1
  39. package/dist/cjs/Dispatcher/Mocks/index.js.map +1 -1
  40. package/dist/cjs/Dispatcher/UCs/DispatchSetDevModeUC.js.map +1 -1
  41. package/dist/cjs/Dispatcher/UCs/DispatchThemeUC.js.map +1 -1
  42. package/dist/cjs/Dispatcher/UCs/index.js.map +1 -1
  43. package/dist/cjs/Dispatcher/setupStandardHostDispatchers.js.map +1 -1
  44. package/dist/cjs/Handler/Entities/HostHandler.js.map +1 -1
  45. package/dist/cjs/Handler/UCs/GetAssetStreamURLHandler.js.map +1 -1
  46. package/dist/cjs/Handler/UCs/index.js.map +1 -1
  47. package/dist/cjs/Handler/setupStandardHostHandlers.js.map +1 -1
  48. package/dist/cjs/ThemeColors/Entities/HostThemeEntity.js.map +1 -1
  49. package/dist/cjs/ThemeColors/PM/ThemeColorsPM.js.map +1 -1
  50. package/dist/cjs/VivedAPI/UCs/FileUploadUC.js +43 -4
  51. package/dist/cjs/VivedAPI/UCs/FileUploadUC.js.map +1 -1
  52. package/dist/cjs/VivedAPI/UCs/PatchAssetFileUC.js +6 -0
  53. package/dist/cjs/VivedAPI/UCs/PatchAssetFileUC.js.map +1 -1
  54. package/dist/cjs/VivedAPI/UCs/PostNewAssetUC.js.map +1 -1
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/esm/AppSandbox/Adapters/devModeAdapter.js.map +1 -1
  57. package/dist/esm/AppSandbox/Adapters/index.js.map +1 -1
  58. package/dist/esm/AppSandbox/Controller/index.js.map +1 -1
  59. package/dist/esm/AppSandbox/Controller/setDevMode.js.map +1 -1
  60. package/dist/esm/AppSandbox/Entities/AppSandboxEntity.js.map +1 -1
  61. package/dist/esm/AppSandbox/Factories/AppSandboxFeatureFactory.js.map +1 -1
  62. package/dist/esm/AppSandbox/Factories/setupAppSandbox.js.map +1 -1
  63. package/dist/esm/AppSandbox/Mocks/DevModePMMock.js.map +1 -1
  64. package/dist/esm/AppSandbox/Mocks/MockSetDevModeUC.js.map +1 -1
  65. package/dist/esm/AppSandbox/Mocks/index.js.map +1 -1
  66. package/dist/esm/AppSandbox/PMs/DevModePM.js.map +1 -1
  67. package/dist/esm/AppSandbox/PMs/index.js.map +1 -1
  68. package/dist/esm/AppSandbox/UCs/RedispatchThemeToAppUC.js.map +1 -1
  69. package/dist/esm/AppSandbox/UCs/SetDevModeUC.js.map +1 -1
  70. package/dist/esm/AppSandbox/UCs/index.js.map +1 -1
  71. package/dist/esm/AppSandbox/UCs/submitActivityAssetHandlerSandbox.js +5 -1
  72. package/dist/esm/AppSandbox/UCs/submitActivityAssetHandlerSandbox.js.map +1 -1
  73. package/dist/esm/Assets/UCs/NewAppAssetUC.js.map +1 -1
  74. package/dist/esm/Assets/UCs/NewAssetUC.js +3 -2
  75. package/dist/esm/Assets/UCs/NewAssetUC.js.map +1 -1
  76. package/dist/esm/BoundaryLog/Adapters/boundaryLogAdapter.js.map +1 -1
  77. package/dist/esm/BoundaryLog/Adapters/index.js.map +1 -1
  78. package/dist/esm/BoundaryLog/Controllers/clearBoundaryLog.js.map +1 -1
  79. package/dist/esm/BoundaryLog/Controllers/index.js.map +1 -1
  80. package/dist/esm/BoundaryLog/Entities/BoundaryLogEntity.js.map +1 -1
  81. package/dist/esm/BoundaryLog/Entities/index.js.map +1 -1
  82. package/dist/esm/BoundaryLog/Entities/snapshotPayload.js.map +1 -1
  83. package/dist/esm/BoundaryLog/Factories/BoundaryLogFactory.js.map +1 -1
  84. package/dist/esm/BoundaryLog/Factories/index.js.map +1 -1
  85. package/dist/esm/BoundaryLog/Mocks/BoundaryLogPMMock.js.map +1 -1
  86. package/dist/esm/BoundaryLog/Mocks/index.js.map +1 -1
  87. package/dist/esm/BoundaryLog/PMs/BoundaryLogPM.js.map +1 -1
  88. package/dist/esm/BoundaryLog/PMs/index.js.map +1 -1
  89. package/dist/esm/BoundaryLog/index.js.map +1 -1
  90. package/dist/esm/Dialog/Entities/DialogQueue.js.map +1 -1
  91. package/dist/esm/Dispatcher/Entities/HostDispatchEntity.js.map +1 -1
  92. package/dist/esm/Dispatcher/Mocks/MockDispatchSetDevModeUC.js.map +1 -1
  93. package/dist/esm/Dispatcher/Mocks/MockHostDispatcher.js.map +1 -1
  94. package/dist/esm/Dispatcher/Mocks/index.js.map +1 -1
  95. package/dist/esm/Dispatcher/UCs/DispatchSetDevModeUC.js.map +1 -1
  96. package/dist/esm/Dispatcher/UCs/DispatchThemeUC.js.map +1 -1
  97. package/dist/esm/Dispatcher/UCs/index.js.map +1 -1
  98. package/dist/esm/Dispatcher/setupStandardHostDispatchers.js.map +1 -1
  99. package/dist/esm/Handler/Entities/HostHandler.js.map +1 -1
  100. package/dist/esm/Handler/UCs/GetAssetStreamURLHandler.js.map +1 -1
  101. package/dist/esm/Handler/UCs/index.js.map +1 -1
  102. package/dist/esm/Handler/setupStandardHostHandlers.js.map +1 -1
  103. package/dist/esm/ThemeColors/Entities/HostThemeEntity.js.map +1 -1
  104. package/dist/esm/ThemeColors/PM/ThemeColorsPM.js.map +1 -1
  105. package/dist/esm/VivedAPI/UCs/FileUploadUC.js +43 -4
  106. package/dist/esm/VivedAPI/UCs/FileUploadUC.js.map +1 -1
  107. package/dist/esm/VivedAPI/UCs/PatchAssetFileUC.js +6 -0
  108. package/dist/esm/VivedAPI/UCs/PatchAssetFileUC.js.map +1 -1
  109. package/dist/esm/VivedAPI/UCs/PostNewAssetUC.js.map +1 -1
  110. package/dist/esm/index.js.map +1 -1
  111. package/dist/types/AppSandbox/UCs/submitActivityAssetHandlerSandbox.d.ts.map +1 -1
  112. package/dist/types/Assets/UCs/NewAssetUC.d.ts +6 -0
  113. package/dist/types/Assets/UCs/NewAssetUC.d.ts.map +1 -1
  114. package/package.json +67 -67
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/Factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC","sourcesContent":["export * from \"./BoundaryLogFactory\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/Factories/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC","sourcesContent":["export * from \"./BoundaryLogFactory\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BoundaryLogPMMock.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/Mocks/BoundaryLogPMMock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAGlD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAHvC,gBAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIxB,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAyB;IAC7D,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\r\nimport { BoundaryLogPM } from \"../PMs\";\r\n\r\nexport class BoundaryLogPMMock extends BoundaryLogPM {\r\n vmsAreEqual = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, BoundaryLogPM.type);\r\n }\r\n}\r\n\r\nexport function makeBoundaryLogPMMock(appObjects: AppObjectRepo) {\r\n return new BoundaryLogPMMock(appObjects.getOrCreate(\"BoundaryLogPMMock\"));\r\n}\r\n"]}
1
+ {"version":3,"file":"BoundaryLogPMMock.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/Mocks/BoundaryLogPMMock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAGlD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAHvC,gBAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIxB,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,UAAyB;IAC7D,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { AppObject, AppObjectRepo } from \"@vived/core\";\nimport { BoundaryLogPM } from \"../PMs\";\n\nexport class BoundaryLogPMMock extends BoundaryLogPM {\n vmsAreEqual = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, BoundaryLogPM.type);\n }\n}\n\nexport function makeBoundaryLogPMMock(appObjects: AppObjectRepo) {\n return new BoundaryLogPMMock(appObjects.getOrCreate(\"BoundaryLogPMMock\"));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC","sourcesContent":["export * from \"./BoundaryLogPMMock\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC","sourcesContent":["export * from \"./BoundaryLogPMMock\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BoundaryLogPM.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/PMs/BoundaryLogPM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AAY/D,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,OAAgB,aAAc,SAAQ,WAA0B;IAGpE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;;AAJM,kBAAI,GAAG,eAAe,CAAC;AAOhC,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAiB,SAAQ,aAAa;IAC1C,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,kBAAkB,CAAoB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,WAAW,CAAC,CAAgB,EAAE,CAAgB;QAC5C,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAiBD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAhB/B,mBAAc,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,OAAO;YAE9B,wEAAwE;YACxE,4EAA4E;YAC5E,0BAA0B;YAC1B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAkB;gBACxB,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,MAAM;aACtB,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC;QAKA,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport { BoundaryLogEntity, RequestRecord } from \"../Entities\";\r\n\r\n/**\r\n * The view projection of the Boundary Log: the recorded Requests in observation\r\n * order (each row carries its direction so the view can side Dispatches and\r\n * Handlers independently) plus the total count.\r\n */\r\nexport interface BoundaryLogVM {\r\n records: RequestRecord[];\r\n count: number;\r\n}\r\n\r\nexport const defaultBoundaryLogVM: BoundaryLogVM = {\r\n records: [],\r\n count: 0\r\n};\r\n\r\nexport abstract class BoundaryLogPM extends AppObjectPM<BoundaryLogVM> {\r\n static type = \"BoundaryLogPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<BoundaryLogPM>(BoundaryLogPM.type, appObjects);\r\n }\r\n}\r\n\r\nexport function makeBoundaryLogPM(appObject: AppObject): BoundaryLogPM {\r\n return new BoundaryLogPMImp(appObject);\r\n}\r\n\r\nclass BoundaryLogPMImp extends BoundaryLogPM {\r\n private get boundaryLog() {\r\n return this.getCachedSingleton<BoundaryLogEntity>(BoundaryLogEntity.type);\r\n }\r\n\r\n vmsAreEqual(a: BoundaryLogVM, b: BoundaryLogVM): boolean {\r\n if (a.count !== b.count) return false;\r\n if (a.records.length !== b.records.length) return false;\r\n for (let i = 0; i < a.records.length; i++) {\r\n if (a.records[i] !== b.records[i]) return false;\r\n }\r\n return true;\r\n }\r\n\r\n private onEntityChange = () => {\r\n if (!this.boundaryLog) return;\r\n\r\n // Copy the array (new VM identity) but keep record references stable so\r\n // vmsAreEqual can compare cheaply. Order is insertion order = the order the\r\n // Requests were observed.\r\n const records = [...this.boundaryLog.records];\r\n const vm: BoundaryLogVM = {\r\n records,\r\n count: records.length\r\n };\r\n\r\n this.doUpdateView(vm);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, BoundaryLogPM.type);\r\n\r\n this.onEntityChange();\r\n this.boundaryLog?.addChangeObserver(this.onEntityChange);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BoundaryLogPM.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/PMs/BoundaryLogPM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAiB,MAAM,aAAa,CAAC;AAY/D,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,OAAgB,aAAc,SAAQ,WAA0B;IAGpE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;;AAJM,kBAAI,GAAG,eAAe,CAAC;AAOhC,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAiB,SAAQ,aAAa;IAC1C,IAAY,WAAW;QACrB,OAAO,IAAI,CAAC,kBAAkB,CAAoB,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IAED,WAAW,CAAC,CAAgB,EAAE,CAAgB;QAC5C,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAiBD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QAhB/B,mBAAc,GAAG,GAAG,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,OAAO;YAE9B,wEAAwE;YACxE,4EAA4E;YAC5E,0BAA0B;YAC1B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAkB;gBACxB,OAAO;gBACP,KAAK,EAAE,OAAO,CAAC,MAAM;aACtB,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC;QAKA,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectPM,\n AppObjectRepo\n} from \"@vived/core\";\nimport { BoundaryLogEntity, RequestRecord } from \"../Entities\";\n\n/**\n * The view projection of the Boundary Log: the recorded Requests in observation\n * order (each row carries its direction so the view can side Dispatches and\n * Handlers independently) plus the total count.\n */\nexport interface BoundaryLogVM {\n records: RequestRecord[];\n count: number;\n}\n\nexport const defaultBoundaryLogVM: BoundaryLogVM = {\n records: [],\n count: 0\n};\n\nexport abstract class BoundaryLogPM extends AppObjectPM<BoundaryLogVM> {\n static type = \"BoundaryLogPM\";\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<BoundaryLogPM>(BoundaryLogPM.type, appObjects);\n }\n}\n\nexport function makeBoundaryLogPM(appObject: AppObject): BoundaryLogPM {\n return new BoundaryLogPMImp(appObject);\n}\n\nclass BoundaryLogPMImp extends BoundaryLogPM {\n private get boundaryLog() {\n return this.getCachedSingleton<BoundaryLogEntity>(BoundaryLogEntity.type);\n }\n\n vmsAreEqual(a: BoundaryLogVM, b: BoundaryLogVM): boolean {\n if (a.count !== b.count) return false;\n if (a.records.length !== b.records.length) return false;\n for (let i = 0; i < a.records.length; i++) {\n if (a.records[i] !== b.records[i]) return false;\n }\n return true;\n }\n\n private onEntityChange = () => {\n if (!this.boundaryLog) return;\n\n // Copy the array (new VM identity) but keep record references stable so\n // vmsAreEqual can compare cheaply. Order is insertion order = the order the\n // Requests were observed.\n const records = [...this.boundaryLog.records];\n const vm: BoundaryLogVM = {\n records,\n count: records.length\n };\n\n this.doUpdateView(vm);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, BoundaryLogPM.type);\n\n this.onEntityChange();\n this.boundaryLog?.addChangeObserver(this.onEntityChange);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/PMs/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"./BoundaryLogPM\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/BoundaryLog/PMs/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"./BoundaryLogPM\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/BoundaryLog/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC","sourcesContent":["export * from \"./Adapters\";\r\nexport * from \"./Controllers\";\r\nexport * from \"./Entities\";\r\nexport * from \"./Factories\";\r\nexport * from \"./Mocks\";\r\nexport * from \"./PMs\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/BoundaryLog/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC","sourcesContent":["export * from \"./Adapters\";\nexport * from \"./Controllers\";\nexport * from \"./Entities\";\nexport * from \"./Factories\";\nexport * from \"./Mocks\";\nexport * from \"./PMs\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DialogQueue.js","sourceRoot":"","sources":["../../../../src/Dialog/Entities/DialogQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAErB,MAAM,OAAgB,MAAO,SAAQ,eAAe;CAKnD;AAED,MAAM,OAAgB,WAAY,SAAQ,eAAe;IAOvD,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAc,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;;AARM,gBAAI,GAAG,aAAa,CAAC;AAW9B,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,aAAc,SAAQ,WAAW;IAGrC,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAyDD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QA9D7B,gBAAW,GAAa,EAAE,CAAC;QAMnC,iBAAY,GAAG,CAAC,MAAc,EAAQ,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,0BAAqB,GAAG,GAAS,EAAE;YACjC,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9C,IAAI,mBAAmB,KAAK,IAAI;gBAAE,OAAO;YAEzC,qEAAqE;YACrE,4EAA4E;YAC5E,yEAAyE;YACzE,mBAAmB,CAAC,aAAa,GAAG,IAAI,CAAC;YACzC,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF;;;;WAIG;QACK,mBAAc,GAAG,GAAS,EAAE;YAClC,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9C,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,CAAC,aAAa,EAAE,CAAC;gBACtE,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QAEF,6EAA6E;QACrE,iBAAY,GAAG,GAAS,EAAE;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACpD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBACzB,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACjD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEM,qBAAgB,GAAG,GAAS,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo,\r\n getSingletonComponent\r\n} from \"@vived/core\";\r\n\r\nexport abstract class Dialog extends AppObjectEntity {\r\n abstract dialogType: string;\r\n abstract preventOutsideDismiss: boolean;\r\n abstract isOpen: boolean;\r\n abstract hasBeenClosed: boolean;\r\n}\r\n\r\nexport abstract class DialogQueue extends AppObjectEntity {\r\n static type = \"DialogQueue\";\r\n\r\n abstract get activeDialog(): Dialog | null;\r\n abstract submitDialog(dialog: Dialog): void;\r\n abstract activeDialogHasClosed(): void;\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<DialogQueue>(DialogQueue.type, appObjects);\r\n }\r\n}\r\n\r\nexport function makeDialogQueue(appObject: AppObject): DialogQueue {\r\n return new DialogRepoImp(appObject);\r\n}\r\n\r\nclass DialogRepoImp extends DialogQueue {\r\n private dialogQueue: Dialog[] = [];\r\n\r\n get activeDialog(): Dialog | null {\r\n return this.dialogQueue.length > 0 ? this.dialogQueue[0] : null;\r\n }\r\n\r\n submitDialog = (dialog: Dialog): void => {\r\n this.dialogQueue.push(dialog);\r\n\r\n dialog.addChangeObserver(this.onDialogChange);\r\n\r\n this.openActiveDialog();\r\n this.notifyOnChange();\r\n };\r\n\r\n activeDialogHasClosed = (): void => {\r\n const currentActiveDialog = this.activeDialog;\r\n if (currentActiveDialog === null) return;\r\n\r\n // Dismissal comes via two routes: a dialog's own close() (which sets\r\n // hasBeenClosed) or the host's backdrop/escape path (this method). Mark the\r\n // active dialog closed here so both routes converge on the same advance.\r\n currentActiveDialog.hasBeenClosed = true;\r\n this.advanceQueue();\r\n };\r\n\r\n /**\r\n * Observes every queued dialog. When the active dialog closes itself (e.g.\r\n * via its own close button), advance the queue so the next dialog surfaces;\r\n * otherwise just forward the change to the queue's own observers.\r\n */\r\n private onDialogChange = (): void => {\r\n const currentActiveDialog = this.activeDialog;\r\n if (currentActiveDialog !== null && currentActiveDialog.hasBeenClosed) {\r\n this.advanceQueue();\r\n } else {\r\n this.notifyOnChange();\r\n }\r\n };\r\n\r\n /** Drop every closed dialog, then open whatever is now the active dialog. */\r\n private advanceQueue = (): void => {\r\n this.dialogQueue = this.dialogQueue.filter((dialog) => {\r\n if (dialog.hasBeenClosed) {\r\n dialog.removeChangeObserver(this.onDialogChange);\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n this.openActiveDialog();\r\n this.notifyOnChange();\r\n };\r\n\r\n private openActiveDialog = (): void => {\r\n const active = this.activeDialog;\r\n if (active !== null && !active.isOpen) {\r\n active.isOpen = true;\r\n }\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DialogQueue.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DialogQueue.js","sourceRoot":"","sources":["../../../../src/Dialog/Entities/DialogQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EAEf,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAErB,MAAM,OAAgB,MAAO,SAAQ,eAAe;CAKnD;AAED,MAAM,OAAgB,WAAY,SAAQ,eAAe;IAOvD,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAc,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;;AARM,gBAAI,GAAG,aAAa,CAAC;AAW9B,MAAM,UAAU,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,aAAc,SAAQ,WAAW;IAGrC,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAyDD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QA9D7B,gBAAW,GAAa,EAAE,CAAC;QAMnC,iBAAY,GAAG,CAAC,MAAc,EAAQ,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAE9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,0BAAqB,GAAG,GAAS,EAAE;YACjC,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9C,IAAI,mBAAmB,KAAK,IAAI;gBAAE,OAAO;YAEzC,qEAAqE;YACrE,4EAA4E;YAC5E,yEAAyE;YACzE,mBAAmB,CAAC,aAAa,GAAG,IAAI,CAAC;YACzC,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF;;;;WAIG;QACK,mBAAc,GAAG,GAAS,EAAE;YAClC,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC9C,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,CAAC,aAAa,EAAE,CAAC;gBACtE,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QAEF,6EAA6E;QACrE,iBAAY,GAAG,GAAS,EAAE;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACpD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBACzB,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACjD,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,CAAC;QAEM,qBAAgB,GAAG,GAAS,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YACjC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QAIA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import {\n AppObject,\n AppObjectEntity,\n AppObjectRepo,\n getSingletonComponent\n} from \"@vived/core\";\n\nexport abstract class Dialog extends AppObjectEntity {\n abstract dialogType: string;\n abstract preventOutsideDismiss: boolean;\n abstract isOpen: boolean;\n abstract hasBeenClosed: boolean;\n}\n\nexport abstract class DialogQueue extends AppObjectEntity {\n static type = \"DialogQueue\";\n\n abstract get activeDialog(): Dialog | null;\n abstract submitDialog(dialog: Dialog): void;\n abstract activeDialogHasClosed(): void;\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<DialogQueue>(DialogQueue.type, appObjects);\n }\n}\n\nexport function makeDialogQueue(appObject: AppObject): DialogQueue {\n return new DialogRepoImp(appObject);\n}\n\nclass DialogRepoImp extends DialogQueue {\n private dialogQueue: Dialog[] = [];\n\n get activeDialog(): Dialog | null {\n return this.dialogQueue.length > 0 ? this.dialogQueue[0] : null;\n }\n\n submitDialog = (dialog: Dialog): void => {\n this.dialogQueue.push(dialog);\n\n dialog.addChangeObserver(this.onDialogChange);\n\n this.openActiveDialog();\n this.notifyOnChange();\n };\n\n activeDialogHasClosed = (): void => {\n const currentActiveDialog = this.activeDialog;\n if (currentActiveDialog === null) return;\n\n // Dismissal comes via two routes: a dialog's own close() (which sets\n // hasBeenClosed) or the host's backdrop/escape path (this method). Mark the\n // active dialog closed here so both routes converge on the same advance.\n currentActiveDialog.hasBeenClosed = true;\n this.advanceQueue();\n };\n\n /**\n * Observes every queued dialog. When the active dialog closes itself (e.g.\n * via its own close button), advance the queue so the next dialog surfaces;\n * otherwise just forward the change to the queue's own observers.\n */\n private onDialogChange = (): void => {\n const currentActiveDialog = this.activeDialog;\n if (currentActiveDialog !== null && currentActiveDialog.hasBeenClosed) {\n this.advanceQueue();\n } else {\n this.notifyOnChange();\n }\n };\n\n /** Drop every closed dialog, then open whatever is now the active dialog. */\n private advanceQueue = (): void => {\n this.dialogQueue = this.dialogQueue.filter((dialog) => {\n if (dialog.hasBeenClosed) {\n dialog.removeChangeObserver(this.onDialogChange);\n return false;\n }\n return true;\n });\n\n this.openActiveDialog();\n this.notifyOnChange();\n };\n\n private openActiveDialog = (): void => {\n const active = this.activeDialog;\n if (active !== null && !active.isOpen) {\n active.isOpen = true;\n }\n };\n\n constructor(appObject: AppObject) {\n super(appObject, DialogQueue.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"HostDispatchEntity.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Entities/HostDispatchEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectEntity, AppObjectRepo } from \"@vived/core\";\r\nimport { Handler, Request } from \"@vived/core\";\r\n\r\n/**\r\n * The outcome of an outbound Dispatch, as seen at the dispatch chokepoint:\r\n * \"delivered\" (the app handler ran), \"no-app-handler\" (nothing registered to\r\n * receive it), or \"threw\" (the app handler raised).\r\n */\r\nexport type DispatchOutcome = \"delivered\" | \"no-app-handler\" | \"threw\";\r\n\r\n/**\r\n * Passive observer of outbound Dispatches. Notified after each Request is\r\n * dispatched, with the outcome. Purely observational — see the passivity\r\n * contract in ADR-0002: an observer must never alter, delay, or fail delivery.\r\n */\r\nexport type DispatchObserver = (\r\n request: Request,\r\n outcome: DispatchOutcome\r\n) => void;\r\n\r\nexport abstract class HostDispatchEntity extends AppObjectEntity {\r\n static readonly type = \"HostDispatchEntity\";\r\n\r\n abstract appHandlerVersion: number;\r\n abstract getRequestPayloadVersion(requestType: string): number | undefined;\r\n abstract registerAppHandler: (appHandler: Handler) => void;\r\n abstract clearAppHandler: () => void;\r\n abstract dispatch: (request: Request) => void;\r\n abstract formRequestAndDispatch: (\r\n type: string,\r\n version: number,\r\n payload?: object | undefined\r\n ) => void;\r\n\r\n /**\r\n * Optional passive observer of outbound Dispatches (ADR-0002). Unset by\r\n * default, so production hosts pay nothing and behave exactly as before.\r\n */\r\n abstract requestObserver?: DispatchObserver;\r\n\r\n static get(appObject: AppObject): HostDispatchEntity | undefined {\r\n const component = appObject.getComponent<HostDispatchEntity>(\r\n HostDispatchEntity.type\r\n );\r\n if (!component) {\r\n appObject.appObjectRepo.submitWarning(\r\n \"AssetEntity.get\",\r\n \"Unable to find HostDispatchEntity on app object \" + appObject.id\r\n );\r\n }\r\n return component;\r\n }\r\n\r\n static getByID(\r\n id: string,\r\n appObjects: AppObjectRepo\r\n ): HostDispatchEntity | undefined {\r\n const appObject = appObjects.get(id);\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"AssetEntity.getByID\",\r\n \"Unable to find app object \" + id\r\n );\r\n return;\r\n }\r\n return HostDispatchEntity.get(appObject);\r\n }\r\n}\r\n\r\nexport function makeHostDispatchEntity(\r\n appObject: AppObject\r\n): HostDispatchEntity {\r\n return new HostDispatchEntityImp(appObject);\r\n}\r\n\r\nclass HostDispatchEntityImp extends HostDispatchEntity {\r\n private appHandler?: Handler;\r\n\r\n private _appHandlerVersion = 0;\r\n public get appHandlerVersion() {\r\n return this._appHandlerVersion;\r\n }\r\n\r\n private appPayloadVersions = new Map<string, number>();\r\n\r\n registerAppHandler = (appHandler: Handler) => {\r\n this.appHandler = appHandler;\r\n this.getAppHandlerVersion();\r\n };\r\n\r\n clearAppHandler = () => {\r\n this.appHandler = undefined;\r\n };\r\n\r\n private getAppHandlerVersion() {\r\n const type = \"GET_APP_HANDLER_VERSION\";\r\n const payload = { callback: this.setupVersion };\r\n\r\n try {\r\n this.formRequestAndDispatch(type, 1, payload);\r\n } catch {\r\n // All good. this is probably an older app\r\n }\r\n }\r\n\r\n getRequestPayloadVersion = (requestType: string): number | undefined => {\r\n return this.appPayloadVersions.get(requestType);\r\n };\r\n\r\n private setupVersion = (version: number) => {\r\n // Apps before app package version 2.27 will not reach this\r\n this._appHandlerVersion = version;\r\n this.getPayloadVersions();\r\n };\r\n\r\n private getPayloadVersions = () => {\r\n const type = \"GET_APP_PAYLOAD_VERSION\";\r\n const payload = { callback: this.setupPayloadVersions };\r\n this.formRequestAndDispatch(type, 2, payload);\r\n };\r\n\r\n private setupPayloadVersions = (payloadVersion: Map<string, number>) => {\r\n this.appPayloadVersions = payloadVersion;\r\n };\r\n\r\n requestObserver?: DispatchObserver;\r\n\r\n /**\r\n * Notify the passive observer, if any. Wrapped so a throwing or slow observer\r\n * can never alter, delay, or fail the Request's delivery (ADR-0002).\r\n */\r\n private notifyObserver = (request: Request, outcome: DispatchOutcome) => {\r\n if (!this.requestObserver) return;\r\n try {\r\n this.requestObserver(request, outcome);\r\n } catch {\r\n // Passive: an observer failure must never affect dispatch.\r\n }\r\n };\r\n\r\n dispatch = (request: Request) => {\r\n if (!this.appHandler) {\r\n this.error(\"No app handler has been registered\");\r\n this.notifyObserver(request, \"no-app-handler\");\r\n return;\r\n }\r\n\r\n try {\r\n this.appHandler(request);\r\n this.notifyObserver(request, \"delivered\");\r\n } catch (e) {\r\n this.warn((e as Error).message);\r\n this.notifyObserver(request, \"threw\");\r\n }\r\n };\r\n\r\n formRequestAndDispatch = (\r\n type: string,\r\n version: number,\r\n payload?: object | undefined\r\n ) => {\r\n const request: Request = {\r\n type,\r\n version,\r\n payload\r\n };\r\n\r\n this.dispatch(request);\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostDispatchEntity.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HostDispatchEntity.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Entities/HostDispatchEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectEntity, AppObjectRepo } from \"@vived/core\";\nimport { Handler, Request } from \"@vived/core\";\n\n/**\n * The outcome of an outbound Dispatch, as seen at the dispatch chokepoint:\n * \"delivered\" (the app handler ran), \"no-app-handler\" (nothing registered to\n * receive it), or \"threw\" (the app handler raised).\n */\nexport type DispatchOutcome = \"delivered\" | \"no-app-handler\" | \"threw\";\n\n/**\n * Passive observer of outbound Dispatches. Notified after each Request is\n * dispatched, with the outcome. Purely observational — see the passivity\n * contract in ADR-0002: an observer must never alter, delay, or fail delivery.\n */\nexport type DispatchObserver = (\n request: Request,\n outcome: DispatchOutcome\n) => void;\n\nexport abstract class HostDispatchEntity extends AppObjectEntity {\n static readonly type = \"HostDispatchEntity\";\n\n abstract appHandlerVersion: number;\n abstract getRequestPayloadVersion(requestType: string): number | undefined;\n abstract registerAppHandler: (appHandler: Handler) => void;\n abstract clearAppHandler: () => void;\n abstract dispatch: (request: Request) => void;\n abstract formRequestAndDispatch: (\n type: string,\n version: number,\n payload?: object | undefined\n ) => void;\n\n /**\n * Optional passive observer of outbound Dispatches (ADR-0002). Unset by\n * default, so production hosts pay nothing and behave exactly as before.\n */\n abstract requestObserver?: DispatchObserver;\n\n static get(appObject: AppObject): HostDispatchEntity | undefined {\n const component = appObject.getComponent<HostDispatchEntity>(\n HostDispatchEntity.type\n );\n if (!component) {\n appObject.appObjectRepo.submitWarning(\n \"AssetEntity.get\",\n \"Unable to find HostDispatchEntity on app object \" + appObject.id\n );\n }\n return component;\n }\n\n static getByID(\n id: string,\n appObjects: AppObjectRepo\n ): HostDispatchEntity | undefined {\n const appObject = appObjects.get(id);\n if (!appObject) {\n appObjects.submitWarning(\n \"AssetEntity.getByID\",\n \"Unable to find app object \" + id\n );\n return;\n }\n return HostDispatchEntity.get(appObject);\n }\n}\n\nexport function makeHostDispatchEntity(\n appObject: AppObject\n): HostDispatchEntity {\n return new HostDispatchEntityImp(appObject);\n}\n\nclass HostDispatchEntityImp extends HostDispatchEntity {\n private appHandler?: Handler;\n\n private _appHandlerVersion = 0;\n public get appHandlerVersion() {\n return this._appHandlerVersion;\n }\n\n private appPayloadVersions = new Map<string, number>();\n\n registerAppHandler = (appHandler: Handler) => {\n this.appHandler = appHandler;\n this.getAppHandlerVersion();\n };\n\n clearAppHandler = () => {\n this.appHandler = undefined;\n };\n\n private getAppHandlerVersion() {\n const type = \"GET_APP_HANDLER_VERSION\";\n const payload = { callback: this.setupVersion };\n\n try {\n this.formRequestAndDispatch(type, 1, payload);\n } catch {\n // All good. this is probably an older app\n }\n }\n\n getRequestPayloadVersion = (requestType: string): number | undefined => {\n return this.appPayloadVersions.get(requestType);\n };\n\n private setupVersion = (version: number) => {\n // Apps before app package version 2.27 will not reach this\n this._appHandlerVersion = version;\n this.getPayloadVersions();\n };\n\n private getPayloadVersions = () => {\n const type = \"GET_APP_PAYLOAD_VERSION\";\n const payload = { callback: this.setupPayloadVersions };\n this.formRequestAndDispatch(type, 2, payload);\n };\n\n private setupPayloadVersions = (payloadVersion: Map<string, number>) => {\n this.appPayloadVersions = payloadVersion;\n };\n\n requestObserver?: DispatchObserver;\n\n /**\n * Notify the passive observer, if any. Wrapped so a throwing or slow observer\n * can never alter, delay, or fail the Request's delivery (ADR-0002).\n */\n private notifyObserver = (request: Request, outcome: DispatchOutcome) => {\n if (!this.requestObserver) return;\n try {\n this.requestObserver(request, outcome);\n } catch {\n // Passive: an observer failure must never affect dispatch.\n }\n };\n\n dispatch = (request: Request) => {\n if (!this.appHandler) {\n this.error(\"No app handler has been registered\");\n this.notifyObserver(request, \"no-app-handler\");\n return;\n }\n\n try {\n this.appHandler(request);\n this.notifyObserver(request, \"delivered\");\n } catch (e) {\n this.warn((e as Error).message);\n this.notifyObserver(request, \"threw\");\n }\n };\n\n formRequestAndDispatch = (\n type: string,\n version: number,\n payload?: object | undefined\n ) => {\n const request: Request = {\n type,\n version,\n payload\n };\n\n this.dispatch(request);\n };\n\n constructor(appObject: AppObject) {\n super(appObject, HostDispatchEntity.type);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MockDispatchSetDevModeUC.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Mocks/MockDispatchSetDevModeUC.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAE9C,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAGhE,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAH9C,eAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIvB,CAAC;CACF","sourcesContent":["import { AppObject } from \"@vived/core\";\r\nimport { DispatchSetDevModeUC } from \"../UCs\";\r\n\r\nexport class MockDispatchSetDevModeUC extends DispatchSetDevModeUC {\r\n doDispatch = jest.fn();\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DispatchSetDevModeUC.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MockDispatchSetDevModeUC.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Mocks/MockDispatchSetDevModeUC.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAE9C,MAAM,OAAO,wBAAyB,SAAQ,oBAAoB;IAGhE,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAH9C,eAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAIvB,CAAC;CACF","sourcesContent":["import { AppObject } from \"@vived/core\";\nimport { DispatchSetDevModeUC } from \"../UCs\";\n\nexport class MockDispatchSetDevModeUC extends DispatchSetDevModeUC {\n doDispatch = jest.fn();\n\n constructor(appObject: AppObject) {\n super(appObject, DispatchSetDevModeUC.type);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MockHostDispatcher.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Mocks/MockHostDispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,OAAO,sBAAuB,SAAQ,kBAAkB;IAS5D,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAT5C,oBAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5B,sBAAiB,GAAG,CAAC,CAAC;QACtB,6BAAwB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrC,uBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC/B,aAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,2BAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACnC,oBAAe,GAAG,SAAS,CAAC;IAI5B,CAAC;CACF","sourcesContent":["import { AppObject } from \"@vived/core\";\r\nimport { HostDispatchEntity } from \"../Entities\";\r\n\r\nexport class MockHostDispatchEntity extends HostDispatchEntity {\r\n clearAppHandler = jest.fn();\r\n appHandlerVersion = 1;\r\n getRequestPayloadVersion = jest.fn();\r\n registerAppHandler = jest.fn();\r\n dispatch = jest.fn();\r\n formRequestAndDispatch = jest.fn();\r\n requestObserver = undefined;\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostDispatchEntity.type);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MockHostDispatcher.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Mocks/MockHostDispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,OAAO,sBAAuB,SAAQ,kBAAkB;IAS5D,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAT5C,oBAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC5B,sBAAiB,GAAG,CAAC,CAAC;QACtB,6BAAwB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrC,uBAAkB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC/B,aAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACrB,2BAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACnC,oBAAe,GAAG,SAAS,CAAC;IAI5B,CAAC;CACF","sourcesContent":["import { AppObject } from \"@vived/core\";\nimport { HostDispatchEntity } from \"../Entities\";\n\nexport class MockHostDispatchEntity extends HostDispatchEntity {\n clearAppHandler = jest.fn();\n appHandlerVersion = 1;\n getRequestPayloadVersion = jest.fn();\n registerAppHandler = jest.fn();\n dispatch = jest.fn();\n formRequestAndDispatch = jest.fn();\n requestObserver = undefined;\n\n constructor(appObject: AppObject) {\n super(appObject, HostDispatchEntity.type);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sCAAsC,CAAC;AACrD,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from \"./DispatchEnableFeatureUCMock\";\r\nexport * from \"./MockDispatchAppDispatcherUC\";\r\nexport * from \"./MockDispatchIsAuthoringUC\";\r\nexport * from \"./MockDispatchSetDevModeUC\";\r\nexport * from \"./MockDispatchSetStateUC\";\r\nexport * from \"./MockDispatchShowBabylonInspectorUC\";\r\nexport * from \"./MockDispatchStartAppUC\";\r\nexport * from \"./MockDispatchStartBrowseChannelsUC\";\r\nexport * from \"./MockDispatchStartZSpaceUC\";\r\nexport * from \"./MockDispatchStopAppUC\";\r\nexport * from \"./MockDispatchStopZSpaceUC\";\r\nexport * from \"./MockDispatchThemeUC\";\r\nexport * from \"./MockHostDispatcher\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Dispatcher/Mocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sCAAsC,CAAC;AACrD,cAAc,0BAA0B,CAAC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC","sourcesContent":["export * from \"./DispatchEnableFeatureUCMock\";\nexport * from \"./MockDispatchAppDispatcherUC\";\nexport * from \"./MockDispatchIsAuthoringUC\";\nexport * from \"./MockDispatchSetDevModeUC\";\nexport * from \"./MockDispatchSetStateUC\";\nexport * from \"./MockDispatchShowBabylonInspectorUC\";\nexport * from \"./MockDispatchStartAppUC\";\nexport * from \"./MockDispatchStartBrowseChannelsUC\";\nexport * from \"./MockDispatchStartZSpaceUC\";\nexport * from \"./MockDispatchStopAppUC\";\nexport * from \"./MockDispatchStopZSpaceUC\";\nexport * from \"./MockDispatchThemeUC\";\nexport * from \"./MockHostDispatcher\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DispatchSetDevModeUC.js","sourceRoot":"","sources":["../../../../src/Dispatcher/UCs/DispatchSetDevModeUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,OAAgB,oBAAqB,SAAQ,WAAW;IAA9D;;QAEW,gBAAW,GAAG,cAAc,CAAC;IAiCxC,CAAC;IA7BC,MAAM,CAAC,GAAG,CAAC,SAAoB;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAClC,oBAAoB,CAAC,IAAI,CAC1B,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,aAAa,CAAC,aAAa,CACnC,0BAA0B,EAC1B,oDAAoD,GAAG,SAAS,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,EAAU,EACV,UAAyB;QAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,aAAa,CACtB,8BAA8B,EAC9B,kCAAkC,GAAG,EAAE,CACxC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;;AAjCe,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B;AAoChD,MAAM,UAAU,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IAIxD,UAAU,CAAC,SAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,MAAM,OAAO,GAAG;YACd,SAAS;SACV,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CACpC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,cAAc,EACnB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAjBrC,mBAAc,GAAG,CAAC,CAAC;QAmB1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,CACtC,kBAAkB,CAAC,IAAI,CACxB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CACR,oGAAoG,CACrG,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\r\nimport { HostDispatchEntity } from \"../Entities\";\r\n\r\nexport abstract class DispatchSetDevModeUC extends AppObjectUC {\r\n static readonly type = \"DispatchSetDevModeUC\";\r\n readonly requestType = \"SET_DEV_MODE\";\r\n\r\n abstract doDispatch(isDevMode: boolean): void;\r\n\r\n static get(appObject: AppObject): DispatchSetDevModeUC | undefined {\r\n const asset = appObject.getComponent<DispatchSetDevModeUC>(\r\n DispatchSetDevModeUC.type\r\n );\r\n if (!asset) {\r\n appObject.appObjectRepo.submitWarning(\r\n \"DispatchSetDevModeUC.get\",\r\n \"Unable to find DispatchSetDevModeUC on app object \" + appObject.id\r\n );\r\n }\r\n return asset;\r\n }\r\n\r\n static getByID(\r\n id: string,\r\n appObjects: AppObjectRepo\r\n ): DispatchSetDevModeUC | undefined {\r\n const appObject = appObjects.get(id);\r\n\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"DispatchSetDevModeUC.getByID\",\r\n \"Unable to find App Object by id \" + id\r\n );\r\n return undefined;\r\n }\r\n\r\n return DispatchSetDevModeUC.get(appObject);\r\n }\r\n}\r\n\r\nexport function makeDispatchSetDevModeUC(\r\n appObject: AppObject\r\n): DispatchSetDevModeUC {\r\n return new DispatchSetDevModeUCImp(appObject);\r\n}\r\n\r\nclass DispatchSetDevModeUCImp extends DispatchSetDevModeUC {\r\n readonly requestVersion = 1;\r\n private dispatcher?: HostDispatchEntity;\r\n\r\n doDispatch(isDevMode: boolean): void {\r\n if (!this.dispatcher) return;\r\n\r\n const payload = {\r\n isDevMode\r\n };\r\n this.dispatcher.formRequestAndDispatch(\r\n this.requestType,\r\n this.requestVersion,\r\n payload\r\n );\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DispatchSetDevModeUC.type);\r\n\r\n this.dispatcher = appObject.getComponent<HostDispatchEntity>(\r\n HostDispatchEntity.type\r\n );\r\n if (!this.dispatcher) {\r\n this.error(\r\n \"UC has been added to an App Object that does not have a HostDispatchEntity. Add a dispatcher first\"\r\n );\r\n this.dispose();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DispatchSetDevModeUC.js","sourceRoot":"","sources":["../../../../src/Dispatcher/UCs/DispatchSetDevModeUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,OAAgB,oBAAqB,SAAQ,WAAW;IAA9D;;QAEW,gBAAW,GAAG,cAAc,CAAC;IAiCxC,CAAC;IA7BC,MAAM,CAAC,GAAG,CAAC,SAAoB;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAClC,oBAAoB,CAAC,IAAI,CAC1B,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,aAAa,CAAC,aAAa,CACnC,0BAA0B,EAC1B,oDAAoD,GAAG,SAAS,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,EAAU,EACV,UAAyB;QAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,aAAa,CACtB,8BAA8B,EAC9B,kCAAkC,GAAG,EAAE,CACxC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;;AAjCe,yBAAI,GAAG,sBAAsB,AAAzB,CAA0B;AAoChD,MAAM,UAAU,wBAAwB,CACtC,SAAoB;IAEpB,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAwB,SAAQ,oBAAoB;IAIxD,UAAU,CAAC,SAAkB;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,MAAM,OAAO,GAAG;YACd,SAAS;SACV,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CACpC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,cAAc,EACnB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAjBrC,mBAAc,GAAG,CAAC,CAAC;QAmB1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,CACtC,kBAAkB,CAAC,IAAI,CACxB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CACR,oGAAoG,CACrG,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\nimport { HostDispatchEntity } from \"../Entities\";\n\nexport abstract class DispatchSetDevModeUC extends AppObjectUC {\n static readonly type = \"DispatchSetDevModeUC\";\n readonly requestType = \"SET_DEV_MODE\";\n\n abstract doDispatch(isDevMode: boolean): void;\n\n static get(appObject: AppObject): DispatchSetDevModeUC | undefined {\n const asset = appObject.getComponent<DispatchSetDevModeUC>(\n DispatchSetDevModeUC.type\n );\n if (!asset) {\n appObject.appObjectRepo.submitWarning(\n \"DispatchSetDevModeUC.get\",\n \"Unable to find DispatchSetDevModeUC on app object \" + appObject.id\n );\n }\n return asset;\n }\n\n static getByID(\n id: string,\n appObjects: AppObjectRepo\n ): DispatchSetDevModeUC | undefined {\n const appObject = appObjects.get(id);\n\n if (!appObject) {\n appObjects.submitWarning(\n \"DispatchSetDevModeUC.getByID\",\n \"Unable to find App Object by id \" + id\n );\n return undefined;\n }\n\n return DispatchSetDevModeUC.get(appObject);\n }\n}\n\nexport function makeDispatchSetDevModeUC(\n appObject: AppObject\n): DispatchSetDevModeUC {\n return new DispatchSetDevModeUCImp(appObject);\n}\n\nclass DispatchSetDevModeUCImp extends DispatchSetDevModeUC {\n readonly requestVersion = 1;\n private dispatcher?: HostDispatchEntity;\n\n doDispatch(isDevMode: boolean): void {\n if (!this.dispatcher) return;\n\n const payload = {\n isDevMode\n };\n this.dispatcher.formRequestAndDispatch(\n this.requestType,\n this.requestVersion,\n payload\n );\n }\n\n constructor(appObject: AppObject) {\n super(appObject, DispatchSetDevModeUC.type);\n\n this.dispatcher = appObject.getComponent<HostDispatchEntity>(\n HostDispatchEntity.type\n );\n if (!this.dispatcher) {\n this.error(\n \"UC has been added to an App Object that does not have a HostDispatchEntity. Add a dispatcher first\"\n );\n this.dispose();\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DispatchThemeUC.js","sourceRoot":"","sources":["../../../../src/Dispatcher/UCs/DispatchThemeUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,OAAgB,eAAgB,SAAQ,WAAW;IAAzD;;QAEW,gBAAW,GAAG,kBAAkB,CAAC;IA+B5C,CAAC;IA3BC,MAAM,CAAC,GAAG,CAAC,SAAoB;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAkB,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,aAAa,CAAC,aAAa,CACnC,qBAAqB,EACrB,+CAA+C,GAAG,SAAS,CAAC,EAAE,CAC/D,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,EAAU,EACV,UAAyB;QAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,aAAa,CACtB,yBAAyB,EACzB,kCAAkC,GAAG,EAAE,CACxC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;;AA/Be,oBAAI,GAAG,iBAAiB,AAApB,CAAqB;AAkC3C,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAI9C,IAAY,KAAK;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAkB,eAAe,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAE5C,MAAM,MAAM,GAAkB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAE7D,MAAM,OAAO,GAAG;YACd,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CACpC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,cAAc,EACnB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAxBhC,mBAAc,GAAG,CAAC,CAAC;QA0B1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,CACtC,kBAAkB,CAAC,IAAI,CACxB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CACR,oGAAoG,CACrG,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\r\nimport { HostThemeEntity } from \"../../ThemeColors\";\r\nimport { HostDispatchEntity } from \"../Entities\";\r\n\r\nexport abstract class DispatchThemeUC extends AppObjectUC {\r\n static readonly type = \"DispatchThemeUC\";\r\n readonly requestType = \"SET_THEME_COLORS\";\r\n\r\n abstract doDispatch(): void;\r\n\r\n static get(appObject: AppObject): DispatchThemeUC | undefined {\r\n const asset = appObject.getComponent<DispatchThemeUC>(DispatchThemeUC.type);\r\n if (!asset) {\r\n appObject.appObjectRepo.submitWarning(\r\n \"DispatchThemeUC.get\",\r\n \"Unable to find DispatchThemeUC on app object \" + appObject.id\r\n );\r\n }\r\n return asset;\r\n }\r\n\r\n static getByID(\r\n id: string,\r\n appObjects: AppObjectRepo\r\n ): DispatchThemeUC | undefined {\r\n const appObject = appObjects.get(id);\r\n\r\n if (!appObject) {\r\n appObjects.submitWarning(\r\n \"DispatchThemeUC.getByID\",\r\n \"Unable to find App Object by id \" + id\r\n );\r\n return undefined;\r\n }\r\n\r\n return DispatchThemeUC.get(appObject);\r\n }\r\n}\r\n\r\nexport function makeDispatchThemeUC(appObject: AppObject): DispatchThemeUC {\r\n return new DispatchThemeUCImp(appObject);\r\n}\r\n\r\nclass DispatchThemeUCImp extends DispatchThemeUC {\r\n readonly requestVersion = 1;\r\n private dispatcher?: HostDispatchEntity;\r\n\r\n private get theme() {\r\n return this.getCachedSingleton<HostThemeEntity>(HostThemeEntity.type);\r\n }\r\n\r\n doDispatch(): void {\r\n if (!this.dispatcher || !this.theme) return;\r\n\r\n const colors: ColorSchemeV1 = { ...this.theme.activeScheme };\r\n\r\n const payload = {\r\n colors\r\n };\r\n\r\n this.dispatcher.formRequestAndDispatch(\r\n this.requestType,\r\n this.requestVersion,\r\n payload\r\n );\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, DispatchThemeUC.type);\r\n\r\n this.dispatcher = appObject.getComponent<HostDispatchEntity>(\r\n HostDispatchEntity.type\r\n );\r\n if (!this.dispatcher) {\r\n this.error(\r\n \"UC has been added to an App Object that does not have a HostDispatchEntity. Add a dispatcher first\"\r\n );\r\n this.dispose();\r\n }\r\n }\r\n}\r\n\r\nexport interface ColorSchemeV1 {\r\n primary: string;\r\n onPrimary: string;\r\n primaryContainer: string;\r\n onPrimaryContainer: string;\r\n primaryFixed: string;\r\n onPrimaryFixed: string;\r\n primaryFixedDim: string;\r\n onPrimaryFixedVariant: string;\r\n secondary: string;\r\n onSecondary: string;\r\n secondaryContainer: string;\r\n onSecondaryContainer: string;\r\n secondaryFixed: string;\r\n onSecondaryFixed: string;\r\n secondaryFixedDim: string;\r\n onSecondaryFixedVariant: string;\r\n tertiary: string;\r\n onTertiary: string;\r\n tertiaryContainer: string;\r\n onTertiaryContainer: string;\r\n tertiaryFixed: string;\r\n onTertiaryFixed: string;\r\n tertiaryFixedDim: string;\r\n onTertiaryFixedVariant: string;\r\n error: string;\r\n onError: string;\r\n errorContainer: string;\r\n onErrorContainer: string;\r\n success: string;\r\n onSuccess: string;\r\n successContainer: string;\r\n onSuccessContainer: string;\r\n warning: string;\r\n onWarning: string;\r\n warningContainer: string;\r\n onWarningContainer: string;\r\n info: string;\r\n onInfo: string;\r\n infoContainer: string;\r\n onInfoContainer: string;\r\n outline: string;\r\n background: string;\r\n onBackground: string;\r\n surface: string;\r\n onSurface: string;\r\n surfaceVariant: string;\r\n onSurfaceVariant: string;\r\n inverseSurface: string;\r\n inverseOnSurface: string;\r\n inversePrimary: string;\r\n shadow: string;\r\n surfaceTint: string;\r\n outlineVariant: string;\r\n scrim: string;\r\n surfaceContainerHighest: string;\r\n surfaceContainerHigh: string;\r\n surfaceContainer: string;\r\n surfaceContainerLow: string;\r\n surfaceContainerLowest: string;\r\n surfaceBright: string;\r\n surfaceDim: string;\r\n}\r\n"]}
1
+ {"version":3,"file":"DispatchThemeUC.js","sourceRoot":"","sources":["../../../../src/Dispatcher/UCs/DispatchThemeUC.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,WAAW,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,OAAgB,eAAgB,SAAQ,WAAW;IAAzD;;QAEW,gBAAW,GAAG,kBAAkB,CAAC;IA+B5C,CAAC;IA3BC,MAAM,CAAC,GAAG,CAAC,SAAoB;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAkB,eAAe,CAAC,IAAI,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS,CAAC,aAAa,CAAC,aAAa,CACnC,qBAAqB,EACrB,+CAA+C,GAAG,SAAS,CAAC,EAAE,CAC/D,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,EAAU,EACV,UAAyB;QAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,aAAa,CACtB,yBAAyB,EACzB,kCAAkC,GAAG,EAAE,CACxC,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;;AA/Be,oBAAI,GAAG,iBAAiB,AAApB,CAAqB;AAkC3C,MAAM,UAAU,mBAAmB,CAAC,SAAoB;IACtD,OAAO,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,kBAAmB,SAAQ,eAAe;IAI9C,IAAY,KAAK;QACf,OAAO,IAAI,CAAC,kBAAkB,CAAkB,eAAe,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAE5C,MAAM,MAAM,GAAkB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAE7D,MAAM,OAAO,GAAG;YACd,MAAM;SACP,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CACpC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,cAAc,EACnB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;QAxBhC,mBAAc,GAAG,CAAC,CAAC;QA0B1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,CACtC,kBAAkB,CAAC,IAAI,CACxB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CACR,oGAAoG,CACrG,CAAC;YACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectRepo, AppObjectUC } from \"@vived/core\";\nimport { HostThemeEntity } from \"../../ThemeColors\";\nimport { HostDispatchEntity } from \"../Entities\";\n\nexport abstract class DispatchThemeUC extends AppObjectUC {\n static readonly type = \"DispatchThemeUC\";\n readonly requestType = \"SET_THEME_COLORS\";\n\n abstract doDispatch(): void;\n\n static get(appObject: AppObject): DispatchThemeUC | undefined {\n const asset = appObject.getComponent<DispatchThemeUC>(DispatchThemeUC.type);\n if (!asset) {\n appObject.appObjectRepo.submitWarning(\n \"DispatchThemeUC.get\",\n \"Unable to find DispatchThemeUC on app object \" + appObject.id\n );\n }\n return asset;\n }\n\n static getByID(\n id: string,\n appObjects: AppObjectRepo\n ): DispatchThemeUC | undefined {\n const appObject = appObjects.get(id);\n\n if (!appObject) {\n appObjects.submitWarning(\n \"DispatchThemeUC.getByID\",\n \"Unable to find App Object by id \" + id\n );\n return undefined;\n }\n\n return DispatchThemeUC.get(appObject);\n }\n}\n\nexport function makeDispatchThemeUC(appObject: AppObject): DispatchThemeUC {\n return new DispatchThemeUCImp(appObject);\n}\n\nclass DispatchThemeUCImp extends DispatchThemeUC {\n readonly requestVersion = 1;\n private dispatcher?: HostDispatchEntity;\n\n private get theme() {\n return this.getCachedSingleton<HostThemeEntity>(HostThemeEntity.type);\n }\n\n doDispatch(): void {\n if (!this.dispatcher || !this.theme) return;\n\n const colors: ColorSchemeV1 = { ...this.theme.activeScheme };\n\n const payload = {\n colors\n };\n\n this.dispatcher.formRequestAndDispatch(\n this.requestType,\n this.requestVersion,\n payload\n );\n }\n\n constructor(appObject: AppObject) {\n super(appObject, DispatchThemeUC.type);\n\n this.dispatcher = appObject.getComponent<HostDispatchEntity>(\n HostDispatchEntity.type\n );\n if (!this.dispatcher) {\n this.error(\n \"UC has been added to an App Object that does not have a HostDispatchEntity. Add a dispatcher first\"\n );\n this.dispose();\n }\n }\n}\n\nexport interface ColorSchemeV1 {\n primary: string;\n onPrimary: string;\n primaryContainer: string;\n onPrimaryContainer: string;\n primaryFixed: string;\n onPrimaryFixed: string;\n primaryFixedDim: string;\n onPrimaryFixedVariant: string;\n secondary: string;\n onSecondary: string;\n secondaryContainer: string;\n onSecondaryContainer: string;\n secondaryFixed: string;\n onSecondaryFixed: string;\n secondaryFixedDim: string;\n onSecondaryFixedVariant: string;\n tertiary: string;\n onTertiary: string;\n tertiaryContainer: string;\n onTertiaryContainer: string;\n tertiaryFixed: string;\n onTertiaryFixed: string;\n tertiaryFixedDim: string;\n onTertiaryFixedVariant: string;\n error: string;\n onError: string;\n errorContainer: string;\n onErrorContainer: string;\n success: string;\n onSuccess: string;\n successContainer: string;\n onSuccessContainer: string;\n warning: string;\n onWarning: string;\n warningContainer: string;\n onWarningContainer: string;\n info: string;\n onInfo: string;\n infoContainer: string;\n onInfoContainer: string;\n outline: string;\n background: string;\n onBackground: string;\n surface: string;\n onSurface: string;\n surfaceVariant: string;\n onSurfaceVariant: string;\n inverseSurface: string;\n inverseOnSurface: string;\n inversePrimary: string;\n shadow: string;\n surfaceTint: string;\n outlineVariant: string;\n scrim: string;\n surfaceContainerHighest: string;\n surfaceContainerHigh: string;\n surfaceContainer: string;\n surfaceContainerLow: string;\n surfaceContainerLowest: string;\n surfaceBright: string;\n surfaceDim: string;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Dispatcher/UCs/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from \"./DispatchDisposeAppUC\";\r\nexport * from \"./DispatchEnableFeatureUC\";\r\nexport * from \"./DispatchIsAuthoringUC\";\r\nexport * from \"./DispatchSetDevModeUC\";\r\nexport * from \"./DispatchSetStateUC\";\r\nexport * from \"./DispatchShowBabylonInspectorUC\";\r\nexport * from \"./DispatchStartAppUC\";\r\nexport * from \"./DispatchStartBrowseChannelsUC\";\r\nexport * from \"./DispatchStartZSpaceUC\";\r\nexport * from \"./DispatchStopAppUC\";\r\nexport * from \"./DispatchStopZSpaceUC\";\r\nexport * from \"./DispatchThemeUC\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Dispatcher/UCs/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from \"./DispatchDisposeAppUC\";\nexport * from \"./DispatchEnableFeatureUC\";\nexport * from \"./DispatchIsAuthoringUC\";\nexport * from \"./DispatchSetDevModeUC\";\nexport * from \"./DispatchSetStateUC\";\nexport * from \"./DispatchShowBabylonInspectorUC\";\nexport * from \"./DispatchStartAppUC\";\nexport * from \"./DispatchStartBrowseChannelsUC\";\nexport * from \"./DispatchStartZSpaceUC\";\nexport * from \"./DispatchStopAppUC\";\nexport * from \"./DispatchStopZSpaceUC\";\nexport * from \"./DispatchThemeUC\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"setupStandardHostDispatchers.js","sourceRoot":"","sources":["../../../src/Dispatcher/setupStandardHostDispatchers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,OAAO,CAAC;AAEf,MAAM,UAAU,4BAA4B,CAAC,SAAoB;IAC/D,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACvC,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACrC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACrC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC","sourcesContent":["import { AppObject } from \"@vived/core\";\r\nimport {\r\n makeDispatchDisposeAppUC,\r\n makeDispatchEnableFeatureUC,\r\n makeDispatchIsAuthoringUC,\r\n makeDispatchSetDevModeUC,\r\n makeDispatchSetStateUC,\r\n makeDispatchStartAppUC,\r\n makeDispatchStartZSpaceUC,\r\n makeDispatchStopAppUC,\r\n makeDispatchStopZSpaceUC,\r\n makeDispatchThemeUC\r\n} from \"./UCs\";\r\n\r\nexport function setupStandardHostDispatchers(appObject: AppObject) {\r\n makeDispatchDisposeAppUC(appObject);\r\n makeDispatchEnableFeatureUC(appObject);\r\n makeDispatchIsAuthoringUC(appObject);\r\n makeDispatchSetDevModeUC(appObject);\r\n makeDispatchSetStateUC(appObject);\r\n makeDispatchStartAppUC(appObject);\r\n makeDispatchStartZSpaceUC(appObject);\r\n makeDispatchStopAppUC(appObject);\r\n makeDispatchStopZSpaceUC(appObject);\r\n makeDispatchThemeUC(appObject);\r\n}\r\n"]}
1
+ {"version":3,"file":"setupStandardHostDispatchers.js","sourceRoot":"","sources":["../../../src/Dispatcher/setupStandardHostDispatchers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,OAAO,CAAC;AAEf,MAAM,UAAU,4BAA4B,CAAC,SAAoB;IAC/D,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACvC,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACrC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,yBAAyB,CAAC,SAAS,CAAC,CAAC;IACrC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC","sourcesContent":["import { AppObject } from \"@vived/core\";\nimport {\n makeDispatchDisposeAppUC,\n makeDispatchEnableFeatureUC,\n makeDispatchIsAuthoringUC,\n makeDispatchSetDevModeUC,\n makeDispatchSetStateUC,\n makeDispatchStartAppUC,\n makeDispatchStartZSpaceUC,\n makeDispatchStopAppUC,\n makeDispatchStopZSpaceUC,\n makeDispatchThemeUC\n} from \"./UCs\";\n\nexport function setupStandardHostDispatchers(appObject: AppObject) {\n makeDispatchDisposeAppUC(appObject);\n makeDispatchEnableFeatureUC(appObject);\n makeDispatchIsAuthoringUC(appObject);\n makeDispatchSetDevModeUC(appObject);\n makeDispatchSetStateUC(appObject);\n makeDispatchStartAppUC(appObject);\n makeDispatchStartZSpaceUC(appObject);\n makeDispatchStopAppUC(appObject);\n makeDispatchStopZSpaceUC(appObject);\n makeDispatchThemeUC(appObject);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"HostHandler.js","sourceRoot":"","sources":["../../../../src/Handler/Entities/HostHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectEntity } from \"@vived/core\";\r\nimport { Handler, Request } from \"@vived/core\";\r\n\r\nexport interface RequestHandler {\r\n readonly requestType: string;\r\n handleRequest: (version: number, payload?: unknown) => void;\r\n}\r\n\r\n/**\r\n * The outcome of an inbound Request, as seen at the handler chokepoint:\r\n * \"handled\" (a registered handler ran), \"unsupported\" (no handler registered\r\n * for the type), or \"threw\" (the handler raised).\r\n */\r\nexport type HandlerOutcome = \"handled\" | \"unsupported\" | \"threw\";\r\n\r\n/**\r\n * Passive observer of inbound Requests. Notified after each Request is routed,\r\n * with the outcome. Purely observational — see the passivity contract in\r\n * ADR-0002: an observer must never alter, delay, or fail the Request.\r\n */\r\nexport type HandlerObserver = (\r\n request: Request,\r\n outcome: HandlerOutcome\r\n) => void;\r\n\r\nexport abstract class HostHandlerEntity extends AppObjectEntity {\r\n static type = \"HostHandlerEntity\";\r\n\r\n static get(appObject: AppObject) {\r\n return appObject.getComponent<HostHandlerEntity>(HostHandlerEntity.type);\r\n }\r\n\r\n abstract handler: Handler;\r\n abstract registerRequestHandler: (requestHandler: RequestHandler) => void;\r\n\r\n /**\r\n * Optional passive observer of inbound Requests (ADR-0002). Unset by default,\r\n * so production hosts pay nothing and behave exactly as before.\r\n */\r\n abstract requestObserver?: HandlerObserver;\r\n}\r\n\r\nexport function makeHostHandlerEntity(appObject: AppObject): HostHandlerEntity {\r\n return new RequestHandlerImp(appObject);\r\n}\r\n\r\nclass RequestHandlerImp extends HostHandlerEntity {\r\n private handlers = new Map<string, RequestHandler>();\r\n\r\n requestObserver?: HandlerObserver;\r\n\r\n /**\r\n * Notify the passive observer, if any. Wrapped so a throwing or slow observer\r\n * can never alter, delay, or fail the Request (ADR-0002).\r\n */\r\n private notifyObserver = (request: Request, outcome: HandlerOutcome) => {\r\n if (!this.requestObserver) return;\r\n try {\r\n this.requestObserver(request, outcome);\r\n } catch {\r\n // Passive: an observer failure must never affect handling.\r\n }\r\n };\r\n\r\n handler: Handler = (request: Request): void => {\r\n const handler = this.handlers.get(request.type);\r\n\r\n if (!handler) {\r\n this.warn(`Unsupported request type received: ${request.type}`);\r\n this.notifyObserver(request, \"unsupported\");\r\n return;\r\n }\r\n\r\n try {\r\n handler.handleRequest(request.version, request.payload);\r\n this.notifyObserver(request, \"handled\");\r\n } catch (e) {\r\n this.warn(`${e}`);\r\n this.notifyObserver(request, \"threw\");\r\n }\r\n };\r\n\r\n registerRequestHandler = (handler: RequestHandler): void => {\r\n if (this.handlers.has(handler.requestType)) {\r\n this.warn(\r\n `More than one handler is being registered for ${handler.requestType}. Previous handler is being overwritten`\r\n );\r\n }\r\n\r\n this.handlers.set(handler.requestType, handler);\r\n };\r\n\r\n constructor(appObj: AppObject) {\r\n super(appObj, HostHandlerEntity.type);\r\n }\r\n}\r\n\r\nexport class UnsupportedRequestVersion extends Error {\r\n constructor(requestType: string, version: number) {\r\n const msg = `Version ${version} of request type ${requestType} is not supported`;\r\n super(msg);\r\n }\r\n}\r\n\r\nexport class ActionNotImplemented extends Error {\r\n constructor(requestType: string) {\r\n const msg = `Action for request type ${requestType} is not implemented`;\r\n super(msg);\r\n }\r\n}\r\n\r\nexport class UnableToParsePayload extends Error {\r\n constructor(requestType: string, version: number, payload: string) {\r\n const msg = `Unable to parse paylod for version ${version} of request type ${requestType}: ${payload}`;\r\n super(msg);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"HostHandler.js","sourceRoot":"","sources":["../../../../src/Handler/Entities/HostHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectEntity } from \"@vived/core\";\nimport { Handler, Request } from \"@vived/core\";\n\nexport interface RequestHandler {\n readonly requestType: string;\n handleRequest: (version: number, payload?: unknown) => void;\n}\n\n/**\n * The outcome of an inbound Request, as seen at the handler chokepoint:\n * \"handled\" (a registered handler ran), \"unsupported\" (no handler registered\n * for the type), or \"threw\" (the handler raised).\n */\nexport type HandlerOutcome = \"handled\" | \"unsupported\" | \"threw\";\n\n/**\n * Passive observer of inbound Requests. Notified after each Request is routed,\n * with the outcome. Purely observational — see the passivity contract in\n * ADR-0002: an observer must never alter, delay, or fail the Request.\n */\nexport type HandlerObserver = (\n request: Request,\n outcome: HandlerOutcome\n) => void;\n\nexport abstract class HostHandlerEntity extends AppObjectEntity {\n static type = \"HostHandlerEntity\";\n\n static get(appObject: AppObject) {\n return appObject.getComponent<HostHandlerEntity>(HostHandlerEntity.type);\n }\n\n abstract handler: Handler;\n abstract registerRequestHandler: (requestHandler: RequestHandler) => void;\n\n /**\n * Optional passive observer of inbound Requests (ADR-0002). Unset by default,\n * so production hosts pay nothing and behave exactly as before.\n */\n abstract requestObserver?: HandlerObserver;\n}\n\nexport function makeHostHandlerEntity(appObject: AppObject): HostHandlerEntity {\n return new RequestHandlerImp(appObject);\n}\n\nclass RequestHandlerImp extends HostHandlerEntity {\n private handlers = new Map<string, RequestHandler>();\n\n requestObserver?: HandlerObserver;\n\n /**\n * Notify the passive observer, if any. Wrapped so a throwing or slow observer\n * can never alter, delay, or fail the Request (ADR-0002).\n */\n private notifyObserver = (request: Request, outcome: HandlerOutcome) => {\n if (!this.requestObserver) return;\n try {\n this.requestObserver(request, outcome);\n } catch {\n // Passive: an observer failure must never affect handling.\n }\n };\n\n handler: Handler = (request: Request): void => {\n const handler = this.handlers.get(request.type);\n\n if (!handler) {\n this.warn(`Unsupported request type received: ${request.type}`);\n this.notifyObserver(request, \"unsupported\");\n return;\n }\n\n try {\n handler.handleRequest(request.version, request.payload);\n this.notifyObserver(request, \"handled\");\n } catch (e) {\n this.warn(`${e}`);\n this.notifyObserver(request, \"threw\");\n }\n };\n\n registerRequestHandler = (handler: RequestHandler): void => {\n if (this.handlers.has(handler.requestType)) {\n this.warn(\n `More than one handler is being registered for ${handler.requestType}. Previous handler is being overwritten`\n );\n }\n\n this.handlers.set(handler.requestType, handler);\n };\n\n constructor(appObj: AppObject) {\n super(appObj, HostHandlerEntity.type);\n }\n}\n\nexport class UnsupportedRequestVersion extends Error {\n constructor(requestType: string, version: number) {\n const msg = `Version ${version} of request type ${requestType} is not supported`;\n super(msg);\n }\n}\n\nexport class ActionNotImplemented extends Error {\n constructor(requestType: string) {\n const msg = `Action for request type ${requestType} is not implemented`;\n super(msg);\n }\n}\n\nexport class UnableToParsePayload extends Error {\n constructor(requestType: string, version: number, payload: string) {\n const msg = `Unable to parse paylod for version ${version} of request type ${requestType}: ${payload}`;\n super(msg);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GetAssetStreamURLHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/GetAssetStreamURLHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,iBAAiB,EAEjB,oBAAoB,EACpB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAOrB,MAAM,OAAgB,wBACpB,SAAQ,WAAW;IADrB;;QAMW,gBAAW,GAAG,sBAAsB,CAAC;IAIhD,CAAC;;AANiB,6BAAI,GAAG,0BAA0B,AAA7B,CAA8B;AAQpD,MAAM,UAAU,4BAA4B,CAC1C,SAAoB;IAEpB,OAAO,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,2BAA4B,SAAQ,wBAAwB;IAChE,IAAY,UAAU;QACpB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,kBAAkB,CAAa,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAwCO,aAAa,CAAC,OAAgB;QACpC,MAAM,WAAW,GAAG,OAAqB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAClD,MAAM,IAAI,oBAAoB,CAC5B,IAAI,CAAC,WAAW,EAChB,CAAC,EACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACxB,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QApDlD,WAAM,GAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YACtD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBACxC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,UAAU;iBACZ,QAAQ,CAAC,OAAO,CAAC;iBACjB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,oEAAoE;gBACpE,wEAAwE;gBACxE,sEAAsE;gBACtE,qEAAqE;gBACrE,uEAAuE;gBACvE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAClB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;gBAClB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACtB,QAAQ,CAAC,SAAS,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QAEF,kBAAa,GAAG,CAAC,OAAe,EAAE,OAAgB,EAAE,EAAE;YACpD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC;QAkBA,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\r\nimport { GetAssetUC } from \"../../Assets\";\r\nimport {\r\n HostHandlerEntity,\r\n RequestHandler,\r\n UnableToParsePayload,\r\n UnsupportedRequestVersion\r\n} from \"../Entities\";\r\n\r\nexport type GetAssetStreamURLAction = (\r\n assetID: string,\r\n callback: (url: string | undefined) => void\r\n) => void;\r\n\r\nexport abstract class GetAssetStreamURLHandler\r\n extends AppObjectUC\r\n implements RequestHandler\r\n{\r\n static readonly type = \"GetAssetStreamURLHandler\";\r\n\r\n readonly requestType = \"GET_ASSET_STREAM_URL\";\r\n\r\n abstract action: GetAssetStreamURLAction;\r\n abstract handleRequest: (version: number, payload?: unknown) => void;\r\n}\r\n\r\nexport function makeGetAssetStreamURLHandler(\r\n appObject: AppObject\r\n): GetAssetStreamURLHandler {\r\n return new GetAssetStreamURLHandlerImp(appObject);\r\n}\r\n\r\nclass GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {\r\n private get getAssetUC() {\r\n try {\r\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type);\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n action: GetAssetStreamURLAction = (assetID, callback) => {\r\n if (!this.getAssetUC) {\r\n this.error(\"Unable to find GetAssetUC\");\r\n callback(undefined);\r\n return;\r\n }\r\n\r\n this.getAssetUC\r\n .getAsset(assetID)\r\n .then((asset) => {\r\n // Prefer the remote streaming URL. For a freshly uploaded asset the\r\n // backend has not produced a fileURL yet, but the host is still holding\r\n // the uploaded bytes locally — fall back to the blob URL so it can be\r\n // streamed this session without a reload. blobURL is the managed URL\r\n // created by setFile (revoked on dispose), so no new object URL leaks.\r\n if (asset.fileURL) {\r\n callback(asset.fileURL);\r\n } else if (asset.blobURL) {\r\n callback(asset.blobURL);\r\n } else {\r\n callback(undefined);\r\n }\r\n })\r\n .catch((e: Error) => {\r\n this.error(e.message);\r\n callback(undefined);\r\n });\r\n };\r\n\r\n handleRequest = (version: number, payload: unknown) => {\r\n if (version === 1) {\r\n const { assetID, callback } = this.castPayloadV1(payload);\r\n this.action(assetID, callback);\r\n } else {\r\n throw new UnsupportedRequestVersion(this.requestType, version);\r\n }\r\n };\r\n\r\n private castPayloadV1(payload: unknown): Payload_V1 {\r\n const castPayload = payload as Payload_V1;\r\n if (!castPayload.assetID || !castPayload.callback) {\r\n throw new UnableToParsePayload(\r\n this.requestType,\r\n 1,\r\n JSON.stringify(payload)\r\n );\r\n }\r\n\r\n return castPayload;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, GetAssetStreamURLHandler.type);\r\n\r\n const hostHandler = HostHandlerEntity.get(appObject);\r\n if (!hostHandler) {\r\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\r\n return;\r\n }\r\n\r\n hostHandler.registerRequestHandler(this);\r\n }\r\n}\r\n\r\ntype Payload_V1 = {\r\n assetID: string;\r\n callback: (url: string | undefined) => void;\r\n};\r\n"]}
1
+ {"version":3,"file":"GetAssetStreamURLHandler.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/GetAssetStreamURLHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObject, AppObjectUC } from \"@vived/core\";\nimport { GetAssetUC } from \"../../Assets\";\nimport {\n HostHandlerEntity,\n RequestHandler,\n UnableToParsePayload,\n UnsupportedRequestVersion\n} from \"../Entities\";\n\nexport type GetAssetStreamURLAction = (\n assetID: string,\n callback: (url: string | undefined) => void\n) => void;\n\nexport abstract class GetAssetStreamURLHandler\n extends AppObjectUC\n implements RequestHandler\n{\n static readonly type = \"GetAssetStreamURLHandler\";\n\n readonly requestType = \"GET_ASSET_STREAM_URL\";\n\n abstract action: GetAssetStreamURLAction;\n abstract handleRequest: (version: number, payload?: unknown) => void;\n}\n\nexport function makeGetAssetStreamURLHandler(\n appObject: AppObject\n): GetAssetStreamURLHandler {\n return new GetAssetStreamURLHandlerImp(appObject);\n}\n\nclass GetAssetStreamURLHandlerImp extends GetAssetStreamURLHandler {\n private get getAssetUC() {\n try {\n return this.getCachedSingleton<GetAssetUC>(GetAssetUC.type);\n } catch {\n return undefined;\n }\n }\n\n action: GetAssetStreamURLAction = (assetID, callback) => {\n if (!this.getAssetUC) {\n this.error(\"Unable to find GetAssetUC\");\n callback(undefined);\n return;\n }\n\n this.getAssetUC\n .getAsset(assetID)\n .then((asset) => {\n // Prefer the remote streaming URL. For a freshly uploaded asset the\n // backend has not produced a fileURL yet, but the host is still holding\n // the uploaded bytes locally — fall back to the blob URL so it can be\n // streamed this session without a reload. blobURL is the managed URL\n // created by setFile (revoked on dispose), so no new object URL leaks.\n if (asset.fileURL) {\n callback(asset.fileURL);\n } else if (asset.blobURL) {\n callback(asset.blobURL);\n } else {\n callback(undefined);\n }\n })\n .catch((e: Error) => {\n this.error(e.message);\n callback(undefined);\n });\n };\n\n handleRequest = (version: number, payload: unknown) => {\n if (version === 1) {\n const { assetID, callback } = this.castPayloadV1(payload);\n this.action(assetID, callback);\n } else {\n throw new UnsupportedRequestVersion(this.requestType, version);\n }\n };\n\n private castPayloadV1(payload: unknown): Payload_V1 {\n const castPayload = payload as Payload_V1;\n if (!castPayload.assetID || !castPayload.callback) {\n throw new UnableToParsePayload(\n this.requestType,\n 1,\n JSON.stringify(payload)\n );\n }\n\n return castPayload;\n }\n\n constructor(appObject: AppObject) {\n super(appObject, GetAssetStreamURLHandler.type);\n\n const hostHandler = HostHandlerEntity.get(appObject);\n if (!hostHandler) {\n this.error(\"UC added to an entity that does not have HostHandlerEntity\");\n return;\n }\n\n hostHandler.registerRequestHandler(this);\n }\n}\n\ntype Payload_V1 = {\n assetID: string;\n callback: (url: string | undefined) => void;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC","sourcesContent":["export * from \"./CallbackAssetDTO\";\r\nexport * from \"./CloseAssetSystemPlugin\";\r\nexport * from \"./GetAssetBlobURLHandler\";\r\nexport * from \"./GetAssetFolderURLHandler\";\r\nexport * from \"./GetAssetMetaHandler\";\r\nexport * from \"./GetAssetStreamURLHandler\";\r\nexport * from \"./GetAssetsForOwnerHandler\";\r\nexport * from \"./GetLinkedAssetsHandler\";\r\nexport * from \"./GoToNextStateHandler\";\r\nexport * from \"./GoToPreviousStateHandler\";\r\nexport * from \"./HasNextStateHandler\";\r\nexport * from \"./HasPreviousStateHandler\";\r\nexport * from \"./IsAssetFetchedHandler\";\r\nexport * from \"./IsZSpaceAvailableHandler\";\r\nexport * from \"./NewActivityAssetHandler\";\r\nexport * from \"./OnAppIsReadyHandler\";\r\nexport * from \"./OnStateChangeHandler\";\r\nexport * from \"./OnStateCompleteHandler\";\r\nexport * from \"./RegisterExternalStyleSheetsHandler\";\r\nexport * from \"./RestoreCurrentStateHandler\";\r\nexport * from \"./ShowAlertHandler\";\r\nexport * from \"./ShowConfirmHandler\";\r\nexport * from \"./ShowMarkDownEditorHandler\";\r\nexport * from \"./ShowSelectModelHandler\";\r\nexport * from \"./ShowSpinnerHandler\";\r\nexport * from \"./StartZSpaceHandler\";\r\nexport * from \"./StopZSpaceHandler\";\r\nexport * from \"./SubmitActivityAssetHandler\";\r\nexport * from \"./SubmitLogHandler\";\r\nexport * from \"./SubmitResultHandler\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/Handler/UCs/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sCAAsC,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC","sourcesContent":["export * from \"./CallbackAssetDTO\";\nexport * from \"./CloseAssetSystemPlugin\";\nexport * from \"./GetAssetBlobURLHandler\";\nexport * from \"./GetAssetFolderURLHandler\";\nexport * from \"./GetAssetMetaHandler\";\nexport * from \"./GetAssetStreamURLHandler\";\nexport * from \"./GetAssetsForOwnerHandler\";\nexport * from \"./GetLinkedAssetsHandler\";\nexport * from \"./GoToNextStateHandler\";\nexport * from \"./GoToPreviousStateHandler\";\nexport * from \"./HasNextStateHandler\";\nexport * from \"./HasPreviousStateHandler\";\nexport * from \"./IsAssetFetchedHandler\";\nexport * from \"./IsZSpaceAvailableHandler\";\nexport * from \"./NewActivityAssetHandler\";\nexport * from \"./OnAppIsReadyHandler\";\nexport * from \"./OnStateChangeHandler\";\nexport * from \"./OnStateCompleteHandler\";\nexport * from \"./RegisterExternalStyleSheetsHandler\";\nexport * from \"./RestoreCurrentStateHandler\";\nexport * from \"./ShowAlertHandler\";\nexport * from \"./ShowConfirmHandler\";\nexport * from \"./ShowMarkDownEditorHandler\";\nexport * from \"./ShowSelectModelHandler\";\nexport * from \"./ShowSpinnerHandler\";\nexport * from \"./StartZSpaceHandler\";\nexport * from \"./StopZSpaceHandler\";\nexport * from \"./SubmitActivityAssetHandler\";\nexport * from \"./SubmitLogHandler\";\nexport * from \"./SubmitResultHandler\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"setupStandardHostHandlers.js","sourceRoot":"","sources":["../../../src/Handler/setupStandardHostHandlers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,sCAAsC,EACtC,oBAAoB,EACpB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,OAAO,CAAC;AAEf,MAAM,UAAU,yBAAyB,CAAC,SAAoB;IAC5D,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACvC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,sCAAsC,CAAC,SAAS,CAAC,CAAC;IAClD,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACzC,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,8BAA8B,CAAC,SAAS,CAAC,CAAC;IAC1C,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { AppObject } from \"@vived/core\";\r\nimport {\r\n makeGetAssetBlobURLHandler,\r\n makeGetAssetFolderURLHandler,\r\n makeGetAssetMetaHandler,\r\n makeGetAssetStreamURLHandler,\r\n makeGetLinkedAssetsHandler,\r\n makeGoToNextStateHandler,\r\n makeGoToPreviousStateHandler,\r\n makeHasNextStateHandler,\r\n makeHasPreviousStateHandler,\r\n makeIsZSpaceAvailableHandler,\r\n makeOnAppIsReadyHandler,\r\n makeOnStateChangeHandler,\r\n makeOnStateCompleteHandler,\r\n makeRegisterExternalStyleSheetsHandler,\r\n makeShowAlertHandler,\r\n makeShowConfirmHandler,\r\n makeShowMarkDownEditorHandler,\r\n makeShowSelectModelHandler,\r\n makeShowSpinnerHandler,\r\n makeStartZSpaceHandler,\r\n makeStopZSpaceHandler,\r\n makeSubmitActivityAssetHandler,\r\n makeSubmitLogHandler,\r\n makeSubmitResultHandler\r\n} from \"./UCs\";\r\n\r\nexport function setupStandardHostHandlers(appObject: AppObject) {\r\n makeGetAssetBlobURLHandler(appObject);\r\n makeGetAssetFolderURLHandler(appObject);\r\n makeGetAssetMetaHandler(appObject);\r\n makeGetAssetStreamURLHandler(appObject);\r\n makeGetLinkedAssetsHandler(appObject);\r\n makeGoToNextStateHandler(appObject);\r\n makeGoToPreviousStateHandler(appObject);\r\n makeHasNextStateHandler(appObject);\r\n makeHasPreviousStateHandler(appObject);\r\n makeIsZSpaceAvailableHandler(appObject);\r\n makeOnAppIsReadyHandler(appObject);\r\n makeOnStateChangeHandler(appObject);\r\n makeOnStateCompleteHandler(appObject);\r\n makeRegisterExternalStyleSheetsHandler(appObject);\r\n makeShowAlertHandler(appObject);\r\n makeShowConfirmHandler(appObject);\r\n makeShowMarkDownEditorHandler(appObject);\r\n makeShowSelectModelHandler(appObject);\r\n makeShowSpinnerHandler(appObject);\r\n makeStartZSpaceHandler(appObject);\r\n makeStopZSpaceHandler(appObject);\r\n makeSubmitActivityAssetHandler(appObject);\r\n makeSubmitLogHandler(appObject);\r\n makeSubmitResultHandler(appObject);\r\n}\r\n"]}
1
+ {"version":3,"file":"setupStandardHostHandlers.js","sourceRoot":"","sources":["../../../src/Handler/setupStandardHostHandlers.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,sCAAsC,EACtC,oBAAoB,EACpB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,OAAO,CAAC;AAEf,MAAM,UAAU,yBAAyB,CAAC,SAAoB;IAC5D,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACvC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACxC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,sCAAsC,CAAC,SAAS,CAAC,CAAC;IAClD,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACzC,0BAA0B,CAAC,SAAS,CAAC,CAAC;IACtC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACjC,8BAA8B,CAAC,SAAS,CAAC,CAAC;IAC1C,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAChC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC","sourcesContent":["import { AppObject } from \"@vived/core\";\nimport {\n makeGetAssetBlobURLHandler,\n makeGetAssetFolderURLHandler,\n makeGetAssetMetaHandler,\n makeGetAssetStreamURLHandler,\n makeGetLinkedAssetsHandler,\n makeGoToNextStateHandler,\n makeGoToPreviousStateHandler,\n makeHasNextStateHandler,\n makeHasPreviousStateHandler,\n makeIsZSpaceAvailableHandler,\n makeOnAppIsReadyHandler,\n makeOnStateChangeHandler,\n makeOnStateCompleteHandler,\n makeRegisterExternalStyleSheetsHandler,\n makeShowAlertHandler,\n makeShowConfirmHandler,\n makeShowMarkDownEditorHandler,\n makeShowSelectModelHandler,\n makeShowSpinnerHandler,\n makeStartZSpaceHandler,\n makeStopZSpaceHandler,\n makeSubmitActivityAssetHandler,\n makeSubmitLogHandler,\n makeSubmitResultHandler\n} from \"./UCs\";\n\nexport function setupStandardHostHandlers(appObject: AppObject) {\n makeGetAssetBlobURLHandler(appObject);\n makeGetAssetFolderURLHandler(appObject);\n makeGetAssetMetaHandler(appObject);\n makeGetAssetStreamURLHandler(appObject);\n makeGetLinkedAssetsHandler(appObject);\n makeGoToNextStateHandler(appObject);\n makeGoToPreviousStateHandler(appObject);\n makeHasNextStateHandler(appObject);\n makeHasPreviousStateHandler(appObject);\n makeIsZSpaceAvailableHandler(appObject);\n makeOnAppIsReadyHandler(appObject);\n makeOnStateChangeHandler(appObject);\n makeOnStateCompleteHandler(appObject);\n makeRegisterExternalStyleSheetsHandler(appObject);\n makeShowAlertHandler(appObject);\n makeShowConfirmHandler(appObject);\n makeShowMarkDownEditorHandler(appObject);\n makeShowSelectModelHandler(appObject);\n makeShowSpinnerHandler(appObject);\n makeStartZSpaceHandler(appObject);\n makeStopZSpaceHandler(appObject);\n makeSubmitActivityAssetHandler(appObject);\n makeSubmitLogHandler(appObject);\n makeSubmitResultHandler(appObject);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"HostThemeEntity.js","sourceRoot":"","sources":["../../../../src/ThemeColors/Entities/HostThemeEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { Color, MemoizedString } from \"@vived/core\";\r\nimport {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectEntity,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\n\r\nexport enum ThemeColorType {\r\n primary = \"primary\",\r\n onPrimary = \"onPrimary\",\r\n primaryContainer = \"primaryContainer\",\r\n onPrimaryContainer = \"onPrimaryContainer\",\r\n primaryFixed = \"primaryFixed\",\r\n onPrimaryFixed = \"onPrimaryFixed\",\r\n primaryFixedDim = \"primaryFixedDim\",\r\n onPrimaryFixedVariant = \"onPrimaryFixedVariant\",\r\n secondary = \"secondary\",\r\n onSecondary = \"onSecondary\",\r\n secondaryContainer = \"secondaryContainer\",\r\n onSecondaryContainer = \"onSecondaryContainer\",\r\n secondaryFixed = \"secondaryFixed\",\r\n onSecondaryFixed = \"onSecondaryFixed\",\r\n secondaryFixedDim = \"secondaryFixedDim\",\r\n onSecondaryFixedVariant = \"onSecondaryFixedVariant\",\r\n tertiary = \"tertiary\",\r\n onTertiary = \"onTertiary\",\r\n tertiaryContainer = \"tertiaryContainer\",\r\n onTertiaryContainer = \"onTertiaryContainer\",\r\n tertiaryFixed = \"tertiaryFixed\",\r\n onTertiaryFixed = \"onTertiaryFixed\",\r\n tertiaryFixedDim = \"tertiaryFixedDim\",\r\n onTertiaryFixedVariant = \"onTertiaryFixedVariant\",\r\n error = \"error\",\r\n onError = \"onError\",\r\n errorContainer = \"errorContainer\",\r\n onErrorContainer = \"onErrorContainer\",\r\n success = \"success\",\r\n onSuccess = \"onSuccess\",\r\n successContainer = \"successContainer\",\r\n onSuccessContainer = \"onSuccessContainer\",\r\n warning = \"warning\",\r\n onWarning = \"onWarning\",\r\n warningContainer = \"warningContainer\",\r\n onWarningContainer = \"onWarningContainer\",\r\n info = \"info\",\r\n onInfo = \"onInfo\",\r\n infoContainer = \"infoContainer\",\r\n onInfoContainer = \"onInfoContainer\",\r\n outline = \"outline\",\r\n background = \"background\",\r\n onBackground = \"onBackground\",\r\n surface = \"surface\",\r\n onSurface = \"onSurface\",\r\n surfaceVariant = \"surfaceVariant\",\r\n onSurfaceVariant = \"onSurfaceVariant\",\r\n inverseSurface = \"inverseSurface\",\r\n inverseOnSurface = \"inverseOnSurface\",\r\n inversePrimary = \"inversePrimary\",\r\n shadow = \"shadow\",\r\n surfaceTint = \"surfaceTint\",\r\n outlineVariant = \"outlineVariant\",\r\n scrim = \"scrim\",\r\n surfaceContainerHighest = \"surfaceContainerHighest\",\r\n surfaceContainerHigh = \"surfaceContainerHigh\",\r\n surfaceContainer = \"surfaceContainer\",\r\n surfaceContainerLow = \"surfaceContainerLow\",\r\n surfaceContainerLowest = \"surfaceContainerLowest\",\r\n surfaceBright = \"surfaceBright\",\r\n surfaceDim = \"surfaceDim\"\r\n}\r\n\r\nexport interface ColorScheme {\r\n primary: string;\r\n onPrimary: string;\r\n primaryContainer: string;\r\n onPrimaryContainer: string;\r\n primaryFixed: string;\r\n onPrimaryFixed: string;\r\n primaryFixedDim: string;\r\n onPrimaryFixedVariant: string;\r\n secondary: string;\r\n onSecondary: string;\r\n secondaryContainer: string;\r\n onSecondaryContainer: string;\r\n secondaryFixed: string;\r\n onSecondaryFixed: string;\r\n secondaryFixedDim: string;\r\n onSecondaryFixedVariant: string;\r\n tertiary: string;\r\n onTertiary: string;\r\n tertiaryContainer: string;\r\n onTertiaryContainer: string;\r\n tertiaryFixed: string;\r\n onTertiaryFixed: string;\r\n tertiaryFixedDim: string;\r\n onTertiaryFixedVariant: string;\r\n error: string;\r\n onError: string;\r\n errorContainer: string;\r\n onErrorContainer: string;\r\n success: string;\r\n onSuccess: string;\r\n successContainer: string;\r\n onSuccessContainer: string;\r\n warning: string;\r\n onWarning: string;\r\n warningContainer: string;\r\n onWarningContainer: string;\r\n info: string;\r\n onInfo: string;\r\n infoContainer: string;\r\n onInfoContainer: string;\r\n outline: string;\r\n background: string;\r\n onBackground: string;\r\n surface: string;\r\n onSurface: string;\r\n surfaceVariant: string;\r\n onSurfaceVariant: string;\r\n inverseSurface: string;\r\n inverseOnSurface: string;\r\n inversePrimary: string;\r\n shadow: string;\r\n surfaceTint: string;\r\n outlineVariant: string;\r\n scrim: string;\r\n surfaceContainerHighest: string;\r\n surfaceContainerHigh: string;\r\n surfaceContainer: string;\r\n surfaceContainerLow: string;\r\n surfaceContainerLowest: string;\r\n surfaceBright: string;\r\n surfaceDim: string;\r\n}\r\n\r\nexport abstract class HostThemeEntity extends AppObjectEntity {\r\n static readonly type = \"HostThemeEntity\";\r\n\r\n abstract submitScheme(name: string, scheme: ColorScheme): void;\r\n abstract activeSchemeName: string;\r\n\r\n abstract get activeScheme(): ColorScheme;\r\n abstract getColorForType(type: ThemeColorType): Color;\r\n abstract getHexForType(type: ThemeColorType): string;\r\n\r\n static get = (appObjects: AppObjectRepo): HostThemeEntity | undefined =>\r\n getSingletonComponent(HostThemeEntity.type, appObjects);\r\n}\r\n\r\nexport function makeHostThemeEntity(appObject: AppObject) {\r\n return new HostThemeEntityImp(appObject);\r\n}\r\n\r\nclass HostThemeEntityImp extends HostThemeEntity {\r\n private schemeLookup = new Map<string, ColorScheme>();\r\n\r\n get activeScheme(): ColorScheme {\r\n return this.schemeLookup.get(this.activeSchemeName) ?? defaultScheme;\r\n }\r\n\r\n submitScheme = (name: string, scheme: ColorScheme) => {\r\n if (this.schemeLookup.has(name)) {\r\n this.warn(\"Duplicate scheme name submitted. Overwriting\");\r\n }\r\n\r\n this.schemeLookup.set(name, scheme);\r\n\r\n if (!this.activeSchemeName) {\r\n this.activeSchemeName = name;\r\n }\r\n };\r\n\r\n getHexForType(type: ThemeColorType): string {\r\n const scheme = this.schemeLookup.get(this.activeSchemeName);\r\n if (!scheme) {\r\n this.error(\"No active scheme\");\r\n return \"#000000\";\r\n }\r\n\r\n return scheme[type];\r\n }\r\n\r\n private memoizedActiveScheme = new MemoizedString(\"\", this.notifyOnChange);\r\n get activeSchemeName(): string {\r\n return this.memoizedActiveScheme.val;\r\n }\r\n\r\n set activeSchemeName(val: string) {\r\n if (!this.schemeLookup.has(val)) {\r\n this.warn(`Unknown theme schema: ${val}. Ignoring.`);\r\n return;\r\n }\r\n this.memoizedActiveScheme.val = val;\r\n }\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, HostThemeEntity.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n }\r\n\r\n getColorForType = (type: ThemeColorType): Color => {\r\n const scheme = this.schemeLookup.get(this.activeSchemeName);\r\n if (!scheme) {\r\n this.error(\"No active scheme\");\r\n return Color.RGB(0, 0, 0);\r\n }\r\n\r\n const colorHex = scheme[type];\r\n return Color.Hex(colorHex);\r\n };\r\n}\r\n\r\nexport const defaultScheme: ColorScheme = {\r\n primary: \"#7BD0FF\",\r\n onPrimary: \"#003549\",\r\n primaryContainer: \"#004C69\",\r\n onPrimaryContainer: \"#C4E7FF\",\r\n primaryFixed: \"#C4E7FF\",\r\n onPrimaryFixed: \"#001E2C\",\r\n primaryFixedDim: \"#7BD0FF\",\r\n onPrimaryFixedVariant: \"#004C69\",\r\n secondary: \"#B5C9D7\",\r\n onSecondary: \"#20333E\",\r\n secondaryContainer: \"#374955\",\r\n onSecondaryContainer: \"#D1E5F4\",\r\n secondaryFixed: \"#D1E5F4\",\r\n onSecondaryFixed: \"#0A1E28\",\r\n secondaryFixedDim: \"#B5C9D7\",\r\n onSecondaryFixedVariant: \"#374955\",\r\n tertiary: \"#CAC1E9\",\r\n onTertiary: \"#322C4C\",\r\n tertiaryContainer: \"#484264\",\r\n onTertiaryContainer: \"#E6DEFF\",\r\n tertiaryFixed: \"#E6DEFF\",\r\n onTertiaryFixed: \"#1D1736\",\r\n tertiaryFixedDim: \"#CAC1E9\",\r\n onTertiaryFixedVariant: \"#484264\",\r\n error: \"#FFB4AB\",\r\n onError: \"#690005\",\r\n errorContainer: \"#93000A\",\r\n onErrorContainer: \"#FFDAD6\",\r\n success: \"#7EE0B0\",\r\n onSuccess: \"#00391F\",\r\n successContainer: \"#005234\",\r\n onSuccessContainer: \"#9BFCCB\",\r\n warning: \"#FFB951\",\r\n onWarning: \"#452B00\",\r\n warningContainer: \"#633F00\",\r\n onWarningContainer: \"#FFDEA8\",\r\n info: \"#A2C9FF\",\r\n onInfo: \"#00325B\",\r\n infoContainer: \"#164A7F\",\r\n onInfoContainer: \"#D3E4FF\",\r\n outline: \"#8B9297\",\r\n background: \"#191C1E\",\r\n onBackground: \"#E1E2E5\",\r\n surface: \"#111416\",\r\n onSurface: \"#C5C6C9\",\r\n surfaceVariant: \"#41484D\",\r\n onSurfaceVariant: \"#C0C7CD\",\r\n inverseSurface: \"#E1E2E5\",\r\n inverseOnSurface: \"#191C1E\",\r\n inversePrimary: \"#00668A\",\r\n shadow: \"#000000\",\r\n surfaceTint: \"#7BD0FF\",\r\n outlineVariant: \"#41484D\",\r\n scrim: \"#000000\",\r\n surfaceContainerHighest: \"#333537\",\r\n surfaceContainerHigh: \"#282A2C\",\r\n surfaceContainer: \"#1D2022\",\r\n surfaceContainerLow: \"#191C1E\",\r\n surfaceContainerLowest: \"#0C0F10\",\r\n surfaceBright: \"#37393C\",\r\n surfaceDim: \"#111416\"\r\n};\r\n"]}
1
+ {"version":3,"file":"HostThemeEntity.js","sourceRoot":"","sources":["../../../../src/ThemeColors/Entities/HostThemeEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import { Color, MemoizedString } from \"@vived/core\";\nimport {\n getSingletonComponent,\n AppObject,\n AppObjectEntity,\n AppObjectRepo\n} from \"@vived/core\";\n\nexport enum ThemeColorType {\n primary = \"primary\",\n onPrimary = \"onPrimary\",\n primaryContainer = \"primaryContainer\",\n onPrimaryContainer = \"onPrimaryContainer\",\n primaryFixed = \"primaryFixed\",\n onPrimaryFixed = \"onPrimaryFixed\",\n primaryFixedDim = \"primaryFixedDim\",\n onPrimaryFixedVariant = \"onPrimaryFixedVariant\",\n secondary = \"secondary\",\n onSecondary = \"onSecondary\",\n secondaryContainer = \"secondaryContainer\",\n onSecondaryContainer = \"onSecondaryContainer\",\n secondaryFixed = \"secondaryFixed\",\n onSecondaryFixed = \"onSecondaryFixed\",\n secondaryFixedDim = \"secondaryFixedDim\",\n onSecondaryFixedVariant = \"onSecondaryFixedVariant\",\n tertiary = \"tertiary\",\n onTertiary = \"onTertiary\",\n tertiaryContainer = \"tertiaryContainer\",\n onTertiaryContainer = \"onTertiaryContainer\",\n tertiaryFixed = \"tertiaryFixed\",\n onTertiaryFixed = \"onTertiaryFixed\",\n tertiaryFixedDim = \"tertiaryFixedDim\",\n onTertiaryFixedVariant = \"onTertiaryFixedVariant\",\n error = \"error\",\n onError = \"onError\",\n errorContainer = \"errorContainer\",\n onErrorContainer = \"onErrorContainer\",\n success = \"success\",\n onSuccess = \"onSuccess\",\n successContainer = \"successContainer\",\n onSuccessContainer = \"onSuccessContainer\",\n warning = \"warning\",\n onWarning = \"onWarning\",\n warningContainer = \"warningContainer\",\n onWarningContainer = \"onWarningContainer\",\n info = \"info\",\n onInfo = \"onInfo\",\n infoContainer = \"infoContainer\",\n onInfoContainer = \"onInfoContainer\",\n outline = \"outline\",\n background = \"background\",\n onBackground = \"onBackground\",\n surface = \"surface\",\n onSurface = \"onSurface\",\n surfaceVariant = \"surfaceVariant\",\n onSurfaceVariant = \"onSurfaceVariant\",\n inverseSurface = \"inverseSurface\",\n inverseOnSurface = \"inverseOnSurface\",\n inversePrimary = \"inversePrimary\",\n shadow = \"shadow\",\n surfaceTint = \"surfaceTint\",\n outlineVariant = \"outlineVariant\",\n scrim = \"scrim\",\n surfaceContainerHighest = \"surfaceContainerHighest\",\n surfaceContainerHigh = \"surfaceContainerHigh\",\n surfaceContainer = \"surfaceContainer\",\n surfaceContainerLow = \"surfaceContainerLow\",\n surfaceContainerLowest = \"surfaceContainerLowest\",\n surfaceBright = \"surfaceBright\",\n surfaceDim = \"surfaceDim\"\n}\n\nexport interface ColorScheme {\n primary: string;\n onPrimary: string;\n primaryContainer: string;\n onPrimaryContainer: string;\n primaryFixed: string;\n onPrimaryFixed: string;\n primaryFixedDim: string;\n onPrimaryFixedVariant: string;\n secondary: string;\n onSecondary: string;\n secondaryContainer: string;\n onSecondaryContainer: string;\n secondaryFixed: string;\n onSecondaryFixed: string;\n secondaryFixedDim: string;\n onSecondaryFixedVariant: string;\n tertiary: string;\n onTertiary: string;\n tertiaryContainer: string;\n onTertiaryContainer: string;\n tertiaryFixed: string;\n onTertiaryFixed: string;\n tertiaryFixedDim: string;\n onTertiaryFixedVariant: string;\n error: string;\n onError: string;\n errorContainer: string;\n onErrorContainer: string;\n success: string;\n onSuccess: string;\n successContainer: string;\n onSuccessContainer: string;\n warning: string;\n onWarning: string;\n warningContainer: string;\n onWarningContainer: string;\n info: string;\n onInfo: string;\n infoContainer: string;\n onInfoContainer: string;\n outline: string;\n background: string;\n onBackground: string;\n surface: string;\n onSurface: string;\n surfaceVariant: string;\n onSurfaceVariant: string;\n inverseSurface: string;\n inverseOnSurface: string;\n inversePrimary: string;\n shadow: string;\n surfaceTint: string;\n outlineVariant: string;\n scrim: string;\n surfaceContainerHighest: string;\n surfaceContainerHigh: string;\n surfaceContainer: string;\n surfaceContainerLow: string;\n surfaceContainerLowest: string;\n surfaceBright: string;\n surfaceDim: string;\n}\n\nexport abstract class HostThemeEntity extends AppObjectEntity {\n static readonly type = \"HostThemeEntity\";\n\n abstract submitScheme(name: string, scheme: ColorScheme): void;\n abstract activeSchemeName: string;\n\n abstract get activeScheme(): ColorScheme;\n abstract getColorForType(type: ThemeColorType): Color;\n abstract getHexForType(type: ThemeColorType): string;\n\n static get = (appObjects: AppObjectRepo): HostThemeEntity | undefined =>\n getSingletonComponent(HostThemeEntity.type, appObjects);\n}\n\nexport function makeHostThemeEntity(appObject: AppObject) {\n return new HostThemeEntityImp(appObject);\n}\n\nclass HostThemeEntityImp extends HostThemeEntity {\n private schemeLookup = new Map<string, ColorScheme>();\n\n get activeScheme(): ColorScheme {\n return this.schemeLookup.get(this.activeSchemeName) ?? defaultScheme;\n }\n\n submitScheme = (name: string, scheme: ColorScheme) => {\n if (this.schemeLookup.has(name)) {\n this.warn(\"Duplicate scheme name submitted. Overwriting\");\n }\n\n this.schemeLookup.set(name, scheme);\n\n if (!this.activeSchemeName) {\n this.activeSchemeName = name;\n }\n };\n\n getHexForType(type: ThemeColorType): string {\n const scheme = this.schemeLookup.get(this.activeSchemeName);\n if (!scheme) {\n this.error(\"No active scheme\");\n return \"#000000\";\n }\n\n return scheme[type];\n }\n\n private memoizedActiveScheme = new MemoizedString(\"\", this.notifyOnChange);\n get activeSchemeName(): string {\n return this.memoizedActiveScheme.val;\n }\n\n set activeSchemeName(val: string) {\n if (!this.schemeLookup.has(val)) {\n this.warn(`Unknown theme schema: ${val}. Ignoring.`);\n return;\n }\n this.memoizedActiveScheme.val = val;\n }\n\n constructor(appObject: AppObject) {\n super(appObject, HostThemeEntity.type);\n\n this.appObjects.registerSingleton(this);\n }\n\n getColorForType = (type: ThemeColorType): Color => {\n const scheme = this.schemeLookup.get(this.activeSchemeName);\n if (!scheme) {\n this.error(\"No active scheme\");\n return Color.RGB(0, 0, 0);\n }\n\n const colorHex = scheme[type];\n return Color.Hex(colorHex);\n };\n}\n\nexport const defaultScheme: ColorScheme = {\n primary: \"#7BD0FF\",\n onPrimary: \"#003549\",\n primaryContainer: \"#004C69\",\n onPrimaryContainer: \"#C4E7FF\",\n primaryFixed: \"#C4E7FF\",\n onPrimaryFixed: \"#001E2C\",\n primaryFixedDim: \"#7BD0FF\",\n onPrimaryFixedVariant: \"#004C69\",\n secondary: \"#B5C9D7\",\n onSecondary: \"#20333E\",\n secondaryContainer: \"#374955\",\n onSecondaryContainer: \"#D1E5F4\",\n secondaryFixed: \"#D1E5F4\",\n onSecondaryFixed: \"#0A1E28\",\n secondaryFixedDim: \"#B5C9D7\",\n onSecondaryFixedVariant: \"#374955\",\n tertiary: \"#CAC1E9\",\n onTertiary: \"#322C4C\",\n tertiaryContainer: \"#484264\",\n onTertiaryContainer: \"#E6DEFF\",\n tertiaryFixed: \"#E6DEFF\",\n onTertiaryFixed: \"#1D1736\",\n tertiaryFixedDim: \"#CAC1E9\",\n onTertiaryFixedVariant: \"#484264\",\n error: \"#FFB4AB\",\n onError: \"#690005\",\n errorContainer: \"#93000A\",\n onErrorContainer: \"#FFDAD6\",\n success: \"#7EE0B0\",\n onSuccess: \"#00391F\",\n successContainer: \"#005234\",\n onSuccessContainer: \"#9BFCCB\",\n warning: \"#FFB951\",\n onWarning: \"#452B00\",\n warningContainer: \"#633F00\",\n onWarningContainer: \"#FFDEA8\",\n info: \"#A2C9FF\",\n onInfo: \"#00325B\",\n infoContainer: \"#164A7F\",\n onInfoContainer: \"#D3E4FF\",\n outline: \"#8B9297\",\n background: \"#191C1E\",\n onBackground: \"#E1E2E5\",\n surface: \"#111416\",\n onSurface: \"#C5C6C9\",\n surfaceVariant: \"#41484D\",\n onSurfaceVariant: \"#C0C7CD\",\n inverseSurface: \"#E1E2E5\",\n inverseOnSurface: \"#191C1E\",\n inversePrimary: \"#00668A\",\n shadow: \"#000000\",\n surfaceTint: \"#7BD0FF\",\n outlineVariant: \"#41484D\",\n scrim: \"#000000\",\n surfaceContainerHighest: \"#333537\",\n surfaceContainerHigh: \"#282A2C\",\n surfaceContainer: \"#1D2022\",\n surfaceContainerLow: \"#191C1E\",\n surfaceContainerLowest: \"#0C0F10\",\n surfaceBright: \"#37393C\",\n surfaceDim: \"#111416\"\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeColorsPM.js","sourceRoot":"","sources":["../../../../src/ThemeColors/PM/ThemeColorsPM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,aAAa,EACb,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAOrC,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,MAAM,OAAgB,aAAc,SAAQ,WAA0B;IAGpE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;;AAJe,kBAAI,GAAG,eAAe,CAAC;AAOzC,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAiB,SAAQ,aAAa;IAG1C,WAAW,CAAC,CAAgB,EAAE,CAAgB;QAC5C,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE9C,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,OAAO,GAAG,CAAC,CAAC,MAA2C,CAAC;QAC9D,MAAM,OAAO,GAAG,CAAC,CAAC,MAA2C,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAUD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QATvC,kBAAa,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,OAAO;YAC9B,IAAI,CAAC,YAAY,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB;gBAC5C,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY;aACtC,CAAC,CAAC;QACL,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\r\n getSingletonComponent,\r\n AppObject,\r\n AppObjectPM,\r\n AppObjectRepo\r\n} from \"@vived/core\";\r\nimport {\r\n ColorScheme,\r\n defaultScheme,\r\n HostThemeEntity\r\n} from \"../Entities/HostThemeEntity\";\r\n\r\nexport interface ThemeColorsVM {\r\n themeName: string;\r\n scheme: ColorScheme;\r\n}\r\n\r\nexport const defaultThemeColorsVM: ThemeColorsVM = {\r\n themeName: \"\",\r\n scheme: defaultScheme\r\n};\r\n\r\nexport abstract class ThemeColorsPM extends AppObjectPM<ThemeColorsVM> {\r\n static readonly type = \"ThemeColorsPM\";\r\n\r\n static get(appObjects: AppObjectRepo) {\r\n return getSingletonComponent<ThemeColorsPM>(ThemeColorsPM.type, appObjects);\r\n }\r\n}\r\n\r\nexport function makeThemeColorsPM(appObject: AppObject): ThemeColorsPM {\r\n return new ThemeColorsPMImp(appObject);\r\n}\r\n\r\nclass ThemeColorsPMImp extends ThemeColorsPM {\r\n private themeColors?: HostThemeEntity;\r\n\r\n vmsAreEqual(a: ThemeColorsVM, b: ThemeColorsVM): boolean {\r\n if (a.themeName !== b.themeName) return false;\r\n\r\n // Compare scheme colors too, so a rebrand/replacement under the same name\r\n // (e.g. a client applying brand colors) still re-projects the view.\r\n const aScheme = a.scheme as unknown as Record<string, string>;\r\n const bScheme = b.scheme as unknown as Record<string, string>;\r\n const aKeys = Object.keys(aScheme);\r\n if (aKeys.length !== Object.keys(bScheme).length) return false;\r\n return aKeys.every((key) => aScheme[key] === bScheme[key]);\r\n }\r\n\r\n onThemeChange = () => {\r\n if (!this.themeColors) return;\r\n this.doUpdateView({\r\n themeName: this.themeColors.activeSchemeName,\r\n scheme: this.themeColors.activeScheme\r\n });\r\n };\r\n\r\n constructor(appObject: AppObject) {\r\n super(appObject, ThemeColorsPM.type);\r\n\r\n this.appObjects.registerSingleton(this);\r\n\r\n this.themeColors = HostThemeEntity.get(appObject.appObjectRepo)!;\r\n if (!this.themeColors) {\r\n this.error(\"Unable to find HostThemeEntity\");\r\n return;\r\n } else {\r\n this.themeColors.addChangeObserver(this.onThemeChange);\r\n this.onThemeChange();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ThemeColorsPM.js","sourceRoot":"","sources":["../../../../src/ThemeColors/PM/ThemeColorsPM.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,aAAa,EACb,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAOrC,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,SAAS,EAAE,EAAE;IACb,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,MAAM,OAAgB,aAAc,SAAQ,WAA0B;IAGpE,MAAM,CAAC,GAAG,CAAC,UAAyB;QAClC,OAAO,qBAAqB,CAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;;AAJe,kBAAI,GAAG,eAAe,CAAC;AAOzC,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,OAAO,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAiB,SAAQ,aAAa;IAG1C,WAAW,CAAC,CAAgB,EAAE,CAAgB;QAC5C,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QAE9C,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,OAAO,GAAG,CAAC,CAAC,MAA2C,CAAC;QAC9D,MAAM,OAAO,GAAG,CAAC,CAAC,MAA2C,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAUD,YAAY,SAAoB;QAC9B,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QATvC,kBAAa,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,OAAO;YAC9B,IAAI,CAAC,YAAY,CAAC;gBAChB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB;gBAC5C,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY;aACtC,CAAC,CAAC;QACL,CAAC,CAAC;QAKA,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACvD,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF","sourcesContent":["import {\n getSingletonComponent,\n AppObject,\n AppObjectPM,\n AppObjectRepo\n} from \"@vived/core\";\nimport {\n ColorScheme,\n defaultScheme,\n HostThemeEntity\n} from \"../Entities/HostThemeEntity\";\n\nexport interface ThemeColorsVM {\n themeName: string;\n scheme: ColorScheme;\n}\n\nexport const defaultThemeColorsVM: ThemeColorsVM = {\n themeName: \"\",\n scheme: defaultScheme\n};\n\nexport abstract class ThemeColorsPM extends AppObjectPM<ThemeColorsVM> {\n static readonly type = \"ThemeColorsPM\";\n\n static get(appObjects: AppObjectRepo) {\n return getSingletonComponent<ThemeColorsPM>(ThemeColorsPM.type, appObjects);\n }\n}\n\nexport function makeThemeColorsPM(appObject: AppObject): ThemeColorsPM {\n return new ThemeColorsPMImp(appObject);\n}\n\nclass ThemeColorsPMImp extends ThemeColorsPM {\n private themeColors?: HostThemeEntity;\n\n vmsAreEqual(a: ThemeColorsVM, b: ThemeColorsVM): boolean {\n if (a.themeName !== b.themeName) return false;\n\n // Compare scheme colors too, so a rebrand/replacement under the same name\n // (e.g. a client applying brand colors) still re-projects the view.\n const aScheme = a.scheme as unknown as Record<string, string>;\n const bScheme = b.scheme as unknown as Record<string, string>;\n const aKeys = Object.keys(aScheme);\n if (aKeys.length !== Object.keys(bScheme).length) return false;\n return aKeys.every((key) => aScheme[key] === bScheme[key]);\n }\n\n onThemeChange = () => {\n if (!this.themeColors) return;\n this.doUpdateView({\n themeName: this.themeColors.activeSchemeName,\n scheme: this.themeColors.activeScheme\n });\n };\n\n constructor(appObject: AppObject) {\n super(appObject, ThemeColorsPM.type);\n\n this.appObjects.registerSingleton(this);\n\n this.themeColors = HostThemeEntity.get(appObject.appObjectRepo)!;\n if (!this.themeColors) {\n this.error(\"Unable to find HostThemeEntity\");\n return;\n } else {\n this.themeColors.addChangeObserver(this.onThemeChange);\n this.onThemeChange();\n }\n }\n}\n"]}
@@ -80,11 +80,21 @@ class FileUploadUCImp extends FileUploadUC {
80
80
  const options = {
81
81
  method: "PUT",
82
82
  body: file,
83
- // The SigV2 presigned PUT is signed with this exact Content-Type;
84
- // echoing v2's own value guarantees the signature matches and S3
85
- // stores the correct type instead of binary/octet-stream.
83
+ // Sending Content-Type is what makes S3 store a real type instead
84
+ // of its binary/octet-stream default -- the header on this PUT is
85
+ // the ONLY thing that decides it.
86
+ //
87
+ // It is not, despite how it looks, constrained by the signature.
88
+ // The API presigns with @aws-sdk/s3-request-presigner, which signs
89
+ // only `host` (X-Amz-SignedHeaders=host) and does not hoist
90
+ // content-type into the query string, so the ContentType the API
91
+ // passes to PutObjectCommand never reaches S3 at all. Verified
92
+ // against the real bucket: presigning with video/mp4 and PUTting
93
+ // with no header still stores binary/octet-stream, and PUTting a
94
+ // header that differs from the presigned value returns 200 and
95
+ // stores what was sent. See vived-api-legacy#118.
86
96
  headers: {
87
- "Content-Type": contentType
97
+ "Content-Type": resolveContentType(file, contentType)
88
98
  }
89
99
  };
90
100
  return basicFetch(url, options);
@@ -101,4 +111,33 @@ class FileUploadUCImp extends FileUploadUC {
101
111
  this.appObjects.registerSingleton(this);
102
112
  }
103
113
  }
114
+ /** Content types that carry no information and should never win. */
115
+ const GENERIC_CONTENT_TYPES = new Set([
116
+ "application/octet-stream",
117
+ "binary/octet-stream"
118
+ ]);
119
+ /**
120
+ * Decide which Content-Type to put on the upload.
121
+ *
122
+ * The API derives its value from the *filename*, so an extension `mime-types`
123
+ * does not recognise comes back as `application/octet-stream` even when the
124
+ * browser knew exactly what the file was. Prefer the API's answer, which is
125
+ * what the asset row will be reasoned about with, and fall back to the File's
126
+ * own type only when the API had nothing better to offer.
127
+ *
128
+ * Deliberately not exported. `src/VivedAPI/UCs/index.ts` does
129
+ * `export * from "./FileUploadUC"`, so exporting this for a unit test would put
130
+ * it on the package's public API — a symbol consumers could depend on, and a
131
+ * minor version bump, for an internal detail. It is covered through
132
+ * `doUpload` instead.
133
+ */
134
+ function resolveContentType(file, serverContentType) {
135
+ if (serverContentType && !GENERIC_CONTENT_TYPES.has(serverContentType)) {
136
+ return serverContentType;
137
+ }
138
+ if (file.type && !GENERIC_CONTENT_TYPES.has(file.type)) {
139
+ return file.type;
140
+ }
141
+ return serverContentType || file.type || "application/octet-stream";
142
+ }
104
143
  //# sourceMappingURL=FileUploadUC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploadUC.js","sourceRoot":"","sources":["../../../../src/VivedAPI/UCs/FileUploadUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * FileUploadUC.ts\r\n *\r\n * This file defines the Use Case for uploading files to the VIVED API.\r\n * FileUploadUC handles the process of uploading file data to storage endpoints,\r\n * managing multipart form data and upload progress.\r\n *\r\n * Key concepts:\r\n * - Abstract UC defining the interface for file upload operations\r\n * - Handles file upload workflows with progress tracking\r\n * - Coordinates with BasicFetchUC for HTTP transport\r\n * - Manages multipart form data encoding and transmission\r\n * - Provides error handling for upload failures\r\n *\r\n * Usage pattern:\r\n * 1. Get a UC instance using FileUploadUC.get(appObjects) or makeFileUploadUC\r\n * 2. Call doUpload with File object to upload\r\n * 3. Handle the returned Promise for upload completion\r\n * 4. UC manages the HTTP upload mechanics and error handling\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 { VivedAPIEntity } from \"../Entities/VivedAPIEntity\";\r\nimport { BasicFetchOptions, BasicFetchUC } from \"./BasicFetchUC\";\r\nimport { JsonRequestUC } from \"./JsonRequestUC\";\r\n\r\n/**\r\n * FileUploadUC provides functionality for uploading files to APIs.\r\n * Abstract class that defines the interface for file upload operations.\r\n */\r\nexport abstract class FileUploadUC extends AppObjectUC {\r\n /** Unique type identifier for this component */\r\n static type = \"FileUploadUC\";\r\n\r\n /**\r\n * Uploads a file to the configured API endpoint\r\n * @param file The File object to upload\r\n * @returns Promise that resolves when upload is complete\r\n */\r\n abstract doUpload(file: File): Promise<void>;\r\n\r\n /**\r\n * Retrieves a FileUploadUC component from an AppObject\r\n * @param appObjects The AppObjectRepo to get the component from\r\n * @returns The FileUploadUC component or undefined if not found\r\n */\r\n static get(appObjects: AppObjectRepo): FileUploadUC | undefined {\r\n return getSingletonComponent(FileUploadUC.type, appObjects);\r\n }\r\n}\r\n\r\n/**\r\n * Factory function to create a new FileUploadUC instance\r\n * @param appObject The AppObject to attach the UC to\r\n * @returns A new FileUploadUC instance\r\n */\r\nexport function makeFileUploadUC(appObject: AppObject): FileUploadUC {\r\n return new FileUploadUCImp(appObject);\r\n}\r\n\r\n/**\r\n * Concrete implementation of FileUploadUC\r\n * This private class handles the actual file upload mechanics\r\n */\r\nclass FileUploadUCImp extends FileUploadUC {\r\n private get vivedAPI(): VivedAPIEntity | undefined {\r\n return this.getCachedSingleton<VivedAPIEntity>(VivedAPIEntity.type);\r\n }\r\n\r\n private get requestJSON() {\r\n return this.getCachedSingleton<JsonRequestUC>(JsonRequestUC.type)\r\n ?.doRequest;\r\n }\r\n\r\n private get basicFetch() {\r\n return this.getCachedSingleton<BasicFetchUC>(BasicFetchUC.type)?.doRequest;\r\n }\r\n\r\n doUpload = (file: File): Promise<void> => {\r\n const vivedAPI = this.vivedAPI;\r\n const requestJSON = this.requestJSON;\r\n const basicFetch = this.basicFetch;\r\n\r\n if (!vivedAPI || !requestJSON || !basicFetch) {\r\n return Promise.reject();\r\n }\r\n return new Promise<void>((resolve, reject) => {\r\n const getUploadURL = vivedAPI.getEndpointURL(\r\n `upload/large/DataVariants/${file.name}?function_version=2`\r\n );\r\n\r\n requestJSON(getUploadURL)\r\n .then((result) => {\r\n // v2 returns an object { url, contentType }, not a bare URL string.\r\n const { url: uploadURL, contentType } = result as {\r\n url: string;\r\n contentType: string;\r\n };\r\n const url = new URL(uploadURL);\r\n const options: BasicFetchOptions = {\r\n method: \"PUT\",\r\n body: file,\r\n // The SigV2 presigned PUT is signed with this exact Content-Type;\r\n // echoing v2's own value guarantees the signature matches and S3\r\n // stores the correct type instead of binary/octet-stream.\r\n headers: {\r\n \"Content-Type\": contentType\r\n }\r\n };\r\n\r\n return basicFetch(url, options);\r\n })\r\n .then((_) => {\r\n resolve();\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 constructor(appObject: AppObject) {\r\n super(appObject, FileUploadUC.type);\r\n this.appObjects.registerSingleton(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FileUploadUC.js","sourceRoot":"","sources":["../../../../src/VivedAPI/UCs/FileUploadUC.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * FileUploadUC.ts\n *\n * This file defines the Use Case for uploading files to the VIVED API.\n * FileUploadUC handles the process of uploading file data to storage endpoints,\n * managing multipart form data and upload progress.\n *\n * Key concepts:\n * - Abstract UC defining the interface for file upload operations\n * - Handles file upload workflows with progress tracking\n * - Coordinates with BasicFetchUC for HTTP transport\n * - Manages multipart form data encoding and transmission\n * - Provides error handling for upload failures\n *\n * Usage pattern:\n * 1. Get a UC instance using FileUploadUC.get(appObjects) or makeFileUploadUC\n * 2. Call doUpload with File object to upload\n * 3. Handle the returned Promise for upload completion\n * 4. UC manages the HTTP upload mechanics and error handling\n */\n\nimport {\n getSingletonComponent,\n AppObject,\n AppObjectRepo,\n AppObjectUC\n} from \"@vived/core\";\nimport { VivedAPIEntity } from \"../Entities/VivedAPIEntity\";\nimport { BasicFetchOptions, BasicFetchUC } from \"./BasicFetchUC\";\nimport { JsonRequestUC } from \"./JsonRequestUC\";\n\n/**\n * FileUploadUC provides functionality for uploading files to APIs.\n * Abstract class that defines the interface for file upload operations.\n */\nexport abstract class FileUploadUC extends AppObjectUC {\n /** Unique type identifier for this component */\n static type = \"FileUploadUC\";\n\n /**\n * Uploads a file to the configured API endpoint\n * @param file The File object to upload\n * @returns Promise that resolves when upload is complete\n */\n abstract doUpload(file: File): Promise<void>;\n\n /**\n * Retrieves a FileUploadUC component from an AppObject\n * @param appObjects The AppObjectRepo to get the component from\n * @returns The FileUploadUC component or undefined if not found\n */\n static get(appObjects: AppObjectRepo): FileUploadUC | undefined {\n return getSingletonComponent(FileUploadUC.type, appObjects);\n }\n}\n\n/**\n * Factory function to create a new FileUploadUC instance\n * @param appObject The AppObject to attach the UC to\n * @returns A new FileUploadUC instance\n */\nexport function makeFileUploadUC(appObject: AppObject): FileUploadUC {\n return new FileUploadUCImp(appObject);\n}\n\n/**\n * Concrete implementation of FileUploadUC\n * This private class handles the actual file upload mechanics\n */\nclass FileUploadUCImp extends FileUploadUC {\n private get vivedAPI(): VivedAPIEntity | undefined {\n return this.getCachedSingleton<VivedAPIEntity>(VivedAPIEntity.type);\n }\n\n private get requestJSON() {\n return this.getCachedSingleton<JsonRequestUC>(JsonRequestUC.type)\n ?.doRequest;\n }\n\n private get basicFetch() {\n return this.getCachedSingleton<BasicFetchUC>(BasicFetchUC.type)?.doRequest;\n }\n\n doUpload = (file: File): Promise<void> => {\n const vivedAPI = this.vivedAPI;\n const requestJSON = this.requestJSON;\n const basicFetch = this.basicFetch;\n\n if (!vivedAPI || !requestJSON || !basicFetch) {\n return Promise.reject();\n }\n return new Promise<void>((resolve, reject) => {\n const getUploadURL = vivedAPI.getEndpointURL(\n `upload/large/DataVariants/${file.name}?function_version=2`\n );\n\n requestJSON(getUploadURL)\n .then((result) => {\n // v2 returns an object { url, contentType }, not a bare URL string.\n const { url: uploadURL, contentType } = result as {\n url: string;\n contentType: string;\n };\n const url = new URL(uploadURL);\n const options: BasicFetchOptions = {\n method: \"PUT\",\n body: file,\n // Sending Content-Type is what makes S3 store a real type instead\n // of its binary/octet-stream default -- the header on this PUT is\n // the ONLY thing that decides it.\n //\n // It is not, despite how it looks, constrained by the signature.\n // The API presigns with @aws-sdk/s3-request-presigner, which signs\n // only `host` (X-Amz-SignedHeaders=host) and does not hoist\n // content-type into the query string, so the ContentType the API\n // passes to PutObjectCommand never reaches S3 at all. Verified\n // against the real bucket: presigning with video/mp4 and PUTting\n // with no header still stores binary/octet-stream, and PUTting a\n // header that differs from the presigned value returns 200 and\n // stores what was sent. See vived-api-legacy#118.\n headers: {\n \"Content-Type\": resolveContentType(file, contentType)\n }\n };\n\n return basicFetch(url, options);\n })\n .then((_) => {\n resolve();\n })\n .catch((e: Error) => {\n this.warn(e.message);\n reject(e);\n });\n });\n };\n\n constructor(appObject: AppObject) {\n super(appObject, FileUploadUC.type);\n this.appObjects.registerSingleton(this);\n }\n}\n\n/** Content types that carry no information and should never win. */\nconst GENERIC_CONTENT_TYPES = new Set([\n \"application/octet-stream\",\n \"binary/octet-stream\"\n]);\n\n/**\n * Decide which Content-Type to put on the upload.\n *\n * The API derives its value from the *filename*, so an extension `mime-types`\n * does not recognise comes back as `application/octet-stream` even when the\n * browser knew exactly what the file was. Prefer the API's answer, which is\n * what the asset row will be reasoned about with, and fall back to the File's\n * own type only when the API had nothing better to offer.\n *\n * Deliberately not exported. `src/VivedAPI/UCs/index.ts` does\n * `export * from \"./FileUploadUC\"`, so exporting this for a unit test would put\n * it on the package's public API — a symbol consumers could depend on, and a\n * minor version bump, for an internal detail. It is covered through\n * `doUpload` instead.\n */\nfunction resolveContentType(file: File, serverContentType?: string): string {\n if (serverContentType && !GENERIC_CONTENT_TYPES.has(serverContentType)) {\n return serverContentType;\n }\n\n if (file.type && !GENERIC_CONTENT_TYPES.has(file.type)) {\n return file.type;\n }\n\n return serverContentType || file.type || \"application/octet-stream\";\n}\n"]}
@@ -42,7 +42,13 @@ class PatchAssetFileUCImp extends PatchAssetFileUC {
42
42
  const strArr = file.name.split(".");
43
43
  extension = strArr[strArr.length - 1];
44
44
  const filename = `${generateUniqueID()}.${extension}`;
45
+ // Carry the source File's MIME type across the rebuild. #47 added this to
46
+ // PostNewAssetUC and missed the sibling here, leaving the two upload paths
47
+ // asymmetric. FileUploadUC sets Content-Type explicitly today, so a typeless
48
+ // File no longer changes what S3 stores -- but the asymmetry is a trap for
49
+ // anyone who changes that, and an untyped File is wrong on its own terms.
45
50
  const assetFile = new File([file], `${filename}`, {
51
+ type: file.type,
46
52
  lastModified: Date.now()
47
53
  });
48
54
  return new Promise((resolve, reject) => {