taon 18.0.15 → 18.0.18

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 (300) hide show
  1. package/README.md +6 -3
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/browser/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +39 -20
  4. package/browser/esm2022/lib/base-classes/base.mjs +1 -3
  5. package/browser/esm2022/lib/create-context.mjs +20 -1
  6. package/browser/esm2022/lib/decorators/classes/subscriber-decorator.mjs +3 -29
  7. package/browser/esm2022/lib/endpoint-context.mjs +10 -136
  8. package/browser/esm2022/lib/entity-process.mjs +3 -3
  9. package/browser/esm2022/lib/helpers/class-helpers.mjs +2 -2
  10. package/browser/esm2022/lib/index.mjs +1 -14
  11. package/browser/esm2022/lib/inject.mjs +4 -38
  12. package/browser/esm2022/lib/models.mjs +1 -1
  13. package/browser/esm2022/lib/realtime/realtime-client.mjs +32 -20
  14. package/browser/esm2022/lib/realtime/realtime-core.mjs +15 -7
  15. package/browser/esm2022/lib/realtime/realtime-server.mjs +34 -16
  16. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +198 -29
  17. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +206 -10
  18. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +3 -7
  19. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +6 -2
  20. package/browser/esm2022/lib/realtime/realtime-subs-manager.mjs +10 -8
  21. package/browser/esm2022/lib/realtime/realtime.models.mjs +1 -1
  22. package/browser/esm2022/lib/symbols.mjs +45 -38
  23. package/browser/fesm2022/taon.mjs +557 -559
  24. package/browser/fesm2022/taon.mjs.map +1 -1
  25. package/browser/lib/base-classes/base-context.d.ts +4 -0
  26. package/browser/lib/base-classes/base.d.ts +4 -2
  27. package/browser/lib/create-context.d.ts +13 -0
  28. package/browser/lib/decorators/classes/subscriber-decorator.d.ts +2 -2
  29. package/browser/lib/helpers/class-helpers.d.ts +1 -1
  30. package/browser/lib/index.d.ts +12 -13
  31. package/browser/lib/inject.d.ts +1 -8
  32. package/browser/lib/models.d.ts +17 -9
  33. package/browser/lib/realtime/realtime-client.d.ts +8 -2
  34. package/browser/lib/realtime/realtime-core.d.ts +6 -6
  35. package/browser/lib/realtime/realtime-server.d.ts +9 -4
  36. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +71 -12
  37. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +4 -4
  38. package/browser/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +2 -3
  39. package/browser/lib/realtime/realtime-strategy/realtime-strategy.d.ts +4 -5
  40. package/browser/lib/realtime/realtime.models.d.ts +1 -0
  41. package/browser/lib/symbols.d.ts +30 -36
  42. package/client/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +39 -20
  43. package/client/esm2022/lib/base-classes/base.mjs +1 -3
  44. package/client/esm2022/lib/create-context.mjs +20 -1
  45. package/client/esm2022/lib/decorators/classes/subscriber-decorator.mjs +3 -29
  46. package/client/esm2022/lib/endpoint-context.mjs +10 -136
  47. package/client/esm2022/lib/entity-process.mjs +3 -3
  48. package/client/esm2022/lib/helpers/class-helpers.mjs +2 -2
  49. package/client/esm2022/lib/index.mjs +1 -14
  50. package/client/esm2022/lib/inject.mjs +4 -38
  51. package/client/esm2022/lib/models.mjs +1 -1
  52. package/client/esm2022/lib/realtime/realtime-client.mjs +32 -20
  53. package/client/esm2022/lib/realtime/realtime-core.mjs +15 -7
  54. package/client/esm2022/lib/realtime/realtime-server.mjs +34 -16
  55. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +198 -29
  56. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +206 -10
  57. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +3 -7
  58. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +6 -2
  59. package/client/esm2022/lib/realtime/realtime-subs-manager.mjs +10 -8
  60. package/client/esm2022/lib/realtime/realtime.models.mjs +1 -1
  61. package/client/esm2022/lib/symbols.mjs +45 -38
  62. package/client/fesm2022/taon.mjs +557 -559
  63. package/client/fesm2022/taon.mjs.map +1 -1
  64. package/client/lib/base-classes/base-context.d.ts +4 -0
  65. package/client/lib/base-classes/base.d.ts +4 -2
  66. package/client/lib/create-context.d.ts +13 -0
  67. package/client/lib/decorators/classes/subscriber-decorator.d.ts +2 -2
  68. package/client/lib/helpers/class-helpers.d.ts +1 -1
  69. package/client/lib/index.d.ts +12 -13
  70. package/client/lib/inject.d.ts +1 -8
  71. package/client/lib/models.d.ts +17 -9
  72. package/client/lib/realtime/realtime-client.d.ts +8 -2
  73. package/client/lib/realtime/realtime-core.d.ts +6 -6
  74. package/client/lib/realtime/realtime-server.d.ts +9 -4
  75. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +71 -12
  76. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +4 -4
  77. package/client/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +2 -3
  78. package/client/lib/realtime/realtime-strategy/realtime-strategy.d.ts +4 -5
  79. package/client/lib/realtime/realtime.models.d.ts +1 -0
  80. package/client/lib/symbols.d.ts +30 -36
  81. package/lib/base-classes/base-context.d.ts +4 -0
  82. package/lib/base-classes/base-subscriber-for-entity.js +38 -19
  83. package/lib/base-classes/base-subscriber-for-entity.js.map +1 -1
  84. package/lib/base-classes/base.d.ts +4 -2
  85. package/lib/base-classes/base.js +0 -2
  86. package/lib/base-classes/base.js.map +1 -1
  87. package/lib/create-context.d.ts +13 -0
  88. package/lib/create-context.js +19 -8
  89. package/lib/create-context.js.map +1 -1
  90. package/lib/decorators/classes/subscriber-decorator.d.ts +1 -1
  91. package/lib/decorators/classes/subscriber-decorator.js +7 -58
  92. package/lib/decorators/classes/subscriber-decorator.js.map +1 -1
  93. package/lib/endpoint-context.js +33 -9
  94. package/lib/endpoint-context.js.map +1 -1
  95. package/lib/entity-process.js +2 -2
  96. package/lib/entity-process.js.map +1 -1
  97. package/lib/formly/formly-repeat-component.js +1 -1
  98. package/lib/formly/formly-repeat-component.js.map +1 -1
  99. package/lib/helpers/class-helpers.d.ts +1 -1
  100. package/lib/helpers/class-helpers.js +2 -2
  101. package/lib/helpers/class-helpers.js.map +1 -1
  102. package/lib/index._auto-generated_.js +6 -0
  103. package/lib/index._auto-generated_.js.map +1 -0
  104. package/lib/index.d.ts +12 -13
  105. package/lib/index.js +1 -17
  106. package/lib/index.js.map +1 -1
  107. package/lib/inject.d.ts +3 -7
  108. package/lib/inject.js +57 -42
  109. package/lib/inject.js.map +1 -1
  110. package/lib/models.d.ts +17 -9
  111. package/lib/models.js.map +1 -1
  112. package/lib/realtime/realtime-client.d.ts +8 -2
  113. package/lib/realtime/realtime-client.js +36 -21
  114. package/lib/realtime/realtime-client.js.map +1 -1
  115. package/lib/realtime/realtime-core.d.ts +6 -6
  116. package/lib/realtime/realtime-core.js +17 -6
  117. package/lib/realtime/realtime-core.js.map +1 -1
  118. package/lib/realtime/realtime-server.d.ts +9 -4
  119. package/lib/realtime/realtime-server.js +98 -76
  120. package/lib/realtime/realtime-server.js.map +1 -1
  121. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +71 -11
  122. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js +301 -40
  123. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js.map +1 -1
  124. package/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +4 -4
  125. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js +358 -14
  126. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js.map +1 -1
  127. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +3 -3
  128. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js +10 -14
  129. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js.map +1 -1
  130. package/lib/realtime/realtime-strategy/realtime-strategy.d.ts +4 -5
  131. package/lib/realtime/realtime-strategy/realtime-strategy.js +9 -2
  132. package/lib/realtime/realtime-strategy/realtime-strategy.js.map +1 -1
  133. package/lib/realtime/realtime-subs-manager.js +10 -8
  134. package/lib/realtime/realtime-subs-manager.js.map +1 -1
  135. package/lib/realtime/realtime.models.d.ts +1 -0
  136. package/lib/symbols.d.ts +30 -36
  137. package/lib/symbols.js +63 -39
  138. package/lib/symbols.js.map +1 -1
  139. package/lib/ui/directives/index.js +2 -2
  140. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js +2 -2
  141. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js +2 -2
  142. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js +2 -2
  143. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  144. package/lib/ui/taon-github-fork-me-corner/index.js +2 -2
  145. package/lib/ui/taon-github-fork-me-ribbon/index.js +2 -2
  146. package/lib/ui/taon-notifications/taon-notifications.models.js +2 -2
  147. package/lib/ui/taon-progress-bar/index.js +2 -2
  148. package/lib/ui/taon-session-passcode/index.js +2 -2
  149. package/package.json +10 -8
  150. package/tmp-environment.json +36 -31
  151. package/websql/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +39 -20
  152. package/websql/esm2022/lib/base-classes/base.mjs +1 -3
  153. package/websql/esm2022/lib/create-context.mjs +20 -1
  154. package/websql/esm2022/lib/decorators/classes/subscriber-decorator.mjs +3 -29
  155. package/websql/esm2022/lib/endpoint-context.mjs +16 -18
  156. package/websql/esm2022/lib/entity-process.mjs +3 -3
  157. package/websql/esm2022/lib/helpers/class-helpers.mjs +2 -2
  158. package/websql/esm2022/lib/index.mjs +1 -14
  159. package/websql/esm2022/lib/inject.mjs +4 -38
  160. package/websql/esm2022/lib/models.mjs +1 -1
  161. package/websql/esm2022/lib/realtime/realtime-client.mjs +32 -20
  162. package/websql/esm2022/lib/realtime/realtime-core.mjs +15 -7
  163. package/websql/esm2022/lib/realtime/realtime-server.mjs +90 -72
  164. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +200 -30
  165. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +206 -10
  166. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +3 -7
  167. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +6 -2
  168. package/websql/esm2022/lib/realtime/realtime-subs-manager.mjs +10 -8
  169. package/websql/esm2022/lib/realtime/realtime.models.mjs +1 -1
  170. package/websql/esm2022/lib/symbols.mjs +45 -38
  171. package/websql/fesm2022/taon.mjs +669 -687
  172. package/websql/fesm2022/taon.mjs.map +1 -1
  173. package/websql/lib/base-classes/base-context.d.ts +4 -0
  174. package/websql/lib/base-classes/base.d.ts +4 -2
  175. package/websql/lib/create-context.d.ts +13 -0
  176. package/websql/lib/decorators/classes/subscriber-decorator.d.ts +2 -2
  177. package/websql/lib/helpers/class-helpers.d.ts +1 -1
  178. package/websql/lib/index.d.ts +12 -13
  179. package/websql/lib/inject.d.ts +1 -8
  180. package/websql/lib/models.d.ts +17 -9
  181. package/websql/lib/realtime/realtime-client.d.ts +8 -2
  182. package/websql/lib/realtime/realtime-core.d.ts +6 -6
  183. package/websql/lib/realtime/realtime-server.d.ts +9 -4
  184. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +71 -12
  185. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +4 -4
  186. package/websql/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +2 -3
  187. package/websql/lib/realtime/realtime-strategy/realtime-strategy.d.ts +4 -5
  188. package/websql/lib/realtime/realtime.models.d.ts +1 -0
  189. package/websql/lib/symbols.d.ts +30 -36
  190. package/browser/esm2022/lib/base-classes/base-subscriber.mjs +0 -27
  191. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.mjs +0 -98
  192. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.mjs +0 -45
  193. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.mjs +0 -40
  194. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.mjs +0 -25
  195. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.mjs +0 -4
  196. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.mjs +0 -5
  197. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.mjs +0 -50
  198. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.mjs +0 -48
  199. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.mjs +0 -35
  200. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.mjs +0 -43
  201. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.mjs +0 -4
  202. package/browser/lib/base-classes/base-subscriber.d.ts +0 -5
  203. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +0 -22
  204. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +0 -17
  205. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +0 -11
  206. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +0 -11
  207. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +0 -14
  208. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +0 -3
  209. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +0 -17
  210. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +0 -18
  211. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +0 -12
  212. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +0 -14
  213. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +0 -12
  214. package/client/esm2022/lib/base-classes/base-subscriber.mjs +0 -27
  215. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.mjs +0 -98
  216. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.mjs +0 -45
  217. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.mjs +0 -40
  218. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.mjs +0 -25
  219. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.mjs +0 -4
  220. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.mjs +0 -5
  221. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.mjs +0 -50
  222. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.mjs +0 -48
  223. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.mjs +0 -35
  224. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.mjs +0 -43
  225. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.mjs +0 -4
  226. package/client/lib/base-classes/base-subscriber.d.ts +0 -5
  227. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +0 -22
  228. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +0 -17
  229. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +0 -11
  230. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +0 -11
  231. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +0 -14
  232. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +0 -3
  233. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +0 -17
  234. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +0 -18
  235. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +0 -12
  236. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +0 -14
  237. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +0 -12
  238. package/lib/base-classes/base-subscriber.d.ts +0 -4
  239. package/lib/base-classes/base-subscriber.js +0 -25
  240. package/lib/base-classes/base-subscriber.js.map +0 -1
  241. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.js +0 -5
  242. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.js.map +0 -1
  243. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +0 -22
  244. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.js +0 -139
  245. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.js.map +0 -1
  246. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +0 -16
  247. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.js +0 -68
  248. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.js.map +0 -1
  249. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +0 -10
  250. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.js +0 -56
  251. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.js.map +0 -1
  252. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +0 -10
  253. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.js +0 -50
  254. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.js.map +0 -1
  255. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +0 -13
  256. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.js +0 -3
  257. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.js.map +0 -1
  258. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +0 -2
  259. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.js +0 -6
  260. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.js.map +0 -1
  261. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +0 -16
  262. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.js +0 -54
  263. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.js.map +0 -1
  264. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +0 -17
  265. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.js +0 -52
  266. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.js.map +0 -1
  267. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +0 -11
  268. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.js +0 -39
  269. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.js.map +0 -1
  270. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +0 -13
  271. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.js +0 -46
  272. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.js.map +0 -1
  273. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +0 -11
  274. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.js +0 -3
  275. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.js.map +0 -1
  276. package/websql/esm2022/lib/base-classes/base-subscriber.mjs +0 -27
  277. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.mjs +0 -98
  278. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.mjs +0 -45
  279. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.mjs +0 -40
  280. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.mjs +0 -25
  281. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.mjs +0 -4
  282. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.mjs +0 -5
  283. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.mjs +0 -50
  284. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.mjs +0 -48
  285. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.mjs +0 -35
  286. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.mjs +0 -43
  287. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.mjs +0 -4
  288. package/websql/lib/base-classes/base-subscriber.d.ts +0 -5
  289. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +0 -22
  290. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +0 -17
  291. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +0 -11
  292. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +0 -11
  293. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +0 -14
  294. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +0 -3
  295. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +0 -17
  296. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +0 -18
  297. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +0 -12
  298. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +0 -14
  299. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +0 -12
  300. /package/lib/{realtime/realtime-strategy/realtime-strategy-ipc-models/index.d.ts → index._auto-generated_.d.ts} +0 -0
@@ -21,14 +21,22 @@ export class RealtimeCore {
21
21
  'OPTIONS',
22
22
  'HEAD',
23
23
  ];
24
+ this.ctx = ctx;
24
25
  this.strategy = this.resolveStrategy();
25
- ctx.logFramework &&
26
+ this.ctx.logRealtime &&
26
27
  console.log(`[taon] realtime strategy: ${this.strategy}`);
27
- this.client = new RealtimeClient(this);
28
- this.server = new RealtimeServer(this);
28
+ if (Helpers.isWebSQL) {
29
+ this.server = new RealtimeServer(this);
30
+ this.client = new RealtimeClient(this);
31
+ }
32
+ else {
33
+ this.client = new RealtimeClient(this);
34
+ this.server = new RealtimeServer(this);
35
+ }
29
36
  }
30
37
  resolveStrategy() {
31
- if (this.ctx.mode === 'backend-frontend(websql)') {
38
+ if (this.ctx.mode === 'backend-frontend(websql)' ||
39
+ this.ctx.mode === 'backend-frontend(websql-electron)') {
32
40
  return new RealtimeStrategyMock(this.ctx);
33
41
  }
34
42
  if (this.ctx.mode === 'backend-frontend(ipc-electron)') {
@@ -41,14 +49,14 @@ export class RealtimeCore {
41
49
  let nsp = namespace ? namespace : '';
42
50
  nsp = nsp === '/' ? '' : nsp;
43
51
  const pathname = uri.pathname !== '/' ? uri.pathname : '';
44
- let prefix = `taonContext-`;
52
+ let prefix = `taonContext`;
45
53
  if (Helpers.isElectron) {
46
54
  prefix = ``;
47
55
  }
48
- const href = `${uri.origin}${pathname}/${prefix}${nsp}`;
56
+ const href = `${uri.origin}${pathname}/${prefix}${prefix && nsp ? '-' + nsp : nsp}`;
49
57
  return new URL(href);
50
58
  }
51
59
  }
52
60
  ;
53
61
  ({}); // @--end-of-file-for-module=taon lib/realtime/realtime-core.ts
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90YW9uL3Byb2plY3RzL3Rhb24vc3JjL2xpYi9yZWFsdGltZS9yZWFsdGltZS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFJLG1CQUFtQixFQUFJLG9CQUFvQixFQUFJLHdCQUF3QixHQUFHLE1BQU0scUJBQXFCLENBQUMsQ0FBQSxLQUFLO0FBT3RILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcxQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQXNDdkIsWUFBbUIsR0FBb0I7UUFBcEIsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFwQzlCLG1CQUFjLEdBQUc7WUFDeEIsS0FBSztZQUNMLE1BQU07WUFDTixLQUFLO1lBQ0wsUUFBUTtZQUNSLE9BQU87WUFDUCxTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUM7UUE2QkEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkMsR0FBRyxDQUFDLFlBQVk7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUlPLGVBQWU7UUFDckIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSywwQkFBMEIsRUFBRSxDQUFDO1lBQ2pELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssZ0NBQWdDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFPRCxPQUFPLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFJTSxPQUFPLENBQUMsU0FBa0I7UUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDekIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkIsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUV4RCxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBUSxDQUFDO0lBQzlCLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsK0RBQStEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuaW1wb3J0IHsgU29ja2V0IGFzIFNvY2tldENsaWVudCB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludENvbnRleHQgfSBmcm9tICcuLi9lbmRwb2ludC1jb250ZXh0JztcbmltcG9ydCB7IFJlYWx0aW1lQ2xpZW50IH0gZnJvbSAnLi9yZWFsdGltZS1jbGllbnQnO1xuaW1wb3J0IHsgUmVhbHRpbWVTZXJ2ZXIgfSBmcm9tICcuL3JlYWx0aW1lLXNlcnZlcic7XG5pbXBvcnQgdHlwZSB7IFJlYWx0aW1lU3RyYXRlZ3kgfSBmcm9tICcuL3JlYWx0aW1lLXN0cmF0ZWd5JztcbmltcG9ydCB7ICAgUmVhbHRpbWVTdHJhdGVneUlwYywgICBSZWFsdGltZVN0cmF0ZWd5TW9jaywgICBSZWFsdGltZVN0cmF0ZWd5U29ja2V0SU8sIH0gZnJvbSAnLi9yZWFsdGltZS1zdHJhdGVneSc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgRGVmYXVsdEV2ZW50c01hcCB9IGZyb20gJ3NvY2tldC5pby9kaXN0L3R5cGVkLWV2ZW50cyc7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdzb2NrZXQuaW8nO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5cblxuLyoqXG4gKiBSZWFsdGltZSBjbGFzc1xuICogLSBtb2NrICh3aGVuIGJyb3dzZXItYnJvd3NlcilcbiAqIC0gc29ja2V0cyAoZnJvbSBzb2NrZXQgaW8gd2hlbiBiYWNrZW5kLWJyb3dzZXIpXG4gKiAtIGlwYyAod2hlbiBlbGVjdHJvbiBpcyB1c2VkIG9yIGJldHdlZW4gcHJvY2Vzc2VzKVxuICogLSB3ZWJ3b3JrZXIgKHdoZW4gd2Vid29ya2VyIGlzIHVzZWQgaW4gYnJvd3NlciBvciBub2RlanMpXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWFsdGltZUNvcmUge1xuXG4gIHJlYWRvbmx5IGFsbEh0dHBNZXRob2RzID0gW1xuICAgICdHRVQnLFxuICAgICdQT1NUJyxcbiAgICAnUFVUJyxcbiAgICAnREVMRVRFJyxcbiAgICAnUEFUQ0gnLFxuICAgICdPUFRJT05TJyxcbiAgICAnSEVBRCcsXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IFJlYWx0aW1lQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVyOiBSZWFsdGltZVNlcnZlcjtcbiAgcHVibGljIHJlYWRvbmx5IHN0cmF0ZWd5OiBSZWFsdGltZVN0cmF0ZWd5O1xuICAvKipcbiAgICogZ2xvYmFsIEZFIHNvY2tldFxuICAgKi9cbiAgcHVibGljIEZFOiBTb2NrZXRDbGllbnQ8RGVmYXVsdEV2ZW50c01hcCwgRGVmYXVsdEV2ZW50c01hcD47XG4gIC8qKlxuICAgKiBzb2NrZXQgZm9yIG5hbWVzcGFjZXMgYW5kIHJvb21zXG4gICAqL1xuICBwdWJsaWMgRkVfUkVBTFRJTUU6IFNvY2tldENsaWVudDxEZWZhdWx0RXZlbnRzTWFwLCBEZWZhdWx0RXZlbnRzTWFwPjtcbiAgLyoqXG4gICAqIGdsb2JhbCBCRSBzb2NrZXRcbiAgICovXG4gIHB1YmxpYyBCRTogU2VydmVyPERlZmF1bHRFdmVudHNNYXAsIERlZmF1bHRFdmVudHNNYXAsIERlZmF1bHRFdmVudHNNYXAsIGFueT47XG4gIC8qKlxuICAgKiBzb2NrZXQgZm9yIG5hbWVzcGFjZXMgYW5kIHJvb21zXG4gICAqL1xuICBwdWJsaWMgQkVfUkVBTFRJTUU6IFNlcnZlcjxcbiAgICBEZWZhdWx0RXZlbnRzTWFwLFxuICAgIERlZmF1bHRFdmVudHNNYXAsXG4gICAgRGVmYXVsdEV2ZW50c01hcCxcbiAgICBhbnlcbiAgPjtcblxuXG5cbiAgY29uc3RydWN0b3IocHVibGljIGN0eDogRW5kcG9pbnRDb250ZXh0KSB7XG4gICAgdGhpcy5zdHJhdGVneSA9IHRoaXMucmVzb2x2ZVN0cmF0ZWd5KCk7XG4gICAgY3R4LmxvZ0ZyYW1ld29yayAmJlxuICAgICAgY29uc29sZS5sb2coYFt0YW9uXSByZWFsdGltZSBzdHJhdGVneTogJHt0aGlzLnN0cmF0ZWd5fWApO1xuICAgIHRoaXMuY2xpZW50ID0gbmV3IFJlYWx0aW1lQ2xpZW50KHRoaXMpO1xuICAgIHRoaXMuc2VydmVyID0gbmV3IFJlYWx0aW1lU2VydmVyKHRoaXMpO1xuICB9XG5cblxuXG4gIHByaXZhdGUgcmVzb2x2ZVN0cmF0ZWd5KCk6IFJlYWx0aW1lU3RyYXRlZ3kge1xuICAgIGlmICh0aGlzLmN0eC5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZCh3ZWJzcWwpJykge1xuICAgICAgcmV0dXJuIG5ldyBSZWFsdGltZVN0cmF0ZWd5TW9jayh0aGlzLmN0eCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmN0eC5tb2RlID09PSAnYmFja2VuZC1mcm9udGVuZChpcGMtZWxlY3Ryb24pJykge1xuICAgICAgcmV0dXJuIG5ldyBSZWFsdGltZVN0cmF0ZWd5SXBjKHRoaXMuY3R4KTtcbiAgICB9XG5cblxuXG5cblxuXG4gICAgcmV0dXJuIG5ldyBSZWFsdGltZVN0cmF0ZWd5U29ja2V0SU8odGhpcy5jdHgpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBwYXRoRm9yKG5hbWVzcGFjZT86IHN0cmluZykge1xuICAgIGNvbnN0IHVyaSA9IHRoaXMuY3R4LnVyaTtcbiAgICBsZXQgbnNwID0gbmFtZXNwYWNlID8gbmFtZXNwYWNlIDogJyc7XG4gICAgbnNwID0gbnNwID09PSAnLycgPyAnJyA6IG5zcDtcbiAgICBjb25zdCBwYXRobmFtZSA9IHVyaS5wYXRobmFtZSAhPT0gJy8nID8gdXJpLnBhdGhuYW1lIDogJyc7XG4gICAgbGV0IHByZWZpeCA9IGB0YW9uQ29udGV4dC1gO1xuICAgIGlmIChIZWxwZXJzLmlzRWxlY3Ryb24pIHtcbiAgICAgIHByZWZpeCA9IGBgO1xuICAgIH1cbiAgICBjb25zdCBocmVmID0gYCR7dXJpLm9yaWdpbn0ke3BhdGhuYW1lfS8ke3ByZWZpeH0ke25zcH1gO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoaHJlZikgYXMgVVJMO1xuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24gbGliL3JlYWx0aW1lL3JlYWx0aW1lLWNvcmUudHMiXX0=
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90YW9uL3Byb2plY3RzL3Rhb24vc3JjL2xpYi9yZWFsdGltZS9yZWFsdGltZS1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFJLG1CQUFtQixFQUFJLG9CQUFvQixFQUFJLHdCQUF3QixHQUFHLE1BQU0scUJBQXFCLENBQUMsQ0FBQSxLQUFLO0FBT3RILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcxQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQTRDdkIsWUFBbUIsR0FBb0I7UUFBcEIsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUExQzlCLG1CQUFjLEdBQUc7WUFDeEIsS0FBSztZQUNMLE1BQU07WUFDTixLQUFLO1lBQ0wsUUFBUTtZQUNSLE9BQU87WUFDUCxTQUFTO1lBQ1QsTUFBTTtTQUNQLENBQUM7UUFtQ0EsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVc7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBSU8sZUFBZTtRQUNyQixJQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLDBCQUEwQjtZQUM1QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxtQ0FBbUMsRUFDckQsQ0FBQztZQUVELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssZ0NBQWdDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFPRCxPQUFPLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFJTSxPQUFPLENBQUMsU0FBa0I7UUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFFekIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUM7UUFDM0IsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdkIsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVwRixPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBUSxDQUFDO0lBQzlCLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsK0RBQStEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuaW1wb3J0IHsgU29ja2V0IGFzIFNvY2tldENsaWVudCB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludENvbnRleHQgfSBmcm9tICcuLi9lbmRwb2ludC1jb250ZXh0JztcbmltcG9ydCB7IFJlYWx0aW1lQ2xpZW50IH0gZnJvbSAnLi9yZWFsdGltZS1jbGllbnQnO1xuaW1wb3J0IHsgUmVhbHRpbWVTZXJ2ZXIgfSBmcm9tICcuL3JlYWx0aW1lLXNlcnZlcic7XG5pbXBvcnQgdHlwZSB7IFJlYWx0aW1lU3RyYXRlZ3kgfSBmcm9tICcuL3JlYWx0aW1lLXN0cmF0ZWd5JztcbmltcG9ydCB7ICAgUmVhbHRpbWVTdHJhdGVneUlwYywgICBSZWFsdGltZVN0cmF0ZWd5TW9jaywgICBSZWFsdGltZVN0cmF0ZWd5U29ja2V0SU8sIH0gZnJvbSAnLi9yZWFsdGltZS1zdHJhdGVneSc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgRGVmYXVsdEV2ZW50c01hcCB9IGZyb20gJ3NvY2tldC5pby9kaXN0L3R5cGVkLWV2ZW50cyc7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdzb2NrZXQuaW8nO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5cblxuLyoqXG4gKiBSZWFsdGltZSBjbGFzc1xuICogLSBtb2NrICh3aGVuIGJyb3dzZXItYnJvd3NlcilcbiAqIC0gc29ja2V0cyAoZnJvbSBzb2NrZXQgaW8gd2hlbiBiYWNrZW5kLWJyb3dzZXIpXG4gKiAtIGlwYyAod2hlbiBlbGVjdHJvbiBpcyB1c2VkIG9yIGJldHdlZW4gcHJvY2Vzc2VzKVxuICogLSB3ZWJ3b3JrZXIgKHdoZW4gd2Vid29ya2VyIGlzIHVzZWQgaW4gYnJvd3NlciBvciBub2RlanMpXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWFsdGltZUNvcmUge1xuXG4gIHJlYWRvbmx5IGFsbEh0dHBNZXRob2RzID0gW1xuICAgICdHRVQnLFxuICAgICdQT1NUJyxcbiAgICAnUFVUJyxcbiAgICAnREVMRVRFJyxcbiAgICAnUEFUQ0gnLFxuICAgICdPUFRJT05TJyxcbiAgICAnSEVBRCcsXG4gIF07XG4gIHB1YmxpYyByZWFkb25seSBjbGllbnQ6IFJlYWx0aW1lQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmVyOiBSZWFsdGltZVNlcnZlcjtcbiAgcHVibGljIHJlYWRvbmx5IHN0cmF0ZWd5OiBSZWFsdGltZVN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBnbG9iYWwgRkUgc29ja2V0IC0gb25seSBmb3IgZXN0YWJsaXNoZWQgY29ubmVjdGlvblxuICAgKi9cbiAgcHVibGljIGNvbmVjdFNvY2tldEZFOiBTb2NrZXRDbGllbnQ8RGVmYXVsdEV2ZW50c01hcCwgRGVmYXVsdEV2ZW50c01hcD47XG4gIC8qKlxuICAgKiBzb2NrZXQgZm9yIG5hbWVzcGFjZXMgYW5kIHJvb21zXG4gICAqL1xuICBwdWJsaWMgc29ja2V0RkU6IFNvY2tldENsaWVudDxEZWZhdWx0RXZlbnRzTWFwLCBEZWZhdWx0RXZlbnRzTWFwPjtcbiAgLyoqXG4gICAqIGdsb2JhbCBCRSBzb2NrZXQgLSBvbmx5IGZvciBlc3RhYmxpc2hlZCBjb25uZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgY29ubmVjdFNvY2tldEJFOiBTZXJ2ZXI8XG4gICAgRGVmYXVsdEV2ZW50c01hcCxcbiAgICBEZWZhdWx0RXZlbnRzTWFwLFxuICAgIERlZmF1bHRFdmVudHNNYXAsXG4gICAgYW55XG4gID47XG4gIC8qKlxuICAgKiBzb2NrZXQgZm9yIG5hbWVzcGFjZXMgYW5kIHJvb21zXG4gICAqL1xuICBwdWJsaWMgc29ja2V0QkU6IFNlcnZlcjxcbiAgICBEZWZhdWx0RXZlbnRzTWFwLFxuICAgIERlZmF1bHRFdmVudHNNYXAsXG4gICAgRGVmYXVsdEV2ZW50c01hcCxcbiAgICBhbnlcbiAgPjtcblxuXG5cbiAgY29uc3RydWN0b3IocHVibGljIGN0eDogRW5kcG9pbnRDb250ZXh0KSB7XG4gICAgdGhpcy5jdHggPSBjdHg7XG4gICAgdGhpcy5zdHJhdGVneSA9IHRoaXMucmVzb2x2ZVN0cmF0ZWd5KCk7XG5cbiAgICB0aGlzLmN0eC5sb2dSZWFsdGltZSAmJlxuICAgICAgY29uc29sZS5sb2coYFt0YW9uXSByZWFsdGltZSBzdHJhdGVneTogJHt0aGlzLnN0cmF0ZWd5fWApO1xuICAgIGlmIChIZWxwZXJzLmlzV2ViU1FMKSB7XG4gICAgICB0aGlzLnNlcnZlciA9IG5ldyBSZWFsdGltZVNlcnZlcih0aGlzKTtcblxuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgUmVhbHRpbWVDbGllbnQodGhpcyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGllbnQgPSBuZXcgUmVhbHRpbWVDbGllbnQodGhpcyk7XG4gICAgICB0aGlzLnNlcnZlciA9IG5ldyBSZWFsdGltZVNlcnZlcih0aGlzKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSByZXNvbHZlU3RyYXRlZ3koKTogUmVhbHRpbWVTdHJhdGVneSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jdHgubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQod2Vic3FsKScgfHxcbiAgICAgIHRoaXMuY3R4Lm1vZGUgPT09ICdiYWNrZW5kLWZyb250ZW5kKHdlYnNxbC1lbGVjdHJvbiknXG4gICAgKSB7XG5cbiAgICAgIHJldHVybiBuZXcgUmVhbHRpbWVTdHJhdGVneU1vY2sodGhpcy5jdHgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdHgubW9kZSA9PT0gJ2JhY2tlbmQtZnJvbnRlbmQoaXBjLWVsZWN0cm9uKScpIHtcbiAgICAgIHJldHVybiBuZXcgUmVhbHRpbWVTdHJhdGVneUlwYyh0aGlzLmN0eCk7XG4gICAgfVxuXG5cblxuXG5cblxuICAgIHJldHVybiBuZXcgUmVhbHRpbWVTdHJhdGVneVNvY2tldElPKHRoaXMuY3R4KTtcbiAgfVxuXG5cblxuICBwdWJsaWMgcGF0aEZvcihuYW1lc3BhY2U/OiBzdHJpbmcpIHtcbiAgICBjb25zdCB1cmkgPSB0aGlzLmN0eC51cmk7XG5cbiAgICBsZXQgbnNwID0gbmFtZXNwYWNlID8gbmFtZXNwYWNlIDogJyc7XG4gICAgbnNwID0gbnNwID09PSAnLycgPyAnJyA6IG5zcDtcbiAgICBjb25zdCBwYXRobmFtZSA9IHVyaS5wYXRobmFtZSAhPT0gJy8nID8gdXJpLnBhdGhuYW1lIDogJyc7XG4gICAgbGV0IHByZWZpeCA9IGB0YW9uQ29udGV4dGA7XG4gICAgaWYgKEhlbHBlcnMuaXNFbGVjdHJvbikge1xuICAgICAgcHJlZml4ID0gYGA7XG4gICAgfVxuICAgIGNvbnN0IGhyZWYgPSBgJHt1cmkub3JpZ2lufSR7cGF0aG5hbWV9LyR7cHJlZml4fSR7cHJlZml4ICYmIG5zcCA/ICctJyArIG5zcCA6IG5zcH1gO1xuXG4gICAgcmV0dXJuIG5ldyBVUkwoaHJlZikgYXMgVVJMO1xuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24gbGliL3JlYWx0aW1lL3JlYWx0aW1lLWNvcmUudHMiXX0=
@@ -1,135 +1,140 @@
1
1
  import { Symbols } from '../symbols';
2
2
  import { Helpers, _ } from 'tnp-core/websql';
3
3
  import { ClassHelpers } from '../helpers/class-helpers';
4
- const SOCKET_EVENT_DEBOUNCE = 500;
4
+ import { Subject } from 'rxjs';
5
5
  export class RealtimeServer {
6
6
  constructor(core) {
7
7
  this.core = core;
8
- this.jobs = {};
9
8
  this.core = core;
10
9
  if (!core.ctx.disabledRealtime) {
11
10
  this.init();
12
11
  }
13
12
  }
14
13
  init() {
14
+ if (!this.core.ctx.config.frontendHost) {
15
+ console.warn(`[Taon][Realtime]
16
+
17
+ Frontend host is not defined
18
+ REALTIME COMMUNICATION WILL NOT WORK
19
+
20
+ provide "frontendHost" property in your taon config
21
+
22
+ `);
23
+ }
15
24
  const nspPath = {
16
25
  global: this.core.pathFor(),
17
26
  realtime: this.core.pathFor(Symbols.REALTIME.NAMESPACE(this.core.ctx.contextName)),
18
27
  };
19
- this.core.BE = new this.core.strategy.Server(this.core.ctx.serverTcpUdp, {
28
+ this.core.connectSocketBE = this.core.strategy.ioServer(Helpers.isWebSQL ? this.core.ctx.uri.origin : this.core.ctx.serverTcpUdp, {
20
29
  path: nspPath.global.pathname,
21
30
  cors: {
22
31
  origin: this.core.ctx.config.frontendHost,
23
32
  methods: this.core.allHttpMethods,
24
33
  },
25
- });
34
+ }, // @ts-ignore
35
+ this.core.ctx);
26
36
  this.core.ctx.logRealtime &&
27
- console.info(`CREATE GLOBAL NAMESPACE: '${this.core.BE.path()}' , path: '${nspPath.global.pathname}'`);
28
- this.core.BE.on('connection', clientSocket => {
29
- if (Helpers.isElectron) {
30
- // @ts-ignore
31
- this.core.BE.emit('connect'); // TODO QUICK_FIX
32
- }
33
- console.info(`client conected to namespace "${clientSocket.nsp?.name}", host: ${this.core.ctx.host}`);
37
+ console.info(`[backend] CREATE GLOBAL NAMESPACE: '${this.core.connectSocketBE.path()}'` +
38
+ ` , path: '${nspPath.global.pathname}'`);
39
+ this.core.connectSocketBE.on('connection', clientSocket => {
40
+ console.info(`[backend] client connected to namespace "${nspPath.global.pathname}", ` +
41
+ ` host: ${this.core.ctx.host}`);
34
42
  });
35
- this.core.BE_REALTIME = new this.core.strategy.Server(this.core.ctx.serverTcpUdp, {
43
+ this.core.socketBE = this.core.strategy.ioServer(Helpers.isWebSQL || Helpers.isElectron
44
+ ? this.core.ctx.uri.origin
45
+ : this.core.ctx.serverTcpUdp, {
36
46
  path: nspPath.realtime.pathname,
37
47
  cors: {
38
48
  origin: this.core.ctx.config.frontendHost,
39
49
  methods: this.core.allHttpMethods,
40
50
  },
41
- });
51
+ }, // @ts-ignore
52
+ this.core.ctx);
42
53
  this.core.ctx.logRealtime &&
43
- console.info(`CREATE REALTIME NAMESPACE: '${this.core.BE_REALTIME.path()}' , path: '${nspPath.realtime.pathname}' `);
44
- this.core.BE_REALTIME.on('connection', backendSocketForClient => {
45
- console.info(`client conected to namespace "${backendSocketForClient.nsp?.name}", host: ${this.core.ctx.host}`);
46
- if (Helpers.isElectron) {
47
- // @ts-ignore
48
- backendSocketForClient = this.core.BE_REALTIME; // TODO QUICK_FIX
49
- this.core.BE_REALTIME.emit('connect');
50
- }
51
- backendSocketForClient.on(Symbols.REALTIME.ROOM_NAME.SUBSCRIBE.CUSTOM(this.core.ctx.contextName), roomName => {
52
- console.info(`Joining room ${roomName} in namespace REALTIME` +
53
- ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
54
+ console.info(`[backend] CREATE REALTIME NAMESPACE: '${this.core.socketBE.path()}'` +
55
+ ` , path: '${nspPath.realtime.pathname}' `);
56
+ this.core.socketBE.on('connection', backendSocketForClient => {
57
+ console.info(`[backend] client connected to namespace "${nspPath.realtime.pathname}", ` +
58
+ ` host: ${this.core.ctx.host}`);
59
+ backendSocketForClient.on(Symbols.REALTIME.ROOM_SUBSCRIBE_CUSTOM(this.core.ctx.contextName), roomName => {
60
+ this.core.ctx.logRealtime &&
61
+ console.info(`Joining room ${roomName} in namespace REALTIME` +
62
+ ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
54
63
  backendSocketForClient.join(roomName);
55
64
  });
56
- backendSocketForClient.on(Symbols.REALTIME.ROOM_NAME.SUBSCRIBE.ENTITY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
57
- console.info(`Joining room ${roomName} in namespace REALTIME` +
58
- ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
65
+ backendSocketForClient.on(Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
66
+ this.core.ctx.logRealtime &&
67
+ console.info(`[backend] Joining room ${roomName} in namespace REALTIME` +
68
+ ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
59
69
  backendSocketForClient.join(roomName);
60
70
  });
61
- backendSocketForClient.on(Symbols.REALTIME.ROOM_NAME.SUBSCRIBE.ENTITY_PROPERTY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
62
- console.info(`Joining room ${roomName} in namespace REALTIME ` +
63
- ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
71
+ backendSocketForClient.on(Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
72
+ this.core.ctx.logRealtime &&
73
+ console.info(`[backend] Joining room ${roomName} in namespace REALTIME ` +
74
+ ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
64
75
  backendSocketForClient.join(roomName);
65
76
  });
66
- backendSocketForClient.on(Symbols.REALTIME.ROOM_NAME.UNSUBSCRIBE.CUSTOM(this.core.ctx.contextName), roomName => {
67
- console.info(`Leaving room ${roomName} in namespace REALTIME` +
68
- ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
77
+ backendSocketForClient.on(Symbols.REALTIME.ROOM_UNSUBSCRIBE_CUSTOM(this.core.ctx.contextName), roomName => {
78
+ this.core.ctx.logRealtime &&
79
+ console.info(`[backend] Leaving room ${roomName} in namespace REALTIME` +
80
+ ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
69
81
  backendSocketForClient.leave(roomName);
70
82
  });
71
- backendSocketForClient.on(Symbols.REALTIME.ROOM_NAME.UNSUBSCRIBE.ENTITY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
72
- console.info(`Leaving room ${roomName} in namespace REALTIME ` +
73
- ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
83
+ backendSocketForClient.on(Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
84
+ this.core.ctx.logRealtime &&
85
+ console.info(`[backend] Leaving room ${roomName} in namespace REALTIME ` +
86
+ ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
74
87
  backendSocketForClient.leave(roomName);
75
88
  });
76
- backendSocketForClient.on(Symbols.REALTIME.ROOM_NAME.UNSUBSCRIBE.ENTITY_PROPERTY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
77
- console.info(`Leaving room ${roomName} in namespace REALTIME ` +
78
- ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
89
+ backendSocketForClient.on(Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(this.core.ctx.contextName), roomName => {
90
+ this.core.ctx.logRealtime &&
91
+ console.info(`[backend] Leaving room ${roomName} in namespace REALTIME ` +
92
+ ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`);
79
93
  backendSocketForClient.leave(roomName);
80
94
  });
81
95
  });
82
96
  }
83
- triggerChanges(entityObjOrClass, property, valueOfUniquPropery, customEvent, customEventData) {
97
+ triggerChanges(entityObjOrClass, property, valueOfUniqueProperty, customEvent, customEventData) {
84
98
  let roomName;
85
99
  if (this.core.ctx.disabledRealtime) {
86
100
  return;
87
101
  }
88
102
  if (customEvent) {
89
- roomName = Symbols.REALTIME.ROOM_NAME.CUSTOM(this.core.ctx.contextName, customEvent);
103
+ roomName = Symbols.REALTIME.ROOM_NAME_CUSTOM(this.core.ctx.contextName, customEvent);
90
104
  }
91
105
  else {
92
106
  let entityFn = entityObjOrClass;
93
- const enittyIsObject = !_.isFunction(entityObjOrClass) && _.isObject(entityObjOrClass);
94
- if (enittyIsObject) {
107
+ const entityIsObject = !_.isFunction(entityObjOrClass) && _.isObject(entityObjOrClass);
108
+ if (entityIsObject) {
95
109
  entityFn = ClassHelpers.getClassFnFromObject(entityObjOrClass);
96
110
  }
97
- const uniqueKey = ClassHelpers.getUniquKey(entityFn);
98
- if (enittyIsObject) {
99
- valueOfUniquPropery = entityObjOrClass[uniqueKey];
111
+ const uniqueKey = ClassHelpers.getUniqueKey(entityFn);
112
+ if (entityIsObject) {
113
+ valueOfUniqueProperty = entityObjOrClass[uniqueKey];
100
114
  }
101
- if (!valueOfUniquPropery) {
115
+ if (!valueOfUniqueProperty) {
102
116
  Helpers.error(`[Taon][Realtime] Entity without iD ! ${ClassHelpers.getName(entityFn)} `, true, true);
103
117
  return;
104
118
  }
105
119
  roomName = _.isString(property)
106
- ? Symbols.REALTIME.ROOM_NAME.UPDATE_ENTITY_PROPERTY(this.core.ctx.contextName, ClassHelpers.getName(entityFn), property, valueOfUniquPropery)
107
- : Symbols.REALTIME.ROOM_NAME.UPDATE_ENTITY(this.core.ctx.contextName, ClassHelpers.getName(entityFn), valueOfUniquPropery);
108
- }
109
- const job = () => {
110
- console.log(`Trigger realtime: ${this.core.ctx.contextName}/${roomName}`);
111
- this.core.BE_REALTIME.in(roomName).emit(roomName, // roomName == eventName in room na
112
- customEventData ? customEventData : '');
113
- };
114
- if (!_.isFunction(this.jobs[roomName])) {
115
- this.jobs[roomName] = _.debounce(() => {
116
- job();
117
- }, SOCKET_EVENT_DEBOUNCE);
120
+ ? Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY_PROPERTY(this.core.ctx.contextName, ClassHelpers.getName(entityFn), property, valueOfUniqueProperty)
121
+ : Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY(this.core.ctx.contextName, ClassHelpers.getName(entityFn), valueOfUniqueProperty);
118
122
  }
119
- this.jobs[roomName]();
123
+ this.core.socketBE.in(roomName).emit(roomName, // roomName == eventName in room na
124
+ customEvent ? customEventData : '');
120
125
  }
121
- trigggerEntityChanges(entityObjOrClass, idToTrigger) {
126
+ triggerEntityChanges(entityObjOrClass, idToTrigger) {
122
127
  if (this.core.ctx.disabledRealtime) {
123
128
  const className = ClassHelpers.getName(entityObjOrClass);
124
- console.warn(`[Taon][TrigggerEntityChanges] Entity "${className}' is not realtime`);
129
+ console.warn(`[Taon][TriggerEntityChanges] Entity "${className}' is not realtime`);
125
130
  return;
126
131
  }
127
132
  this.triggerChanges(entityObjOrClass, void 0, idToTrigger);
128
133
  }
129
- trigggerEntityPropertyChanges(entityObjOrClass, property, idToTrigger) {
134
+ triggerEntityPropertyChanges(entityObjOrClass, property, idToTrigger) {
130
135
  if (this.core.ctx.disabledRealtime) {
131
136
  const className = ClassHelpers.getName(entityObjOrClass);
132
- console.warn(`[Taon][TrigggerEntityPropertyChanges][property=${property}] Entity "${className}' is not realtime`);
137
+ console.warn(`[Taon][TriggerEntityPropertyChanges][property=${property}] Entity "${className}' is not realtime`);
133
138
  return;
134
139
  }
135
140
  if (_.isArray(property)) {
@@ -141,18 +146,31 @@ export class RealtimeServer {
141
146
  this.triggerChanges(entityObjOrClass, property, idToTrigger);
142
147
  }
143
148
  }
144
- triggerCustomEvent(customEvent, dataToPush) {
145
- this.triggerChanges(void 0, void 0, void 0, customEvent, dataToPush);
146
- }
147
- trigggerEntityTableChanges(entityClass) {
148
- const className = ClassHelpers.getName(entityClass);
149
+ triggerEntityTableChanges(entityClassOrInstance) {
150
+ const className = ClassHelpers.getName(entityClassOrInstance);
149
151
  if (this.core.ctx.disabledRealtime) {
150
- console.warn(`[Taon][TrigggerEntityTableChanges] Entity "${className}' is not realtime`);
152
+ console.warn(`[Taon][TriggerEntityTableChanges] Entity "${className}' is not realtime`);
151
153
  return;
152
154
  }
153
- this.triggerChanges(entityClass, void 0, void 0, Symbols.REALTIME.TABLE_CHANGE(this.core.ctx.contextName, className));
155
+ this.triggerChanges(entityClassOrInstance, void 0, void 0, Symbols.REALTIME.TABLE_CHANGE(this.core.ctx.contextName, className));
156
+ }
157
+ triggerCustomEvent(customEvent, dataToPush) {
158
+ this.triggerChanges(void 0, void 0, void 0, customEvent, dataToPush);
159
+ }
160
+ /**
161
+ * Listen to custom events from users
162
+ * @param customEvent global event name
163
+ */
164
+ listenChangesCustomEvent(customEvent) {
165
+ const sub = new Subject();
166
+ this.core.socketBE.on('connection', backendSocketForClient => {
167
+ backendSocketForClient.on(customEvent, (data, ...args) => {
168
+ sub.next(data);
169
+ });
170
+ });
171
+ return sub.asObservable();
154
172
  }
155
173
  }
156
174
  ;
157
175
  ({}); // @--end-of-file-for-module=taon lib/realtime/realtime-server.ts
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL3JlYWx0aW1lL3JlYWx0aW1lLXNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSXhELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLElBQWtCO1FBQWxCLFNBQUksR0FBSixJQUFJLENBQWM7UUFEOUIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRS9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVkLENBQUM7SUFDSCxDQUFDO0lBR08sSUFBSTtRQUlWLE1BQU0sT0FBTyxHQUFHO1lBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQ3REO1NBQ0YsQ0FBQztRQUtGLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FB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QUMsV0FBbUIsRUFBRSxVQUFlO1FBQzVELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFJTSwwQkFBMEIsQ0FBQyxXQUFxQjtRQUNyRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsSUFBSSxDQUNWLDhDQUE4QyxTQUFTLG1CQUFtQixDQUMzRSxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUNqQixXQUFrQixFQUNsQixLQUFLLENBQUMsRUFDTixLQUFLLENBQUMsRUFDTixPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQ3BFLENBQUM7SUFDSixDQUFDO0NBRUY7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlFQUFpRSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5cbmltcG9ydCB7IFN5bWJvbHMgfSBmcm9tICcuLi9zeW1ib2xzJztcbmltcG9ydCB7IEhlbHBlcnMsIF8gfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuaW1wb3J0IHsgUmVhbHRpbWVDb3JlIH0gZnJvbSAnLi9yZWFsdGltZS1jb3JlJztcbmltcG9ydCB7IENsYXNzSGVscGVycyB9IGZyb20gJy4uL2hlbHBlcnMvY2xhc3MtaGVscGVycyc7XG5pbXBvcnQgdHlwZSB7IEJhc2VFbnRpdHkgfSBmcm9tICcuLi9iYXNlLWNsYXNzZXMvYmFzZS1lbnRpdHknO1xuXG5cbmNvbnN0IFNPQ0tFVF9FVkVOVF9ERUJPVU5DRSA9IDUwMDtcblxuZXhwb3J0IGNsYXNzIFJlYWx0aW1lU2VydmVyIHtcbiAgcHJpdmF0ZSBqb2JzID0ge307XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29yZTogUmVhbHRpbWVDb3JlKSB7XG4gICAgdGhpcy5jb3JlID0gY29yZTtcbiAgICBpZiAoIWNvcmUuY3R4LmRpc2FibGVkUmVhbHRpbWUpIHtcblxuICAgICAgdGhpcy5pbml0KCk7XG5cbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgaW5pdCgpIHtcblxuXG5cbiAgICBjb25zdCBuc3BQYXRoID0ge1xuICAgICAgZ2xvYmFsOiB0aGlzLmNvcmUucGF0aEZvcigpLFxuICAgICAgcmVhbHRpbWU6IHRoaXMuY29yZS5wYXRoRm9yKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLk5BTUVTUEFDRSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lKSxcbiAgICAgICksXG4gICAgfTtcblxuXG5cblxuICAgIHRoaXMuY29yZS5CRSA9IG5ldyB0aGlzLmNvcmUuc3RyYXRlZ3kuU2VydmVyKHRoaXMuY29yZS5jdHguc2VydmVyVGNwVWRwLCB7XG4gICAgICBwYXRoOiBuc3BQYXRoLmdsb2JhbC5wYXRobmFtZSxcblxuICAgICAgY29yczoge1xuICAgICAgICBvcmlnaW46IHRoaXMuY29yZS5jdHguY29uZmlnLmZyb250ZW5kSG9zdCxcbiAgICAgICAgbWV0aG9kczogdGhpcy5jb3JlLmFsbEh0dHBNZXRob2RzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgYENSRUFURSBHTE9CQUwgTkFNRVNQQUNFOiAnJHt0aGlzLmNvcmUuQkUucGF0aCgpfScgLCBwYXRoOiAnJHtcbiAgICAgICAgICBuc3BQYXRoLmdsb2JhbC5wYXRobmFtZVxuICAgICAgICB9J2AsXG4gICAgICApO1xuXG4gICAgdGhpcy5jb3JlLkJFLm9uKCdjb25uZWN0aW9uJywgY2xpZW50U29ja2V0ID0+IHtcbiAgICAgIGlmIChIZWxwZXJzLmlzRWxlY3Ryb24pIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLmNvcmUuQkUuZW1pdCgnY29ubmVjdCcpOyAvLyBUT0RPIFFVSUNLX0ZJWFxuICAgICAgfVxuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgY2xpZW50IGNvbmVjdGVkIHRvIG5hbWVzcGFjZSBcIiR7Y2xpZW50U29ja2V0Lm5zcD8ubmFtZX1cIiwgIGhvc3Q6ICR7dGhpcy5jb3JlLmN0eC5ob3N0fWAsXG4gICAgICApO1xuICAgIH0pO1xuXG5cblxuXG4gICAgdGhpcy5jb3JlLkJFX1JFQUxUSU1FID0gbmV3IHRoaXMuY29yZS5zdHJhdGVneS5TZXJ2ZXIoXG4gICAgICB0aGlzLmNvcmUuY3R4LnNlcnZlclRjcFVkcCxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogbnNwUGF0aC5yZWFsdGltZS5wYXRobmFtZSxcbiAgICAgICAgY29yczoge1xuICAgICAgICAgIG9yaWdpbjogdGhpcy5jb3JlLmN0eC5jb25maWcuZnJvbnRlbmRIb3N0LFxuICAgICAgICAgIG1ldGhvZHM6IHRoaXMuY29yZS5hbGxIdHRwTWV0aG9kcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgYENSRUFURSBSRUFMVElNRSBOQU1FU1BBQ0U6ICcke3RoaXMuY29yZS5CRV9SRUFMVElNRS5wYXRoKCl9JyAsIHBhdGg6ICcke1xuICAgICAgICAgIG5zcFBhdGgucmVhbHRpbWUucGF0aG5hbWVcbiAgICAgICAgfScgYCxcbiAgICAgICk7XG5cbiAgICB0aGlzLmNvcmUuQkVfUkVBTFRJTUUub24oJ2Nvbm5lY3Rpb24nLCBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50ID0+IHtcbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgYGNsaWVudCBjb25lY3RlZCB0byBuYW1lc3BhY2UgXCIke2JhY2tlbmRTb2NrZXRGb3JDbGllbnQubnNwPy5uYW1lfVwiLCAgaG9zdDogJHt0aGlzLmNvcmUuY3R4Lmhvc3R9YCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChIZWxwZXJzLmlzRWxlY3Ryb24pIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50ID0gdGhpcy5jb3JlLkJFX1JFQUxUSU1FOyAvLyBUT0RPIFFVSUNLX0ZJWFxuICAgICAgICB0aGlzLmNvcmUuQkVfUkVBTFRJTUUuZW1pdCgnY29ubmVjdCcpO1xuICAgICAgfVxuXG4gICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50Lm9uKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLlJPT01fTkFNRS5TVUJTQ1JJQkUuQ1VTVE9NKHRoaXMuY29yZS5jdHguY29udGV4dE5hbWUpLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYEpvaW5pbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgIFJFQUxUSU1FYCArXG4gICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5qb2luKHJvb21OYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQub24oXG4gICAgICAgIFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FLlNVQlNDUklCRS5FTlRJVFlfVVBEQVRFX0VWRU5UUyhcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICApLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYEpvaW5pbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgIFJFQUxUSU1FYCArXG4gICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5qb2luKHJvb21OYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQub24oXG4gICAgICAgIFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FLlNVQlNDUklCRS5FTlRJVFlfUFJPUEVSVFlfVVBEQVRFX0VWRU5UUyhcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICApLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYEpvaW5pbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgUkVBTFRJTUUgYCArXG4gICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5qb2luKHJvb21OYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQub24oXG4gICAgICAgIFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FLlVOU1VCU0NSSUJFLkNVU1RPTShcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICApLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYExlYXZpbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgIFJFQUxUSU1FYCArXG4gICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5sZWF2ZShyb29tTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50Lm9uKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLlJPT01fTkFNRS5VTlNVQlNDUklCRS5FTlRJVFlfVVBEQVRFX0VWRU5UUyhcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICApLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYExlYXZpbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgUkVBTFRJTUUgYCArXG4gICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5sZWF2ZShyb29tTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50Lm9uKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLlJPT01fTkFNRS5VTlNVQlNDUklCRS5FTlRJVFlfUFJPUEVSVFlfVVBEQVRFX0VWRU5UUyhcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICApLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYExlYXZpbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgUkVBTFRJTUUgYCArXG4gICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5sZWF2ZShyb29tTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuXG5cblxuXG4gIH1cblxuXG5cblxuICBwcml2YXRlIHRyaWdnZXJDaGFuZ2VzKFxuICAgIGVudGl0eU9iak9yQ2xhc3M6IEZ1bmN0aW9uLFxuICAgIHByb3BlcnR5Pzogc3RyaW5nLFxuICAgIHZhbHVlT2ZVbmlxdVByb3Blcnk/OiBudW1iZXIgfCBzdHJpbmcsXG4gICAgY3VzdG9tRXZlbnQ/OiBzdHJpbmcsXG4gICAgY3VzdG9tRXZlbnREYXRhPzogYW55LFxuICApIHtcblxuXG5cbiAgICBsZXQgcm9vbU5hbWU6IHN0cmluZztcblxuICAgIGlmICh0aGlzLmNvcmUuY3R4LmRpc2FibGVkUmVhbHRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tRXZlbnQpIHtcbiAgICAgIHJvb21OYW1lID0gU3ltYm9scy5SRUFMVElNRS5ST09NX05BTUUuQ1VTVE9NKFxuICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICBjdXN0b21FdmVudCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBlbnRpdHlGbiA9IGVudGl0eU9iak9yQ2xhc3MgYXMgRnVuY3Rpb247XG4gICAgICBjb25zdCBlbml0dHlJc09iamVjdCA9XG4gICAgICAgICFfLmlzRnVuY3Rpb24oZW50aXR5T2JqT3JDbGFzcykgJiYgXy5pc09iamVjdChlbnRpdHlPYmpPckNsYXNzKTtcblxuICAgICAgaWYgKGVuaXR0eUlzT2JqZWN0KSB7XG4gICAgICAgIGVudGl0eUZuID0gQ2xhc3NIZWxwZXJzLmdldENsYXNzRm5Gcm9tT2JqZWN0KGVudGl0eU9iak9yQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSBDbGFzc0hlbHBlcnMuZ2V0VW5pcXVLZXkoZW50aXR5Rm4pO1xuXG4gICAgICBpZiAoZW5pdHR5SXNPYmplY3QpIHtcbiAgICAgICAgdmFsdWVPZlVuaXF1UHJvcGVyeSA9IGVudGl0eU9iak9yQ2xhc3NbdW5pcXVlS2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWx1ZU9mVW5pcXVQcm9wZXJ5KSB7XG4gICAgICAgIEhlbHBlcnMuZXJyb3IoXG4gICAgICAgICAgYFtUYW9uXVtSZWFsdGltZV0gRW50aXR5IHdpdGhvdXQgaUQgISAke0NsYXNzSGVscGVycy5nZXROYW1lKFxuICAgICAgICAgICAgZW50aXR5Rm4sXG4gICAgICAgICAgKX0gYCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcm9vbU5hbWUgPSBfLmlzU3RyaW5nKHByb3BlcnR5KVxuICAgICAgICA/IFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FLlVQREFURV9FTlRJVFlfUFJPUEVSVFkoXG4gICAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5Rm4pLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICB2YWx1ZU9mVW5pcXVQcm9wZXJ5LFxuICAgICAgICAgIClcbiAgICAgICAgOiBTeW1ib2xzLlJFQUxUSU1FLlJPT01fTkFNRS5VUERBVEVfRU5USVRZKFxuICAgICAgICAgICAgdGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZSxcbiAgICAgICAgICAgIENsYXNzSGVscGVycy5nZXROYW1lKGVudGl0eUZuKSxcbiAgICAgICAgICAgIHZhbHVlT2ZVbmlxdVByb3BlcnksXG4gICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBqb2IgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhgVHJpZ2dlciByZWFsdGltZTogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3Jvb21OYW1lfWApO1xuICAgICAgdGhpcy5jb3JlLkJFX1JFQUxUSU1FLmluKHJvb21OYW1lKS5lbWl0KFxuICAgICAgICByb29tTmFtZSwgLy8gcm9vbU5hbWUgPT0gZXZlbnROYW1lIGluIHJvb20gbmFcbiAgICAgICAgY3VzdG9tRXZlbnREYXRhID8gY3VzdG9tRXZlbnREYXRhIDogJycsXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpZiAoIV8uaXNGdW5jdGlvbih0aGlzLmpvYnNbcm9vbU5hbWVdKSkge1xuICAgICAgdGhpcy5qb2JzW3Jvb21OYW1lXSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICBqb2IoKTtcbiAgICAgIH0sIFNPQ0tFVF9FVkVOVF9ERUJPVU5DRSk7XG4gICAgfVxuXG4gICAgdGhpcy5qb2JzW3Jvb21OYW1lXSgpO1xuXG4gIH1cblxuXG5cbiAgcHVibGljIHRyaWdnZ2VyRW50aXR5Q2hhbmdlcyhcbiAgICBlbnRpdHlPYmpPckNsYXNzOiBGdW5jdGlvbixcbiAgICBpZFRvVHJpZ2dlcj86IG51bWJlciB8IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKHRoaXMuY29yZS5jdHguZGlzYWJsZWRSZWFsdGltZSkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5T2JqT3JDbGFzcyk7XG5cbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtUYW9uXVtUcmlnZ2dlckVudGl0eUNoYW5nZXNdIEVudGl0eSBcIiR7Y2xhc3NOYW1lfScgaXMgbm90IHJlYWx0aW1lYCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckNoYW5nZXMoZW50aXR5T2JqT3JDbGFzcyBhcyBhbnksIHZvaWQgMCwgaWRUb1RyaWdnZXIpO1xuICB9XG5cblxuXG4gIHB1YmxpYyB0cmlnZ2dlckVudGl0eVByb3BlcnR5Q2hhbmdlczxFTlRJVFkgZXh0ZW5kcyBCYXNlRW50aXR5PihcbiAgICBlbnRpdHlPYmpPckNsYXNzOiBuZXcgKC4uLmFyZ3MpID0+IEVOVElUWSxcbiAgICBwcm9wZXJ0eToga2V5b2YgRU5USVRZIHwgKGtleW9mIEVOVElUWSlbXSxcbiAgICBpZFRvVHJpZ2dlcj86IG51bWJlciB8IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKHRoaXMuY29yZS5jdHguZGlzYWJsZWRSZWFsdGltZSkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5T2JqT3JDbGFzcyk7XG5cbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtUYW9uXVtUcmlnZ2dlckVudGl0eVByb3BlcnR5Q2hhbmdlc11bcHJvcGVydHk9JHtcbiAgICAgICAgICBwcm9wZXJ0eSBhcyBzdHJpbmdcbiAgICAgICAgfV0gRW50aXR5IFwiJHtjbGFzc05hbWV9JyBpcyBub3QgcmVhbHRpbWVgLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0FycmF5KHByb3BlcnR5KSkge1xuICAgICAgcHJvcGVydHkuZm9yRWFjaChwcm9wZXJ0eUZyb21BcnIgPT4ge1xuICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2VzKFxuICAgICAgICAgIGVudGl0eU9iak9yQ2xhc3MsXG4gICAgICAgICAgcHJvcGVydHlGcm9tQXJyIGFzIGFueSxcbiAgICAgICAgICBpZFRvVHJpZ2dlcixcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyaWdnZXJDaGFuZ2VzKGVudGl0eU9iak9yQ2xhc3MsIHByb3BlcnR5IGFzIGFueSwgaWRUb1RyaWdnZXIpO1xuICAgIH1cbiAgfVxuXG5cblxuICBwdWJsaWMgdHJpZ2dlckN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50OiBzdHJpbmcsIGRhdGFUb1B1c2g6IGFueSkge1xuICAgIHRoaXMudHJpZ2dlckNoYW5nZXModm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgY3VzdG9tRXZlbnQsIGRhdGFUb1B1c2gpO1xuICB9XG5cblxuXG4gIHB1YmxpYyB0cmlnZ2dlckVudGl0eVRhYmxlQ2hhbmdlcyhlbnRpdHlDbGFzczogRnVuY3Rpb24pIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHlDbGFzcyk7XG4gICAgaWYgKHRoaXMuY29yZS5jdHguZGlzYWJsZWRSZWFsdGltZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW1Rhb25dW1RyaWdnZ2VyRW50aXR5VGFibGVDaGFuZ2VzXSBFbnRpdHkgXCIke2NsYXNzTmFtZX0nIGlzIG5vdCByZWFsdGltZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudHJpZ2dlckNoYW5nZXMoXG4gICAgICBlbnRpdHlDbGFzcyBhcyBhbnksXG4gICAgICB2b2lkIDAsXG4gICAgICB2b2lkIDAsXG4gICAgICBTeW1ib2xzLlJFQUxUSU1FLlRBQkxFX0NIQU5HRSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLCBjbGFzc05hbWUpLFxuICAgICk7XG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvcmVhbHRpbWUvcmVhbHRpbWUtc2VydmVyLnRzIl19
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL3JlYWx0aW1lL3JlYWx0aW1lLXNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHM0MsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsSUFBa0I7UUFBbEIsU0FBSSxHQUFKLElBQUksQ0FBYztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRS9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVkLENBQUM7SUFDSCxDQUFDO0lBR08sSUFBSTtRQUdWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7OztPQU9aLENBQUMsQ0FBQztRQUNMLENBQUM7UUFHRCxNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUN0RDtTQUNG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MUUsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FDakIscUJBQTRCLEVBQzVCLEtBQUssQ0FBQyxFQUNOLEtBQUssQ0FBQyxFQUNOLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFRTSxrQkFBa0IsQ0FBQyxXQUFtQixFQUFFLFVBQWU7UUFDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUlEOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLFdBQW1CO1FBRTFDLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxFQUFFO1lBQzNELHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUIsQ0FBQztDQUlGO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpRUFBaUUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG5pbXBvcnQgeyBTeW1ib2xzIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBIZWxwZXJzLCBfIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IFJlYWx0aW1lQ29yZSB9IGZyb20gJy4vcmVhbHRpbWUtY29yZSc7XG5pbXBvcnQgeyBDbGFzc0hlbHBlcnMgfSBmcm9tICcuLi9oZWxwZXJzL2NsYXNzLWhlbHBlcnMnO1xuaW1wb3J0IHR5cGUgeyBCYXNlRW50aXR5IH0gZnJvbSAnLi4vYmFzZS1jbGFzc2VzL2Jhc2UtZW50aXR5JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuXG5leHBvcnQgY2xhc3MgUmVhbHRpbWVTZXJ2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29yZTogUmVhbHRpbWVDb3JlKSB7XG4gICAgdGhpcy5jb3JlID0gY29yZTtcbiAgICBpZiAoIWNvcmUuY3R4LmRpc2FibGVkUmVhbHRpbWUpIHtcblxuICAgICAgdGhpcy5pbml0KCk7XG5cbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgaW5pdCgpIHtcblxuXG4gICAgaWYgKCF0aGlzLmNvcmUuY3R4LmNvbmZpZy5mcm9udGVuZEhvc3QpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW1Rhb25dW1JlYWx0aW1lXVxuXG4gICAgICBGcm9udGVuZCBob3N0IGlzIG5vdCBkZWZpbmVkXG4gICAgICBSRUFMVElNRSBDT01NVU5JQ0FUSU9OIFdJTEwgTk9UIFdPUktcblxuICAgICAgcHJvdmlkZSBcImZyb250ZW5kSG9zdFwiIHByb3BlcnR5IGluIHlvdXIgdGFvbiBjb25maWdcblxuICAgICAgYCk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBuc3BQYXRoID0ge1xuICAgICAgZ2xvYmFsOiB0aGlzLmNvcmUucGF0aEZvcigpLFxuICAgICAgcmVhbHRpbWU6IHRoaXMuY29yZS5wYXRoRm9yKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLk5BTUVTUEFDRSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lKSxcbiAgICAgICksXG4gICAgfTtcblxuXG5cblxuXG5cbiAgICB0aGlzLmNvcmUuY29ubmVjdFNvY2tldEJFID0gdGhpcy5jb3JlLnN0cmF0ZWd5LmlvU2VydmVyKFxuICAgICAgSGVscGVycy5pc1dlYlNRTCA/IHRoaXMuY29yZS5jdHgudXJpLm9yaWdpbiA6IHRoaXMuY29yZS5jdHguc2VydmVyVGNwVWRwLFxuICAgICAge1xuICAgICAgICBwYXRoOiBuc3BQYXRoLmdsb2JhbC5wYXRobmFtZSxcblxuICAgICAgICBjb3JzOiB7XG4gICAgICAgICAgb3JpZ2luOiB0aGlzLmNvcmUuY3R4LmNvbmZpZy5mcm9udGVuZEhvc3QsXG4gICAgICAgICAgbWV0aG9kczogdGhpcy5jb3JlLmFsbEh0dHBNZXRob2RzLFxuICAgICAgICB9LFxuICAgICAgfSwgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5jb3JlLmN0eCxcbiAgICApO1xuXG4gICAgdGhpcy5jb3JlLmN0eC5sb2dSZWFsdGltZSAmJlxuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgW2JhY2tlbmRdIENSRUFURSBHTE9CQUwgTkFNRVNQQUNFOiAnJHt0aGlzLmNvcmUuY29ubmVjdFNvY2tldEJFLnBhdGgoKX0nYCArXG4gICAgICAgICAgYCAsIHBhdGg6ICcke25zcFBhdGguZ2xvYmFsLnBhdGhuYW1lfSdgLFxuICAgICAgKTtcblxuICAgIHRoaXMuY29yZS5jb25uZWN0U29ja2V0QkUub24oJ2Nvbm5lY3Rpb24nLCBjbGllbnRTb2NrZXQgPT4ge1xuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgW2JhY2tlbmRdIGNsaWVudCBjb25uZWN0ZWQgdG8gbmFtZXNwYWNlIFwiJHtuc3BQYXRoLmdsb2JhbC5wYXRobmFtZX1cIiwgYCArXG4gICAgICAgICAgYCBob3N0OiAke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgKTtcbiAgICB9KTtcblxuXG5cblxuICAgIHRoaXMuY29yZS5zb2NrZXRCRSA9IHRoaXMuY29yZS5zdHJhdGVneS5pb1NlcnZlcihcbiAgICAgIEhlbHBlcnMuaXNXZWJTUUwgfHwgSGVscGVycy5pc0VsZWN0cm9uXG4gICAgICAgID8gdGhpcy5jb3JlLmN0eC51cmkub3JpZ2luXG4gICAgICAgIDogdGhpcy5jb3JlLmN0eC5zZXJ2ZXJUY3BVZHAsXG4gICAgICB7XG4gICAgICAgIHBhdGg6IG5zcFBhdGgucmVhbHRpbWUucGF0aG5hbWUsXG4gICAgICAgIGNvcnM6IHtcbiAgICAgICAgICBvcmlnaW46IHRoaXMuY29yZS5jdHguY29uZmlnLmZyb250ZW5kSG9zdCxcbiAgICAgICAgICBtZXRob2RzOiB0aGlzLmNvcmUuYWxsSHR0cE1ldGhvZHMsXG4gICAgICAgIH0sXG4gICAgICB9LCAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLmNvcmUuY3R4LFxuICAgICk7XG5cbiAgICB0aGlzLmNvcmUuY3R4LmxvZ1JlYWx0aW1lICYmXG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIGBbYmFja2VuZF0gQ1JFQVRFIFJFQUxUSU1FIE5BTUVTUEFDRTogJyR7dGhpcy5jb3JlLnNvY2tldEJFLnBhdGgoKX0nYCArXG4gICAgICAgICAgYCAsIHBhdGg6ICcke25zcFBhdGgucmVhbHRpbWUucGF0aG5hbWV9JyBgLFxuICAgICAgKTtcblxuICAgIHRoaXMuY29yZS5zb2NrZXRCRS5vbignY29ubmVjdGlvbicsIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQgPT4ge1xuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgW2JhY2tlbmRdIGNsaWVudCBjb25uZWN0ZWQgdG8gbmFtZXNwYWNlIFwiJHtuc3BQYXRoLnJlYWx0aW1lLnBhdGhuYW1lfVwiLCBgICtcbiAgICAgICAgICBgIGhvc3Q6ICR7dGhpcy5jb3JlLmN0eC5ob3N0fWAsXG4gICAgICApO1xuXG4gICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50Lm9uKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLlJPT01fU1VCU0NSSUJFX0NVU1RPTSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lKSxcbiAgICAgICAgcm9vbU5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgYEpvaW5pbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgIFJFQUxUSU1FYCArXG4gICAgICAgICAgICAgICAgYCBob3N0OiAke3RoaXMuY29yZS5jdHguY29udGV4dE5hbWV9LyR7dGhpcy5jb3JlLmN0eC5ob3N0fWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQuam9pbihyb29tTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50Lm9uKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLlJPT01fU1VCU0NSSUJFX0VOVElUWV9VUERBVEVfRVZFTlRTKFxuICAgICAgICAgIHRoaXMuY29yZS5jdHguY29udGV4dE5hbWUsXG4gICAgICAgICksXG4gICAgICAgIHJvb21OYW1lID0+IHtcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmxvZ1JlYWx0aW1lICYmXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgIGBbYmFja2VuZF0gSm9pbmluZyByb29tICR7cm9vbU5hbWV9IGluIG5hbWVzcGFjZSAgUkVBTFRJTUVgICtcbiAgICAgICAgICAgICAgICBgIGhvc3Q6ICR7dGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZX0vJHt0aGlzLmNvcmUuY3R4Lmhvc3R9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5qb2luKHJvb21OYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQub24oXG4gICAgICAgIFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9TVUJTQ1JJQkVfRU5USVRZX1BST1BFUlRZX1VQREFURV9FVkVOVFMoXG4gICAgICAgICAgdGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZSxcbiAgICAgICAgKSxcbiAgICAgICAgcm9vbU5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgYFtiYWNrZW5kXSBKb2luaW5nIHJvb20gJHtyb29tTmFtZX0gaW4gbmFtZXNwYWNlIFJFQUxUSU1FIGAgK1xuICAgICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50LmpvaW4ocm9vbU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5vbihcbiAgICAgICAgU3ltYm9scy5SRUFMVElNRS5ST09NX1VOU1VCU0NSSUJFX0NVU1RPTSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lKSxcbiAgICAgICAgcm9vbU5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgYFtiYWNrZW5kXSBMZWF2aW5nIHJvb20gJHtyb29tTmFtZX0gaW4gbmFtZXNwYWNlICBSRUFMVElNRWAgK1xuICAgICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50LmxlYXZlKHJvb21OYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQub24oXG4gICAgICAgIFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9VTlNVQlNDUklCRV9FTlRJVFlfVVBEQVRFX0VWRU5UUyhcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICApLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgdGhpcy5jb3JlLmN0eC5sb2dSZWFsdGltZSAmJlxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICBgW2JhY2tlbmRdIExlYXZpbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgUkVBTFRJTUUgYCArXG4gICAgICAgICAgICAgICAgYCBob3N0OiAke3RoaXMuY29yZS5jdHguY29udGV4dE5hbWV9LyR7dGhpcy5jb3JlLmN0eC5ob3N0fWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQubGVhdmUocm9vbU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5vbihcbiAgICAgICAgU3ltYm9scy5SRUFMVElNRS5ST09NX1VOU1VCU0NSSUJFX0VOVElUWV9QUk9QRVJUWV9VUERBVEVfRVZFTlRTKFxuICAgICAgICAgIHRoaXMuY29yZS5jdHguY29udGV4dE5hbWUsXG4gICAgICAgICksXG4gICAgICAgIHJvb21OYW1lID0+IHtcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmxvZ1JlYWx0aW1lICYmXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgIGBbYmFja2VuZF0gTGVhdmluZyByb29tICR7cm9vbU5hbWV9IGluIG5hbWVzcGFjZSBSRUFMVElNRSBgICtcbiAgICAgICAgICAgICAgICBgIGhvc3Q6ICR7dGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZX0vJHt0aGlzLmNvcmUuY3R4Lmhvc3R9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5sZWF2ZShyb29tTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuXG5cblxuXG4gIH1cblxuXG5cblxuICBwcml2YXRlIHRyaWdnZXJDaGFuZ2VzKFxuICAgIGVudGl0eU9iak9yQ2xhc3M6IEZ1bmN0aW9uLFxuICAgIHByb3BlcnR5Pzogc3RyaW5nLFxuICAgIHZhbHVlT2ZVbmlxdWVQcm9wZXJ0eT86IG51bWJlciB8IHN0cmluZyxcbiAgICBjdXN0b21FdmVudD86IHN0cmluZyxcbiAgICBjdXN0b21FdmVudERhdGE/OiBhbnksXG4gICkge1xuXG5cblxuXG4gICAgbGV0IHJvb21OYW1lOiBzdHJpbmc7XG5cbiAgICBpZiAodGhpcy5jb3JlLmN0eC5kaXNhYmxlZFJlYWx0aW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbUV2ZW50KSB7XG4gICAgICByb29tTmFtZSA9IFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FX0NVU1RPTShcbiAgICAgICAgdGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZSxcbiAgICAgICAgY3VzdG9tRXZlbnQsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZW50aXR5Rm4gPSBlbnRpdHlPYmpPckNsYXNzIGFzIEZ1bmN0aW9uO1xuICAgICAgY29uc3QgZW50aXR5SXNPYmplY3QgPVxuICAgICAgICAhXy5pc0Z1bmN0aW9uKGVudGl0eU9iak9yQ2xhc3MpICYmIF8uaXNPYmplY3QoZW50aXR5T2JqT3JDbGFzcyk7XG5cbiAgICAgIGlmIChlbnRpdHlJc09iamVjdCkge1xuICAgICAgICBlbnRpdHlGbiA9IENsYXNzSGVscGVycy5nZXRDbGFzc0ZuRnJvbU9iamVjdChlbnRpdHlPYmpPckNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gQ2xhc3NIZWxwZXJzLmdldFVuaXF1ZUtleShlbnRpdHlGbik7XG5cbiAgICAgIGlmIChlbnRpdHlJc09iamVjdCkge1xuICAgICAgICB2YWx1ZU9mVW5pcXVlUHJvcGVydHkgPSBlbnRpdHlPYmpPckNsYXNzW3VuaXF1ZUtleV07XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsdWVPZlVuaXF1ZVByb3BlcnR5KSB7XG4gICAgICAgIEhlbHBlcnMuZXJyb3IoXG4gICAgICAgICAgYFtUYW9uXVtSZWFsdGltZV0gRW50aXR5IHdpdGhvdXQgaUQgISAke0NsYXNzSGVscGVycy5nZXROYW1lKFxuICAgICAgICAgICAgZW50aXR5Rm4sXG4gICAgICAgICAgKX0gYCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcm9vbU5hbWUgPSBfLmlzU3RyaW5nKHByb3BlcnR5KVxuICAgICAgICA/IFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FX1VQREFURV9FTlRJVFlfUFJPUEVSVFkoXG4gICAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5Rm4pLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICB2YWx1ZU9mVW5pcXVlUHJvcGVydHksXG4gICAgICAgICAgKVxuICAgICAgICA6IFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FX1VQREFURV9FTlRJVFkoXG4gICAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5Rm4pLFxuICAgICAgICAgICAgdmFsdWVPZlVuaXF1ZVByb3BlcnR5LFxuICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb3JlLnNvY2tldEJFLmluKHJvb21OYW1lKS5lbWl0KFxuICAgICAgcm9vbU5hbWUsIC8vIHJvb21OYW1lID09IGV2ZW50TmFtZSBpbiByb29tIG5hXG4gICAgICBjdXN0b21FdmVudCA/IGN1c3RvbUV2ZW50RGF0YSA6ICcnLFxuICAgICk7XG5cbiAgfVxuXG5cblxuXG5cbiAgcHVibGljIHRyaWdnZXJFbnRpdHlDaGFuZ2VzKFxuICAgIGVudGl0eU9iak9yQ2xhc3M6IEZ1bmN0aW9uLFxuICAgIGlkVG9UcmlnZ2VyPzogbnVtYmVyIHwgc3RyaW5nLFxuICApIHtcbiAgICBpZiAodGhpcy5jb3JlLmN0eC5kaXNhYmxlZFJlYWx0aW1lKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHlPYmpPckNsYXNzKTtcblxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW1Rhb25dW1RyaWdnZXJFbnRpdHlDaGFuZ2VzXSBFbnRpdHkgXCIke2NsYXNzTmFtZX0nIGlzIG5vdCByZWFsdGltZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDaGFuZ2VzKGVudGl0eU9iak9yQ2xhc3MgYXMgYW55LCB2b2lkIDAsIGlkVG9UcmlnZ2VyKTtcbiAgfVxuXG5cblxuICBwdWJsaWMgdHJpZ2dlckVudGl0eVByb3BlcnR5Q2hhbmdlczxFTlRJVFkgZXh0ZW5kcyBCYXNlRW50aXR5PihcbiAgICBlbnRpdHlPYmpPckNsYXNzOiBuZXcgKC4uLmFyZ3MpID0+IEVOVElUWSxcbiAgICBwcm9wZXJ0eToga2V5b2YgRU5USVRZIHwgKGtleW9mIEVOVElUWSlbXSxcbiAgICBpZFRvVHJpZ2dlcj86IG51bWJlciB8IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKHRoaXMuY29yZS5jdHguZGlzYWJsZWRSZWFsdGltZSkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5T2JqT3JDbGFzcyk7XG5cbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtUYW9uXVtUcmlnZ2VyRW50aXR5UHJvcGVydHlDaGFuZ2VzXVtwcm9wZXJ0eT0ke1xuICAgICAgICAgIHByb3BlcnR5IGFzIHN0cmluZ1xuICAgICAgICB9XSBFbnRpdHkgXCIke2NsYXNzTmFtZX0nIGlzIG5vdCByZWFsdGltZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChfLmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICBwcm9wZXJ0eS5mb3JFYWNoKHByb3BlcnR5RnJvbUFyciA9PiB7XG4gICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZXMoXG4gICAgICAgICAgZW50aXR5T2JqT3JDbGFzcyxcbiAgICAgICAgICBwcm9wZXJ0eUZyb21BcnIgYXMgYW55LFxuICAgICAgICAgIGlkVG9UcmlnZ2VyLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZXMoZW50aXR5T2JqT3JDbGFzcywgcHJvcGVydHkgYXMgYW55LCBpZFRvVHJpZ2dlcik7XG4gICAgfVxuICB9XG5cblxuXG4gIHB1YmxpYyB0cmlnZ2VyRW50aXR5VGFibGVDaGFuZ2VzKGVudGl0eUNsYXNzT3JJbnN0YW5jZTogRnVuY3Rpb24gfCBvYmplY3QpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHlDbGFzc09ySW5zdGFuY2UpO1xuXG4gICAgaWYgKHRoaXMuY29yZS5jdHguZGlzYWJsZWRSZWFsdGltZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW1Rhb25dW1RyaWdnZXJFbnRpdHlUYWJsZUNoYW5nZXNdIEVudGl0eSBcIiR7Y2xhc3NOYW1lfScgaXMgbm90IHJlYWx0aW1lYCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyQ2hhbmdlcyhcbiAgICAgIGVudGl0eUNsYXNzT3JJbnN0YW5jZSBhcyBhbnksXG4gICAgICB2b2lkIDAsXG4gICAgICB2b2lkIDAsXG4gICAgICBTeW1ib2xzLlJFQUxUSU1FLlRBQkxFX0NIQU5HRSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLCBjbGFzc05hbWUpLFxuICAgICk7XG4gIH1cblxuXG5cblxuXG5cblxuICBwdWJsaWMgdHJpZ2dlckN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50OiBzdHJpbmcsIGRhdGFUb1B1c2g6IGFueSkge1xuICAgIHRoaXMudHJpZ2dlckNoYW5nZXModm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgY3VzdG9tRXZlbnQsIGRhdGFUb1B1c2gpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gY3VzdG9tIGV2ZW50cyBmcm9tIHVzZXJzXG4gICAqIEBwYXJhbSBjdXN0b21FdmVudCAgZ2xvYmFsIGV2ZW50IG5hbWVcbiAgICovXG4gIGxpc3RlbkNoYW5nZXNDdXN0b21FdmVudChjdXN0b21FdmVudDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGNvbnN0IHN1YiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICAgIHRoaXMuY29yZS5zb2NrZXRCRS5vbignY29ubmVjdGlvbicsIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQgPT4ge1xuICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5vbihjdXN0b21FdmVudCwgKGRhdGEsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgc3ViLm5leHQoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdWIuYXNPYnNlcnZhYmxlKCk7XG5cbiAgfVxuXG5cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvcmVhbHRpbWUvcmVhbHRpbWUtc2VydmVyLnRzIl19