taon 0.0.0 → 18.0.15

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 (668) hide show
  1. package/README.md +115 -0
  2. package/assets/shared/shared_folder_info.txt +7 -0
  3. package/bin/start.js +279 -0
  4. package/bin/taon +6 -5
  5. package/bin/taon-debug +5 -5
  6. package/bin/taon-debug-brk +5 -4
  7. package/browser/README.md +24 -0
  8. package/browser/esm2022/lib/base-classes/base-abstract-entity.mjs +18 -0
  9. package/browser/esm2022/lib/base-classes/base-class.mjs +17 -0
  10. package/browser/esm2022/lib/base-classes/base-context.mjs +14 -0
  11. package/browser/esm2022/lib/base-classes/base-controller.mjs +18 -0
  12. package/browser/esm2022/lib/base-classes/base-crud-controller.mjs +279 -0
  13. package/browser/esm2022/lib/base-classes/base-entity.mjs +18 -0
  14. package/browser/esm2022/lib/base-classes/base-injector.mjs +160 -0
  15. package/browser/esm2022/lib/base-classes/base-provider.mjs +6 -0
  16. package/browser/esm2022/lib/base-classes/base-repository.mjs +514 -0
  17. package/browser/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +137 -0
  18. package/browser/esm2022/lib/base-classes/base-subscriber.mjs +27 -0
  19. package/browser/esm2022/lib/base-classes/base.mjs +26 -0
  20. package/browser/esm2022/lib/constants.mjs +4 -0
  21. package/browser/esm2022/lib/create-context.mjs +87 -0
  22. package/browser/esm2022/lib/decorators/classes/controller-decorator.mjs +15 -0
  23. package/browser/esm2022/lib/decorators/classes/entity-decorator.mjs +27 -0
  24. package/browser/esm2022/lib/decorators/classes/provider-decorator.mjs +15 -0
  25. package/browser/esm2022/lib/decorators/classes/repository-decorator.mjs +15 -0
  26. package/browser/esm2022/lib/decorators/classes/subscriber-decorator.mjs +41 -0
  27. package/browser/esm2022/lib/decorators/http/http-decorators.mjs +22 -0
  28. package/browser/esm2022/lib/decorators/http/http-methods-decorators.mjs +78 -0
  29. package/browser/esm2022/lib/decorators/http/http-params-decorators.mjs +47 -0
  30. package/browser/esm2022/lib/dependency-injection/di-container.mjs +32 -0
  31. package/browser/esm2022/lib/endpoint-context.mjs +1746 -0
  32. package/browser/esm2022/lib/entity-process.mjs +207 -0
  33. package/browser/esm2022/lib/env.mjs +6 -0
  34. package/browser/esm2022/lib/get-response-value.mjs +41 -0
  35. package/browser/esm2022/lib/helpers/class-helpers.mjs +183 -0
  36. package/browser/esm2022/lib/helpers/taon-helpers.mjs +120 -0
  37. package/browser/esm2022/lib/index.mjs +79 -0
  38. package/browser/esm2022/lib/inject.mjs +70 -0
  39. package/browser/esm2022/lib/models.mjs +77 -0
  40. package/browser/esm2022/lib/orm.mjs +6 -0
  41. package/browser/esm2022/lib/realtime/realtime-client.mjs +129 -0
  42. package/browser/esm2022/lib/realtime/realtime-core.mjs +54 -0
  43. package/browser/esm2022/lib/realtime/realtime-server.mjs +274 -0
  44. package/browser/esm2022/lib/realtime/realtime-strategy/index.mjs +7 -0
  45. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.mjs +98 -0
  46. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.mjs +45 -0
  47. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.mjs +40 -0
  48. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.mjs +25 -0
  49. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.mjs +4 -0
  50. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +49 -0
  51. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.mjs +5 -0
  52. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.mjs +50 -0
  53. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.mjs +48 -0
  54. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.mjs +35 -0
  55. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.mjs +43 -0
  56. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.mjs +4 -0
  57. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +28 -0
  58. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +33 -0
  59. package/browser/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +10 -0
  60. package/browser/esm2022/lib/realtime/realtime-subs-manager.mjs +79 -0
  61. package/browser/esm2022/lib/realtime/realtime.models.mjs +4 -0
  62. package/browser/esm2022/lib/storage.mjs +5 -0
  63. package/browser/esm2022/lib/symbols.mjs +89 -0
  64. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.mjs +4 -0
  65. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.mjs +32 -0
  66. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +167 -0
  67. package/browser/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin.service.mjs +64 -0
  68. package/browser/esm2022/lib/validators.mjs +76 -0
  69. package/browser/esm2022/public-api.mjs +2 -0
  70. package/browser/esm2022/taon.mjs +5 -0
  71. package/browser/fesm2022/taon.mjs +4901 -0
  72. package/browser/fesm2022/taon.mjs.map +1 -0
  73. package/browser/index.d.ts +6 -0
  74. package/browser/lib/base-classes/base-abstract-entity.d.ts +7 -0
  75. package/browser/lib/base-classes/base-class.d.ts +9 -0
  76. package/browser/lib/base-classes/base-context.d.ts +17 -0
  77. package/browser/lib/base-classes/base-controller.d.ts +8 -0
  78. package/browser/lib/base-classes/base-crud-controller.d.ts +28 -0
  79. package/browser/lib/base-classes/base-entity.d.ts +8 -0
  80. package/browser/lib/base-classes/base-injector.d.ts +60 -0
  81. package/browser/lib/base-classes/base-provider.d.ts +4 -0
  82. package/browser/lib/base-classes/base-repository.d.ts +249 -0
  83. package/browser/lib/base-classes/base-subscriber-for-entity.d.ts +82 -0
  84. package/browser/lib/base-classes/base-subscriber.d.ts +5 -0
  85. package/browser/lib/base-classes/base.d.ts +36 -0
  86. package/browser/lib/constants.d.ts +2 -0
  87. package/browser/lib/create-context.d.ts +25 -0
  88. package/browser/lib/decorators/classes/controller-decorator.d.ts +13 -0
  89. package/browser/lib/decorators/classes/entity-decorator.d.ts +17 -0
  90. package/browser/lib/decorators/classes/provider-decorator.d.ts +5 -0
  91. package/browser/lib/decorators/classes/repository-decorator.d.ts +5 -0
  92. package/browser/lib/decorators/classes/subscriber-decorator.d.ts +6 -0
  93. package/browser/lib/decorators/http/http-decorators.d.ts +18 -0
  94. package/browser/lib/decorators/http/http-methods-decorators.d.ts +15 -0
  95. package/browser/lib/decorators/http/http-params-decorators.d.ts +6 -0
  96. package/browser/lib/dependency-injection/di-container.d.ts +6 -0
  97. package/browser/lib/endpoint-context.d.ts +117 -0
  98. package/browser/lib/entity-process.d.ts +40 -0
  99. package/browser/lib/env.d.ts +3 -0
  100. package/browser/lib/get-response-value.d.ts +7 -0
  101. package/browser/lib/helpers/class-helpers.d.ts +19 -0
  102. package/browser/lib/helpers/taon-helpers.d.ts +17 -0
  103. package/browser/lib/index.d.ts +113 -0
  104. package/browser/lib/inject.d.ts +9 -0
  105. package/browser/lib/models.d.ts +175 -0
  106. package/browser/lib/orm.d.ts +3 -0
  107. package/browser/lib/realtime/realtime-client.d.ts +32 -0
  108. package/browser/lib/realtime/realtime-core.d.ts +41 -0
  109. package/browser/lib/realtime/realtime-server.d.ts +14 -0
  110. package/browser/lib/realtime/realtime-strategy/index.d.ts +5 -0
  111. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +22 -0
  112. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +17 -0
  113. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +11 -0
  114. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +11 -0
  115. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +14 -0
  116. package/browser/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +23 -0
  117. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +3 -0
  118. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +17 -0
  119. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +18 -0
  120. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +12 -0
  121. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +14 -0
  122. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +12 -0
  123. package/browser/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +15 -0
  124. package/browser/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +17 -0
  125. package/browser/lib/realtime/realtime-strategy/realtime-strategy.d.ts +13 -0
  126. package/browser/lib/realtime/realtime-subs-manager.d.ts +15 -0
  127. package/browser/lib/realtime/realtime.models.d.ts +14 -0
  128. package/browser/lib/storage.d.ts +2 -0
  129. package/browser/lib/symbols.d.ts +73 -0
  130. package/browser/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.d.ts +6 -0
  131. package/browser/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.d.ts +18 -0
  132. package/browser/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +51 -0
  133. package/browser/lib/ui/taon-admin-mode-configuration/taon-admin.service.d.ts +25 -0
  134. package/browser/lib/validators.d.ts +8 -0
  135. package/browser/package.json +25 -0
  136. package/browser/public-api.d.ts +2 -0
  137. package/cli.d.ts +1 -0
  138. package/cli.js +24 -0
  139. package/cli.js.map +1 -0
  140. package/client/README.md +24 -0
  141. package/client/esm2022/lib/base-classes/base-abstract-entity.mjs +18 -0
  142. package/client/esm2022/lib/base-classes/base-class.mjs +17 -0
  143. package/client/esm2022/lib/base-classes/base-context.mjs +14 -0
  144. package/client/esm2022/lib/base-classes/base-controller.mjs +18 -0
  145. package/client/esm2022/lib/base-classes/base-crud-controller.mjs +279 -0
  146. package/client/esm2022/lib/base-classes/base-entity.mjs +18 -0
  147. package/client/esm2022/lib/base-classes/base-injector.mjs +160 -0
  148. package/client/esm2022/lib/base-classes/base-provider.mjs +6 -0
  149. package/client/esm2022/lib/base-classes/base-repository.mjs +514 -0
  150. package/client/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +137 -0
  151. package/client/esm2022/lib/base-classes/base-subscriber.mjs +27 -0
  152. package/client/esm2022/lib/base-classes/base.mjs +26 -0
  153. package/client/esm2022/lib/constants.mjs +4 -0
  154. package/client/esm2022/lib/create-context.mjs +87 -0
  155. package/client/esm2022/lib/decorators/classes/controller-decorator.mjs +15 -0
  156. package/client/esm2022/lib/decorators/classes/entity-decorator.mjs +27 -0
  157. package/client/esm2022/lib/decorators/classes/provider-decorator.mjs +15 -0
  158. package/client/esm2022/lib/decorators/classes/repository-decorator.mjs +15 -0
  159. package/client/esm2022/lib/decorators/classes/subscriber-decorator.mjs +41 -0
  160. package/client/esm2022/lib/decorators/http/http-decorators.mjs +22 -0
  161. package/client/esm2022/lib/decorators/http/http-methods-decorators.mjs +78 -0
  162. package/client/esm2022/lib/decorators/http/http-params-decorators.mjs +47 -0
  163. package/client/esm2022/lib/dependency-injection/di-container.mjs +32 -0
  164. package/client/esm2022/lib/endpoint-context.mjs +1746 -0
  165. package/client/esm2022/lib/entity-process.mjs +207 -0
  166. package/client/esm2022/lib/env.mjs +6 -0
  167. package/client/esm2022/lib/get-response-value.mjs +41 -0
  168. package/client/esm2022/lib/helpers/class-helpers.mjs +183 -0
  169. package/client/esm2022/lib/helpers/taon-helpers.mjs +120 -0
  170. package/client/esm2022/lib/index.mjs +79 -0
  171. package/client/esm2022/lib/inject.mjs +70 -0
  172. package/client/esm2022/lib/models.mjs +77 -0
  173. package/client/esm2022/lib/orm.mjs +6 -0
  174. package/client/esm2022/lib/realtime/realtime-client.mjs +129 -0
  175. package/client/esm2022/lib/realtime/realtime-core.mjs +54 -0
  176. package/client/esm2022/lib/realtime/realtime-server.mjs +274 -0
  177. package/client/esm2022/lib/realtime/realtime-strategy/index.mjs +7 -0
  178. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.mjs +98 -0
  179. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.mjs +45 -0
  180. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.mjs +40 -0
  181. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.mjs +25 -0
  182. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.mjs +4 -0
  183. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +49 -0
  184. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.mjs +5 -0
  185. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.mjs +50 -0
  186. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.mjs +48 -0
  187. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.mjs +35 -0
  188. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.mjs +43 -0
  189. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.mjs +4 -0
  190. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +28 -0
  191. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +33 -0
  192. package/client/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +10 -0
  193. package/client/esm2022/lib/realtime/realtime-subs-manager.mjs +79 -0
  194. package/client/esm2022/lib/realtime/realtime.models.mjs +4 -0
  195. package/client/esm2022/lib/storage.mjs +5 -0
  196. package/client/esm2022/lib/symbols.mjs +89 -0
  197. package/client/esm2022/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.mjs +4 -0
  198. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.mjs +32 -0
  199. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +167 -0
  200. package/client/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin.service.mjs +64 -0
  201. package/client/esm2022/lib/validators.mjs +76 -0
  202. package/client/esm2022/public-api.mjs +2 -0
  203. package/client/esm2022/taon.mjs +5 -0
  204. package/client/fesm2022/taon.mjs +4901 -0
  205. package/client/fesm2022/taon.mjs.map +1 -0
  206. package/client/index.d.ts +6 -0
  207. package/client/lib/base-classes/base-abstract-entity.d.ts +7 -0
  208. package/client/lib/base-classes/base-class.d.ts +9 -0
  209. package/client/lib/base-classes/base-context.d.ts +17 -0
  210. package/client/lib/base-classes/base-controller.d.ts +8 -0
  211. package/client/lib/base-classes/base-crud-controller.d.ts +28 -0
  212. package/client/lib/base-classes/base-entity.d.ts +8 -0
  213. package/client/lib/base-classes/base-injector.d.ts +60 -0
  214. package/client/lib/base-classes/base-provider.d.ts +4 -0
  215. package/client/lib/base-classes/base-repository.d.ts +249 -0
  216. package/client/lib/base-classes/base-subscriber-for-entity.d.ts +82 -0
  217. package/client/lib/base-classes/base-subscriber.d.ts +5 -0
  218. package/client/lib/base-classes/base.d.ts +36 -0
  219. package/client/lib/constants.d.ts +2 -0
  220. package/client/lib/create-context.d.ts +25 -0
  221. package/client/lib/decorators/classes/controller-decorator.d.ts +13 -0
  222. package/client/lib/decorators/classes/entity-decorator.d.ts +17 -0
  223. package/client/lib/decorators/classes/provider-decorator.d.ts +5 -0
  224. package/client/lib/decorators/classes/repository-decorator.d.ts +5 -0
  225. package/client/lib/decorators/classes/subscriber-decorator.d.ts +6 -0
  226. package/client/lib/decorators/http/http-decorators.d.ts +18 -0
  227. package/client/lib/decorators/http/http-methods-decorators.d.ts +15 -0
  228. package/client/lib/decorators/http/http-params-decorators.d.ts +6 -0
  229. package/client/lib/dependency-injection/di-container.d.ts +6 -0
  230. package/client/lib/endpoint-context.d.ts +117 -0
  231. package/client/lib/entity-process.d.ts +40 -0
  232. package/client/lib/env.d.ts +3 -0
  233. package/client/lib/get-response-value.d.ts +7 -0
  234. package/client/lib/helpers/class-helpers.d.ts +19 -0
  235. package/client/lib/helpers/taon-helpers.d.ts +17 -0
  236. package/client/lib/index.d.ts +113 -0
  237. package/client/lib/inject.d.ts +9 -0
  238. package/client/lib/models.d.ts +175 -0
  239. package/client/lib/orm.d.ts +3 -0
  240. package/client/lib/realtime/realtime-client.d.ts +32 -0
  241. package/client/lib/realtime/realtime-core.d.ts +41 -0
  242. package/client/lib/realtime/realtime-server.d.ts +14 -0
  243. package/client/lib/realtime/realtime-strategy/index.d.ts +5 -0
  244. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +22 -0
  245. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +17 -0
  246. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +11 -0
  247. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +11 -0
  248. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +14 -0
  249. package/client/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +23 -0
  250. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +3 -0
  251. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +17 -0
  252. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +18 -0
  253. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +12 -0
  254. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +14 -0
  255. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +12 -0
  256. package/client/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +15 -0
  257. package/client/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +17 -0
  258. package/client/lib/realtime/realtime-strategy/realtime-strategy.d.ts +13 -0
  259. package/client/lib/realtime/realtime-subs-manager.d.ts +15 -0
  260. package/client/lib/realtime/realtime.models.d.ts +14 -0
  261. package/client/lib/storage.d.ts +2 -0
  262. package/client/lib/symbols.d.ts +73 -0
  263. package/client/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.d.ts +6 -0
  264. package/client/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.d.ts +18 -0
  265. package/client/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +51 -0
  266. package/client/lib/ui/taon-admin-mode-configuration/taon-admin.service.d.ts +25 -0
  267. package/client/lib/validators.d.ts +8 -0
  268. package/client/public-api.d.ts +2 -0
  269. package/index.d.ts +1 -0
  270. package/index.js +5 -1
  271. package/index.js.map +1 -0
  272. package/lib/base-classes/base-abstract-entity.d.ts +6 -0
  273. package/lib/base-classes/base-abstract-entity.js +40 -0
  274. package/lib/base-classes/base-abstract-entity.js.map +1 -0
  275. package/lib/base-classes/base-class.d.ts +8 -0
  276. package/lib/base-classes/base-class.js +35 -0
  277. package/lib/base-classes/base-class.js.map +1 -0
  278. package/lib/base-classes/base-context.d.ts +16 -0
  279. package/lib/base-classes/base-context.js +15 -0
  280. package/lib/base-classes/base-context.js.map +1 -0
  281. package/lib/base-classes/base-controller.d.ts +7 -0
  282. package/lib/base-classes/base-controller.js +24 -0
  283. package/lib/base-classes/base-controller.js.map +1 -0
  284. package/lib/base-classes/base-crud-controller.d.ts +27 -0
  285. package/lib/base-classes/base-crud-controller.js +385 -0
  286. package/lib/base-classes/base-crud-controller.js.map +1 -0
  287. package/lib/base-classes/base-entity.d.ts +7 -0
  288. package/lib/base-classes/base-entity.js +25 -0
  289. package/lib/base-classes/base-entity.js.map +1 -0
  290. package/lib/base-classes/base-injector.d.ts +59 -0
  291. package/lib/base-classes/base-injector.js +220 -0
  292. package/lib/base-classes/base-injector.js.map +1 -0
  293. package/lib/base-classes/base-provider.d.ts +3 -0
  294. package/lib/base-classes/base-provider.js +14 -0
  295. package/lib/base-classes/base-provider.js.map +1 -0
  296. package/lib/base-classes/base-repository.d.ts +254 -0
  297. package/lib/base-classes/base-repository.js +780 -0
  298. package/lib/base-classes/base-repository.js.map +1 -0
  299. package/lib/base-classes/base-subscriber-for-entity.d.ts +81 -0
  300. package/lib/base-classes/base-subscriber-for-entity.js +136 -0
  301. package/lib/base-classes/base-subscriber-for-entity.js.map +1 -0
  302. package/lib/base-classes/base-subscriber.d.ts +4 -0
  303. package/lib/base-classes/base-subscriber.js +25 -0
  304. package/lib/base-classes/base-subscriber.js.map +1 -0
  305. package/lib/base-classes/base.d.ts +35 -0
  306. package/lib/base-classes/base.js +27 -0
  307. package/lib/base-classes/base.js.map +1 -0
  308. package/lib/build-info._auto-generated_.d.ts +1 -0
  309. package/lib/build-info._auto-generated_.js +5 -0
  310. package/lib/build-info._auto-generated_.js.map +1 -0
  311. package/lib/constants.d.ts +1 -0
  312. package/lib/constants.js +3 -0
  313. package/lib/constants.js.map +1 -0
  314. package/lib/create-context.d.ts +24 -0
  315. package/lib/create-context.js +183 -0
  316. package/lib/create-context.js.map +1 -0
  317. package/lib/decorators/classes/controller-decorator.d.ts +12 -0
  318. package/lib/decorators/classes/controller-decorator.js +24 -0
  319. package/lib/decorators/classes/controller-decorator.js.map +1 -0
  320. package/lib/decorators/classes/entity-decorator.d.ts +16 -0
  321. package/lib/decorators/classes/entity-decorator.js +39 -0
  322. package/lib/decorators/classes/entity-decorator.js.map +1 -0
  323. package/lib/decorators/classes/provider-decorator.d.ts +4 -0
  324. package/lib/decorators/classes/provider-decorator.js +24 -0
  325. package/lib/decorators/classes/provider-decorator.js.map +1 -0
  326. package/lib/decorators/classes/repository-decorator.d.ts +4 -0
  327. package/lib/decorators/classes/repository-decorator.js +24 -0
  328. package/lib/decorators/classes/repository-decorator.js.map +1 -0
  329. package/lib/decorators/classes/subscriber-decorator.d.ts +5 -0
  330. package/lib/decorators/classes/subscriber-decorator.js +75 -0
  331. package/lib/decorators/classes/subscriber-decorator.js.map +1 -0
  332. package/lib/decorators/http/http-decorators.d.ts +17 -0
  333. package/lib/decorators/http/http-decorators.js +23 -0
  334. package/lib/decorators/http/http-decorators.js.map +1 -0
  335. package/lib/decorators/http/http-methods-decorators.d.ts +14 -0
  336. package/lib/decorators/http/http-methods-decorators.js +91 -0
  337. package/lib/decorators/http/http-methods-decorators.js.map +1 -0
  338. package/lib/decorators/http/http-params-decorators.d.ts +5 -0
  339. package/lib/decorators/http/http-params-decorators.js +55 -0
  340. package/lib/decorators/http/http-params-decorators.js.map +1 -0
  341. package/lib/dependency-injection/di-container.d.ts +5 -0
  342. package/lib/dependency-injection/di-container.js +40 -0
  343. package/lib/dependency-injection/di-container.js.map +1 -0
  344. package/lib/endpoint-context.d.ts +117 -0
  345. package/lib/endpoint-context.js +2128 -0
  346. package/lib/endpoint-context.js.map +1 -0
  347. package/lib/entity-process.d.ts +39 -0
  348. package/lib/entity-process.js +261 -0
  349. package/lib/entity-process.js.map +1 -0
  350. package/lib/env.d.ts +2 -0
  351. package/lib/env.js +7 -0
  352. package/lib/env.js.map +1 -0
  353. package/lib/formly/formly-group-wrapper-component.d.ts +5 -0
  354. package/lib/formly/formly-group-wrapper-component.js +28 -0
  355. package/lib/formly/formly-group-wrapper-component.js.map +1 -0
  356. package/lib/formly/formly-repeat-component.d.ts +5 -0
  357. package/lib/formly/formly-repeat-component.js +47 -0
  358. package/lib/formly/formly-repeat-component.js.map +1 -0
  359. package/lib/formly/formly.models.d.ts +1 -0
  360. package/lib/formly/formly.models.js +3 -0
  361. package/lib/formly/formly.models.js.map +1 -0
  362. package/lib/formly/fromly.d.ts +16 -0
  363. package/lib/formly/fromly.js +213 -0
  364. package/lib/formly/fromly.js.map +1 -0
  365. package/lib/formly/type-from-entity.d.ts +20 -0
  366. package/lib/formly/type-from-entity.js +65 -0
  367. package/lib/formly/type-from-entity.js.map +1 -0
  368. package/lib/get-response-value.d.ts +6 -0
  369. package/lib/get-response-value.js +65 -0
  370. package/lib/get-response-value.js.map +1 -0
  371. package/lib/helpers/class-helpers.d.ts +18 -0
  372. package/lib/helpers/class-helpers.js +227 -0
  373. package/lib/helpers/class-helpers.js.map +1 -0
  374. package/lib/helpers/taon-helpers.d.ts +16 -0
  375. package/lib/helpers/taon-helpers.js +144 -0
  376. package/lib/helpers/taon-helpers.js.map +1 -0
  377. package/lib/index.d.ts +112 -0
  378. package/lib/index.js +113 -0
  379. package/lib/index.js.map +1 -0
  380. package/lib/inject.d.ts +8 -0
  381. package/lib/inject.js +84 -0
  382. package/lib/inject.js.map +1 -0
  383. package/lib/models.d.ts +180 -0
  384. package/lib/models.js +107 -0
  385. package/lib/models.js.map +1 -0
  386. package/lib/orm.d.ts +51 -0
  387. package/lib/orm.js +79 -0
  388. package/lib/orm.js.map +1 -0
  389. package/lib/realtime/realtime-client.d.ts +31 -0
  390. package/lib/realtime/realtime-client.js +158 -0
  391. package/lib/realtime/realtime-client.js.map +1 -0
  392. package/lib/realtime/realtime-core.d.ts +40 -0
  393. package/lib/realtime/realtime-core.js +72 -0
  394. package/lib/realtime/realtime-core.js.map +1 -0
  395. package/lib/realtime/realtime-server.d.ts +13 -0
  396. package/lib/realtime/realtime-server.js +193 -0
  397. package/lib/realtime/realtime-server.js.map +1 -0
  398. package/lib/realtime/realtime-strategy/index.d.ts +4 -0
  399. package/lib/realtime/realtime-strategy/index.js +8 -0
  400. package/lib/realtime/realtime-strategy/index.js.map +1 -0
  401. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.d.ts +0 -0
  402. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.js +5 -0
  403. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/index.js.map +1 -0
  404. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +22 -0
  405. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.js +139 -0
  406. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.js.map +1 -0
  407. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +16 -0
  408. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.js +68 -0
  409. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.js.map +1 -0
  410. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +10 -0
  411. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.js +56 -0
  412. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.js.map +1 -0
  413. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +10 -0
  414. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.js +50 -0
  415. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.js.map +1 -0
  416. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +13 -0
  417. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.js +3 -0
  418. package/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.js.map +1 -0
  419. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +22 -0
  420. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js +68 -0
  421. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js.map +1 -0
  422. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +2 -0
  423. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.js +6 -0
  424. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.js.map +1 -0
  425. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +16 -0
  426. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.js +54 -0
  427. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.js.map +1 -0
  428. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +17 -0
  429. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.js +52 -0
  430. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.js.map +1 -0
  431. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +11 -0
  432. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.js +39 -0
  433. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.js.map +1 -0
  434. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +13 -0
  435. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.js +46 -0
  436. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.js.map +1 -0
  437. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +11 -0
  438. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.js +3 -0
  439. package/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.js.map +1 -0
  440. package/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +14 -0
  441. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js +42 -0
  442. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js.map +1 -0
  443. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +17 -0
  444. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js +48 -0
  445. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js.map +1 -0
  446. package/lib/realtime/realtime-strategy/realtime-strategy.d.ts +12 -0
  447. package/lib/realtime/realtime-strategy/realtime-strategy.js +14 -0
  448. package/lib/realtime/realtime-strategy/realtime-strategy.js.map +1 -0
  449. package/lib/realtime/realtime-subs-manager.d.ts +14 -0
  450. package/lib/realtime/realtime-subs-manager.js +102 -0
  451. package/lib/realtime/realtime-subs-manager.js.map +1 -0
  452. package/lib/realtime/realtime.models.d.ts +13 -0
  453. package/lib/realtime/realtime.models.js +3 -0
  454. package/lib/realtime/realtime.models.js.map +1 -0
  455. package/lib/storage.d.ts +1 -0
  456. package/lib/storage.js +6 -0
  457. package/lib/storage.js.map +1 -0
  458. package/lib/symbols.d.ts +72 -0
  459. package/lib/symbols.js +91 -0
  460. package/lib/symbols.js.map +1 -0
  461. package/lib/ui/directives/firedev-inject-html.directive.d.ts +6 -0
  462. package/lib/ui/directives/firedev-long-press.directive.d.ts +22 -0
  463. package/lib/ui/directives/index.d.ts +4 -0
  464. package/lib/ui/directives/index.js +5 -0
  465. package/lib/ui/directives/index.js.map +1 -0
  466. package/lib/ui/directives/safe.pipe.d.ts +7 -0
  467. package/lib/ui/directives/view-mode.d.ts +5 -0
  468. package/lib/ui/directives/view-mode.js +10 -0
  469. package/lib/ui/directives/view-mode.js.map +1 -0
  470. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.d.ts +2 -0
  471. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js +5 -0
  472. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/index.js.map +1 -0
  473. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.component.d.ts +31 -0
  474. package/lib/ui/taon-admin-mode-configuration/components/taon-admin-edit-mode/taon-admin-edit-mode.module.d.ts +2 -0
  475. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.d.ts +1 -0
  476. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js +5 -0
  477. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/index.js.map +1 -0
  478. package/lib/ui/taon-admin-mode-configuration/components/taon-db-admin/taon-db-admin.component.d.ts +9 -0
  479. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.d.ts +2 -0
  480. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js +5 -0
  481. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/index.js.map +1 -0
  482. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.component.d.ts +14 -0
  483. package/lib/ui/taon-admin-mode-configuration/components/taon-file-general-opt/taon-file-general-opt.module.d.ts +2 -0
  484. package/lib/ui/taon-admin-mode-configuration/index.d.ts +4 -0
  485. package/lib/ui/taon-admin-mode-configuration/index.js +5 -0
  486. package/lib/ui/taon-admin-mode-configuration/index.js.map +1 -0
  487. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.d.ts +5 -0
  488. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.js +3 -0
  489. package/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.js.map +1 -0
  490. package/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.d.ts +14 -0
  491. package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +47 -0
  492. package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.module.d.ts +2 -0
  493. package/lib/ui/taon-admin-mode-configuration/taon-admin.service.d.ts +21 -0
  494. package/lib/ui/taon-github-fork-me-corner/index.d.ts +2 -0
  495. package/lib/ui/taon-github-fork-me-corner/index.js +5 -0
  496. package/lib/ui/taon-github-fork-me-corner/index.js.map +1 -0
  497. package/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +3 -0
  498. package/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +2 -0
  499. package/lib/ui/taon-github-fork-me-ribbon/index.d.ts +2 -0
  500. package/lib/ui/taon-github-fork-me-ribbon/index.js +5 -0
  501. package/lib/ui/taon-github-fork-me-ribbon/index.js.map +1 -0
  502. package/lib/ui/taon-github-fork-me-ribbon/taon-github-fork-me-ribbon.component.d.ts +3 -0
  503. package/lib/ui/taon-github-fork-me-ribbon/taon-github-fork-me-ribbon.module.d.ts +2 -0
  504. package/lib/ui/taon-notifications/index.d.ts +4 -0
  505. package/lib/ui/taon-notifications/index.js +11 -0
  506. package/lib/ui/taon-notifications/index.js.map +1 -0
  507. package/lib/ui/taon-notifications/taon-notifications.component.d.ts +9 -0
  508. package/lib/ui/taon-notifications/taon-notifications.models.d.ts +6 -0
  509. package/lib/ui/taon-notifications/taon-notifications.models.js +5 -0
  510. package/lib/ui/taon-notifications/taon-notifications.models.js.map +1 -0
  511. package/lib/ui/taon-notifications/taon-notifications.module.d.ts +2 -0
  512. package/lib/ui/taon-notifications/taon-notifications.service.d.ts +11 -0
  513. package/lib/ui/taon-progress-bar/index.d.ts +2 -0
  514. package/lib/ui/taon-progress-bar/index.js +5 -0
  515. package/lib/ui/taon-progress-bar/index.js.map +1 -0
  516. package/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +14 -0
  517. package/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +2 -0
  518. package/lib/ui/taon-session-passcode/index.d.ts +1 -0
  519. package/lib/ui/taon-session-passcode/index.js +5 -0
  520. package/lib/ui/taon-session-passcode/index.js.map +1 -0
  521. package/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +35 -0
  522. package/lib/ui/taon.models.d.ts +11 -0
  523. package/lib/ui/taon.models.js +3 -0
  524. package/lib/ui/taon.models.js.map +1 -0
  525. package/lib/ui/toan-full-material.module.d.ts +2 -0
  526. package/lib/validators.d.ts +7 -0
  527. package/lib/validators.js +53 -0
  528. package/lib/validators.js.map +1 -0
  529. package/old-app .d.ts +0 -0
  530. package/old-app .js +115 -0
  531. package/old-app .js.map +1 -0
  532. package/package.json +74 -11
  533. package/playground.d.ts +0 -0
  534. package/playground.js +172 -0
  535. package/playground.js.map +1 -0
  536. package/src.d.ts +6 -0
  537. package/taon.jsonc +48 -0
  538. package/tmp-environment.json +392 -0
  539. package/websql/README.md +24 -0
  540. package/websql/esm2022/lib/base-classes/base-abstract-entity.mjs +25 -0
  541. package/websql/esm2022/lib/base-classes/base-class.mjs +17 -0
  542. package/websql/esm2022/lib/base-classes/base-context.mjs +14 -0
  543. package/websql/esm2022/lib/base-classes/base-controller.mjs +18 -0
  544. package/websql/esm2022/lib/base-classes/base-crud-controller.mjs +238 -0
  545. package/websql/esm2022/lib/base-classes/base-entity.mjs +16 -0
  546. package/websql/esm2022/lib/base-classes/base-injector.mjs +160 -0
  547. package/websql/esm2022/lib/base-classes/base-provider.mjs +6 -0
  548. package/websql/esm2022/lib/base-classes/base-repository.mjs +431 -0
  549. package/websql/esm2022/lib/base-classes/base-subscriber-for-entity.mjs +137 -0
  550. package/websql/esm2022/lib/base-classes/base-subscriber.mjs +27 -0
  551. package/websql/esm2022/lib/base-classes/base.mjs +26 -0
  552. package/websql/esm2022/lib/constants.mjs +4 -0
  553. package/websql/esm2022/lib/create-context.mjs +86 -0
  554. package/websql/esm2022/lib/decorators/classes/controller-decorator.mjs +15 -0
  555. package/websql/esm2022/lib/decorators/classes/entity-decorator.mjs +25 -0
  556. package/websql/esm2022/lib/decorators/classes/provider-decorator.mjs +15 -0
  557. package/websql/esm2022/lib/decorators/classes/repository-decorator.mjs +15 -0
  558. package/websql/esm2022/lib/decorators/classes/subscriber-decorator.mjs +41 -0
  559. package/websql/esm2022/lib/decorators/http/http-decorators.mjs +22 -0
  560. package/websql/esm2022/lib/decorators/http/http-methods-decorators.mjs +78 -0
  561. package/websql/esm2022/lib/decorators/http/http-params-decorators.mjs +47 -0
  562. package/websql/esm2022/lib/dependency-injection/di-container.mjs +32 -0
  563. package/websql/esm2022/lib/endpoint-context.mjs +1506 -0
  564. package/websql/esm2022/lib/entity-process.mjs +207 -0
  565. package/websql/esm2022/lib/env.mjs +6 -0
  566. package/websql/esm2022/lib/get-response-value.mjs +45 -0
  567. package/websql/esm2022/lib/helpers/class-helpers.mjs +183 -0
  568. package/websql/esm2022/lib/helpers/taon-helpers.mjs +120 -0
  569. package/websql/esm2022/lib/index.mjs +81 -0
  570. package/websql/esm2022/lib/inject.mjs +70 -0
  571. package/websql/esm2022/lib/models.mjs +70 -0
  572. package/websql/esm2022/lib/orm.mjs +60 -0
  573. package/websql/esm2022/lib/realtime/realtime-client.mjs +129 -0
  574. package/websql/esm2022/lib/realtime/realtime-core.mjs +54 -0
  575. package/websql/esm2022/lib/realtime/realtime-server.mjs +158 -0
  576. package/websql/esm2022/lib/realtime/realtime-strategy/index.mjs +7 -0
  577. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.mjs +98 -0
  578. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.mjs +45 -0
  579. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.mjs +40 -0
  580. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.mjs +25 -0
  581. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.mjs +4 -0
  582. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-ipc.mjs +48 -0
  583. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.mjs +5 -0
  584. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.mjs +50 -0
  585. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.mjs +48 -0
  586. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.mjs +35 -0
  587. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.mjs +43 -0
  588. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.mjs +4 -0
  589. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-mock.mjs +28 -0
  590. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy-socket-io.mjs +33 -0
  591. package/websql/esm2022/lib/realtime/realtime-strategy/realtime-strategy.mjs +10 -0
  592. package/websql/esm2022/lib/realtime/realtime-subs-manager.mjs +79 -0
  593. package/websql/esm2022/lib/realtime/realtime.models.mjs +4 -0
  594. package/websql/esm2022/lib/storage.mjs +5 -0
  595. package/websql/esm2022/lib/symbols.mjs +89 -0
  596. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.mjs +4 -0
  597. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.mjs +32 -0
  598. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.mjs +167 -0
  599. package/websql/esm2022/lib/ui/taon-admin-mode-configuration/taon-admin.service.mjs +64 -0
  600. package/websql/esm2022/lib/validators.mjs +76 -0
  601. package/websql/esm2022/public-api.mjs +2 -0
  602. package/websql/esm2022/taon.mjs +5 -0
  603. package/websql/fesm2022/taon.mjs +4595 -0
  604. package/websql/fesm2022/taon.mjs.map +1 -0
  605. package/websql/index.d.ts +6 -0
  606. package/websql/lib/base-classes/base-abstract-entity.d.ts +7 -0
  607. package/websql/lib/base-classes/base-class.d.ts +9 -0
  608. package/websql/lib/base-classes/base-context.d.ts +17 -0
  609. package/websql/lib/base-classes/base-controller.d.ts +8 -0
  610. package/websql/lib/base-classes/base-crud-controller.d.ts +28 -0
  611. package/websql/lib/base-classes/base-entity.d.ts +8 -0
  612. package/websql/lib/base-classes/base-injector.d.ts +60 -0
  613. package/websql/lib/base-classes/base-provider.d.ts +4 -0
  614. package/websql/lib/base-classes/base-repository.d.ts +255 -0
  615. package/websql/lib/base-classes/base-subscriber-for-entity.d.ts +82 -0
  616. package/websql/lib/base-classes/base-subscriber.d.ts +5 -0
  617. package/websql/lib/base-classes/base.d.ts +36 -0
  618. package/websql/lib/constants.d.ts +2 -0
  619. package/websql/lib/create-context.d.ts +25 -0
  620. package/websql/lib/decorators/classes/controller-decorator.d.ts +13 -0
  621. package/websql/lib/decorators/classes/entity-decorator.d.ts +17 -0
  622. package/websql/lib/decorators/classes/provider-decorator.d.ts +5 -0
  623. package/websql/lib/decorators/classes/repository-decorator.d.ts +5 -0
  624. package/websql/lib/decorators/classes/subscriber-decorator.d.ts +6 -0
  625. package/websql/lib/decorators/http/http-decorators.d.ts +18 -0
  626. package/websql/lib/decorators/http/http-methods-decorators.d.ts +15 -0
  627. package/websql/lib/decorators/http/http-params-decorators.d.ts +6 -0
  628. package/websql/lib/dependency-injection/di-container.d.ts +6 -0
  629. package/websql/lib/endpoint-context.d.ts +117 -0
  630. package/websql/lib/entity-process.d.ts +40 -0
  631. package/websql/lib/env.d.ts +3 -0
  632. package/websql/lib/get-response-value.d.ts +7 -0
  633. package/websql/lib/helpers/class-helpers.d.ts +19 -0
  634. package/websql/lib/helpers/taon-helpers.d.ts +17 -0
  635. package/websql/lib/index.d.ts +113 -0
  636. package/websql/lib/inject.d.ts +9 -0
  637. package/websql/lib/models.d.ts +181 -0
  638. package/websql/lib/orm.d.ts +52 -0
  639. package/websql/lib/realtime/realtime-client.d.ts +32 -0
  640. package/websql/lib/realtime/realtime-core.d.ts +41 -0
  641. package/websql/lib/realtime/realtime-server.d.ts +14 -0
  642. package/websql/lib/realtime/realtime-strategy/index.d.ts +5 -0
  643. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-namespace.d.ts +22 -0
  644. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-main-wrapper.d.ts +17 -0
  645. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-namespace.d.ts +11 -0
  646. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc-renderer-wrapper.d.ts +11 -0
  647. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc-models/realtime-strategy-ipc.models.d.ts +14 -0
  648. package/websql/lib/realtime/realtime-strategy/realtime-strategy-ipc.d.ts +23 -0
  649. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/index.d.ts +3 -0
  650. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-client.d.ts +17 -0
  651. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-namespaces.d.ts +18 -0
  652. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-server.d.ts +12 -0
  653. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock-socket.d.ts +14 -0
  654. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock-models/realtime-strategy-mock.models.d.ts +12 -0
  655. package/websql/lib/realtime/realtime-strategy/realtime-strategy-mock.d.ts +15 -0
  656. package/websql/lib/realtime/realtime-strategy/realtime-strategy-socket-io.d.ts +17 -0
  657. package/websql/lib/realtime/realtime-strategy/realtime-strategy.d.ts +13 -0
  658. package/websql/lib/realtime/realtime-subs-manager.d.ts +15 -0
  659. package/websql/lib/realtime/realtime.models.d.ts +14 -0
  660. package/websql/lib/storage.d.ts +2 -0
  661. package/websql/lib/symbols.d.ts +73 -0
  662. package/websql/lib/ui/taon-admin-mode-configuration/models/taon-admin-mode-tabs.d.ts +6 -0
  663. package/websql/lib/ui/taon-admin-mode-configuration/taon-admin-control.service.d.ts +18 -0
  664. package/websql/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +51 -0
  665. package/websql/lib/ui/taon-admin-mode-configuration/taon-admin.service.d.ts +25 -0
  666. package/websql/lib/validators.d.ts +8 -0
  667. package/websql/package.json +25 -0
  668. package/websql/public-api.d.ts +2 -0
@@ -0,0 +1,431 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Helpers } from 'tnp-core/websql';
3
+ import { _ } from 'tnp-core/websql';
4
+ import { ClassHelpers } from '../helpers/class-helpers';
5
+ import { MySqlQuerySource } from 'taon-type-sql/websql';
6
+ import { TaonRepository } from '../decorators/classes/repository-decorator';
7
+ import { BaseInjector } from './base-injector';
8
+ const INDEX_KEYS_NO_FOR_UPDATE = ['id'];
9
+ let BaseRepository = class BaseRepository extends BaseInjector {
10
+ constructor(__entityClassResolveFn) {
11
+ super();
12
+ this.__entityClassResolveFn = __entityClassResolveFn;
13
+ // @ts-ignore
14
+ this.entityClassResolveFn = __entityClassResolveFn;
15
+ }
16
+ get dbQuery() {
17
+ if (!this.__dbQuery) {
18
+ if (!this.__endpoint_context__) {
19
+ return; // TODO
20
+ throw new Error(`[BaseRepository] Context not inited for class ${ClassHelpers.getName(this)}`);
21
+ }
22
+ const connection = this.__endpoint_context__?.connection;
23
+ if (!connection) {
24
+ throw new Error(`[BaseRepository] Database not inited for context ${this.__endpoint_context__?.contextName}`);
25
+ }
26
+ this.__dbQuery = new MySqlQuerySource(connection);
27
+ }
28
+ return this.__dbQuery;
29
+ }
30
+ get connection() {
31
+ return this.__endpoint_context__?.connection;
32
+ }
33
+ get repository() {
34
+ return this.__repository;
35
+ }
36
+ /**
37
+ * target for repository
38
+ */
39
+ get target() {
40
+ return this?.repository?.target;
41
+ }
42
+ /**
43
+ * alias to repository
44
+ */
45
+ get repo() {
46
+ return this.repository;
47
+ }
48
+ get repositoryExists() {
49
+ return !!this.__repository;
50
+ }
51
+ async __init(context) {
52
+ if (this.__repository) {
53
+ return;
54
+ }
55
+ let entityClassFn = this.entityClassResolveFn();
56
+ if (!entityClassFn) {
57
+ Helpers.warn(`Entity class not provided for repository ${ClassHelpers.getName(this)}`);
58
+ return;
59
+ }
60
+ const ctx = this.__endpoint_context__;
61
+ if (ctx.remoteHost) {
62
+ return;
63
+ }
64
+ const connection = ctx.connection;
65
+ if (!connection) {
66
+ throw new Error(`
67
+
68
+ Connection not found for context ${ctx.contextName}
69
+
70
+
71
+ Maybe you forgot to init database ?
72
+
73
+ Taon.createContext({
74
+ ...
75
+ database:true
76
+ ...
77
+ })
78
+
79
+ `);
80
+ }
81
+ if (!entityClassFn) {
82
+ Helpers.warn(`Entity class not found for repository ${ClassHelpers.getName(this)}`);
83
+ return;
84
+ }
85
+ this.__repository = (await connection.getRepository(ClassHelpers.getOrginalClass(entityClassFn)));
86
+ }
87
+ /**
88
+ * Checks if entity has an id.
89
+ * If entity composite compose ids, it will check them all.
90
+ */
91
+ hasId(entity) {
92
+ return this.repo.hasId(entity);
93
+ }
94
+ /**
95
+ * Gets entity mixed id.
96
+ */
97
+ getId(entity) {
98
+ return this.repo.getId(entity);
99
+ }
100
+ /**
101
+ Saves a given entity in the database.
102
+ * If entity does not exist in the database then inserts, otherwise updates.
103
+ */
104
+ async save(item, options) {
105
+ let model = await this.repo.create(item);
106
+ model = await this.repo.save(model, options);
107
+ const { id } = model;
108
+ model = await this.repo.findOne({
109
+ where: { id },
110
+ });
111
+ return model;
112
+ }
113
+ /**
114
+ * alias to save
115
+ * -> it will actuall create new entity in db
116
+ * in oposite to typeorm create method
117
+ */
118
+ async create(item, options) {
119
+ return this.save(item, options);
120
+ }
121
+ async bulkSave(items, options) {
122
+ const models = [];
123
+ for (let index = 0; index < items.length; index++) {
124
+ const item = items[index];
125
+ const model = await this.save(item, options);
126
+ models.push(model);
127
+ }
128
+ return models;
129
+ }
130
+ async bulkCreate(items, options) {
131
+ return this.bulkSave(items, options);
132
+ }
133
+ /**
134
+ * Saves all given entities in the database.
135
+ * If entities do not exist in the database then inserts, otherwise updates.
136
+ */
137
+ /**
138
+ * Merges multiple entities (or entity-like objects) into a given entity.
139
+ */
140
+ merge(mergeIntoEntity, ...entityLikes) {
141
+ return this.repo.merge(mergeIntoEntity, ...entityLikes);
142
+ }
143
+ /**
144
+ * Creates a new entity from the given plain javascript object. If entity already exist in the database, then
145
+ * it loads it (and everything related to it), replaces all values with the new ones from the given object
146
+ * and returns this new entity. This new entity is actually a loaded from the db entity with all properties
147
+ * replaced from the new object.
148
+ *
149
+ * Note that given entity-like object must have an entity id / primary key to find entity by.
150
+ * Returns undefined if entity with given id was not found.
151
+ */
152
+ preload(entityLike) {
153
+ return this.repo.preload(entityLike);
154
+ }
155
+ /**
156
+ * Removes a given entities from the database.
157
+ */
158
+ async remove(idOrEntity) {
159
+ if (_.isObject(idOrEntity)) {
160
+ idOrEntity = idOrEntity.id;
161
+ }
162
+ const deletedEntity = await this.repo.findOne({
163
+ where: { id: idOrEntity },
164
+ });
165
+ const idCopy = deletedEntity.id;
166
+ await this.repo.remove(deletedEntity);
167
+ deletedEntity.id = idCopy;
168
+ return deletedEntity;
169
+ }
170
+ /**
171
+ * alias to remove
172
+ */
173
+ async delete(idOrEntity) {
174
+ return this.remove(idOrEntity);
175
+ }
176
+ /**
177
+ * alias to removeById
178
+ */
179
+ async deleteById(id) {
180
+ return this.remove(id);
181
+ }
182
+ async bulkRemove(idsOrEntities) {
183
+ idsOrEntities = idsOrEntities.map(id => {
184
+ return _.isObject(id) ? id.id : id;
185
+ });
186
+ const models = [];
187
+ for (let index = 0; index < idsOrEntities.length; index++) {
188
+ const id = idsOrEntities[index];
189
+ const model = await this.remove(id);
190
+ models.push(model);
191
+ }
192
+ return models;
193
+ }
194
+ async bulkDelete(ids) {
195
+ return this.bulkRemove(ids);
196
+ }
197
+ /**
198
+ * Records the delete date of a given entity.
199
+ */
200
+ softRemove(entity, options) {
201
+ return this.repo.softRemove(entity, options);
202
+ }
203
+ /**
204
+ * Recovers a given entity in the database.
205
+ */
206
+ recover(entity, options) {
207
+ return this.repo.recover(entity, options);
208
+ }
209
+ /**
210
+ * Inserts a given entity into the database.
211
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
212
+ * Executes fast and efficient INSERT query.
213
+ * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.
214
+ */
215
+ insert(entity) {
216
+ return this.repo.insert(entity);
217
+ }
218
+ async update(item) {
219
+ const { id } = item;
220
+ return await this.updateById(id, item);
221
+ }
222
+ async updateById(id, item) {
223
+ const allowedPropsToUpdate = [];
224
+ for (const key in item) {
225
+ if (_.isObject(item) &&
226
+ item.hasOwnProperty(key) &&
227
+ typeof item[key] !== 'object' &&
228
+ !_.isUndefined(this.repo.metadata.ownColumns.find(c => c.propertyName === key))) {
229
+ allowedPropsToUpdate.push(key);
230
+ }
231
+ }
232
+ for (let i = 0; i < allowedPropsToUpdate.length; i++) {
233
+ const key = allowedPropsToUpdate[i];
234
+ if (!INDEX_KEYS_NO_FOR_UPDATE.includes(key.toLowerCase())) {
235
+ const toSet = item[key];
236
+ await this.repo.update({
237
+ id,
238
+ }, {
239
+ [key]: toSet,
240
+ });
241
+ }
242
+ }
243
+ let model = await this.repo.findOne({
244
+ where: { id },
245
+ });
246
+ return model;
247
+ }
248
+ async bulkUpdate(items) {
249
+ const models = [];
250
+ for (let index = 0; index < items.length; index++) {
251
+ const item = items[index];
252
+ const { id } = item; // TOOD
253
+ const model = await this.updateById(id, item);
254
+ models.push(model);
255
+ }
256
+ return { models };
257
+ }
258
+ /**
259
+ * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity
260
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
261
+ * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.
262
+ */
263
+ upsert(entityOrEntities, conflictPathsOrOptions) {
264
+ return this.repo.upsert(entityOrEntities, conflictPathsOrOptions);
265
+ }
266
+ /**
267
+ * Records the delete date of entities by a given criteria.
268
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
269
+ * Executes fast and efficient SOFT-DELETE query.
270
+ * Does not check if entity exist in the database.
271
+ */
272
+ softDelete(criteria) {
273
+ return this.repo.softDelete(criteria);
274
+ }
275
+ /**
276
+ * Restores entities by a given criteria.
277
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
278
+ * Executes fast and efficient SOFT-DELETE query.
279
+ * Does not check if entity exist in the database.
280
+ */
281
+ restore(criteria) {
282
+ return this.repo.restore(criteria);
283
+ }
284
+ /**
285
+ * Counts entities that match given options.
286
+ * Useful for pagination.
287
+ */
288
+ count(options) {
289
+ return this.repo.count(options);
290
+ }
291
+ /**
292
+ * Counts entities that match given conditions.
293
+ * Useful for pagination.
294
+ */
295
+ countBy(where) {
296
+ return this.repo.countBy(where);
297
+ }
298
+ /**
299
+ * Finds entities that match given find options.
300
+ */
301
+ find(options) {
302
+ return this.repo.find(options);
303
+ }
304
+ /**
305
+ * Finds entities that match given find options.
306
+ */
307
+ findBy(where) {
308
+ return this.repo.findBy(where);
309
+ }
310
+ //
311
+ /**
312
+ * Finds entities that match given find options.
313
+ * Also counts all entities that match given conditions,
314
+ * but ignores pagination settings (from and take options).
315
+ */
316
+ findAndCount(options) {
317
+ return this.repo.findAndCount(options);
318
+ }
319
+ /**
320
+ * Finds entities that match given WHERE conditions.
321
+ * Also counts all entities that match given conditions,
322
+ * but ignores pagination settings (from and take options).
323
+ */
324
+ findAndCountBy(where) {
325
+ return this.repo.findAndCountBy(where);
326
+ }
327
+ /**
328
+ * Finds entities with ids.
329
+ * Optionally find options or conditions can be applied.
330
+ *
331
+ * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:
332
+ *
333
+ * .findBy({
334
+ * id: In([1, 2, 3])
335
+ * })
336
+ */
337
+ findByIds(ids) {
338
+ return this.repo.findByIds(ids);
339
+ }
340
+ /**
341
+ * Finds first entity by a given find options.
342
+ * If entity was not found in the database - returns null.
343
+ */
344
+ findOne(options) {
345
+ return this.repo.findOne(options);
346
+ }
347
+ /**
348
+ * Finds first entity that matches given where condition.
349
+ * If entity was not found in the database - returns null.
350
+ */
351
+ findOneBy(where) {
352
+ return this.repo.findOneBy(where);
353
+ }
354
+ /**
355
+ * Finds first entity that matches given id.
356
+ * If entity was not found in the database - returns null.
357
+ *
358
+ * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:
359
+ *
360
+ * .findOneBy({
361
+ * id: 1 // where "id" is your primary column name
362
+ * })
363
+ */
364
+ findOneById(id) {
365
+ return this.repo.findOneById(id);
366
+ }
367
+ /**
368
+ * Finds first entity by a given find options.
369
+ * If entity was not found in the database - rejects with error.
370
+ */
371
+ findOneOrFail(options) {
372
+ return this.repo.findOneOrFail(options);
373
+ }
374
+ /**
375
+ * Finds first entity that matches given where condition.
376
+ * If entity was not found in the database - rejects with error.
377
+ */
378
+ findOneByOrFail(where) {
379
+ return this.repo.findOneByOrFail(where);
380
+ }
381
+ /**
382
+ * Executes a raw SQL query and returns a raw database results.
383
+ * Raw query execution is supported only by relational databases (MongoDB is not supported).
384
+ */
385
+ query(query, parameters) {
386
+ return this.repo.query(query, parameters);
387
+ }
388
+ /**
389
+ * Clears all the data from the given table/collection (truncates/drops it).
390
+ *
391
+ * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.
392
+ * @see https://stackoverflow.com/a/5972738/925151
393
+ */
394
+ clear() {
395
+ return this.repo.clear();
396
+ }
397
+ /**
398
+ * Increments some column by provided value of the entities matched given conditions.
399
+ */
400
+ increment(conditions, propertyPath, value) {
401
+ return this.repo.increment(conditions, propertyPath, value);
402
+ }
403
+ /**
404
+ * Decrements some column by provided value of the entities matched given conditions.
405
+ */
406
+ decrement(conditions, propertyPath, value) {
407
+ return this.repo.decrement(conditions, propertyPath, value);
408
+ }
409
+ /**
410
+ * @deprecated use findAndCount instead
411
+ */
412
+ async getAll() {
413
+ const totalCount = await this.repo.count();
414
+ const models = await this.repo.find();
415
+ return { models, totalCount };
416
+ }
417
+ async getBy(id) {
418
+ const model = await await this.repo.findOne({
419
+ where: { id },
420
+ });
421
+ return model;
422
+ }
423
+ };
424
+ BaseRepository = __decorate([
425
+ TaonRepository({ className: 'BaseRepository' }),
426
+ __metadata("design:paramtypes", [Function])
427
+ ], BaseRepository);
428
+ export { BaseRepository };
429
+ ;
430
+ ({}); // @--end-of-file-for-module=taon lib/base-classes/base-repository.ts
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3Rhb24vcHJvamVjdHMvdGFvbi9zcmMvbGliL2Jhc2UtY2xhc3Nlcy9iYXNlLXJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQTBCQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUdqQyxJQUFlLGNBQWMsR0FBN0IsTUFBZSxjQUVwQixTQUFRLFlBQVk7SUFRcEIsWUFFVSxzQkFBaUM7UUFFekMsS0FBSyxFQUFFLENBQUM7UUFGQSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQVc7UUFHekMsYUFBYTtRQUNiLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztJQUNyRCxDQUFDO0lBTUQsSUFBVyxPQUFPO1FBRWhCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsT0FBTztnQkFDZixNQUFNLElBQUksS0FBSyxDQUNiLGlEQUFpRCxZQUFZLENBQUMsT0FBTyxDQUNuRSxJQUFJLENBQ0wsRUFBRSxDQUNKLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQUcs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N0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBUztTQUNyQixDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUVmLENBQUM7Q0FFRixDQUFBO0FBdjNCcUIsY0FBYztJQURuQyxjQUFjLENBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQzs7R0FDMUIsY0FBYyxDQXUzQm5DOztBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUVBQXFFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuaW1wb3J0IHR5cGUge1xuICBEYXRhU291cmNlLFxuICBEZWVwUGFydGlhbCxcbiAgRGVsZXRlUmVzdWx0LFxuICBGaW5kTWFueU9wdGlvbnMsXG4gIEZpbmRPbmVPcHRpb25zLFxuICBGaW5kT3B0aW9uc1doZXJlLFxuICBJbnNlcnRSZXN1bHQsXG5cbiAgUmVtb3ZlT3B0aW9ucyxcbiAgUmVwb3NpdG9yeSxcbiAgU2F2ZU9wdGlvbnMsXG4gIFVwZGF0ZVJlc3VsdCxcbn0gZnJvbSAndGFvbi10eXBlb3JtJztcblxuaW1wb3J0IHR5cGUgeyBRdWVyeURlZXBQYXJ0aWFsRW50aXR5IH0gZnJvbSAndGFvbi10eXBlb3JtL2xpYi90eXBlb3JtL3F1ZXJ5LWJ1aWxkZXIvUXVlcnlQYXJ0aWFsRW50aXR5JztcblxuaW1wb3J0IHR5cGUgeyBVcHNlcnRPcHRpb25zIH0gZnJvbSAndGFvbi10eXBlb3JtL2xpYi90eXBlb3JtL3JlcG9zaXRvcnkvVXBzZXJ0T3B0aW9ucyc7XG5cblxuXG5pbXBvcnQgdHlwZSB7IERhdGFTb3VyY2UgYXMgRGF0YVNvdXJjZVR5cGUgfSBmcm9tICd0YW9uLXR5cGVvcm0vd2Vic3FsJztcbmltcG9ydCB7IEVuZHBvaW50Q29udGV4dCB9IGZyb20gJy4uL2VuZHBvaW50LWNvbnRleHQnO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL3dlYnNxbCc7XG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IENsYXNzSGVscGVycyB9IGZyb20gJy4uL2hlbHBlcnMvY2xhc3MtaGVscGVycyc7XG5pbXBvcnQgeyBNeVNxbFF1ZXJ5U291cmNlIH0gZnJvbSAndGFvbi10eXBlLXNxbC93ZWJzcWwnO1xuaW1wb3J0IHsgVGFvblJlcG9zaXRvcnkgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2NsYXNzZXMvcmVwb3NpdG9yeS1kZWNvcmF0b3InO1xuaW1wb3J0IHsgQmFzZUluamVjdG9yIH0gZnJvbSAnLi9iYXNlLWluamVjdG9yJztcblxuXG5jb25zdCBJTkRFWF9LRVlTX05PX0ZPUl9VUERBVEUgPSBbJ2lkJ107XG5cbkBUYW9uUmVwb3NpdG9yeSh7IGNsYXNzTmFtZTogJ0Jhc2VSZXBvc2l0b3J5JyB9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VSZXBvc2l0b3J5PFxuICBFbnRpdHkgZXh0ZW5kcyB7IGlkPzogYW55IH0sXG4+IGV4dGVuZHMgQmFzZUluamVjdG9yIHtcblxuXG5cblxuXG5cbiAgYWJzdHJhY3QgZW50aXR5Q2xhc3NSZXNvbHZlRm46ICgpID0+IGFueTtcbiAgY29uc3RydWN0b3IoXG5cbiAgICBwcml2YXRlIF9fZW50aXR5Q2xhc3NSZXNvbHZlRm46ICgpID0+IGFueSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5lbnRpdHlDbGFzc1Jlc29sdmVGbiA9IF9fZW50aXR5Q2xhc3NSZXNvbHZlRm47XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBfX2RiUXVlcnk6IE15U3FsUXVlcnlTb3VyY2U7XG5cbiAgcHVibGljIGdldCBkYlF1ZXJ5KCk6IE15U3FsUXVlcnlTb3VyY2Uge1xuXG4gICAgaWYgKCF0aGlzLl9fZGJRdWVyeSkge1xuICAgICAgaWYgKCF0aGlzLl9fZW5kcG9pbnRfY29udGV4dF9fKSB7XG4gICAgICAgIHJldHVybjsgLy8gVE9ET1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtCYXNlUmVwb3NpdG9yeV0gQ29udGV4dCBub3QgaW5pdGVkIGZvciBjbGFzcyAke0NsYXNzSGVscGVycy5nZXROYW1lKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICApfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5fX2VuZHBvaW50X2NvbnRleHRfXz8uY29ubmVjdGlvbjtcbiAgICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtCYXNlUmVwb3NpdG9yeV0gRGF0YWJhc2Ugbm90IGluaXRlZCBmb3IgY29udGV4dCAke3RoaXMuX19lbmRwb2ludF9jb250ZXh0X18/LmNvbnRleHROYW1lfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLl9fZGJRdWVyeSA9IG5ldyBNeVNxbFF1ZXJ5U291cmNlKGNvbm5lY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fX2RiUXVlcnk7XG5cbiAgfVxuXG5cblxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb24oKTogRGF0YVNvdXJjZVR5cGUge1xuXG4gICAgcmV0dXJuIHRoaXMuX19lbmRwb2ludF9jb250ZXh0X18/LmNvbm5lY3Rpb247XG5cbiAgfVxuXG5cblxuXG4gIHByaXZhdGUgX19yZXBvc2l0b3J5OiBSZXBvc2l0b3J5PEVudGl0eT47XG5cbiAgcHJvdGVjdGVkIGdldCByZXBvc2l0b3J5KCkge1xuXG4gICAgcmV0dXJuIHRoaXMuX19yZXBvc2l0b3J5O1xuXG4gIH1cblxuICAvKipcbiAgICogdGFyZ2V0IGZvciByZXBvc2l0b3J5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHRhcmdldCgpOiBGdW5jdGlvbiB7XG5cbiAgICByZXR1cm4gdGhpcz8ucmVwb3NpdG9yeT8udGFyZ2V0IGFzIGFueTtcblxuICB9XG5cbiAgLyoqXG4gICAqIGFsaWFzIHRvIHJlcG9zaXRvcnlcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgcmVwbygpIHtcblxuICAgIHJldHVybiB0aGlzLnJlcG9zaXRvcnk7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeUV4aXN0cygpOiBib29sZWFuIHtcblxuICAgIHJldHVybiAhIXRoaXMuX19yZXBvc2l0b3J5O1xuXG4gIH1cblxuXG5cblxuXG4gIGFzeW5jIF9faW5pdChjb250ZXh0PzogYW55KSB7XG5cbiAgICBpZiAodGhpcy5fX3JlcG9zaXRvcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGVudGl0eUNsYXNzRm46IGFueSA9IHRoaXMuZW50aXR5Q2xhc3NSZXNvbHZlRm4oKTtcbiAgICBpZiAoIWVudGl0eUNsYXNzRm4pIHtcbiAgICAgIEhlbHBlcnMud2FybihcbiAgICAgICAgYEVudGl0eSBjbGFzcyBub3QgcHJvdmlkZWQgZm9yIHJlcG9zaXRvcnkgJHtDbGFzc0hlbHBlcnMuZ2V0TmFtZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdHg6IEVuZHBvaW50Q29udGV4dCA9IHRoaXMuX19lbmRwb2ludF9jb250ZXh0X187XG4gICAgaWYgKGN0eC5yZW1vdGVIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjdHguY29ubmVjdGlvbjtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBcblxuICAgICAgICBDb25uZWN0aW9uIG5vdCBmb3VuZCBmb3IgY29udGV4dCAke2N0eC5jb250ZXh0TmFtZX1cblxuXG4gICAgICAgIE1heWJlIHlvdSBmb3Jnb3QgdG8gaW5pdCBkYXRhYmFzZSA/XG5cbiAgICAgICAgVGFvbi5jcmVhdGVDb250ZXh0KHtcbiAgICAgICAgLi4uXG4gICAgICAgIGRhdGFiYXNlOnRydWVcbiAgICAgICAgLi4uXG4gICAgICAgIH0pXG5cbiAgICAgICAgYCk7XG4gICAgfVxuXG4gICAgaWYgKCFlbnRpdHlDbGFzc0ZuKSB7XG4gICAgICBIZWxwZXJzLndhcm4oXG4gICAgICAgIGBFbnRpdHkgY2xhc3Mgbm90IGZvdW5kIGZvciByZXBvc2l0b3J5ICR7Q2xhc3NIZWxwZXJzLmdldE5hbWUodGhpcyl9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fX3JlcG9zaXRvcnkgPSAoYXdhaXQgY29ubmVjdGlvbi5nZXRSZXBvc2l0b3J5KFxuICAgICAgQ2xhc3NIZWxwZXJzLmdldE9yZ2luYWxDbGFzcyhlbnRpdHlDbGFzc0ZuKSxcbiAgICApKSBhcyBhbnk7XG5cblxuXG5cblxuXG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBlbnRpdHkgaGFzIGFuIGlkLlxuICAgKiBJZiBlbnRpdHkgY29tcG9zaXRlIGNvbXBvc2UgaWRzLCBpdCB3aWxsIGNoZWNrIHRoZW0gYWxsLlxuICAgKi9cbiAgaGFzSWQoZW50aXR5OiBFbnRpdHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmhhc0lkKGVudGl0eSk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEdldHMgZW50aXR5IG1peGVkIGlkLlxuICAgKi9cbiAgZ2V0SWQoZW50aXR5OiBFbnRpdHkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlcG8uZ2V0SWQoZW50aXR5KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICBTYXZlcyBhIGdpdmVuIGVudGl0eSBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIElmIGVudGl0eSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgdGhlbiBpbnNlcnRzLCBvdGhlcndpc2UgdXBkYXRlcy5cbiAgICovXG4gIGFzeW5jIHNhdmUoXG4gICAgaXRlbTogRW50aXR5LFxuICAgIG9wdGlvbnM/OiBTYXZlT3B0aW9ucyAmIHtcbiAgICAgIHJlbG9hZDogZmFsc2U7XG4gICAgfSxcbiAgKTogUHJvbWlzZTxFbnRpdHk+IHtcblxuICAgIGxldCBtb2RlbCA9IGF3YWl0IHRoaXMucmVwby5jcmVhdGUoaXRlbSk7XG5cbiAgICBtb2RlbCA9IGF3YWl0IHRoaXMucmVwby5zYXZlKG1vZGVsLCBvcHRpb25zKTtcbiAgICBjb25zdCB7IGlkIH0gPSBtb2RlbCBhcyBhbnk7XG5cbiAgICBtb2RlbCA9IGF3YWl0IHRoaXMucmVwby5maW5kT25lKHtcbiAgICAgIHdoZXJlOiB7IGlkIH0gYXMgYW55LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1vZGVsO1xuXG4gIH1cblxuICAvKipcbiAgICogYWxpYXMgdG8gc2F2ZVxuICAgKiAtPiBpdCB3aWxsIGFjdHVhbGwgY3JlYXRlIG5ldyBlbnRpdHkgaW4gZGJcbiAgICogaW4gb3Bvc2l0ZSB0byB0eXBlb3JtIGNyZWF0ZSBtZXRob2RcbiAgICovXG4gIGFzeW5jIGNyZWF0ZShcbiAgICBpdGVtOiBFbnRpdHksXG4gICAgb3B0aW9ucz86IFNhdmVPcHRpb25zICYge1xuICAgICAgcmVsb2FkOiBmYWxzZTtcbiAgICB9LFxuICApOiBQcm9taXNlPEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmUoaXRlbSwgb3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBidWxrU2F2ZShcbiAgICBpdGVtczogRW50aXR5W10sXG4gICAgb3B0aW9ucz86IFNhdmVPcHRpb25zICYge1xuICAgICAgcmVsb2FkOiBmYWxzZTtcbiAgICB9LFxuICApOiBQcm9taXNlPEVudGl0eVtdPiB7XG5cbiAgICBjb25zdCBtb2RlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuXG4gICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IHRoaXMuc2F2ZShpdGVtLCBvcHRpb25zKTtcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVscztcblxuICB9XG5cbiAgYXN5bmMgYnVsa0NyZWF0ZShcbiAgICBpdGVtczogRW50aXR5W10sXG4gICAgb3B0aW9ucz86IFNhdmVPcHRpb25zICYge1xuICAgICAgcmVsb2FkOiBmYWxzZTtcbiAgICB9LFxuICApOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYnVsa1NhdmUoaXRlbXMsIG9wdGlvbnMpO1xuICB9XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIFNhdmVzIGFsbCBnaXZlbiBlbnRpdGllcyBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIElmIGVudGl0aWVzIGRvIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgdGhlbiBpbnNlcnRzLCBvdGhlcndpc2UgdXBkYXRlcy5cbiAgICovXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gIC8qKlxuICAgKiBNZXJnZXMgbXVsdGlwbGUgZW50aXRpZXMgKG9yIGVudGl0eS1saWtlIG9iamVjdHMpIGludG8gYSBnaXZlbiBlbnRpdHkuXG4gICAqL1xuICBtZXJnZShtZXJnZUludG9FbnRpdHk6IEVudGl0eSwgLi4uZW50aXR5TGlrZXM6IEVudGl0eVtdKTogRW50aXR5IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLm1lcmdlKG1lcmdlSW50b0VudGl0eSwgLi4uZW50aXR5TGlrZXMpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGVudGl0eSBmcm9tIHRoZSBnaXZlbiBwbGFpbiBqYXZhc2NyaXB0IG9iamVjdC4gSWYgZW50aXR5IGFscmVhZHkgZXhpc3QgaW4gdGhlIGRhdGFiYXNlLCB0aGVuXG4gICAqIGl0IGxvYWRzIGl0IChhbmQgZXZlcnl0aGluZyByZWxhdGVkIHRvIGl0KSwgcmVwbGFjZXMgYWxsIHZhbHVlcyB3aXRoIHRoZSBuZXcgb25lcyBmcm9tIHRoZSBnaXZlbiBvYmplY3RcbiAgICogYW5kIHJldHVybnMgdGhpcyBuZXcgZW50aXR5LiBUaGlzIG5ldyBlbnRpdHkgaXMgYWN0dWFsbHkgYSBsb2FkZWQgZnJvbSB0aGUgZGIgZW50aXR5IHdpdGggYWxsIHByb3BlcnRpZXNcbiAgICogcmVwbGFjZWQgZnJvbSB0aGUgbmV3IG9iamVjdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGdpdmVuIGVudGl0eS1saWtlIG9iamVjdCBtdXN0IGhhdmUgYW4gZW50aXR5IGlkIC8gcHJpbWFyeSBrZXkgdG8gZmluZCBlbnRpdHkgYnkuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIGVudGl0eSB3aXRoIGdpdmVuIGlkIHdhcyBub3QgZm91bmQuXG4gICAqL1xuICBwcmVsb2FkKGVudGl0eUxpa2U6IEVudGl0eSk6IFByb21pc2U8RW50aXR5IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5wcmVsb2FkKGVudGl0eUxpa2UpO1xuICB9XG5cblxuXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBnaXZlbiBlbnRpdGllcyBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZShpZE9yRW50aXR5OiBudW1iZXIgfCBzdHJpbmcgfCBFbnRpdHkpOiBQcm9taXNlPEVudGl0eT4ge1xuXG4gICAgaWYgKF8uaXNPYmplY3QoaWRPckVudGl0eSkpIHtcbiAgICAgIGlkT3JFbnRpdHkgPSAoaWRPckVudGl0eSBhcyBFbnRpdHkpLmlkO1xuICAgIH1cbiAgICBjb25zdCBkZWxldGVkRW50aXR5ID0gYXdhaXQgdGhpcy5yZXBvLmZpbmRPbmUoe1xuICAgICAgd2hlcmU6IHsgaWQ6IGlkT3JFbnRpdHkgfSBhcyBhbnksXG4gICAgfSk7XG5cbiAgICBjb25zdCBpZENvcHkgPSBkZWxldGVkRW50aXR5LmlkO1xuICAgIGF3YWl0IHRoaXMucmVwby5yZW1vdmUoZGVsZXRlZEVudGl0eSk7XG5cbiAgICBkZWxldGVkRW50aXR5LmlkID0gaWRDb3B5O1xuICAgIHJldHVybiBkZWxldGVkRW50aXR5O1xuXG4gIH1cblxuICAvKipcbiAgICogYWxpYXMgdG8gcmVtb3ZlXG4gICAqL1xuICBhc3luYyBkZWxldGUoaWRPckVudGl0eTogbnVtYmVyIHwgc3RyaW5nIHwgRW50aXR5KTogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmUoaWRPckVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogYWxpYXMgdG8gcmVtb3ZlQnlJZFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQnlJZChpZDogbnVtYmVyIHwgc3RyaW5nKTogUHJvbWlzZTxFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmUoaWQpO1xuICB9XG4gIGFzeW5jIGJ1bGtSZW1vdmUoXG4gICAgaWRzT3JFbnRpdGllczogKG51bWJlciB8IHN0cmluZyB8IEVudGl0eSlbXSxcbiAgKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuXG4gICAgaWRzT3JFbnRpdGllcyA9IGlkc09yRW50aXRpZXMubWFwKGlkID0+IHtcbiAgICAgIHJldHVybiBfLmlzT2JqZWN0KGlkKSA/IChpZCBhcyBFbnRpdHkpLmlkIDogaWQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2RlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaWRzT3JFbnRpdGllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGlkID0gaWRzT3JFbnRpdGllc1tpbmRleF07XG4gICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IHRoaXMucmVtb3ZlKGlkKTtcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVscztcblxuICB9XG5cbiAgYXN5bmMgYnVsa0RlbGV0ZShpZHM6IChudW1iZXIgfCBzdHJpbmcgfCBFbnRpdHkpW10pOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYnVsa1JlbW92ZShpZHMpO1xuICB9XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogUmVjb3JkcyB0aGUgZGVsZXRlIGRhdGUgb2YgYWxsIGdpdmVuIGVudGl0aWVzLlxuICAgKi9cbiAgc29mdFJlbW92ZTxUIGV4dGVuZHMgRW50aXR5PihcbiAgICBlbnRpdGllczogVFtdLFxuICAgIG9wdGlvbnM6IFNhdmVPcHRpb25zICYge1xuICAgICAgcmVsb2FkOiBmYWxzZTtcbiAgICB9LFxuICApOiBQcm9taXNlPFRbXT47XG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoZSBkZWxldGUgZGF0ZSBvZiBhbGwgZ2l2ZW4gZW50aXRpZXMuXG4gICAqL1xuICBzb2Z0UmVtb3ZlPFQgZXh0ZW5kcyBFbnRpdHk+KFxuICAgIGVudGl0aWVzOiBUW10sXG4gICAgb3B0aW9ucz86IFNhdmVPcHRpb25zLFxuICApOiBQcm9taXNlPChUICYgRW50aXR5KVtdPjtcbiAgLyoqXG4gICAqIFJlY29yZHMgdGhlIGRlbGV0ZSBkYXRlIG9mIGEgZ2l2ZW4gZW50aXR5LlxuICAgKi9cbiAgc29mdFJlbW92ZTxUIGV4dGVuZHMgRW50aXR5PihcbiAgICBlbnRpdHk6IFQsXG4gICAgb3B0aW9uczogU2F2ZU9wdGlvbnMgJiB7XG4gICAgICByZWxvYWQ6IGZhbHNlO1xuICAgIH0sXG4gICk6IFByb21pc2U8VD47XG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoZSBkZWxldGUgZGF0ZSBvZiBhIGdpdmVuIGVudGl0eS5cbiAgICovXG4gIHNvZnRSZW1vdmU8VCBleHRlbmRzIEVudGl0eT4oXG4gICAgZW50aXR5OiBULFxuICAgIG9wdGlvbnM/OiBTYXZlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxUICYgRW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5zb2Z0UmVtb3ZlKGVudGl0eSwgb3B0aW9ucyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFJlY292ZXJzIGFsbCBnaXZlbiBlbnRpdGllcyBpbiB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICByZWNvdmVyPFQgZXh0ZW5kcyBFbnRpdHk+KFxuICAgIGVudGl0aWVzOiBUW10sXG4gICAgb3B0aW9uczogU2F2ZU9wdGlvbnMgJiB7XG4gICAgICByZWxvYWQ6IGZhbHNlO1xuICAgIH0sXG4gICk6IFByb21pc2U8VFtdPjtcbiAgLyoqXG4gICAqIFJlY292ZXJzIGFsbCBnaXZlbiBlbnRpdGllcyBpbiB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICByZWNvdmVyPFQgZXh0ZW5kcyBFbnRpdHk+KFxuICAgIGVudGl0aWVzOiBUW10sXG4gICAgb3B0aW9ucz86IFNhdmVPcHRpb25zLFxuICApOiBQcm9taXNlPChUICYgRW50aXR5KVtdPjtcbiAgLyoqXG4gICAqIFJlY292ZXJzIGEgZ2l2ZW4gZW50aXR5IGluIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHJlY292ZXI8VCBleHRlbmRzIEVudGl0eT4oXG4gICAgZW50aXR5OiBULFxuICAgIG9wdGlvbnM6IFNhdmVPcHRpb25zICYge1xuICAgICAgcmVsb2FkOiBmYWxzZTtcbiAgICB9LFxuICApOiBQcm9taXNlPFQ+O1xuICAvKipcbiAgICogUmVjb3ZlcnMgYSBnaXZlbiBlbnRpdHkgaW4gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcmVjb3ZlcjxUIGV4dGVuZHMgRW50aXR5PihcbiAgICBlbnRpdHk6IFQsXG4gICAgb3B0aW9ucz86IFNhdmVPcHRpb25zLFxuICApOiBQcm9taXNlPFQgJiBFbnRpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLnJlY292ZXIoZW50aXR5LCBvcHRpb25zKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogSW5zZXJ0cyBhIGdpdmVuIGVudGl0eSBpbnRvIHRoZSBkYXRhYmFzZS5cbiAgICogVW5saWtlIHNhdmUgbWV0aG9kIGV4ZWN1dGVzIGEgcHJpbWl0aXZlIG9wZXJhdGlvbiB3aXRob3V0IGNhc2NhZGVzLCByZWxhdGlvbnMgYW5kIG90aGVyIG9wZXJhdGlvbnMgaW5jbHVkZWQuXG4gICAqIEV4ZWN1dGVzIGZhc3QgYW5kIGVmZmljaWVudCBJTlNFUlQgcXVlcnkuXG4gICAqIERvZXMgbm90IGNoZWNrIGlmIGVudGl0eSBleGlzdCBpbiB0aGUgZGF0YWJhc2UsIHNvIHF1ZXJ5IHdpbGwgZmFpbCBpZiBkdXBsaWNhdGUgZW50aXR5IGlzIGJlaW5nIGluc2VydGVkLlxuICAgKi9cbiAgaW5zZXJ0KFxuICAgIGVudGl0eTogUXVlcnlEZWVwUGFydGlhbEVudGl0eTxFbnRpdHk+IHwgUXVlcnlEZWVwUGFydGlhbEVudGl0eTxFbnRpdHk+W10sXG4gICk6IFByb21pc2U8SW5zZXJ0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5pbnNlcnQoZW50aXR5KTtcbiAgfVxuXG5cblxuICBhc3luYyB1cGRhdGUoaXRlbTogRW50aXR5KSB7XG5cbiAgICBjb25zdCB7IGlkIH0gPSBpdGVtIGFzIGFueTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVCeUlkKGlkLCBpdGVtKTtcblxuICB9XG5cbiAgYXN5bmMgdXBkYXRlQnlJZChpZDogbnVtYmVyIHwgc3RyaW5nLCBpdGVtOiBFbnRpdHkpIHtcblxuICAgIGNvbnN0IGFsbG93ZWRQcm9wc1RvVXBkYXRlID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuICAgICAgaWYgKFxuICAgICAgICBfLmlzT2JqZWN0KGl0ZW0pICYmXG4gICAgICAgIGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICB0eXBlb2YgaXRlbVtrZXldICE9PSAnb2JqZWN0JyAmJlxuICAgICAgICAhXy5pc1VuZGVmaW5lZChcbiAgICAgICAgICB0aGlzLnJlcG8ubWV0YWRhdGEub3duQ29sdW1ucy5maW5kKGMgPT4gYy5wcm9wZXJ0eU5hbWUgPT09IGtleSksXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBhbGxvd2VkUHJvcHNUb1VwZGF0ZS5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxvd2VkUHJvcHNUb1VwZGF0ZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBhbGxvd2VkUHJvcHNUb1VwZGF0ZVtpXTtcbiAgICAgIGlmICghSU5ERVhfS0VZU19OT19GT1JfVVBEQVRFLmluY2x1ZGVzKGtleS50b0xvd2VyQ2FzZSgpKSkge1xuXG4gICAgICAgIGNvbnN0IHRvU2V0ID0gaXRlbVtrZXldO1xuXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZXBvLnVwZGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICB9IGFzIGFueSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBba2V5XTogdG9TZXQsXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICk7XG5cblxuXG5cblxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgbW9kZWwgPSBhd2FpdCB0aGlzLnJlcG8uZmluZE9uZSh7XG4gICAgICB3aGVyZTogeyBpZCB9IGFzIGFueSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtb2RlbDtcblxuICB9XG4gIGFzeW5jIGJ1bGtVcGRhdGUoaXRlbXM6IEVudGl0eVtdKSB7XG5cbiAgICBjb25zdCBtb2RlbHMgPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgICAgY29uc3QgeyBpZCB9ID0gaXRlbSBhcyBhbnk7IC8vIFRPT0RcbiAgICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgdGhpcy51cGRhdGVCeUlkKGlkLCBpdGVtKTtcbiAgICAgIG1vZGVscy5wdXNoKG1vZGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbW9kZWxzIH07XG5cbiAgfVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBnaXZlbiBlbnRpdHkgaW50byB0aGUgZGF0YWJhc2UsIHVubGVzcyBhIHVuaXF1ZSBjb25zdHJhaW50IGNvbmZsaWN0cyB0aGVuIHVwZGF0ZXMgdGhlIGVudGl0eVxuICAgKiBVbmxpa2Ugc2F2ZSBtZXRob2QgZXhlY3V0ZXMgYSBwcmltaXRpdmUgb3BlcmF0aW9uIHdpdGhvdXQgY2FzY2FkZXMsIHJlbGF0aW9ucyBhbmQgb3RoZXIgb3BlcmF0aW9ucyBpbmNsdWRlZC5cbiAgICogRXhlY3V0ZXMgZmFzdCBhbmQgZWZmaWNpZW50IElOU0VSVCAuLi4gT04gQ09ORkxJQ1QgRE8gVVBEQVRFL09OIERVUExJQ0FURSBLRVkgVVBEQVRFIHF1ZXJ5LlxuICAgKi9cbiAgdXBzZXJ0KFxuICAgIGVudGl0eU9yRW50aXRpZXM6XG4gICAgICB8IFF1ZXJ5RGVlcFBhcnRpYWxFbnRpdHk8RW50aXR5PlxuICAgICAgfCBRdWVyeURlZXBQYXJ0aWFsRW50aXR5PEVudGl0eT5bXSxcbiAgICBjb25mbGljdFBhdGhzT3JPcHRpb25zOiBzdHJpbmdbXSB8IFVwc2VydE9wdGlvbnM8RW50aXR5PixcbiAgKTogUHJvbWlzZTxJbnNlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLnVwc2VydChlbnRpdHlPckVudGl0aWVzLCBjb25mbGljdFBhdGhzT3JPcHRpb25zKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogUmVjb3JkcyB0aGUgZGVsZXRlIGRhdGUgb2YgZW50aXRpZXMgYnkgYSBnaXZlbiBjcml0ZXJpYS5cbiAgICogVW5saWtlIHNhdmUgbWV0aG9kIGV4ZWN1dGVzIGEgcHJpbWl0aXZlIG9wZXJhdGlvbiB3aXRob3V0IGNhc2NhZGVzLCByZWxhdGlvbnMgYW5kIG90aGVyIG9wZXJhdGlvbnMgaW5jbHVkZWQuXG4gICAqIEV4ZWN1dGVzIGZhc3QgYW5kIGVmZmljaWVudCBTT0ZULURFTEVURSBxdWVyeS5cbiAgICogRG9lcyBub3QgY2hlY2sgaWYgZW50aXR5IGV4aXN0IGluIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHNvZnREZWxldGUoXG4gICAgY3JpdGVyaWE6XG4gICAgICB8IHN0cmluZ1xuICAgICAgfCBzdHJpbmdbXVxuICAgICAgfCBudW1iZXJcbiAgICAgIHwgbnVtYmVyW11cbiAgICAgIHwgRGF0ZVxuICAgICAgfCBEYXRlW11cblxuXG4gICAgICB8IEZpbmRPcHRpb25zV2hlcmU8RW50aXR5PixcbiAgKTogUHJvbWlzZTxVcGRhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLnNvZnREZWxldGUoY3JpdGVyaWEpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBlbnRpdGllcyBieSBhIGdpdmVuIGNyaXRlcmlhLlxuICAgKiBVbmxpa2Ugc2F2ZSBtZXRob2QgZXhlY3V0ZXMgYSBwcmltaXRpdmUgb3BlcmF0aW9uIHdpdGhvdXQgY2FzY2FkZXMsIHJlbGF0aW9ucyBhbmQgb3RoZXIgb3BlcmF0aW9ucyBpbmNsdWRlZC5cbiAgICogRXhlY3V0ZXMgZmFzdCBhbmQgZWZmaWNpZW50IFNPRlQtREVMRVRFIHF1ZXJ5LlxuICAgKiBEb2VzIG5vdCBjaGVjayBpZiBlbnRpdHkgZXhpc3QgaW4gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcmVzdG9yZShcbiAgICBjcml0ZXJpYTpcbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IHN0cmluZ1tdXG4gICAgICB8IG51bWJlclxuICAgICAgfCBudW1iZXJbXVxuICAgICAgfCBEYXRlXG4gICAgICB8IERhdGVbXVxuXG5cbiAgICAgIHwgRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+LFxuICApOiBQcm9taXNlPFVwZGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8ucmVzdG9yZShjcml0ZXJpYSk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENvdW50cyBlbnRpdGllcyB0aGF0IG1hdGNoIGdpdmVuIG9wdGlvbnMuXG4gICAqIFVzZWZ1bCBmb3IgcGFnaW5hdGlvbi5cbiAgICovXG4gIGNvdW50KG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnM8RW50aXR5Pik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5jb3VudChvcHRpb25zKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQ291bnRzIGVudGl0aWVzIHRoYXQgbWF0Y2ggZ2l2ZW4gY29uZGl0aW9ucy5cbiAgICogVXNlZnVsIGZvciBwYWdpbmF0aW9uLlxuICAgKi9cbiAgY291bnRCeShcbiAgICB3aGVyZTogRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+IHwgRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+W10sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5jb3VudEJ5KHdoZXJlKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmluZHMgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBmaW5kIG9wdGlvbnMuXG4gICAqL1xuICBmaW5kKG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnM8RW50aXR5Pik6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmQob3B0aW9ucyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEZpbmRzIGVudGl0aWVzIHRoYXQgbWF0Y2ggZ2l2ZW4gZmluZCBvcHRpb25zLlxuICAgKi9cbiAgZmluZEJ5KFxuICAgIHdoZXJlOiBGaW5kT3B0aW9uc1doZXJlPEVudGl0eT4gfCBGaW5kT3B0aW9uc1doZXJlPEVudGl0eT5bXSxcbiAgKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8uZmluZEJ5KHdoZXJlKTtcbiAgfVxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgLy9cbiAgLyoqXG4gICAqIEZpbmRzIGVudGl0aWVzIHRoYXQgbWF0Y2ggZ2l2ZW4gZmluZCBvcHRpb25zLlxuICAgKiBBbHNvIGNvdW50cyBhbGwgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBjb25kaXRpb25zLFxuICAgKiBidXQgaWdub3JlcyBwYWdpbmF0aW9uIHNldHRpbmdzIChmcm9tIGFuZCB0YWtlIG9wdGlvbnMpLlxuICAgKi9cbiAgZmluZEFuZENvdW50KG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnM8RW50aXR5Pik6IFByb21pc2U8W0VudGl0eVtdLCBudW1iZXJdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5maW5kQW5kQ291bnQob3B0aW9ucyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEZpbmRzIGVudGl0aWVzIHRoYXQgbWF0Y2ggZ2l2ZW4gV0hFUkUgY29uZGl0aW9ucy5cbiAgICogQWxzbyBjb3VudHMgYWxsIGVudGl0aWVzIHRoYXQgbWF0Y2ggZ2l2ZW4gY29uZGl0aW9ucyxcbiAgICogYnV0IGlnbm9yZXMgcGFnaW5hdGlvbiBzZXR0aW5ncyAoZnJvbSBhbmQgdGFrZSBvcHRpb25zKS5cbiAgICovXG4gIGZpbmRBbmRDb3VudEJ5KFxuICAgIHdoZXJlOiBGaW5kT3B0aW9uc1doZXJlPEVudGl0eT4gfCBGaW5kT3B0aW9uc1doZXJlPEVudGl0eT5bXSxcbiAgKTogUHJvbWlzZTxbRW50aXR5W10sIG51bWJlcl0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmRBbmRDb3VudEJ5KHdoZXJlKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmluZHMgZW50aXRpZXMgd2l0aCBpZHMuXG4gICAqIE9wdGlvbmFsbHkgZmluZCBvcHRpb25zIG9yIGNvbmRpdGlvbnMgY2FuIGJlIGFwcGxpZWQuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZmluZEJ5YCBtZXRob2QgaW5zdGVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBJbmAgb3BlcmF0b3IsIGZvciBleGFtcGxlOlxuICAgKlxuICAgKiAuZmluZEJ5KHtcbiAgICogICAgIGlkOiBJbihbMSwgMiwgM10pXG4gICAqIH0pXG4gICAqL1xuICBmaW5kQnlJZHMoaWRzOiBhbnlbXSk6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmRCeUlkcyhpZHMpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBGaW5kcyBmaXJzdCBlbnRpdHkgYnkgYSBnaXZlbiBmaW5kIG9wdGlvbnMuXG4gICAqIElmIGVudGl0eSB3YXMgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybnMgbnVsbC5cbiAgICovXG4gIGZpbmRPbmUob3B0aW9uczogRmluZE9uZU9wdGlvbnM8RW50aXR5Pik6IFByb21pc2U8RW50aXR5IHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZShvcHRpb25zKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmluZHMgZmlyc3QgZW50aXR5IHRoYXQgbWF0Y2hlcyBnaXZlbiB3aGVyZSBjb25kaXRpb24uXG4gICAqIElmIGVudGl0eSB3YXMgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybnMgbnVsbC5cbiAgICovXG4gIGZpbmRPbmVCeShcbiAgICB3aGVyZTogRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+IHwgRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+W10sXG4gICk6IFByb21pc2U8RW50aXR5IHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZUJ5KHdoZXJlKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmluZHMgZmlyc3QgZW50aXR5IHRoYXQgbWF0Y2hlcyBnaXZlbiBpZC5cbiAgICogSWYgZW50aXR5IHdhcyBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlIC0gcmV0dXJucyBudWxsLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGZpbmRPbmVCeWAgbWV0aG9kIGluc3RlYWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSW5gIG9wZXJhdG9yLCBmb3IgZXhhbXBsZTpcbiAgICpcbiAgICogLmZpbmRPbmVCeSh7XG4gICAqICAgICBpZDogMSAvLyB3aGVyZSBcImlkXCIgaXMgeW91ciBwcmltYXJ5IGNvbHVtbiBuYW1lXG4gICAqIH0pXG4gICAqL1xuICBmaW5kT25lQnlJZChcbiAgICBpZDogbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZSxcblxuICApOiBQcm9taXNlPEVudGl0eSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmRPbmVCeUlkKGlkKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmluZHMgZmlyc3QgZW50aXR5IGJ5IGEgZ2l2ZW4gZmluZCBvcHRpb25zLlxuICAgKiBJZiBlbnRpdHkgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZGF0YWJhc2UgLSByZWplY3RzIHdpdGggZXJyb3IuXG4gICAqL1xuICBmaW5kT25lT3JGYWlsKG9wdGlvbnM6IEZpbmRPbmVPcHRpb25zPEVudGl0eT4pOiBQcm9taXNlPEVudGl0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZU9yRmFpbChvcHRpb25zKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogRmluZHMgZmlyc3QgZW50aXR5IHRoYXQgbWF0Y2hlcyBnaXZlbiB3aGVyZSBjb25kaXRpb24uXG4gICAqIElmIGVudGl0eSB3YXMgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSAtIHJlamVjdHMgd2l0aCBlcnJvci5cbiAgICovXG4gIGZpbmRPbmVCeU9yRmFpbChcbiAgICB3aGVyZTogRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+IHwgRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+W10sXG4gICk6IFByb21pc2U8RW50aXR5PiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5maW5kT25lQnlPckZhaWwod2hlcmUpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHJhdyBTUUwgcXVlcnkgYW5kIHJldHVybnMgYSByYXcgZGF0YWJhc2UgcmVzdWx0cy5cbiAgICogUmF3IHF1ZXJ5IGV4ZWN1dGlvbiBpcyBzdXBwb3J0ZWQgb25seSBieSByZWxhdGlvbmFsIGRhdGFiYXNlcyAoTW9uZ29EQiBpcyBub3Qgc3VwcG9ydGVkKS5cbiAgICovXG4gIHF1ZXJ5KHF1ZXJ5OiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBhbnlbXSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5xdWVyeShxdWVyeSwgcGFyYW1ldGVycyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgdGhlIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gdGFibGUvY29sbGVjdGlvbiAodHJ1bmNhdGVzL2Ryb3BzIGl0KS5cbiAgICpcbiAgICogTm90ZTogdGhpcyBtZXRob2QgdXNlcyBUUlVOQ0FURSBhbmQgbWF5IG5vdCB3b3JrIGFzIHlvdSBleHBlY3QgaW4gdHJhbnNhY3Rpb25zIG9uIHNvbWUgcGxhdGZvcm1zLlxuICAgKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81OTcyNzM4LzkyNTE1MVxuICAgKi9cbiAgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5jbGVhcigpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnRzIHNvbWUgY29sdW1uIGJ5IHByb3ZpZGVkIHZhbHVlIG9mIHRoZSBlbnRpdGllcyBtYXRjaGVkIGdpdmVuIGNvbmRpdGlvbnMuXG4gICAqL1xuICBpbmNyZW1lbnQoXG4gICAgY29uZGl0aW9uczogRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+LFxuICAgIHByb3BlcnR5UGF0aDogc3RyaW5nLFxuICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsXG4gICk6IFByb21pc2U8VXBkYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5pbmNyZW1lbnQoY29uZGl0aW9ucywgcHJvcGVydHlQYXRoLCB2YWx1ZSk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIERlY3JlbWVudHMgc29tZSBjb2x1bW4gYnkgcHJvdmlkZWQgdmFsdWUgb2YgdGhlIGVudGl0aWVzIG1hdGNoZWQgZ2l2ZW4gY29uZGl0aW9ucy5cbiAgICovXG4gIGRlY3JlbWVudChcbiAgICBjb25kaXRpb25zOiBGaW5kT3B0aW9uc1doZXJlPEVudGl0eT4sXG4gICAgcHJvcGVydHlQYXRoOiBzdHJpbmcsXG4gICAgdmFsdWU6IG51bWJlciB8IHN0cmluZyxcbiAgKTogUHJvbWlzZTxVcGRhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmRlY3JlbWVudChjb25kaXRpb25zLCBwcm9wZXJ0eVBhdGgsIHZhbHVlKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZpbmRBbmRDb3VudCBpbnN0ZWFkXG4gICAqL1xuICBhc3luYyBnZXRBbGwoKSB7XG5cblxuXG5cblxuXG4gICAgY29uc3QgdG90YWxDb3VudCA9IGF3YWl0IHRoaXMucmVwby5jb3VudCgpO1xuICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMucmVwby5maW5kKCk7XG5cblxuICAgIHJldHVybiB7IG1vZGVscywgdG90YWxDb3VudCB9O1xuXG4gIH1cblxuXG5cbiAgYXN5bmMgZ2V0QnkoaWQ6IG51bWJlciB8IHN0cmluZyk6IFByb21pc2U8RW50aXR5PiB7XG5cbiAgICBjb25zdCBtb2RlbCA9IGF3YWl0IGF3YWl0IHRoaXMucmVwby5maW5kT25lKHtcbiAgICAgIHdoZXJlOiB7IGlkIH0gYXMgYW55LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1vZGVsO1xuXG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvYmFzZS1jbGFzc2VzL2Jhc2UtcmVwb3NpdG9yeS50cyJdfQ==
@@ -0,0 +1,137 @@
1
+ import { __decorate } from "tslib";
2
+ /* */
3
+ /* */
4
+ /* */
5
+ /* */
6
+ /* */
7
+ /* */
8
+ /* */
9
+ /* */
10
+ /* */
11
+ import { BaseInjector } from './base-injector';
12
+ import { TaonSubscriber } from '../decorators/classes/subscriber-decorator';
13
+ let BaseSubscriberForEntity = class BaseSubscriberForEntity extends BaseInjector {
14
+ /**
15
+ * Called after entity is loaded.
16
+ */
17
+ afterLoad(entity) {
18
+ console.log(`AFTER ENTITY LOADED: `, entity);
19
+ }
20
+ /**
21
+ * Called before query execution.
22
+ */
23
+ beforeQuery(event) {
24
+ console.log(`BEFORE QUERY: `, event.query);
25
+ }
26
+ /**
27
+ * Called after query execution.
28
+ */
29
+ afterQuery(event) {
30
+ console.log(`AFTER QUERY: `, event.query);
31
+ }
32
+ /**
33
+ * Called before entity insertion.
34
+ */
35
+ beforeInsert(event) {
36
+ console.log(`BEFORE ENTITY INSERTED: `, event.entity);
37
+ }
38
+ /**
39
+ * Called after entity insertion.
40
+ */
41
+ afterInsert(event) {
42
+ console.log(`AFTER ENTITY INSERTED: `, event.entity);
43
+ }
44
+ /**
45
+ * Called before entity update.
46
+ */
47
+ beforeUpdate(event) {
48
+ console.log(`BEFORE ENTITY UPDATED: `, event.entity);
49
+ }
50
+ /**
51
+ * Called after entity update.
52
+ */
53
+ afterUpdate(event) {
54
+ console.log(`AFTER ENTITY UPDATED: `, event.entity);
55
+ }
56
+ /**
57
+ * Called before entity removal.
58
+ */
59
+ beforeRemove(event) {
60
+ console.log(`BEFORE ENTITY WITH ID ${event.entityId} REMOVED: `, event.entity);
61
+ }
62
+ /**
63
+ * Called after entity removal.
64
+ */
65
+ afterRemove(event) {
66
+ console.log(`AFTER ENTITY WITH ID ${event.entityId} REMOVED: `, event.entity);
67
+ }
68
+ /**
69
+ * Called before entity removal.
70
+ */
71
+ beforeSoftRemove(event) {
72
+ console.log(`BEFORE ENTITY WITH ID ${event.entityId} SOFT REMOVED: `, event.entity);
73
+ }
74
+ /**
75
+ * Called after entity removal.
76
+ */
77
+ afterSoftRemove(event) {
78
+ console.log(`AFTER ENTITY WITH ID ${event.entityId} SOFT REMOVED: `, event.entity);
79
+ }
80
+ /**
81
+ * Called before entity recovery.
82
+ */
83
+ beforeRecover(event) {
84
+ console.log(`BEFORE ENTITY WITH ID ${event.entityId} RECOVERED: `, event.entity);
85
+ }
86
+ /**
87
+ * Called after entity recovery.
88
+ */
89
+ afterRecover(event) {
90
+ console.log(`AFTER ENTITY WITH ID ${event.entityId} RECOVERED: `, event.entity);
91
+ }
92
+ /**
93
+ * Called before transaction start.
94
+ */
95
+ beforeTransactionStart(event) {
96
+ console.log(`BEFORE TRANSACTION STARTED: `, event);
97
+ }
98
+ /**
99
+ * Called after transaction start.
100
+ */
101
+ afterTransactionStart(event) {
102
+ console.log(`AFTER TRANSACTION STARTED: `, event);
103
+ }
104
+ /**
105
+ * Called before transaction commit.
106
+ */
107
+ beforeTransactionCommit(event) {
108
+ console.log(`BEFORE TRANSACTION COMMITTED: `, event);
109
+ }
110
+ /**
111
+ * Called after transaction commit.
112
+ */
113
+ afterTransactionCommit(event) {
114
+ console.log(`AFTER TRANSACTION COMMITTED: `, event);
115
+ }
116
+ /**
117
+ * Called before transaction rollback.
118
+ */
119
+ beforeTransactionRollback(event) {
120
+ console.log(`BEFORE TRANSACTION ROLLBACK: `, event);
121
+ }
122
+ /**
123
+ * Called after transaction rollback.
124
+ */
125
+ afterTransactionRollback(event) {
126
+ console.log(`AFTER TRANSACTION ROLLBACK: `, event);
127
+ }
128
+ };
129
+ BaseSubscriberForEntity = __decorate([
130
+ TaonSubscriber({
131
+ className: 'BaseSubscriberForEntity',
132
+ })
133
+ ], BaseSubscriberForEntity);
134
+ export { BaseSubscriberForEntity };
135
+ ;
136
+ ({}); // @--end-of-file-for-module=taon lib/base-classes/base-subscriber-for-entity.ts
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zdWJzY3JpYmVyLWZvci1lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC13ZWJzcWwvdGFvbi9wcm9qZWN0cy90YW9uL3NyYy9saWIvYmFzZS1jbGFzc2VzL2Jhc2Utc3Vic2NyaWJlci1mb3ItZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFHQSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFFTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBS3JFLElBQWUsdUJBQXVCLEdBQXRDLE1BQWUsdUJBQ3BCLFNBQVEsWUFBWTtJQUtwQjs7T0FFRztJQUNILFNBQVMsQ0FBQyxNQUFXO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLEtBQVU7UUFFcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLEtBQVU7UUFFbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVksQ0FBQyxLQUF1QjtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsS0FBdUI7UUFDakMsT0FBTyxDQUFDLEdBQUcs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c2NyaWJlckludGVyZmFjZSwgICBSZWNvdmVyRXZlbnQsICAgU29mdFJlbW92ZUV2ZW50LCAgIEluc2VydEV2ZW50LCAgIFRyYW5zYWN0aW9uU3RhcnRFdmVudCwgICBUcmFuc2FjdGlvbkNvbW1pdEV2ZW50LCAgIFRyYW5zYWN0aW9uUm9sbGJhY2tFdmVudCwgICBSZW1vdmVFdmVudCwgICBVcGRhdGVFdmVudCwgfSBmcm9tICd0YW9uLXR5cGVvcm0vd2Vic3FsJzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBCYXNlSW5qZWN0b3IgfSBmcm9tICcuL2Jhc2UtaW5qZWN0b3InO1xuaW1wb3J0IHsgVGFvblN1YnNjcmliZXIgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2NsYXNzZXMvc3Vic2NyaWJlci1kZWNvcmF0b3InO1xuXG5AVGFvblN1YnNjcmliZXIoe1xuICBjbGFzc05hbWU6ICdCYXNlU3Vic2NyaWJlckZvckVudGl0eScsXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTdWJzY3JpYmVyRm9yRW50aXR5PEVudGl0eSA9IGFueT5cbiAgZXh0ZW5kcyBCYXNlSW5qZWN0b3JcbiAgaW1wbGVtZW50cyBFbnRpdHlTdWJzY3JpYmVySW50ZXJmYWNlXG57XG4gIGFic3RyYWN0IGxpc3RlblRvKCk6IG5ldyAoLi4uYXJncykgPT4gRW50aXR5O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZW50aXR5IGlzIGxvYWRlZC5cbiAgICovXG4gIGFmdGVyTG9hZChlbnRpdHk6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGBBRlRFUiBFTlRJVFkgTE9BREVEOiBgLCBlbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgcXVlcnkgZXhlY3V0aW9uLlxuICAgKi9cbiAgYmVmb3JlUXVlcnkoZXZlbnQ6IGFueSkge1xuXG4gICAgY29uc29sZS5sb2coYEJFRk9SRSBRVUVSWTogYCwgZXZlbnQucXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBxdWVyeSBleGVjdXRpb24uXG4gICAqL1xuICBhZnRlclF1ZXJ5KGV2ZW50OiBhbnkpIHtcblxuICAgIGNvbnNvbGUubG9nKGBBRlRFUiBRVUVSWTogYCwgZXZlbnQucXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZW50aXR5IGluc2VydGlvbi5cbiAgICovXG4gIGJlZm9yZUluc2VydChldmVudDogSW5zZXJ0RXZlbnQ8YW55Pikge1xuICAgIGNvbnNvbGUubG9nKGBCRUZPUkUgRU5USVRZIElOU0VSVEVEOiBgLCBldmVudC5lbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBlbnRpdHkgaW5zZXJ0aW9uLlxuICAgKi9cbiAgYWZ0ZXJJbnNlcnQoZXZlbnQ6IEluc2VydEV2ZW50PGFueT4pIHtcbiAgICBjb25zb2xlLmxvZyhgQUZURVIgRU5USVRZIElOU0VSVEVEOiBgLCBldmVudC5lbnRpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZW50aXR5IHVwZGF0ZS5cbiAgICovXG4gIGJlZm9yZVVwZGF0ZShldmVudDogVXBkYXRlRXZlbnQ8YW55Pikge1xuICAgIGNvbnNvbGUubG9nKGBCRUZPUkUgRU5USVRZIFVQREFURUQ6IGAsIGV2ZW50LmVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGVudGl0eSB1cGRhdGUuXG4gICAqL1xuICBhZnRlclVwZGF0ZShldmVudDogVXBkYXRlRXZlbnQ8YW55Pikge1xuICAgIGNvbnNvbGUubG9nKGBBRlRFUiBFTlRJVFkgVVBEQVRFRDogYCwgZXZlbnQuZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGVudGl0eSByZW1vdmFsLlxuICAgKi9cbiAgYmVmb3JlUmVtb3ZlKGV2ZW50OiBSZW1vdmVFdmVudDxhbnk+KSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQkVGT1JFIEVOVElUWSBXSVRIIElEICR7ZXZlbnQuZW50aXR5SWR9IFJFTU9WRUQ6IGAsXG4gICAgICBldmVudC5lbnRpdHksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgZW50aXR5IHJlbW92YWwuXG4gICAqL1xuICBhZnRlclJlbW92ZShldmVudDogUmVtb3ZlRXZlbnQ8YW55Pikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEFGVEVSIEVOVElUWSBXSVRIIElEICR7ZXZlbnQuZW50aXR5SWR9IFJFTU9WRUQ6IGAsXG4gICAgICBldmVudC5lbnRpdHksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIGVudGl0eSByZW1vdmFsLlxuICAgKi9cbiAgYmVmb3JlU29mdFJlbW92ZShldmVudDogU29mdFJlbW92ZUV2ZW50PGFueT4pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBCRUZPUkUgRU5USVRZIFdJVEggSUQgJHtldmVudC5lbnRpdHlJZH0gU09GVCBSRU1PVkVEOiBgLFxuICAgICAgZXZlbnQuZW50aXR5LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGVudGl0eSByZW1vdmFsLlxuICAgKi9cbiAgYWZ0ZXJTb2Z0UmVtb3ZlKGV2ZW50OiBTb2Z0UmVtb3ZlRXZlbnQ8YW55Pikge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEFGVEVSIEVOVElUWSBXSVRIIElEICR7ZXZlbnQuZW50aXR5SWR9IFNPRlQgUkVNT1ZFRDogYCxcbiAgICAgIGV2ZW50LmVudGl0eSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZW50aXR5IHJlY292ZXJ5LlxuICAgKi9cbiAgYmVmb3JlUmVjb3ZlcihldmVudDogUmVjb3ZlckV2ZW50PGFueT4pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBCRUZPUkUgRU5USVRZIFdJVEggSUQgJHtldmVudC5lbnRpdHlJZH0gUkVDT1ZFUkVEOiBgLFxuICAgICAgZXZlbnQuZW50aXR5LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGVudGl0eSByZWNvdmVyeS5cbiAgICovXG4gIGFmdGVyUmVjb3ZlcihldmVudDogUmVjb3ZlckV2ZW50PGFueT4pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBBRlRFUiBFTlRJVFkgV0lUSCBJRCAke2V2ZW50LmVudGl0eUlkfSBSRUNPVkVSRUQ6IGAsXG4gICAgICBldmVudC5lbnRpdHksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIHRyYW5zYWN0aW9uIHN0YXJ0LlxuICAgKi9cbiAgYmVmb3JlVHJhbnNhY3Rpb25TdGFydChldmVudDogVHJhbnNhY3Rpb25TdGFydEV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coYEJFRk9SRSBUUkFOU0FDVElPTiBTVEFSVEVEOiBgLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIHRyYW5zYWN0aW9uIHN0YXJ0LlxuICAgKi9cbiAgYWZ0ZXJUcmFuc2FjdGlvblN0YXJ0KGV2ZW50OiBUcmFuc2FjdGlvblN0YXJ0RXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgQUZURVIgVFJBTlNBQ1RJT04gU1RBUlRFRDogYCwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgdHJhbnNhY3Rpb24gY29tbWl0LlxuICAgKi9cbiAgYmVmb3JlVHJhbnNhY3Rpb25Db21taXQoZXZlbnQ6IFRyYW5zYWN0aW9uQ29tbWl0RXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgQkVGT1JFIFRSQU5TQUNUSU9OIENPTU1JVFRFRDogYCwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciB0cmFuc2FjdGlvbiBjb21taXQuXG4gICAqL1xuICBhZnRlclRyYW5zYWN0aW9uQ29tbWl0KGV2ZW50OiBUcmFuc2FjdGlvbkNvbW1pdEV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coYEFGVEVSIFRSQU5TQUNUSU9OIENPTU1JVFRFRDogYCwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgdHJhbnNhY3Rpb24gcm9sbGJhY2suXG4gICAqL1xuICBiZWZvcmVUcmFuc2FjdGlvblJvbGxiYWNrKGV2ZW50OiBUcmFuc2FjdGlvblJvbGxiYWNrRXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgQkVGT1JFIFRSQU5TQUNUSU9OIFJPTExCQUNLOiBgLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIHRyYW5zYWN0aW9uIHJvbGxiYWNrLlxuICAgKi9cbiAgYWZ0ZXJUcmFuc2FjdGlvblJvbGxiYWNrKGV2ZW50OiBUcmFuc2FjdGlvblJvbGxiYWNrRXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgQUZURVIgVFJBTlNBQ1RJT04gUk9MTEJBQ0s6IGAsIGV2ZW50KTtcbiAgfVxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbiBsaWIvYmFzZS1jbGFzc2VzL2Jhc2Utc3Vic2NyaWJlci1mb3ItZW50aXR5LnRzIl19