taon 18.0.34 → 19.0.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 (413) hide show
  1. package/README.md +175 -175
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/bin/start.js +279 -279
  4. package/bin/taon +6 -6
  5. package/bin/taon-debug +5 -5
  6. package/bin/taon-debug-brk +5 -5
  7. package/browser/README.md +24 -24
  8. package/browser/fesm2022/taon.mjs +68 -85
  9. package/browser/fesm2022/taon.mjs.map +1 -1
  10. package/browser/lib/base-classes/base-context.d.ts +6 -6
  11. package/browser/lib/base-classes/base.d.ts +6 -6
  12. package/browser/lib/index.d.ts +6 -32
  13. package/browser/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +1 -3
  14. package/browser/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +1 -2
  15. package/cli.js.map +1 -1
  16. package/client/README.md +24 -24
  17. package/client/fesm2022/taon.mjs +68 -85
  18. package/client/fesm2022/taon.mjs.map +1 -1
  19. package/client/lib/base-classes/base-context.d.ts +6 -6
  20. package/client/lib/base-classes/base.d.ts +6 -6
  21. package/client/lib/index.d.ts +6 -32
  22. package/client/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +1 -3
  23. package/client/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +1 -2
  24. package/index.js.map +1 -1
  25. package/lib/base-classes/base-abstract-entity.js.map +1 -1
  26. package/lib/base-classes/base-class.js.map +1 -1
  27. package/lib/base-classes/base-context.d.ts +6 -6
  28. package/lib/base-classes/base-context.js.map +1 -1
  29. package/lib/base-classes/base-controller.js.map +1 -1
  30. package/lib/base-classes/base-crud-controller.js.map +1 -1
  31. package/lib/base-classes/base-entity.js.map +1 -1
  32. package/lib/base-classes/base-injector.js.map +1 -1
  33. package/lib/base-classes/base-migration.js.map +1 -1
  34. package/lib/base-classes/base-provider.js.map +1 -1
  35. package/lib/base-classes/base-repository.js.map +1 -1
  36. package/lib/base-classes/base-subscriber-for-entity.js.map +1 -1
  37. package/lib/base-classes/base-subscriber.d.ts +4 -0
  38. package/lib/base-classes/base-subscriber.js +25 -0
  39. package/lib/base-classes/base-subscriber.js.map +1 -0
  40. package/lib/base-classes/base.d.ts +6 -6
  41. package/lib/base-classes/base.js.map +1 -1
  42. package/lib/build-info._auto-generated_.js.map +1 -1
  43. package/lib/constants.js.map +1 -1
  44. package/lib/context-db-migrations.js.map +1 -1
  45. package/lib/create-context.js.map +1 -1
  46. package/lib/decorators/classes/controller-decorator.js.map +1 -1
  47. package/lib/decorators/classes/entity-decorator.js.map +1 -1
  48. package/lib/decorators/classes/migration-decorator.js.map +1 -1
  49. package/lib/decorators/classes/provider-decorator.js.map +1 -1
  50. package/lib/decorators/classes/repository-decorator.js.map +1 -1
  51. package/lib/decorators/classes/subscriber-decorator.js.map +1 -1
  52. package/lib/decorators/http/http-decorators.js.map +1 -1
  53. package/lib/decorators/http/http-methods-decorators.js.map +1 -1
  54. package/lib/decorators/http/http-params-decorators.js.map +1 -1
  55. package/lib/dependency-injection/di-container.js.map +1 -1
  56. package/lib/endpoint-context.js.map +1 -1
  57. package/lib/entity-process.js.map +1 -1
  58. package/lib/env.js.map +1 -1
  59. package/lib/formly/formly-group-wrapper-component.js +1 -0
  60. package/lib/formly/formly-group-wrapper-component.js.map +1 -1
  61. package/lib/formly/formly-repeat-component.js +1 -0
  62. package/lib/formly/formly-repeat-component.js.map +1 -1
  63. package/lib/formly/formly.models.js.map +1 -1
  64. package/lib/formly/fromly.js.map +1 -1
  65. package/lib/formly/type-from-entity.js.map +1 -1
  66. package/lib/get-response-value.js.map +1 -1
  67. package/lib/helpers/class-helpers.js +2 -2
  68. package/lib/helpers/class-helpers.js.map +1 -1
  69. package/lib/helpers/taon-helpers.js.map +1 -1
  70. package/lib/index._auto-generated_.js.map +1 -1
  71. package/lib/index.d.ts +6 -32
  72. package/lib/index.js.map +1 -1
  73. package/lib/inject.js.map +1 -1
  74. package/lib/models.js.map +1 -1
  75. package/lib/orm.js.map +1 -1
  76. package/lib/realtime/realtime-client.js.map +1 -1
  77. package/lib/realtime/realtime-core.js.map +1 -1
  78. package/lib/realtime/realtime-server.js.map +1 -1
  79. package/lib/realtime/realtime-strategy/index.js.map +1 -1
  80. package/lib/realtime/realtime-strategy/realtime-abstract-mock.d.ts +10 -0
  81. package/lib/realtime/realtime-strategy/realtime-abstract-mock.js +214 -0
  82. package/lib/realtime/realtime-strategy/realtime-abstract-mock.js.map +1 -0
  83. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.d.ts +0 -0
  84. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.js +5 -0
  85. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.js.map +1 -0
  86. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +22 -0
  87. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.js +139 -0
  88. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.js.map +1 -0
  89. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +16 -0
  90. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.js +68 -0
  91. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.js.map +1 -0
  92. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +10 -0
  93. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.js +56 -0
  94. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.js.map +1 -0
  95. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +10 -0
  96. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.js +50 -0
  97. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.js.map +1 -0
  98. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +13 -0
  99. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.js +3 -0
  100. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.js.map +1 -0
  101. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js.map +1 -1
  102. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +2 -0
  103. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.js +6 -0
  104. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.js.map +1 -0
  105. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +16 -0
  106. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.js +54 -0
  107. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.js.map +1 -0
  108. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +17 -0
  109. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.js +52 -0
  110. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.js.map +1 -0
  111. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +11 -0
  112. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.js +39 -0
  113. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.js.map +1 -0
  114. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +13 -0
  115. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.js +46 -0
  116. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.js.map +1 -0
  117. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +11 -0
  118. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.js +3 -0
  119. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.js.map +1 -0
  120. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js.map +1 -1
  121. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js.map +1 -1
  122. package/lib/realtime/realtime-strategy/realtime-strategy.js.map +1 -1
  123. package/lib/realtime/realtime-subs-manager.js.map +1 -1
  124. package/lib/realtime/realtime.models.js.map +1 -1
  125. package/lib/storage.js.map +1 -1
  126. package/lib/symbols.js.map +1 -1
  127. package/lib/ui/directives/firedev-inject-html.directive.d.ts +6 -0
  128. package/lib/ui/directives/firedev-long-press.directive.d.ts +22 -0
  129. package/lib/ui/directives/index.js +2 -2
  130. package/lib/ui/directives/index.js.map +1 -1
  131. package/lib/ui/directives/view-mode.js.map +1 -1
  132. package/lib/ui/index.js +2 -2
  133. package/lib/ui/index.js.map +1 -1
  134. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +2 -0
  135. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js +5 -0
  136. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js.map +1 -0
  137. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +29 -0
  138. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +2 -0
  139. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.d.ts +1 -0
  140. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js +5 -0
  141. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js.map +1 -0
  142. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/taon-db-admin.component.d.ts +8 -0
  143. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +2 -0
  144. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js +5 -0
  145. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js.map +1 -0
  146. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +13 -0
  147. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +2 -0
  148. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  149. package/lib/ui/taon-admin-mode-configuration/index.js.map +1 -1
  150. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.d.ts +5 -0
  151. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.js +3 -0
  152. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.js.map +1 -0
  153. package/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.d.ts +14 -0
  154. package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +2 -0
  155. package/lib/ui/taon-admin-mode-configuration/taon-admin.models.js.map +1 -1
  156. package/lib/ui/taon-github-fork-me-corner/index.js +2 -2
  157. package/lib/ui/taon-github-fork-me-corner/index.js.map +1 -1
  158. package/lib/ui/taon-github-fork-me-ribbon/index.js +2 -2
  159. package/lib/ui/taon-github-fork-me-ribbon/index.js.map +1 -1
  160. package/lib/ui/taon-notifications/index.js.map +1 -1
  161. package/lib/ui/taon-notifications/taon-notifications.models.js +2 -2
  162. package/lib/ui/taon-notifications/taon-notifications.models.js.map +1 -1
  163. package/lib/ui/taon-progress-bar/index.js +2 -2
  164. package/lib/ui/taon-progress-bar/index.js.map +1 -1
  165. package/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +1 -3
  166. package/lib/ui/taon-session-passcode/index.js +2 -2
  167. package/lib/ui/taon-session-passcode/index.js.map +1 -1
  168. package/lib/ui/taon-table/index.js +2 -2
  169. package/lib/ui/taon-table/index.js.map +1 -1
  170. package/lib/ui/taon.models.js.map +1 -1
  171. package/lib/ui/toan-full-material.module.d.ts +2 -0
  172. package/lib/validators.js.map +1 -1
  173. package/migrations/index.js.map +1 -1
  174. package/migrations/migrations_index._auto-generated_.js.map +1 -1
  175. package/old-app .js +1 -0
  176. package/old-app .js.map +1 -1
  177. package/package.json +8 -8
  178. package/playground.js.map +1 -1
  179. package/taon.jsonc +39 -39
  180. package/tmp-environment.json +2 -2
  181. package/websql/README.md +24 -24
  182. package/websql/fesm2022/taon.mjs +68 -85
  183. package/websql/fesm2022/taon.mjs.map +1 -1
  184. package/websql/lib/base-classes/base-context.d.ts +6 -6
  185. package/websql/lib/base-classes/base.d.ts +6 -6
  186. package/websql/lib/index.d.ts +6 -32
  187. package/websql/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +1 -3
  188. package/websql/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +1 -2
  189. package/browser/esm2022/lib/base-classes/base-abstract-entity.mjs +0 -18
  190. package/browser/esm2022/lib/base-classes/base-class.mjs +0 -17
  191. package/browser/esm2022/lib/base-classes/base-context.mjs +0 -14
  192. package/browser/esm2022/lib/base-classes/base-controller.mjs +0 -19
  193. package/browser/esm2022/lib/base-classes/base-crud-controller.mjs +0 -279
  194. package/browser/esm2022/lib/base-classes/base-entity.mjs +0 -18
  195. package/browser/esm2022/lib/base-classes/base-injector.mjs +0 -167
  196. package/browser/esm2022/lib/base-classes/base-migration.mjs +0 -23
  197. package/browser/esm2022/lib/base-classes/base-provider.mjs +0 -6
  198. package/browser/esm2022/lib/base-classes/base-repository.mjs +0 -514
  199. package/browser/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +0 -156
  200. package/browser/esm2022/lib/base-classes/base.mjs +0 -26
  201. package/browser/esm2022/lib/constants.mjs +0 -4
  202. package/browser/esm2022/lib/context-db-migrations.mjs +0 -425
  203. package/browser/esm2022/lib/create-context.mjs +0 -127
  204. package/browser/esm2022/lib/decorators/classes/controller-decorator.mjs +0 -18
  205. package/browser/esm2022/lib/decorators/classes/entity-decorator.mjs +0 -30
  206. package/browser/esm2022/lib/decorators/classes/migration-decorator.mjs +0 -18
  207. package/browser/esm2022/lib/decorators/classes/provider-decorator.mjs +0 -18
  208. package/browser/esm2022/lib/decorators/classes/repository-decorator.mjs +0 -18
  209. package/browser/esm2022/lib/decorators/classes/subscriber-decorator.mjs +0 -18
  210. package/browser/esm2022/lib/decorators/http/http-decorators.mjs +0 -24
  211. package/browser/esm2022/lib/decorators/http/http-methods-decorators.mjs +0 -78
  212. package/browser/esm2022/lib/decorators/http/http-params-decorators.mjs +0 -47
  213. package/browser/esm2022/lib/dependency-injection/di-container.mjs +0 -32
  214. package/browser/esm2022/lib/endpoint-context.mjs +0 -1705
  215. package/browser/esm2022/lib/entity-process.mjs +0 -198
  216. package/browser/esm2022/lib/env.mjs +0 -6
  217. package/browser/esm2022/lib/get-response-value.mjs +0 -27
  218. package/browser/esm2022/lib/helpers/class-helpers.mjs +0 -183
  219. package/browser/esm2022/lib/helpers/taon-helpers.mjs +0 -120
  220. package/browser/esm2022/lib/index.mjs +0 -70
  221. package/browser/esm2022/lib/inject.mjs +0 -36
  222. package/browser/esm2022/lib/models.mjs +0 -106
  223. package/browser/esm2022/lib/orm.mjs +0 -6
  224. package/browser/esm2022/lib/realtime/realtime-client.mjs +0 -141
  225. package/browser/esm2022/lib/realtime/realtime-core.mjs +0 -62
  226. package/browser/esm2022/lib/realtime/realtime-server.mjs +0 -292
  227. package/browser/esm2022/lib/realtime/realtime-strategy/index.mjs +0 -7
  228. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +0 -218
  229. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +0 -224
  230. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +0 -29
  231. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +0 -14
  232. package/browser/esm2022/lib/realtime/realtime-subs-manager.mjs +0 -81
  233. package/browser/esm2022/lib/realtime/realtime.models.mjs +0 -4
  234. package/browser/esm2022/lib/storage.mjs +0 -5
  235. package/browser/esm2022/lib/symbols.mjs +0 -97
  236. package/browser/esm2022/lib/ui/directives/index.mjs +0 -6
  237. package/browser/esm2022/lib/ui/directives/safe.pipe.mjs +0 -43
  238. package/browser/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +0 -24
  239. package/browser/esm2022/lib/ui/directives/taon-long-press.directive.mjs +0 -120
  240. package/browser/esm2022/lib/ui/index.mjs +0 -12
  241. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +0 -4
  242. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +0 -194
  243. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin.service.mjs +0 -55
  244. package/browser/esm2022/lib/ui/taon-full-material.module.mjs +0 -179
  245. package/browser/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +0 -5
  246. package/browser/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +0 -18
  247. package/browser/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +0 -21
  248. package/browser/esm2022/lib/ui/taon-notifications/index.mjs +0 -7
  249. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +0 -25
  250. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +0 -5
  251. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +0 -21
  252. package/browser/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +0 -48
  253. package/browser/esm2022/lib/ui/taon-progress-bar/index.mjs +0 -5
  254. package/browser/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +0 -98
  255. package/browser/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +0 -22
  256. package/browser/esm2022/lib/ui/taon-session-passcode/index.mjs +0 -4
  257. package/browser/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +0 -120
  258. package/browser/esm2022/lib/ui/taon-table/index.mjs +0 -5
  259. package/browser/esm2022/lib/ui/taon-table/taon-table.component.mjs +0 -160
  260. package/browser/esm2022/lib/ui/taon-table/taon-table.module.mjs +0 -57
  261. package/browser/esm2022/lib/validators.mjs +0 -76
  262. package/browser/esm2022/public-api.mjs +0 -2
  263. package/browser/esm2022/taon.mjs +0 -5
  264. package/client/esm2022/lib/base-classes/base-abstract-entity.mjs +0 -18
  265. package/client/esm2022/lib/base-classes/base-class.mjs +0 -17
  266. package/client/esm2022/lib/base-classes/base-context.mjs +0 -14
  267. package/client/esm2022/lib/base-classes/base-controller.mjs +0 -19
  268. package/client/esm2022/lib/base-classes/base-crud-controller.mjs +0 -279
  269. package/client/esm2022/lib/base-classes/base-entity.mjs +0 -18
  270. package/client/esm2022/lib/base-classes/base-injector.mjs +0 -167
  271. package/client/esm2022/lib/base-classes/base-migration.mjs +0 -23
  272. package/client/esm2022/lib/base-classes/base-provider.mjs +0 -6
  273. package/client/esm2022/lib/base-classes/base-repository.mjs +0 -514
  274. package/client/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +0 -156
  275. package/client/esm2022/lib/base-classes/base.mjs +0 -26
  276. package/client/esm2022/lib/constants.mjs +0 -4
  277. package/client/esm2022/lib/context-db-migrations.mjs +0 -425
  278. package/client/esm2022/lib/create-context.mjs +0 -127
  279. package/client/esm2022/lib/decorators/classes/controller-decorator.mjs +0 -18
  280. package/client/esm2022/lib/decorators/classes/entity-decorator.mjs +0 -30
  281. package/client/esm2022/lib/decorators/classes/migration-decorator.mjs +0 -18
  282. package/client/esm2022/lib/decorators/classes/provider-decorator.mjs +0 -18
  283. package/client/esm2022/lib/decorators/classes/repository-decorator.mjs +0 -18
  284. package/client/esm2022/lib/decorators/classes/subscriber-decorator.mjs +0 -18
  285. package/client/esm2022/lib/decorators/http/http-decorators.mjs +0 -24
  286. package/client/esm2022/lib/decorators/http/http-methods-decorators.mjs +0 -78
  287. package/client/esm2022/lib/decorators/http/http-params-decorators.mjs +0 -47
  288. package/client/esm2022/lib/dependency-injection/di-container.mjs +0 -32
  289. package/client/esm2022/lib/endpoint-context.mjs +0 -1705
  290. package/client/esm2022/lib/entity-process.mjs +0 -198
  291. package/client/esm2022/lib/env.mjs +0 -6
  292. package/client/esm2022/lib/get-response-value.mjs +0 -27
  293. package/client/esm2022/lib/helpers/class-helpers.mjs +0 -183
  294. package/client/esm2022/lib/helpers/taon-helpers.mjs +0 -120
  295. package/client/esm2022/lib/index.mjs +0 -70
  296. package/client/esm2022/lib/inject.mjs +0 -36
  297. package/client/esm2022/lib/models.mjs +0 -106
  298. package/client/esm2022/lib/orm.mjs +0 -6
  299. package/client/esm2022/lib/realtime/realtime-client.mjs +0 -141
  300. package/client/esm2022/lib/realtime/realtime-core.mjs +0 -62
  301. package/client/esm2022/lib/realtime/realtime-server.mjs +0 -292
  302. package/client/esm2022/lib/realtime/realtime-strategy/index.mjs +0 -7
  303. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +0 -218
  304. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +0 -224
  305. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +0 -29
  306. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +0 -14
  307. package/client/esm2022/lib/realtime/realtime-subs-manager.mjs +0 -81
  308. package/client/esm2022/lib/realtime/realtime.models.mjs +0 -4
  309. package/client/esm2022/lib/storage.mjs +0 -5
  310. package/client/esm2022/lib/symbols.mjs +0 -97
  311. package/client/esm2022/lib/ui/directives/index.mjs +0 -6
  312. package/client/esm2022/lib/ui/directives/safe.pipe.mjs +0 -43
  313. package/client/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +0 -24
  314. package/client/esm2022/lib/ui/directives/taon-long-press.directive.mjs +0 -120
  315. package/client/esm2022/lib/ui/index.mjs +0 -12
  316. package/client/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +0 -4
  317. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +0 -194
  318. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin.service.mjs +0 -55
  319. package/client/esm2022/lib/ui/taon-full-material.module.mjs +0 -179
  320. package/client/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +0 -5
  321. package/client/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +0 -18
  322. package/client/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +0 -21
  323. package/client/esm2022/lib/ui/taon-notifications/index.mjs +0 -7
  324. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +0 -25
  325. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +0 -5
  326. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +0 -21
  327. package/client/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +0 -48
  328. package/client/esm2022/lib/ui/taon-progress-bar/index.mjs +0 -5
  329. package/client/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +0 -98
  330. package/client/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +0 -22
  331. package/client/esm2022/lib/ui/taon-session-passcode/index.mjs +0 -4
  332. package/client/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +0 -120
  333. package/client/esm2022/lib/ui/taon-table/index.mjs +0 -5
  334. package/client/esm2022/lib/ui/taon-table/taon-table.component.mjs +0 -160
  335. package/client/esm2022/lib/ui/taon-table/taon-table.module.mjs +0 -57
  336. package/client/esm2022/lib/validators.mjs +0 -76
  337. package/client/esm2022/public-api.mjs +0 -2
  338. package/client/esm2022/taon.mjs +0 -5
  339. package/websql/esm2022/lib/base-classes/base-abstract-entity.mjs +0 -25
  340. package/websql/esm2022/lib/base-classes/base-class.mjs +0 -17
  341. package/websql/esm2022/lib/base-classes/base-context.mjs +0 -14
  342. package/websql/esm2022/lib/base-classes/base-controller.mjs +0 -19
  343. package/websql/esm2022/lib/base-classes/base-crud-controller.mjs +0 -238
  344. package/websql/esm2022/lib/base-classes/base-entity.mjs +0 -16
  345. package/websql/esm2022/lib/base-classes/base-injector.mjs +0 -167
  346. package/websql/esm2022/lib/base-classes/base-migration.mjs +0 -23
  347. package/websql/esm2022/lib/base-classes/base-provider.mjs +0 -6
  348. package/websql/esm2022/lib/base-classes/base-repository.mjs +0 -431
  349. package/websql/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +0 -156
  350. package/websql/esm2022/lib/base-classes/base.mjs +0 -26
  351. package/websql/esm2022/lib/constants.mjs +0 -4
  352. package/websql/esm2022/lib/context-db-migrations.mjs +0 -274
  353. package/websql/esm2022/lib/create-context.mjs +0 -126
  354. package/websql/esm2022/lib/decorators/classes/controller-decorator.mjs +0 -18
  355. package/websql/esm2022/lib/decorators/classes/entity-decorator.mjs +0 -28
  356. package/websql/esm2022/lib/decorators/classes/migration-decorator.mjs +0 -18
  357. package/websql/esm2022/lib/decorators/classes/provider-decorator.mjs +0 -18
  358. package/websql/esm2022/lib/decorators/classes/repository-decorator.mjs +0 -18
  359. package/websql/esm2022/lib/decorators/classes/subscriber-decorator.mjs +0 -18
  360. package/websql/esm2022/lib/decorators/http/http-decorators.mjs +0 -24
  361. package/websql/esm2022/lib/decorators/http/http-methods-decorators.mjs +0 -78
  362. package/websql/esm2022/lib/decorators/http/http-params-decorators.mjs +0 -47
  363. package/websql/esm2022/lib/dependency-injection/di-container.mjs +0 -32
  364. package/websql/esm2022/lib/endpoint-context.mjs +0 -1586
  365. package/websql/esm2022/lib/entity-process.mjs +0 -198
  366. package/websql/esm2022/lib/env.mjs +0 -6
  367. package/websql/esm2022/lib/get-response-value.mjs +0 -25
  368. package/websql/esm2022/lib/helpers/class-helpers.mjs +0 -183
  369. package/websql/esm2022/lib/helpers/taon-helpers.mjs +0 -120
  370. package/websql/esm2022/lib/index.mjs +0 -72
  371. package/websql/esm2022/lib/inject.mjs +0 -36
  372. package/websql/esm2022/lib/models.mjs +0 -97
  373. package/websql/esm2022/lib/orm.mjs +0 -65
  374. package/websql/esm2022/lib/realtime/realtime-client.mjs +0 -141
  375. package/websql/esm2022/lib/realtime/realtime-core.mjs +0 -62
  376. package/websql/esm2022/lib/realtime/realtime-server.mjs +0 -176
  377. package/websql/esm2022/lib/realtime/realtime-strategy/index.mjs +0 -7
  378. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +0 -218
  379. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +0 -224
  380. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +0 -29
  381. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +0 -14
  382. package/websql/esm2022/lib/realtime/realtime-subs-manager.mjs +0 -81
  383. package/websql/esm2022/lib/realtime/realtime.models.mjs +0 -4
  384. package/websql/esm2022/lib/storage.mjs +0 -5
  385. package/websql/esm2022/lib/symbols.mjs +0 -97
  386. package/websql/esm2022/lib/ui/directives/index.mjs +0 -6
  387. package/websql/esm2022/lib/ui/directives/safe.pipe.mjs +0 -43
  388. package/websql/esm2022/lib/ui/directives/taon-inject-html.directive.mjs +0 -24
  389. package/websql/esm2022/lib/ui/directives/taon-long-press.directive.mjs +0 -120
  390. package/websql/esm2022/lib/ui/index.mjs +0 -12
  391. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/index.mjs +0 -4
  392. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +0 -194
  393. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin.service.mjs +0 -55
  394. package/websql/esm2022/lib/ui/taon-full-material.module.mjs +0 -179
  395. package/websql/esm2022/lib/ui/taon-github-fork-me-corner/index.mjs +0 -5
  396. package/websql/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.mjs +0 -18
  397. package/websql/esm2022/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.mjs +0 -21
  398. package/websql/esm2022/lib/ui/taon-notifications/index.mjs +0 -7
  399. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.component.mjs +0 -25
  400. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.models.mjs +0 -5
  401. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.module.mjs +0 -21
  402. package/websql/esm2022/lib/ui/taon-notifications/taon-notifications.service.mjs +0 -48
  403. package/websql/esm2022/lib/ui/taon-progress-bar/index.mjs +0 -5
  404. package/websql/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.component.mjs +0 -50
  405. package/websql/esm2022/lib/ui/taon-progress-bar/taon-progress-bar.module.mjs +0 -22
  406. package/websql/esm2022/lib/ui/taon-session-passcode/index.mjs +0 -4
  407. package/websql/esm2022/lib/ui/taon-session-passcode/taon-session-passcode.component.mjs +0 -120
  408. package/websql/esm2022/lib/ui/taon-table/index.mjs +0 -5
  409. package/websql/esm2022/lib/ui/taon-table/taon-table.component.mjs +0 -160
  410. package/websql/esm2022/lib/ui/taon-table/taon-table.module.mjs +0 -57
  411. package/websql/esm2022/lib/validators.mjs +0 -76
  412. package/websql/esm2022/public-api.mjs +0 -2
  413. package/websql/esm2022/taon.mjs +0 -5
@@ -1,176 +0,0 @@
1
- import { Symbols } from '../symbols';
2
- import { Helpers, _ } from 'tnp-core/websql';
3
- import { ClassHelpers } from '../helpers/class-helpers';
4
- import { Subject } from 'rxjs';
5
- export class RealtimeServer {
6
- constructor(core) {
7
- this.core = core;
8
- this.core = core;
9
- if (!core.ctx.disabledRealtime) {
10
- this.init();
11
- }
12
- }
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
- }
24
- const nspPath = {
25
- global: this.core.pathFor(),
26
- realtime: this.core.pathFor(Symbols.REALTIME.NAMESPACE(this.core.ctx.contextName)),
27
- };
28
- this.core.connectSocketBE = this.core.strategy.ioServer(Helpers.isWebSQL ? this.core.ctx.uri.origin : this.core.ctx.serverTcpUdp, {
29
- path: nspPath.global.pathname,
30
- cors: {
31
- origin: this.core.ctx.config.frontendHost,
32
- methods: this.core.allHttpMethods,
33
- },
34
- }, // @ts-ignore
35
- this.core.ctx);
36
- this.core.ctx.logRealtime &&
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}`);
42
- });
43
- this.core.socketBE = this.core.strategy.ioServer(Helpers.isWebSQL || Helpers.isElectron
44
- ? this.core.ctx.uri.origin
45
- : this.core.ctx.serverTcpUdp, {
46
- path: nspPath.realtime.pathname,
47
- cors: {
48
- origin: this.core.ctx.config.frontendHost,
49
- methods: this.core.allHttpMethods,
50
- },
51
- }, // @ts-ignore
52
- this.core.ctx);
53
- this.core.ctx.logRealtime &&
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}`);
63
- backendSocketForClient.join(roomName);
64
- });
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}`);
69
- backendSocketForClient.join(roomName);
70
- });
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}`);
75
- backendSocketForClient.join(roomName);
76
- });
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}`);
81
- backendSocketForClient.leave(roomName);
82
- });
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}`);
87
- backendSocketForClient.leave(roomName);
88
- });
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}`);
93
- backendSocketForClient.leave(roomName);
94
- });
95
- });
96
- }
97
- triggerChanges(entityObjOrClass, property, valueOfUniqueProperty, customEvent, customEventData) {
98
- let roomName;
99
- if (this.core.ctx.disabledRealtime) {
100
- return;
101
- }
102
- if (customEvent) {
103
- roomName = Symbols.REALTIME.ROOM_NAME_CUSTOM(this.core.ctx.contextName, customEvent);
104
- }
105
- else {
106
- let entityFn = entityObjOrClass;
107
- const entityIsObject = !_.isFunction(entityObjOrClass) && _.isObject(entityObjOrClass);
108
- if (entityIsObject) {
109
- entityFn = ClassHelpers.getClassFnFromObject(entityObjOrClass);
110
- }
111
- const uniqueKey = ClassHelpers.getUniqueKey(entityFn);
112
- if (entityIsObject) {
113
- valueOfUniqueProperty = entityObjOrClass[uniqueKey];
114
- }
115
- if (!valueOfUniqueProperty) {
116
- Helpers.error(`[Taon][Realtime] Entity without iD ! ${ClassHelpers.getName(entityFn)} `, true, true);
117
- return;
118
- }
119
- roomName = _.isString(property)
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);
122
- }
123
- this.core.socketBE.in(roomName).emit(roomName, // roomName == eventName in room na
124
- customEvent ? customEventData : '');
125
- }
126
- triggerEntityChanges(entityObjOrClass, idToTrigger) {
127
- if (this.core.ctx.disabledRealtime) {
128
- const className = ClassHelpers.getName(entityObjOrClass);
129
- console.warn(`[Taon][TriggerEntityChanges] Entity "${className}' is not realtime`);
130
- return;
131
- }
132
- this.triggerChanges(entityObjOrClass, void 0, idToTrigger);
133
- }
134
- triggerEntityPropertyChanges(entityObjOrClass, property, idToTrigger) {
135
- if (this.core.ctx.disabledRealtime) {
136
- const className = ClassHelpers.getName(entityObjOrClass);
137
- console.warn(`[Taon][TriggerEntityPropertyChanges][property=${property}] Entity "${className}' is not realtime`);
138
- return;
139
- }
140
- if (_.isArray(property)) {
141
- property.forEach(propertyFromArr => {
142
- this.triggerChanges(entityObjOrClass, propertyFromArr, idToTrigger);
143
- });
144
- }
145
- else {
146
- this.triggerChanges(entityObjOrClass, property, idToTrigger);
147
- }
148
- }
149
- triggerEntityTableChanges(entityClassOrInstance) {
150
- const className = ClassHelpers.getName(entityClassOrInstance);
151
- if (this.core.ctx.disabledRealtime) {
152
- console.warn(`[Taon][TriggerEntityTableChanges] Entity "${className}' is not realtime`);
153
- return;
154
- }
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();
172
- }
173
- }
174
- ;
175
- ({}); // @--end-of-file-for-module=taon lib/realtime/realtime-server.ts
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL3JlYWx0aW1lL3JlYWx0aW1lLXNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHM0MsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsSUFBa0I7UUFBbEIsU0FBSSxHQUFKLElBQUksQ0FBYztRQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRS9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVkLENBQUM7SUFDSCxDQUFDO0lBR08sSUFBSTtRQUdWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQzs7Ozs7OztPQU9aLENBQUMsQ0FBQztRQUNMLENBQUM7UUFHRCxNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUN0RDtTQUNG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MUUsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FDakIscUJBQTRCLEVBQzVCLEtBQUssQ0FBQyxFQUNOLEtBQUssQ0FBQyxFQUNOLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFRTSxrQkFBa0IsQ0FBQyxXQUFtQixFQUFFLFVBQWU7UUFDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUlEOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLFdBQW1CO1FBRTFDLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFFL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxFQUFFO1lBQzNELHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUIsQ0FBQztDQUlGO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpRUFBaUUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG5pbXBvcnQgeyBTeW1ib2xzIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBIZWxwZXJzLCBfIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IFJlYWx0aW1lQ29yZSB9IGZyb20gJy4vcmVhbHRpbWUtY29yZSc7XG5pbXBvcnQgeyBDbGFzc0hlbHBlcnMgfSBmcm9tICcuLi9oZWxwZXJzL2NsYXNzLWhlbHBlcnMnO1xuaW1wb3J0IHR5cGUgeyBCYXNlRW50aXR5IH0gZnJvbSAnLi4vYmFzZS1jbGFzc2VzL2Jhc2UtZW50aXR5JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuXG5leHBvcnQgY2xhc3MgUmVhbHRpbWVTZXJ2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29yZTogUmVhbHRpbWVDb3JlKSB7XG4gICAgdGhpcy5jb3JlID0gY29yZTtcbiAgICBpZiAoIWNvcmUuY3R4LmRpc2FibGVkUmVhbHRpbWUpIHtcblxuICAgICAgdGhpcy5pbml0KCk7XG5cbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgaW5pdCgpIHtcblxuXG4gICAgaWYgKCF0aGlzLmNvcmUuY3R4LmNvbmZpZy5mcm9udGVuZEhvc3QpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW1Rhb25dW1JlYWx0aW1lXVxuXG4gICAgICBGcm9udGVuZCBob3N0IGlzIG5vdCBkZWZpbmVkXG4gICAgICBSRUFMVElNRSBDT01NVU5JQ0FUSU9OIFdJTEwgTk9UIFdPUktcblxuICAgICAgcHJvdmlkZSBcImZyb250ZW5kSG9zdFwiIHByb3BlcnR5IGluIHlvdXIgdGFvbiBjb25maWdcblxuICAgICAgYCk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBuc3BQYXRoID0ge1xuICAgICAgZ2xvYmFsOiB0aGlzLmNvcmUucGF0aEZvcigpLFxuICAgICAgcmVhbHRpbWU6IHRoaXMuY29yZS5wYXRoRm9yKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLk5BTUVTUEFDRSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lKSxcbiAgICAgICksXG4gICAgfTtcblxuXG5cblxuXG5cbiAgICB0aGlzLmNvcmUuY29ubmVjdFNvY2tldEJFID0gdGhpcy5jb3JlLnN0cmF0ZWd5LmlvU2VydmVyKFxuICAgICAgSGVscGVycy5pc1dlYlNRTCA/IHRoaXMuY29yZS5jdHgudXJpLm9yaWdpbiA6IHRoaXMuY29yZS5jdHguc2VydmVyVGNwVWRwLFxuICAgICAge1xuICAgICAgICBwYXRoOiBuc3BQYXRoLmdsb2JhbC5wYXRobmFtZSxcblxuICAgICAgICBjb3JzOiB7XG4gICAgICAgICAgb3JpZ2luOiB0aGlzLmNvcmUuY3R4LmNvbmZpZy5mcm9udGVuZEhvc3QsXG4gICAgICAgICAgbWV0aG9kczogdGhpcy5jb3JlLmFsbEh0dHBNZXRob2RzLFxuICAgICAgICB9LFxuICAgICAgfSwgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5jb3JlLmN0eCxcbiAgICApO1xuXG4gICAgdGhpcy5jb3JlLmN0eC5sb2dSZWFsdGltZSAmJlxuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgW2JhY2tlbmRdIENSRUFURSBHTE9CQUwgTkFNRVNQQUNFOiAnJHt0aGlzLmNvcmUuY29ubmVjdFNvY2tldEJFLnBhdGgoKX0nYCArXG4gICAgICAgICAgYCAsIHBhdGg6ICcke25zcFBhdGguZ2xvYmFsLnBhdGhuYW1lfSdgLFxuICAgICAgKTtcblxuICAgIHRoaXMuY29yZS5jb25uZWN0U29ja2V0QkUub24oJ2Nvbm5lY3Rpb24nLCBjbGllbnRTb2NrZXQgPT4ge1xuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgW2JhY2tlbmRdIGNsaWVudCBjb25uZWN0ZWQgdG8gbmFtZXNwYWNlIFwiJHtuc3BQYXRoLmdsb2JhbC5wYXRobmFtZX1cIiwgYCArXG4gICAgICAgICAgYCBob3N0OiAke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgKTtcbiAgICB9KTtcblxuXG5cblxuICAgIHRoaXMuY29yZS5zb2NrZXRCRSA9IHRoaXMuY29yZS5zdHJhdGVneS5pb1NlcnZlcihcbiAgICAgIEhlbHBlcnMuaXNXZWJTUUwgfHwgSGVscGVycy5pc0VsZWN0cm9uXG4gICAgICAgID8gdGhpcy5jb3JlLmN0eC51cmkub3JpZ2luXG4gICAgICAgIDogdGhpcy5jb3JlLmN0eC5zZXJ2ZXJUY3BVZHAsXG4gICAgICB7XG4gICAgICAgIHBhdGg6IG5zcFBhdGgucmVhbHRpbWUucGF0aG5hbWUsXG4gICAgICAgIGNvcnM6IHtcbiAgICAgICAgICBvcmlnaW46IHRoaXMuY29yZS5jdHguY29uZmlnLmZyb250ZW5kSG9zdCxcbiAgICAgICAgICBtZXRob2RzOiB0aGlzLmNvcmUuYWxsSHR0cE1ldGhvZHMsXG4gICAgICAgIH0sXG4gICAgICB9LCAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLmNvcmUuY3R4LFxuICAgICk7XG5cbiAgICB0aGlzLmNvcmUuY3R4LmxvZ1JlYWx0aW1lICYmXG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIGBbYmFja2VuZF0gQ1JFQVRFIFJFQUxUSU1FIE5BTUVTUEFDRTogJyR7dGhpcy5jb3JlLnNvY2tldEJFLnBhdGgoKX0nYCArXG4gICAgICAgICAgYCAsIHBhdGg6ICcke25zcFBhdGgucmVhbHRpbWUucGF0aG5hbWV9JyBgLFxuICAgICAgKTtcblxuICAgIHRoaXMuY29yZS5zb2NrZXRCRS5vbignY29ubmVjdGlvbicsIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQgPT4ge1xuICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICBgW2JhY2tlbmRdIGNsaWVudCBjb25uZWN0ZWQgdG8gbmFtZXNwYWNlIFwiJHtuc3BQYXRoLnJlYWx0aW1lLnBhdGhuYW1lfVwiLCBgICtcbiAgICAgICAgICBgIGhvc3Q6ICR7dGhpcy5jb3JlLmN0eC5ob3N0fWAsXG4gICAgICApO1xuXG4gICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50Lm9uKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLlJPT01fU1VCU0NSSUJFX0NVU1RPTSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lKSxcbiAgICAgICAgcm9vbU5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgYEpvaW5pbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgIFJFQUxUSU1FYCArXG4gICAgICAgICAgICAgICAgYCBob3N0OiAke3RoaXMuY29yZS5jdHguY29udGV4dE5hbWV9LyR7dGhpcy5jb3JlLmN0eC5ob3N0fWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQuam9pbihyb29tTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50Lm9uKFxuICAgICAgICBTeW1ib2xzLlJFQUxUSU1FLlJPT01fU1VCU0NSSUJFX0VOVElUWV9VUERBVEVfRVZFTlRTKFxuICAgICAgICAgIHRoaXMuY29yZS5jdHguY29udGV4dE5hbWUsXG4gICAgICAgICksXG4gICAgICAgIHJvb21OYW1lID0+IHtcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmxvZ1JlYWx0aW1lICYmXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgIGBbYmFja2VuZF0gSm9pbmluZyByb29tICR7cm9vbU5hbWV9IGluIG5hbWVzcGFjZSAgUkVBTFRJTUVgICtcbiAgICAgICAgICAgICAgICBgIGhvc3Q6ICR7dGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZX0vJHt0aGlzLmNvcmUuY3R4Lmhvc3R9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5qb2luKHJvb21OYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQub24oXG4gICAgICAgIFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9TVUJTQ1JJQkVfRU5USVRZX1BST1BFUlRZX1VQREFURV9FVkVOVFMoXG4gICAgICAgICAgdGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZSxcbiAgICAgICAgKSxcbiAgICAgICAgcm9vbU5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgYFtiYWNrZW5kXSBKb2luaW5nIHJvb20gJHtyb29tTmFtZX0gaW4gbmFtZXNwYWNlIFJFQUxUSU1FIGAgK1xuICAgICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50LmpvaW4ocm9vbU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5vbihcbiAgICAgICAgU3ltYm9scy5SRUFMVElNRS5ST09NX1VOU1VCU0NSSUJFX0NVU1RPTSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lKSxcbiAgICAgICAgcm9vbU5hbWUgPT4ge1xuICAgICAgICAgIHRoaXMuY29yZS5jdHgubG9nUmVhbHRpbWUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgICAgYFtiYWNrZW5kXSBMZWF2aW5nIHJvb20gJHtyb29tTmFtZX0gaW4gbmFtZXNwYWNlICBSRUFMVElNRWAgK1xuICAgICAgICAgICAgICAgIGAgaG9zdDogJHt0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lfS8ke3RoaXMuY29yZS5jdHguaG9zdH1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBiYWNrZW5kU29ja2V0Rm9yQ2xpZW50LmxlYXZlKHJvb21OYW1lKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQub24oXG4gICAgICAgIFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9VTlNVQlNDUklCRV9FTlRJVFlfVVBEQVRFX0VWRU5UUyhcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICApLFxuICAgICAgICByb29tTmFtZSA9PiB7XG4gICAgICAgICAgdGhpcy5jb3JlLmN0eC5sb2dSZWFsdGltZSAmJlxuICAgICAgICAgICAgY29uc29sZS5pbmZvKFxuICAgICAgICAgICAgICBgW2JhY2tlbmRdIExlYXZpbmcgcm9vbSAke3Jvb21OYW1lfSBpbiBuYW1lc3BhY2UgUkVBTFRJTUUgYCArXG4gICAgICAgICAgICAgICAgYCBob3N0OiAke3RoaXMuY29yZS5jdHguY29udGV4dE5hbWV9LyR7dGhpcy5jb3JlLmN0eC5ob3N0fWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQubGVhdmUocm9vbU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5vbihcbiAgICAgICAgU3ltYm9scy5SRUFMVElNRS5ST09NX1VOU1VCU0NSSUJFX0VOVElUWV9QUk9QRVJUWV9VUERBVEVfRVZFTlRTKFxuICAgICAgICAgIHRoaXMuY29yZS5jdHguY29udGV4dE5hbWUsXG4gICAgICAgICksXG4gICAgICAgIHJvb21OYW1lID0+IHtcbiAgICAgICAgICB0aGlzLmNvcmUuY3R4LmxvZ1JlYWx0aW1lICYmXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgICAgIGBbYmFja2VuZF0gTGVhdmluZyByb29tICR7cm9vbU5hbWV9IGluIG5hbWVzcGFjZSBSRUFMVElNRSBgICtcbiAgICAgICAgICAgICAgICBgIGhvc3Q6ICR7dGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZX0vJHt0aGlzLmNvcmUuY3R4Lmhvc3R9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5sZWF2ZShyb29tTmFtZSk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuXG5cblxuXG4gIH1cblxuXG5cblxuICBwcml2YXRlIHRyaWdnZXJDaGFuZ2VzKFxuICAgIGVudGl0eU9iak9yQ2xhc3M6IEZ1bmN0aW9uLFxuICAgIHByb3BlcnR5Pzogc3RyaW5nLFxuICAgIHZhbHVlT2ZVbmlxdWVQcm9wZXJ0eT86IG51bWJlciB8IHN0cmluZyxcbiAgICBjdXN0b21FdmVudD86IHN0cmluZyxcbiAgICBjdXN0b21FdmVudERhdGE/OiBhbnksXG4gICkge1xuXG5cblxuXG4gICAgbGV0IHJvb21OYW1lOiBzdHJpbmc7XG5cbiAgICBpZiAodGhpcy5jb3JlLmN0eC5kaXNhYmxlZFJlYWx0aW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbUV2ZW50KSB7XG4gICAgICByb29tTmFtZSA9IFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FX0NVU1RPTShcbiAgICAgICAgdGhpcy5jb3JlLmN0eC5jb250ZXh0TmFtZSxcbiAgICAgICAgY3VzdG9tRXZlbnQsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZW50aXR5Rm4gPSBlbnRpdHlPYmpPckNsYXNzIGFzIEZ1bmN0aW9uO1xuICAgICAgY29uc3QgZW50aXR5SXNPYmplY3QgPVxuICAgICAgICAhXy5pc0Z1bmN0aW9uKGVudGl0eU9iak9yQ2xhc3MpICYmIF8uaXNPYmplY3QoZW50aXR5T2JqT3JDbGFzcyk7XG5cbiAgICAgIGlmIChlbnRpdHlJc09iamVjdCkge1xuICAgICAgICBlbnRpdHlGbiA9IENsYXNzSGVscGVycy5nZXRDbGFzc0ZuRnJvbU9iamVjdChlbnRpdHlPYmpPckNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gQ2xhc3NIZWxwZXJzLmdldFVuaXF1ZUtleShlbnRpdHlGbik7XG5cbiAgICAgIGlmIChlbnRpdHlJc09iamVjdCkge1xuICAgICAgICB2YWx1ZU9mVW5pcXVlUHJvcGVydHkgPSBlbnRpdHlPYmpPckNsYXNzW3VuaXF1ZUtleV07XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsdWVPZlVuaXF1ZVByb3BlcnR5KSB7XG4gICAgICAgIEhlbHBlcnMuZXJyb3IoXG4gICAgICAgICAgYFtUYW9uXVtSZWFsdGltZV0gRW50aXR5IHdpdGhvdXQgaUQgISAke0NsYXNzSGVscGVycy5nZXROYW1lKFxuICAgICAgICAgICAgZW50aXR5Rm4sXG4gICAgICAgICAgKX0gYCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcm9vbU5hbWUgPSBfLmlzU3RyaW5nKHByb3BlcnR5KVxuICAgICAgICA/IFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FX1VQREFURV9FTlRJVFlfUFJPUEVSVFkoXG4gICAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5Rm4pLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICB2YWx1ZU9mVW5pcXVlUHJvcGVydHksXG4gICAgICAgICAgKVxuICAgICAgICA6IFN5bWJvbHMuUkVBTFRJTUUuUk9PTV9OQU1FX1VQREFURV9FTlRJVFkoXG4gICAgICAgICAgICB0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLFxuICAgICAgICAgICAgQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5Rm4pLFxuICAgICAgICAgICAgdmFsdWVPZlVuaXF1ZVByb3BlcnR5LFxuICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb3JlLnNvY2tldEJFLmluKHJvb21OYW1lKS5lbWl0KFxuICAgICAgcm9vbU5hbWUsIC8vIHJvb21OYW1lID09IGV2ZW50TmFtZSBpbiByb29tIG5hXG4gICAgICBjdXN0b21FdmVudCA/IGN1c3RvbUV2ZW50RGF0YSA6ICcnLFxuICAgICk7XG5cbiAgfVxuXG5cblxuXG5cbiAgcHVibGljIHRyaWdnZXJFbnRpdHlDaGFuZ2VzKFxuICAgIGVudGl0eU9iak9yQ2xhc3M6IEZ1bmN0aW9uLFxuICAgIGlkVG9UcmlnZ2VyPzogbnVtYmVyIHwgc3RyaW5nLFxuICApIHtcbiAgICBpZiAodGhpcy5jb3JlLmN0eC5kaXNhYmxlZFJlYWx0aW1lKSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHlPYmpPckNsYXNzKTtcblxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW1Rhb25dW1RyaWdnZXJFbnRpdHlDaGFuZ2VzXSBFbnRpdHkgXCIke2NsYXNzTmFtZX0nIGlzIG5vdCByZWFsdGltZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDaGFuZ2VzKGVudGl0eU9iak9yQ2xhc3MgYXMgYW55LCB2b2lkIDAsIGlkVG9UcmlnZ2VyKTtcbiAgfVxuXG5cblxuICBwdWJsaWMgdHJpZ2dlckVudGl0eVByb3BlcnR5Q2hhbmdlczxFTlRJVFkgZXh0ZW5kcyBCYXNlRW50aXR5PihcbiAgICBlbnRpdHlPYmpPckNsYXNzOiBuZXcgKC4uLmFyZ3MpID0+IEVOVElUWSxcbiAgICBwcm9wZXJ0eToga2V5b2YgRU5USVRZIHwgKGtleW9mIEVOVElUWSlbXSxcbiAgICBpZFRvVHJpZ2dlcj86IG51bWJlciB8IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKHRoaXMuY29yZS5jdHguZGlzYWJsZWRSZWFsdGltZSkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NIZWxwZXJzLmdldE5hbWUoZW50aXR5T2JqT3JDbGFzcyk7XG5cbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtUYW9uXVtUcmlnZ2VyRW50aXR5UHJvcGVydHlDaGFuZ2VzXVtwcm9wZXJ0eT0ke1xuICAgICAgICAgIHByb3BlcnR5IGFzIHN0cmluZ1xuICAgICAgICB9XSBFbnRpdHkgXCIke2NsYXNzTmFtZX0nIGlzIG5vdCByZWFsdGltZWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChfLmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICBwcm9wZXJ0eS5mb3JFYWNoKHByb3BlcnR5RnJvbUFyciA9PiB7XG4gICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZXMoXG4gICAgICAgICAgZW50aXR5T2JqT3JDbGFzcyxcbiAgICAgICAgICBwcm9wZXJ0eUZyb21BcnIgYXMgYW55LFxuICAgICAgICAgIGlkVG9UcmlnZ2VyLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZXMoZW50aXR5T2JqT3JDbGFzcywgcHJvcGVydHkgYXMgYW55LCBpZFRvVHJpZ2dlcik7XG4gICAgfVxuICB9XG5cblxuXG4gIHB1YmxpYyB0cmlnZ2VyRW50aXR5VGFibGVDaGFuZ2VzKGVudGl0eUNsYXNzT3JJbnN0YW5jZTogRnVuY3Rpb24gfCBvYmplY3QpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBDbGFzc0hlbHBlcnMuZ2V0TmFtZShlbnRpdHlDbGFzc09ySW5zdGFuY2UpO1xuXG4gICAgaWYgKHRoaXMuY29yZS5jdHguZGlzYWJsZWRSZWFsdGltZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW1Rhb25dW1RyaWdnZXJFbnRpdHlUYWJsZUNoYW5nZXNdIEVudGl0eSBcIiR7Y2xhc3NOYW1lfScgaXMgbm90IHJlYWx0aW1lYCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyQ2hhbmdlcyhcbiAgICAgIGVudGl0eUNsYXNzT3JJbnN0YW5jZSBhcyBhbnksXG4gICAgICB2b2lkIDAsXG4gICAgICB2b2lkIDAsXG4gICAgICBTeW1ib2xzLlJFQUxUSU1FLlRBQkxFX0NIQU5HRSh0aGlzLmNvcmUuY3R4LmNvbnRleHROYW1lLCBjbGFzc05hbWUpLFxuICAgICk7XG4gIH1cblxuXG5cblxuXG5cblxuICBwdWJsaWMgdHJpZ2dlckN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50OiBzdHJpbmcsIGRhdGFUb1B1c2g6IGFueSkge1xuICAgIHRoaXMudHJpZ2dlckNoYW5nZXModm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgY3VzdG9tRXZlbnQsIGRhdGFUb1B1c2gpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gY3VzdG9tIGV2ZW50cyBmcm9tIHVzZXJzXG4gICAqIEBwYXJhbSBjdXN0b21FdmVudCAgZ2xvYmFsIGV2ZW50IG5hbWVcbiAgICovXG4gIGxpc3RlbkNoYW5nZXNDdXN0b21FdmVudChjdXN0b21FdmVudDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGNvbnN0IHN1YiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICAgIHRoaXMuY29yZS5zb2NrZXRCRS5vbignY29ubmVjdGlvbicsIGJhY2tlbmRTb2NrZXRGb3JDbGllbnQgPT4ge1xuICAgICAgYmFja2VuZFNvY2tldEZvckNsaWVudC5vbihjdXN0b21FdmVudCwgKGRhdGEsIC4uLmFyZ3MpID0+IHtcbiAgICAgICAgc3ViLm5leHQoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdWIuYXNPYnNlcnZhYmxlKCk7XG5cbiAgfVxuXG5cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvcmVhbHRpbWUvcmVhbHRpbWUtc2VydmVyLnRzIl19
@@ -1,7 +0,0 @@
1
- export * from './realtime-strategy';
2
- export * from './realtime-strategy-ipc';
3
- export * from './realtime-strategy-mock';
4
- export * from './realtime-strategy-socket-io';
5
- ;
6
- ({}); // @--end-of-file-for-module=taon lib/realtime/realtime-strategy/index.ts
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC13ZWJzcWwvdGFvbi9wcm9qZWN0cy90YW9uL3NyYy9saWIvcmVhbHRpbWUvcmVhbHRpbWUtc3RyYXRlZ3kvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQkFBK0IsQ0FBQztBQUU3QyxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHlFQUF5RSIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5leHBvcnQgKiBmcm9tICcuL3JlYWx0aW1lLXN0cmF0ZWd5JztcbmV4cG9ydCAqIGZyb20gJy4vcmVhbHRpbWUtc3RyYXRlZ3ktaXBjJztcbmV4cG9ydCAqIGZyb20gJy4vcmVhbHRpbWUtc3RyYXRlZ3ktbW9jayc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWx0aW1lLXN0cmF0ZWd5LXNvY2tldC1pbyc7XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uIGxpYi9yZWFsdGltZS9yZWFsdGltZS1zdHJhdGVneS9pbmRleC50cyJdfQ==
@@ -1,218 +0,0 @@
1
- import { RealtimeStrategy } from './realtime-strategy';
2
- export class MockServerIpc {
3
- static { this.serverByContextName = new Map(); }
4
- static from(contextName) {
5
- if (!MockServerIpc.serverByContextName.has(contextName)) {
6
- MockServerIpc.serverByContextName.set(contextName, new MockServerIpc(contextName));
7
- }
8
- return MockServerIpc.serverByContextName.get(contextName);
9
- }
10
- constructor(contextName) {
11
- this.contextName = contextName;
12
- this.namespacesByName = new Map();
13
- MockServerIpc.serverByContextName.set(contextName, this);
14
- }
15
- of(namespace) {
16
- if (!this.namespacesByName.has(namespace)) {
17
- this.namespacesByName.set(namespace, new MockNamespaceIpc(namespace, this));
18
- }
19
- return this.namespacesByName.get(namespace);
20
- }
21
- }
22
- export class MockNamespaceIpc {
23
- constructor(
24
- /**
25
- * Namespace name
26
- */
27
- name, server) {
28
- this.name = name;
29
- this.server = server;
30
- this.electronClients = new Set();
31
- this.roomsByRoomName = {};
32
- this.namespaceEventHandlers = {};
33
- }
34
- on(eventName, callback) {
35
- /* */
36
- /* */
37
- /* */
38
- /* */
39
- /* */
40
- /* */
41
- /* */
42
- /* */
43
- /* */
44
- /* */
45
- /* */
46
- /* */
47
- /* */
48
- /* */
49
- /* */
50
- /* */
51
- /* */
52
- /* */
53
- /* */
54
- /* */
55
- /* */
56
- /* */
57
- /* */
58
- /* */
59
- /* */
60
- /* */
61
- /* */
62
- /* */
63
- /* */
64
- return (void 0);
65
- }
66
- off(event, callback) {
67
- /* */
68
- /* */
69
- /* */
70
- /* */
71
- /* */
72
- /* */
73
- /* */
74
- /* */
75
- /* */
76
- /* */
77
- /* */
78
- /* */
79
- return (void 0);
80
- }
81
- emit(eventName, ...args) {
82
- /* */
83
- /* */
84
- /* */
85
- /* */
86
- /* */
87
- /* */
88
- /* */
89
- /* */
90
- /* */
91
- return (void 0);
92
- }
93
- to(roomName) {
94
- const electronClientsInroom = this.roomsByRoomName[roomName];
95
- return new RoomEmitterIpc(electronClientsInroom, this.name, true);
96
- }
97
- in(roomName) {
98
- const electronClientsInroom = this.roomsByRoomName[roomName];
99
- return new RoomEmitterIpc(electronClientsInroom, this.name, false);
100
- }
101
- join(webContents, roomName) {
102
- if (!this.roomsByRoomName[roomName]) {
103
- this.roomsByRoomName[roomName] = new Set();
104
- }
105
- this.roomsByRoomName[roomName].add(webContents);
106
- }
107
- leave(webContents, roomName) {
108
- if (this.roomsByRoomName[roomName]) {
109
- this.roomsByRoomName[roomName].delete(webContents);
110
- if (this.roomsByRoomName[roomName].size === 0) {
111
- delete this.roomsByRoomName[roomName];
112
- }
113
- }
114
- }
115
- path() {
116
- return this.name;
117
- }
118
- get nsp() {
119
- const self = this;
120
- return {
121
- get name() {
122
- return self.name;
123
- },
124
- };
125
- }
126
- }
127
- class RoomEmitterIpc {
128
- constructor(electronClients,
129
- /**
130
- * namespace name
131
- */
132
- name, includeSender = false, sender = null) {
133
- this.electronClients = electronClients;
134
- this.name = name;
135
- this.includeSender = includeSender;
136
- this.sender = sender;
137
- }
138
- emit(eventName, ...args) {
139
- const emitEvent = `(${this.name}) "${eventName}"`;
140
- this.electronClients?.forEach(webContents => {
141
- webContents.send(emitEvent, ...args);
142
- });
143
- }
144
- }
145
- export class MockSocketIpc {
146
- get name() {
147
- return this.namespaceName;
148
- }
149
- /**
150
- * @param namespaceName instead url for ipc
151
- */
152
- constructor(namespaceName) {
153
- this.namespaceName = namespaceName;
154
- this.socketEventHandlers = {};
155
- this.ipcRenderer = window.require('electron').ipcRenderer;
156
- }
157
- on(eventName, callback) {
158
- if (!this.socketEventHandlers[eventName]) {
159
- this.socketEventHandlers[eventName] = new Set();
160
- }
161
- this.socketEventHandlers[eventName].add(callback);
162
- const listenToEvent = `(${this.name}) "${eventName}"`;
163
- this.ipcRenderer.on(listenToEvent, (rendereEvent, data) => {
164
- callback(data);
165
- });
166
- if (eventName === 'connect') {
167
- const connectionEventKey = `(${this.name}) "connection"`;
168
- this.ipcRenderer.send(connectionEventKey, this.name);
169
- }
170
- }
171
- off(event, callback) {
172
- if (!this.socketEventHandlers[event]) {
173
- return;
174
- }
175
- if (callback) {
176
- this.socketEventHandlers[event].delete(callback);
177
- }
178
- else {
179
- delete this.socketEventHandlers[event];
180
- }
181
- const removeListener = `(${this.name}) "${event}"`;
182
- this.ipcRenderer.removeListener(removeListener, data => {
183
- callback(data);
184
- });
185
- }
186
- emit(event, ...args) {
187
- const emitEvent = `(${this.name}) "${event}"`;
188
- this.ipcRenderer.send(emitEvent, ...args);
189
- }
190
- }
191
- /**
192
- * Purpose:
193
- * - backend-browser communication between 2 processes in electron mode
194
- */
195
- export class RealtimeStrategyIpc extends RealtimeStrategy {
196
- toString() {
197
- return 'ipc';
198
- }
199
- constructor(ctx) {
200
- super(ctx);
201
- this.ctx = ctx;
202
- }
203
- ioServer(__, opt) {
204
- const namespace = opt?.path || '/';
205
- const server = MockServerIpc.from(this.ctx.contextName);
206
- return server.of(namespace);
207
- }
208
- get ioClient() {
209
- const clientIo = (__, opt) => {
210
- const namespace = opt?.path || '/';
211
- return new MockSocketIpc(namespace);
212
- };
213
- return clientIo;
214
- }
215
- }
216
- ;
217
- ({}); // @--end-of-file-for-module=taon lib/realtime/realtime-strategy/realtime-strategy-ipc.ts
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtc3RyYXRlZ3ktaXBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL3JlYWx0aW1lL3JlYWx0aW1lLXN0cmF0ZWd5L3JlYWx0aW1lLXN0cmF0ZWd5LWlwYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVl2RCxNQUFNLE9BQU8sYUFBYTthQUNqQix3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQUFBbkMsQ0FBb0M7SUFFOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFtQjtRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3hELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQ25DLFdBQVcsRUFDWCxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUtELFlBQW1CLFdBQW1CO1FBQW5CLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBSHRDLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO1FBSXJELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFJRCxFQUFFLENBQUMsU0FBaUI7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUN2QixTQUFTLEVBQ1QsSUFBSSxnQkFB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QyxFQUM5QixFQUFFO1lBQ2pCLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDO1lBQ25DLE9BQU8sSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxRQUFlLENBQUM7SUFDekIsQ0FBQztDQUVGO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx5RkFBeUYiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG5pbXBvcnQgeyBTZXJ2ZXIsIFNlcnZlck9wdGlvbnMgfSBmcm9tICdzb2NrZXQuaW8nO1xuaW1wb3J0IHsgRW5kcG9pbnRDb250ZXh0IH0gZnJvbSAnLi4vLi4vZW5kcG9pbnQtY29udGV4dCc7XG5pbXBvcnQgeyBSZWFsdGltZVN0cmF0ZWd5IH0gZnJvbSAnLi9yZWFsdGltZS1zdHJhdGVneSc7XG5pbXBvcnQgdHlwZSB7IGlvLCBNYW5hZ2VyT3B0aW9ucywgU29ja2V0T3B0aW9ucyB9IGZyb20gJ3NvY2tldC5pby1jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcbmltcG9ydCB7IFN5bWJvbHMgfSBmcm9tICcuLi8uLi9zeW1ib2xzJztcbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5pbXBvcnQgeyBSZWFsdGltZU1vZGVscyB9IGZyb20gJy4uL3JlYWx0aW1lLm1vZGVscyc7XG5cblxuXG5leHBvcnQgY2xhc3MgTW9ja1NlcnZlcklwYyB7XG4gIHN0YXRpYyBzZXJ2ZXJCeUNvbnRleHROYW1lID0gbmV3IE1hcDxzdHJpbmcsIE1vY2tTZXJ2ZXJJcGM+KCk7XG5cbiAgc3RhdGljIGZyb20oY29udGV4dE5hbWU6IHN0cmluZyk6IE1vY2tTZXJ2ZXJJcGMge1xuICAgIGlmICghTW9ja1NlcnZlcklwYy5zZXJ2ZXJCeUNvbnRleHROYW1lLmhhcyhjb250ZXh0TmFtZSkpIHtcbiAgICAgIE1vY2tTZXJ2ZXJJcGMuc2VydmVyQnlDb250ZXh0TmFtZS5zZXQoXG4gICAgICAgIGNvbnRleHROYW1lLFxuICAgICAgICBuZXcgTW9ja1NlcnZlcklwYyhjb250ZXh0TmFtZSksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gTW9ja1NlcnZlcklwYy5zZXJ2ZXJCeUNvbnRleHROYW1lLmdldChjb250ZXh0TmFtZSk7XG4gIH1cblxuICBuYW1lc3BhY2VzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIE1vY2tOYW1lc3BhY2VJcGM+KCk7XG5cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29udGV4dE5hbWU6IHN0cmluZykge1xuICAgIE1vY2tTZXJ2ZXJJcGMuc2VydmVyQnlDb250ZXh0TmFtZS5zZXQoY29udGV4dE5hbWUsIHRoaXMpO1xuICB9XG5cblxuXG4gIG9mKG5hbWVzcGFjZTogc3RyaW5nKTogTW9ja05hbWVzcGFjZUlwYyB7XG4gICAgaWYgKCF0aGlzLm5hbWVzcGFjZXNCeU5hbWUuaGFzKG5hbWVzcGFjZSkpIHtcbiAgICAgIHRoaXMubmFtZXNwYWNlc0J5TmFtZS5zZXQoXG4gICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgbmV3IE1vY2tOYW1lc3BhY2VJcGMobmFtZXNwYWNlLCB0aGlzKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZXNCeU5hbWUuZ2V0KG5hbWVzcGFjZSk7XG4gIH1cblxufVxuXG5cblxuZXhwb3J0IGNsYXNzIE1vY2tOYW1lc3BhY2VJcGMge1xuXG4gIGVsZWN0cm9uQ2xpZW50cyA9IG5ldyBTZXQ8RWxlY3Ryb24uV2ViQ29udGVudHM+KCk7XG4gIHJvb21zQnlSb29tTmFtZToge1xuICAgIFtyb29tTmFtZTogc3RyaW5nXTogU2V0PEVsZWN0cm9uLldlYkNvbnRlbnRzPjtcbiAgfSA9IHt9O1xuXG4gIHByaXZhdGUgbmFtZXNwYWNlRXZlbnRIYW5kbGVyczoge1xuICAgIFtldmVudE5hbWU6IHN0cmluZ106IFNldDxSZWFsdGltZU1vZGVscy5FdmVudEhhbmRsZXI+O1xuICB9ID0ge307XG5cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgICAqIE5hbWVzcGFjZSBuYW1lXG4gICAgICovXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgc2VydmVyOiBNb2NrU2VydmVySXBjLFxuICApIHt9XG5cblxuXG4gIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogUmVhbHRpbWVNb2RlbHMuRXZlbnRIYW5kbGVyKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgb2ZmKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrPzogUmVhbHRpbWVNb2RlbHMuRXZlbnRIYW5kbGVyKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHRvKHJvb21OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbGVjdHJvbkNsaWVudHNJbnJvb20gPSB0aGlzLnJvb21zQnlSb29tTmFtZVtyb29tTmFtZV07XG4gICAgcmV0dXJuIG5ldyBSb29tRW1pdHRlcklwYyhlbGVjdHJvbkNsaWVudHNJbnJvb20sIHRoaXMubmFtZSwgdHJ1ZSk7XG4gIH1cblxuXG5cbiAgaW4ocm9vbU5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGVsZWN0cm9uQ2xpZW50c0lucm9vbSA9IHRoaXMucm9vbXNCeVJvb21OYW1lW3Jvb21OYW1lXTtcbiAgICByZXR1cm4gbmV3IFJvb21FbWl0dGVySXBjKGVsZWN0cm9uQ2xpZW50c0lucm9vbSwgdGhpcy5uYW1lLCBmYWxzZSk7XG4gIH1cblxuXG5cbiAgam9pbih3ZWJDb250ZW50czogRWxlY3Ryb24uV2ViQ29udGVudHMsIHJvb21OYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMucm9vbXNCeVJvb21OYW1lW3Jvb21OYW1lXSkge1xuICAgICAgdGhpcy5yb29tc0J5Um9vbU5hbWVbcm9vbU5hbWVdID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICB0aGlzLnJvb21zQnlSb29tTmFtZVtyb29tTmFtZV0uYWRkKHdlYkNvbnRlbnRzKTtcbiAgfVxuXG5cblxuICBsZWF2ZSh3ZWJDb250ZW50czogRWxlY3Ryb24uV2ViQ29udGVudHMsIHJvb21OYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5yb29tc0J5Um9vbU5hbWVbcm9vbU5hbWVdKSB7XG4gICAgICB0aGlzLnJvb21zQnlSb29tTmFtZVtyb29tTmFtZV0uZGVsZXRlKHdlYkNvbnRlbnRzKTtcbiAgICAgIGlmICh0aGlzLnJvb21zQnlSb29tTmFtZVtyb29tTmFtZV0uc2l6ZSA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy5yb29tc0J5Um9vbU5hbWVbcm9vbU5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cblxuICBwYXRoKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuXG5cbiAgZ2V0IG5zcCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLm5hbWU7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxufVxuXG5cblxuXG5jbGFzcyBSb29tRW1pdHRlcklwYyB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVjdHJvbkNsaWVudHM6IFNldDxFbGVjdHJvbi5XZWJDb250ZW50cz4sXG4gICAgLyoqXG4gICAgICogbmFtZXNwYWNlIG5hbWVcbiAgICAgKi9cbiAgICBwcml2YXRlIG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIGluY2x1ZGVTZW5kZXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBwcml2YXRlIHNlbmRlcjogTW9ja1NvY2tldElwYyA9IG51bGwsIC8vIFRPRE8gUVVJQ0sgRklYIGhvdyB0byBpbmNsdWRlIHNlbmRlclxuICApIHt9XG5cblxuXG4gIGVtaXQoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgZW1pdEV2ZW50ID0gYCgke3RoaXMubmFtZX0pIFwiJHtldmVudE5hbWV9XCJgO1xuICAgIHRoaXMuZWxlY3Ryb25DbGllbnRzPy5mb3JFYWNoKHdlYkNvbnRlbnRzID0+IHtcbiAgICAgIHdlYkNvbnRlbnRzLnNlbmQoZW1pdEV2ZW50LCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cblxuXG5leHBvcnQgY2xhc3MgTW9ja1NvY2tldElwYyB7XG5cblxuXG4gIGlwY1JlbmRlcmVyITogdHlwZW9mIGlwY1JlbmRlcmVyO1xuXG5cblxuICBwcml2YXRlIHNvY2tldEV2ZW50SGFuZGxlcnMgPSB7fSBhcyB7XG4gICAgW2V2ZW50TmFtZTogc3RyaW5nXTogU2V0PFJlYWx0aW1lTW9kZWxzLkV2ZW50SGFuZGxlcj47XG4gIH07XG5cblxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZU5hbWU7XG4gIH1cblxuXG5cblxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZXNwYWNlTmFtZSBpbnN0ZWFkIHVybCBmb3IgaXBjXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZXNwYWNlTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pcGNSZW5kZXJlciA9ICh3aW5kb3cgYXMgYW55KS5yZXF1aXJlKCdlbGVjdHJvbicpLmlwY1JlbmRlcmVyO1xuICB9XG5cblxuXG4gIG9uKGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgaWYgKCF0aGlzLnNvY2tldEV2ZW50SGFuZGxlcnNbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5zb2NrZXRFdmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHRoaXMuc29ja2V0RXZlbnRIYW5kbGVyc1tldmVudE5hbWVdLmFkZChjYWxsYmFjayk7XG5cbiAgICBjb25zdCBsaXN0ZW5Ub0V2ZW50ID0gYCgke3RoaXMubmFtZX0pIFwiJHtldmVudE5hbWV9XCJgO1xuICAgIHRoaXMuaXBjUmVuZGVyZXIub24obGlzdGVuVG9FdmVudCwgKHJlbmRlcmVFdmVudCwgZGF0YSkgPT4ge1xuICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSAnY29ubmVjdCcpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25FdmVudEtleSA9IGAoJHt0aGlzLm5hbWV9KSBcImNvbm5lY3Rpb25cImA7XG4gICAgICB0aGlzLmlwY1JlbmRlcmVyLnNlbmQoY29ubmVjdGlvbkV2ZW50S2V5LCB0aGlzLm5hbWUpO1xuICAgIH1cbiAgfVxuXG5cblxuICBvZmYoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s/OiAoZXZlbnQ6IGFueSwgLi4uYXJnczogYW55W10pID0+IHZvaWQpIHtcbiAgICBpZiAoIXRoaXMuc29ja2V0RXZlbnRIYW5kbGVyc1tldmVudF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuc29ja2V0RXZlbnRIYW5kbGVyc1tldmVudF0uZGVsZXRlKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuc29ja2V0RXZlbnRIYW5kbGVyc1tldmVudF07XG4gICAgfVxuICAgIGNvbnN0IHJlbW92ZUxpc3RlbmVyID0gYCgke3RoaXMubmFtZX0pIFwiJHtldmVudH1cImA7XG5cbiAgICB0aGlzLmlwY1JlbmRlcmVyLnJlbW92ZUxpc3RlbmVyKHJlbW92ZUxpc3RlbmVyLCBkYXRhID0+IHtcbiAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cblxuXG4gIGVtaXQoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBlbWl0RXZlbnQgPSBgKCR7dGhpcy5uYW1lfSkgXCIke2V2ZW50fVwiYDtcbiAgICB0aGlzLmlwY1JlbmRlcmVyLnNlbmQoZW1pdEV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG59XG5cblxuLyoqXG4gKiBQdXJwb3NlOlxuICogLSBiYWNrZW5kLWJyb3dzZXIgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIDIgcHJvY2Vzc2VzIGluIGVsZWN0cm9uIG1vZGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJlYWx0aW1lU3RyYXRlZ3lJcGMgZXh0ZW5kcyBSZWFsdGltZVN0cmF0ZWd5IHtcblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnaXBjJztcbiAgfVxuXG5cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY3R4OiBFbmRwb2ludENvbnRleHQpIHtcbiAgICBzdXBlcihjdHgpO1xuICB9XG5cblxuXG4gIGlvU2VydmVyKF9fOiBzdHJpbmcsIG9wdDogU2VydmVyT3B0aW9ucykge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IG9wdD8ucGF0aCB8fCAnLyc7XG4gICAgY29uc3Qgc2VydmVyID0gTW9ja1NlcnZlcklwYy5mcm9tKHRoaXMuY3R4LmNvbnRleHROYW1lKTtcbiAgICByZXR1cm4gc2VydmVyLm9mKG5hbWVzcGFjZSkgYXMgYW55O1xuICB9XG5cbiAgZ2V0IGlvQ2xpZW50KCkge1xuICAgIGNvbnN0IGNsaWVudElvID0gKFxuICAgICAgX186IHN0cmluZyxcbiAgICAgIG9wdD86IFBhcnRpYWw8TWFuYWdlck9wdGlvbnMgJiBTb2NrZXRPcHRpb25zPixcbiAgICApOiBNb2NrU29ja2V0SXBjID0+IHtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IG9wdD8ucGF0aCB8fCAnLyc7XG4gICAgICByZXR1cm4gbmV3IE1vY2tTb2NrZXRJcGMobmFtZXNwYWNlKTtcbiAgICB9O1xuICAgIHJldHVybiBjbGllbnRJbyBhcyBhbnk7XG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvcmVhbHRpbWUvcmVhbHRpbWUtc3RyYXRlZ3kvcmVhbHRpbWUtc3RyYXRlZ3ktaXBjLnRzIl19