http-request-manager 18.15.34 → 18.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/fesm2022/http-request-manager.mjs +13688 -0
  2. package/fesm2022/http-request-manager.mjs.map +1 -0
  3. package/http-request-manager-18.16.0.tgz +0 -0
  4. package/package.json +15 -6
  5. package/types/http-request-manager.d.ts +3968 -0
  6. package/TEST_COVERAGE_SUMMARY.md +0 -458
  7. package/ng-package.json +0 -8
  8. package/src/docs/ADVANCED_WEBSOCKET.md +0 -633
  9. package/src/docs/ARCHITECTURE.md +0 -633
  10. package/src/docs/BATCH_REQUEST_README.md +0 -467
  11. package/src/docs/COMPLETE_API_REFERENCE.md +0 -1037
  12. package/src/docs/DATABASE_README.md +0 -1195
  13. package/src/docs/ENCRYPTION_README.md +0 -403
  14. package/src/docs/HTTP_MANAGER_README.md +0 -628
  15. package/src/docs/HTTP_SINGNALS_MANAGER_README.md +0 -654
  16. package/src/docs/HTTP_STATE_MANAGER_README.md +0 -1391
  17. package/src/docs/INTERCEPTOR_README.md +0 -549
  18. package/src/docs/LOCAL_STORAGE_README.md +0 -1056
  19. package/src/docs/LOCAL_STORAGE_SIGNALS_README.md +0 -338
  20. package/src/docs/LOGGER_README.md +0 -310
  21. package/src/docs/MESSAGE_TRACKER_README.md +0 -518
  22. package/src/docs/MESSAGE_TRACKER_SIGNALS_README.md +0 -563
  23. package/src/docs/MODELS_README.md +0 -1264
  24. package/src/docs/SIGNAL_SERVICES_README.md +0 -238
  25. package/src/docs/SQL_DIXIE_README.md +0 -574
  26. package/src/docs/STORE_STATE_MANAGER_README.md +0 -556
  27. package/src/docs/STORE_STATE_SIGNALS_README.md +0 -600
  28. package/src/docs/UPLOAD_REQUEST_README.md +0 -324
  29. package/src/docs/UTILS_README.md +0 -1604
  30. package/src/docs/WEBSOCKET_MESSAGE_SERVICE.md +0 -799
  31. package/src/docs/WEBSOCKET_SIGNALS_README.md +0 -641
  32. package/src/docs/WEBSOCKET_SINGLETON_REFACTORING.md +0 -201
  33. package/src/docs/WS_MANAGER_README.md +0 -613
  34. package/src/lib/http-request-manager.module.ts +0 -147
  35. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +0 -116
  36. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  37. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +0 -255
  38. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +0 -123
  39. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +0 -6
  40. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +0 -53
  41. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +0 -195
  42. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +0 -17
  43. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +0 -208
  44. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +0 -200
  45. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +0 -17
  46. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +0 -214
  47. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.html +0 -53
  48. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.scss +0 -60
  49. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/download-file/download-file.component.ts +0 -72
  50. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-download.module.ts +0 -28
  51. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.html +0 -10
  52. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.scss +0 -29
  53. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/file-downloader.component.ts +0 -100
  54. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/models/download-labels-model.ts +0 -22
  55. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.html +0 -8
  56. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.scss +0 -19
  57. package/src/lib/http-request-services-demo/request-manager-basic-demo/file-downloader/spinner/spinner.component.ts +0 -26
  58. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app-session.model.ts +0 -30
  59. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/app.model.ts +0 -19
  60. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/get-sample.model.ts +0 -25
  61. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-ai-prompt.ts +0 -19
  62. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-details.ts +0 -24
  63. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client-info.ts +0 -30
  64. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-client.model.ts +0 -49
  65. package/src/lib/http-request-services-demo/request-manager-basic-demo/models/sample-mapper-client-info.ts +0 -33
  66. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.html +0 -279
  67. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.scss +0 -24
  68. package/src/lib/http-request-services-demo/request-manager-basic-demo/request-manager-basic-demo.component.ts +0 -461
  69. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  70. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  71. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  72. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +0 -28
  73. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +0 -10
  74. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  75. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  76. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  77. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  78. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  79. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  80. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +0 -30
  81. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +0 -19
  82. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +0 -25
  83. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +0 -19
  84. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +0 -24
  85. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +0 -30
  86. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +0 -49
  87. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +0 -33
  88. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +0 -622
  89. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +0 -106
  90. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +0 -687
  91. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +0 -418
  92. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +0 -24
  93. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +0 -576
  94. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +0 -89
  95. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +0 -119
  96. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  97. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +0 -3
  98. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +0 -16
  99. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  100. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +0 -3
  101. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +0 -16
  102. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +0 -31
  103. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +0 -94
  104. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +0 -41
  105. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +0 -203
  106. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +0 -144
  107. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +0 -11
  108. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +0 -102
  109. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +0 -40
  110. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +0 -230
  111. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +0 -30
  112. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +0 -172
  113. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +0 -31
  114. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +0 -239
  115. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +0 -31
  116. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +0 -32
  117. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  118. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +0 -84
  119. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +0 -40
  120. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +0 -3
  121. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/jwt-token.service.ts +0 -62
  122. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +0 -83
  123. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +0 -147
  124. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +0 -168
  125. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +0 -53
  126. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +0 -60
  127. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +0 -72
  128. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +0 -28
  129. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +0 -10
  130. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +0 -29
  131. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +0 -100
  132. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +0 -22
  133. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +0 -8
  134. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +0 -19
  135. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +0 -26
  136. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +0 -30
  137. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +0 -19
  138. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +0 -25
  139. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +0 -19
  140. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +0 -24
  141. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +0 -30
  142. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +0 -49
  143. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +0 -33
  144. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +0 -380
  145. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +0 -24
  146. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +0 -410
  147. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +0 -28
  148. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +0 -49
  149. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  150. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +0 -23
  151. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +0 -36
  152. package/src/lib/http-request-services-demo/store-state-signals-demo/store-state-signals-demo.component.ts +0 -161
  153. package/src/lib/http-request-services-demo/upload-demo/models/index.ts +0 -1
  154. package/src/lib/http-request-services-demo/upload-demo/models/upload-state.model.ts +0 -30
  155. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.html +0 -89
  156. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.scss +0 -160
  157. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.spec.ts +0 -101
  158. package/src/lib/http-request-services-demo/upload-demo/upload-demo.component.ts +0 -136
  159. package/src/lib/index.ts +0 -3
  160. package/src/lib/interceptors/credentials.interceptor.ts +0 -16
  161. package/src/lib/interceptors/index.ts +0 -6
  162. package/src/lib/interceptors/models/error-settings.model.ts +0 -22
  163. package/src/lib/interceptors/models/index.ts +0 -2
  164. package/src/lib/interceptors/proxy-debugger.interceptor.ts +0 -46
  165. package/src/lib/interceptors/request-error.interceptor.ts +0 -65
  166. package/src/lib/interceptors/request-header.interceptor.ts +0 -56
  167. package/src/lib/message-display/README.md +0 -509
  168. package/src/lib/message-display/index.ts +0 -4
  169. package/src/lib/message-display/models/action.model.ts +0 -27
  170. package/src/lib/message-display/models/communication-message.model.ts +0 -77
  171. package/src/lib/message-display/models/display-config.model.ts +0 -35
  172. package/src/lib/message-display/models/display-rule.interface.ts +0 -28
  173. package/src/lib/message-display/models/display-strategy.interface.ts +0 -8
  174. package/src/lib/message-display/models/index.ts +0 -6
  175. package/src/lib/message-display/models/slide.model.ts +0 -24
  176. package/src/lib/message-display/rules/default-display-rules.ts +0 -35
  177. package/src/lib/message-display/services/message-display-router.service.ts +0 -63
  178. package/src/lib/message-display/strategies/snackbar.strategy.ts +0 -46
  179. package/src/lib/models/batch-options.model.ts +0 -33
  180. package/src/lib/models/batch-progress.model.ts +0 -19
  181. package/src/lib/models/batch-request-state.model.ts +0 -40
  182. package/src/lib/models/batch-result.model.ts +0 -30
  183. package/src/lib/models/config-http-options.model.ts +0 -45
  184. package/src/lib/models/config-local-storage-options.model.ts +0 -27
  185. package/src/lib/models/config-options.model.ts +0 -27
  186. package/src/lib/models/config-token.model.ts +0 -9
  187. package/src/lib/models/data-type.enum.ts +0 -5
  188. package/src/lib/models/database-storage.model.ts +0 -24
  189. package/src/lib/models/index.ts +0 -16
  190. package/src/lib/models/retry-options.model.ts +0 -22
  191. package/src/lib/models/upload-validation-error.model.ts +0 -46
  192. package/src/lib/services/SQL-DixieJS service/dexie-query-executor.ts +0 -246
  193. package/src/lib/services/SQL-DixieJS service/dexie-sql.service.ts +0 -31
  194. package/src/lib/services/SQL-DixieJS service/index.ts +0 -4
  195. package/src/lib/services/SQL-DixieJS service/models/execution-plan.model.ts +0 -52
  196. package/src/lib/services/SQL-DixieJS service/models/index.ts +0 -3
  197. package/src/lib/services/SQL-DixieJS service/models/sql-errors.model.ts +0 -13
  198. package/src/lib/services/SQL-DixieJS service/models/sql-options.model.ts +0 -3
  199. package/src/lib/services/SQL-DixieJS service/query-planner.ts +0 -284
  200. package/src/lib/services/SQL-DixieJS service/schema-validator.ts +0 -217
  201. package/src/lib/services/SQL-DixieJS service/sql-parser.ts +0 -35
  202. package/src/lib/services/database-manager-service/database.manager.service.ts +0 -384
  203. package/src/lib/services/database-manager-service/db.storage.service.ts +0 -240
  204. package/src/lib/services/database-manager-service/index.ts +0 -4
  205. package/src/lib/services/database-manager-service/models/index.ts +0 -2
  206. package/src/lib/services/database-manager-service/models/table-schema.ts +0 -33
  207. package/src/lib/services/index.ts +0 -20
  208. package/src/lib/services/local-storage-manager-service/index.ts +0 -4
  209. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +0 -71
  210. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +0 -567
  211. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +0 -67
  212. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +0 -437
  213. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +0 -30
  214. package/src/lib/services/local-storage-manager-service/models/index.ts +0 -6
  215. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +0 -35
  216. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +0 -24
  217. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +0 -32
  218. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +0 -5
  219. package/src/lib/services/request-manager-services/README.md +0 -282
  220. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +0 -674
  221. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +0 -353
  222. package/src/lib/services/request-manager-services/http-manager.service.ts +0 -727
  223. package/src/lib/services/request-manager-services/index.ts +0 -8
  224. package/src/lib/services/request-manager-services/request-signals.service.ts +0 -372
  225. package/src/lib/services/request-manager-services/request.service.ts +0 -435
  226. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +0 -17
  227. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +0 -16
  228. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +0 -4
  229. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +0 -35
  230. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +0 -468
  231. package/src/lib/services/request-manager-state-service/http-manager-state.store.spec.ts +0 -665
  232. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +0 -2395
  233. package/src/lib/services/request-manager-state-service/index.ts +0 -3
  234. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +0 -86
  235. package/src/lib/services/request-manager-state-service/models/index.ts +0 -14
  236. package/src/lib/services/request-manager-state-service/models/operation-result.model.ts +0 -18
  237. package/src/lib/services/request-manager-state-service/models/parsing-result.model.ts +0 -21
  238. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +0 -37
  239. package/src/lib/services/request-manager-state-service/models/stream-config.model.ts +0 -20
  240. package/src/lib/services/request-manager-state-service/models/stream-event-metadata.model.ts +0 -23
  241. package/src/lib/services/request-manager-state-service/models/stream-event.model.ts +0 -23
  242. package/src/lib/services/request-manager-state-service/models/stream-output.model.ts +0 -23
  243. package/src/lib/services/request-manager-state-service/models/stream-progress.model.ts +0 -24
  244. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +0 -13
  245. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +0 -42
  246. package/src/lib/services/store-state-manager-service/index.ts +0 -4
  247. package/src/lib/services/store-state-manager-service/models/index.ts +0 -3
  248. package/src/lib/services/store-state-manager-service/models/state-operation-result.model.ts +0 -30
  249. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +0 -24
  250. package/src/lib/services/store-state-manager-service/store-state-manager-signals.service.ts +0 -169
  251. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +0 -153
  252. package/src/lib/services/utils/app.service.spec.ts +0 -25
  253. package/src/lib/services/utils/app.service.ts +0 -21
  254. package/src/lib/services/utils/encryption/README.md +0 -79
  255. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +0 -282
  256. package/src/lib/services/utils/encryption/encryption-test.service.ts +0 -39
  257. package/src/lib/services/utils/encryption/index.ts +0 -5
  258. package/src/lib/services/utils/encryption/random.ts +0 -81
  259. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +0 -106
  260. package/src/lib/services/utils/headers.service.spec.ts +0 -80
  261. package/src/lib/services/utils/headers.service.ts +0 -18
  262. package/src/lib/services/utils/index.ts +0 -9
  263. package/src/lib/services/utils/logger.service.ts +0 -90
  264. package/src/lib/services/utils/models/index.ts +0 -4
  265. package/src/lib/services/utils/models/normalized-request-options.model.ts +0 -24
  266. package/src/lib/services/utils/models/path-tracker-state.model.ts +0 -20
  267. package/src/lib/services/utils/models/query-params-tracker-options.model.ts +0 -24
  268. package/src/lib/services/utils/models/query-tracker-state.model.ts +0 -23
  269. package/src/lib/services/utils/object-merger.service.spec.ts +0 -18
  270. package/src/lib/services/utils/object-merger.service.ts +0 -78
  271. package/src/lib/services/utils/path-query.service.spec.ts +0 -117
  272. package/src/lib/services/utils/path-query.service.ts +0 -69
  273. package/src/lib/services/utils/query-params-tracker.service.ts +0 -442
  274. package/src/lib/services/utils/random-color.utils.ts +0 -83
  275. package/src/lib/services/utils/utils.service.spec.ts +0 -165
  276. package/src/lib/services/utils/utils.service.ts +0 -192
  277. package/src/lib/services/ws-manager-service/index.ts +0 -13
  278. package/src/lib/services/ws-manager-service/message-tracker-signals.service.ts +0 -147
  279. package/src/lib/services/ws-manager-service/message-tracker.service.ts +0 -477
  280. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +0 -29
  281. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +0 -24
  282. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +0 -36
  283. package/src/lib/services/ws-manager-service/models/channel-type.enum.ts +0 -6
  284. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +0 -5
  285. package/src/lib/services/ws-manager-service/models/index.ts +0 -10
  286. package/src/lib/services/ws-manager-service/models/notification-message.model.ts +0 -29
  287. package/src/lib/services/ws-manager-service/models/public-message.model.ts +0 -18
  288. package/src/lib/services/ws-manager-service/models/state-message.model.ts +0 -18
  289. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +0 -38
  290. package/src/lib/services/ws-manager-service/services/index.ts +0 -4
  291. package/src/lib/services/ws-manager-service/services/websocket-message.service.ts +0 -129
  292. package/src/lib/services/ws-manager-service/services/websocket.service.ts +0 -434
  293. package/src/lib/services/ws-manager-service/websocket-service/index.ts +0 -1
  294. package/src/lib/services/ws-manager-service/websocket-service/websocket-manager.service.ts +0 -716
  295. package/src/lib/services/ws-manager-service/websocket-services-complete.spec.ts +0 -596
  296. package/src/lib/services/ws-manager-service/websocket-signals-manager.service.ts +0 -141
  297. package/src/public-api.ts +0 -19
  298. package/tsconfig.lib.json +0 -34
  299. package/tsconfig.lib.prod.json +0 -10
  300. package/tsconfig.spec.json +0 -14
@@ -1,217 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { firstValueFrom } from 'rxjs';
3
- import { DatabaseManagerService } from '../database-manager-service/database.manager.service';
4
- import { DexieSqlOptions } from './models/sql-options.model';
5
- import { SqlValidationError } from './models/sql-errors.model';
6
- import { ParseResult } from './sql-parser';
7
-
8
- export interface TableSchemaInfo {
9
- pk: string;
10
- simpleIndexes: string[];
11
- compoundIndexes: string[][];
12
- }
13
-
14
- export interface ValidatedQuery {
15
- ast: any;
16
- schemas: Record<string, TableSchemaInfo>;
17
- aliases: Record<string, string>;
18
- }
19
-
20
- @Injectable({ providedIn: 'root' })
21
- export class SchemaValidator {
22
- private readonly _dbManager = inject(DatabaseManagerService);
23
-
24
- async validate(parsed: ParseResult, options: DexieSqlOptions = {}): Promise<ValidatedQuery> {
25
- const { ast } = parsed;
26
- const fromItems: any[] = (ast as any).from ?? [];
27
-
28
- // Build alias map and collect real table names
29
- const aliases: Record<string, string> = {};
30
- const tableNames: string[] = [];
31
- for (const item of fromItems) {
32
- if (item.table) {
33
- tableNames.push(item.table);
34
- aliases[item.as ?? item.table] = item.table;
35
- aliases[item.table] = item.table;
36
- }
37
- }
38
-
39
- if (tableNames.length === 0) {
40
- throw new SqlValidationError('No tables found in query');
41
- }
42
-
43
- // Fetch and parse schema for each table
44
- const schemas: Record<string, TableSchemaInfo> = {};
45
- for (const tableName of tableNames) {
46
- const schemaArr = await firstValueFrom(this._dbManager.getDatabaseTableSchema(tableName));
47
- if (!schemaArr || schemaArr.length === 0) {
48
- throw new SqlValidationError(`Table not found: "${tableName}"`);
49
- }
50
- schemas[tableName] = this._parseSchemaArray(schemaArr);
51
- }
52
-
53
- const defaultTable = tableNames[0];
54
-
55
- // Validate WHERE columns
56
- if ((ast as any).where) {
57
- this._validateWhereNode((ast as any).where, defaultTable, aliases, schemas);
58
- }
59
-
60
- // Validate ORDER BY columns
61
- for (const ob of ((ast as any).orderby ?? [])) {
62
- if (ob.expr?.type === 'column_ref') {
63
- const tbl = this._resolveTable(ob.expr.table, defaultTable, aliases);
64
- this._assertIndexed(ob.expr.column, tbl, schemas);
65
- }
66
- }
67
-
68
- // Validate JOIN ON columns
69
- for (const item of fromItems) {
70
- if (item.join && item.on) {
71
- this._validateJoinOn(item.on, tableNames, aliases, schemas);
72
- }
73
- }
74
-
75
- // Strict mode: AND without compound index → throw
76
- if (options.strict && (ast as any).where) {
77
- this._checkStrictAnd((ast as any).where, defaultTable, aliases, schemas);
78
- }
79
-
80
- return { ast, schemas, aliases };
81
- }
82
-
83
- // ─── Helpers ─────────────────────────────────────────────────────────────
84
-
85
- private _parseSchemaArray(schemaArr: string[]): TableSchemaInfo {
86
- const pk = schemaArr[0] ?? '';
87
- const simpleIndexes: string[] = [];
88
- const compoundIndexes: string[][] = [];
89
-
90
- for (let i = 1; i < schemaArr.length; i++) {
91
- const s = schemaArr[i];
92
- if (s.startsWith('[') && s.endsWith(']')) {
93
- compoundIndexes.push(s.slice(1, -1).split('+'));
94
- } else {
95
- simpleIndexes.push(s.replace(/^[*&]/, ''));
96
- }
97
- }
98
-
99
- return { pk, simpleIndexes, compoundIndexes };
100
- }
101
-
102
- private _isIndexed(col: string, tableName: string, schemas: Record<string, TableSchemaInfo>): boolean {
103
- const schema = schemas[tableName];
104
- if (!schema) return false;
105
- return col === schema.pk || schema.simpleIndexes.includes(col);
106
- }
107
-
108
- private _assertIndexed(col: string, tableName: string, schemas: Record<string, TableSchemaInfo>): void {
109
- if (!this._isIndexed(col, tableName, schemas)) {
110
- throw new SqlValidationError(`Column "${col}" on table "${tableName}" is not indexed`);
111
- }
112
- }
113
-
114
- private _resolveTable(tableRef: string | null, defaultTable: string, aliases: Record<string, string>): string {
115
- if (!tableRef) return defaultTable;
116
- return aliases[tableRef] ?? tableRef;
117
- }
118
-
119
- private _validateWhereNode(
120
- node: any,
121
- defaultTable: string,
122
- aliases: Record<string, string>,
123
- schemas: Record<string, TableSchemaInfo>,
124
- ): void {
125
- if (!node || node.type !== 'binary_expr') return;
126
-
127
- if (node.operator === 'AND' || node.operator === 'OR') {
128
- this._validateWhereNode(node.left, defaultTable, aliases, schemas);
129
- this._validateWhereNode(node.right, defaultTable, aliases, schemas);
130
- return;
131
- }
132
-
133
- if (node.left?.type === 'column_ref') {
134
- const tbl = this._resolveTable(node.left.table, defaultTable, aliases);
135
- this._assertIndexed(node.left.column, tbl, schemas);
136
- }
137
- }
138
-
139
- private _validateJoinOn(
140
- onNode: any,
141
- tableNames: string[],
142
- aliases: Record<string, string>,
143
- schemas: Record<string, TableSchemaInfo>,
144
- ): void {
145
- if (!onNode || onNode.type !== 'binary_expr' || onNode.operator !== '=') return;
146
-
147
- const l = onNode.left;
148
- const r = onNode.right;
149
- if (l?.type !== 'column_ref' || r?.type !== 'column_ref') return;
150
-
151
- const leftTable = tableNames[0];
152
- const rightTable = tableNames[tableNames.length - 1];
153
-
154
- // Resolve which ON side belongs to left vs right table
155
- const lTableResolved = aliases[l.table ?? ''] ?? l.table ?? leftTable;
156
- const rTableResolved = aliases[r.table ?? ''] ?? r.table ?? rightTable;
157
-
158
- const leftKey = lTableResolved === leftTable ? { col: l.column, table: lTableResolved } : { col: r.column, table: rTableResolved };
159
- const rightKey = lTableResolved === leftTable ? { col: r.column, table: rTableResolved } : { col: l.column, table: lTableResolved };
160
-
161
- // Left-side key: PK is exempt, otherwise must be indexed
162
- const leftSchema = schemas[leftKey.table];
163
- if (leftSchema && leftKey.col !== leftSchema.pk && !leftSchema.simpleIndexes.includes(leftKey.col)) {
164
- throw new SqlValidationError(`JOIN column "${leftKey.col}" on table "${leftKey.table}" must be indexed`);
165
- }
166
-
167
- // Right-side key: must be indexed (including PK counts)
168
- if (!this._isIndexed(rightKey.col, rightKey.table, schemas)) {
169
- throw new SqlValidationError(`JOIN column "${rightKey.col}" on table "${rightKey.table}" must be indexed`);
170
- }
171
- }
172
-
173
- private _checkStrictAnd(
174
- whereNode: any,
175
- defaultTable: string,
176
- aliases: Record<string, string>,
177
- schemas: Record<string, TableSchemaInfo>,
178
- ): void {
179
- if (!whereNode || whereNode.type !== 'binary_expr' || whereNode.operator !== 'AND') return;
180
-
181
- const leafCols = this._flattenAndCols(whereNode, defaultTable, aliases);
182
- if (leafCols.length < 2) return;
183
-
184
- const tableName = leafCols[0].table;
185
- const schema = schemas[tableName];
186
- if (!schema) return;
187
-
188
- const colNames = leafCols.map(c => c.col);
189
- const hasCompound = schema.compoundIndexes.some(
190
- ci => ci.length === colNames.length && colNames.every(c => ci.includes(c)),
191
- );
192
-
193
- if (!hasCompound) {
194
- throw new SqlValidationError(
195
- `Strict mode: compound index required for AND on columns [${colNames.join(', ')}]`,
196
- );
197
- }
198
- }
199
-
200
- private _flattenAndCols(
201
- node: any,
202
- defaultTable: string,
203
- aliases: Record<string, string>,
204
- ): Array<{ table: string; col: string }> {
205
- if (!node || node.type !== 'binary_expr') return [];
206
- if (node.operator === 'AND') {
207
- return [
208
- ...this._flattenAndCols(node.left, defaultTable, aliases),
209
- ...this._flattenAndCols(node.right, defaultTable, aliases),
210
- ];
211
- }
212
- if (node.left?.type === 'column_ref') {
213
- return [{ table: this._resolveTable(node.left.table, defaultTable, aliases), col: node.left.column }];
214
- }
215
- return [];
216
- }
217
- }
@@ -1,35 +0,0 @@
1
- import { Parser, TableColumnAst, AST } from 'node-sql-parser/build/mysql';
2
- import { SqlParseError } from './models/sql-errors.model';
3
-
4
- export interface ParseResult {
5
- ast: AST;
6
- tableList: string[];
7
- columnList: string[];
8
- }
9
-
10
- export class SqlParser {
11
- private readonly _parser = new Parser();
12
-
13
- parse(sql: string): ParseResult {
14
- let result: TableColumnAst;
15
- try {
16
- result = this._parser.parse(sql);
17
- } catch (e: any) {
18
- throw new SqlParseError(e.message ?? 'Failed to parse SQL');
19
- }
20
-
21
- const ast = Array.isArray(result.ast) ? result.ast[0] : result.ast;
22
- if (!ast) {
23
- throw new SqlParseError('SQL produced no AST — only SELECT statements are supported');
24
- }
25
- if ((ast as any).type !== 'select') {
26
- throw new SqlParseError('Only SELECT statements are supported');
27
- }
28
-
29
- return {
30
- ast,
31
- tableList: result.tableList ?? [],
32
- columnList: result.columnList ?? [],
33
- };
34
- }
35
- }
@@ -1,384 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { DbService } from './db.storage.service';
3
- import { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';
4
-
5
- import { TableSchemaDef } from './models/table-schema';
6
- import { EMPTY, from, Observable, of } from 'rxjs';
7
- import { catchError, map, switchMap, tap } from 'rxjs/operators';
8
-
9
- @Injectable({
10
- providedIn: 'root'
11
- })
12
- export class DatabaseManagerService extends DbService {
13
-
14
- private localStorageManager = inject(LocalStorageManagerService);
15
-
16
- constructor() {
17
- super()
18
- }
19
-
20
- getDatabaseTables() {
21
- return from(this.DBOpened()).pipe(
22
- map(() => this.tables.map((item: any) => item.name))
23
- )
24
- }
25
-
26
- databaseExists(): Observable<boolean> {
27
- return from(this.hasDatabase());
28
- }
29
-
30
- hasDatabaseTable(table: string): Observable<boolean> {
31
- const tableName = this.cleanTableName(table);
32
- return from(this.DBOpened()).pipe(
33
- map(() => {
34
- return this.tableExists(tableName)
35
- })
36
- )
37
- }
38
-
39
- getDatabaseTable(table: string): Observable<any> {
40
- const tableName = this.cleanTableName(table);
41
- return from(this.DBOpened()).pipe(
42
- map(() => {
43
- const found = this.getTable(tableName);
44
- if(!found) {
45
- console.warn('No Such Table:', tableName)
46
- return null;
47
- }
48
- return found;
49
- })
50
- )
51
- }
52
-
53
- getDatabaseTableSchema(table: string): Observable<string[]> {
54
- const tableName = this.cleanTableName(table);
55
- return this.getDatabaseTable(tableName).pipe(
56
- map((dbTable: any) => {
57
- if(!dbTable) return []
58
- const cols = dbTable.schema.indexes.map((col: any) => col.name)
59
- const pri = dbTable.schema.primKey.name
60
- return [pri, ...cols]
61
- })
62
- )
63
- }
64
-
65
- createDatabaseTable(tableDef: TableSchemaDef) {
66
- const tableName = this.cleanTableName(tableDef.table);
67
- return from(this.createTable(tableDef.table, tableDef.schema)).pipe(
68
- switchMap(() => from(this.DBOpened())),
69
- map((opened) => opened && this.tableExists(tableName)),
70
- catchError((error) => {
71
- console.error(`createDatabaseTable: failed for table '${tableName}'`, error);
72
- return of(false);
73
- })
74
- )
75
- }
76
-
77
- updateDatabaseTableSchema(tableDef: TableSchemaDef) {
78
- return from(this.createTable(tableDef.table, tableDef.schema)).pipe(
79
- switchMap(() => this.getDatabaseTable(tableDef.table))
80
- )
81
- }
82
-
83
- // CRUD
84
- findTableRecords(table: string, column: string, value: any) {
85
- const tableName = this.cleanTableName(table);
86
- return this.getDatabaseTable(tableName).pipe(
87
- switchMap((tableData: any) => {
88
- if (!tableData) {
89
- console.warn(`findTableRecords: Table '${tableName}' not found`);
90
- return from([]);
91
- }
92
- return from(tableData.where(column).equals(value).toArray());
93
- })
94
- );
95
- }
96
-
97
- findTableRecord(table: string, column: string, value: any) {
98
- const tableName = this.cleanTableName(table);
99
- return this.findTableRecords(tableName, column, value).pipe(
100
- map((records: any) => records && records.length > 0 ? records[0] : null)
101
- );
102
- }
103
-
104
- getTableRecords(table: string) {
105
- const tableName = this.cleanTableName(table);
106
- return this.getDatabaseTable(tableName).pipe(
107
- switchMap((tableData: any) => {
108
- if (!tableData) {
109
- console.warn(`getTableRecords: Table '${tableName}' not found`);
110
- return from([]);
111
- }
112
- return from(tableData.toArray());
113
- })
114
- );
115
- }
116
-
117
- getTableRecord(table: string, id: number) {
118
- const tableName = this.cleanTableName(table);
119
- return this.getDatabaseTable(tableName).pipe(
120
- switchMap((tableData: any) => {
121
- if (!tableData) {
122
- console.warn(`getTableRecord: Table '${tableName}' not found`);
123
- return from([null]);
124
- }
125
- return from(tableData.get(id)).pipe(
126
- map((record: any) => record || null)
127
- );
128
- })
129
- );
130
- }
131
-
132
- createTableRecord(table: string, record: any) {
133
- const tableName = this.cleanTableName(table);
134
- return this.createTableRecords(tableName, [record])
135
- .pipe(
136
- map((item: any) => item ? item[0] : null))
137
- }
138
-
139
- createTableRecords(table: string, records: any[]) {
140
- const tableName = this.cleanTableName(table);
141
-
142
- // Keep full object payload; Dexie stores non-indexed properties as well.
143
- const insertRecords = records.map((record: any) => {
144
- const payload = { ...(record || {}) };
145
- if (payload.id === undefined || payload.id === null || payload.id === '') {
146
- delete payload.id;
147
- }
148
- return payload;
149
- });
150
-
151
- const writeRecords = () => from(this.DBOpened()).pipe(
152
- switchMap((opened) => {
153
- if (!opened) {
154
- // console.error(`createTableRecords: DB not open. Cannot write to '${tableName}'.`);
155
- return EMPTY;
156
- }
157
-
158
- const tableInstance = this.getTable(tableName);
159
- if (!tableInstance) {
160
- // console.error(`createTableRecords: Table '${tableName}' does not exist in DB version ${this.verno}. Available:`, this.tables.map(t => t.name));
161
- return EMPTY;
162
- }
163
-
164
- // console.log(`createTableRecords: Bulk putting ${insertRecords.length} records into ${tableName}`);
165
-
166
- return from(tableInstance.bulkPut(insertRecords)).pipe(
167
- map(() => insertRecords)
168
- );
169
- })
170
- );
171
-
172
- const recreateMissingTableAndRetry = () => {
173
- const inferredSchema = this.inferSchemaFromRecords(insertRecords);
174
-
175
- if (!inferredSchema) {
176
- // console.warn(`createTableRecords: Could not infer schema for '${tableName}'. Retrying after DB reopen.`);
177
- return from(this.createNewDatabase()).pipe(
178
- switchMap(() => writeRecords())
179
- );
180
- }
181
-
182
- const tableDef = TableSchemaDef.adapt({ table: tableName, schema: inferredSchema });
183
-
184
- return this.createDatabaseTable(tableDef).pipe(
185
- switchMap((created) => {
186
- if (!created) {
187
- // console.warn(`createTableRecords: Failed to recreate table '${tableName}' from inferred schema. Retrying after DB reopen.`);
188
- return from(this.createNewDatabase()).pipe(
189
- switchMap(() => writeRecords())
190
- );
191
- }
192
-
193
- return writeRecords();
194
- })
195
- );
196
- };
197
-
198
- return writeRecords().pipe(
199
- catchError((error) => {
200
- if (!this.isMissingObjectStoreError(error)) {
201
- throw error;
202
- }
203
-
204
- return recreateMissingTableAndRetry().pipe(
205
- catchError((retryError) => {
206
- if (!this.isMissingObjectStoreError(retryError)) {
207
- console.error(`createTableRecords: Retry failed for '${tableName}'`, retryError);
208
- throw retryError;
209
- }
210
-
211
- console.warn(`createTableRecords: Table '${tableName}' still missing after retry. Deleting DB and reinitializing...`);
212
- return this.deleteAndReinitialize().pipe(
213
- switchMap((reinitialized) => {
214
- if (!reinitialized) {
215
- throw retryError;
216
- }
217
- const inferredSchema = this.inferSchemaFromRecords(insertRecords);
218
- if (!inferredSchema) {
219
- throw retryError;
220
- }
221
- const tableDef = TableSchemaDef.adapt({ table: tableName, schema: inferredSchema });
222
- return this.createDatabaseTable(tableDef).pipe(
223
- switchMap(() => writeRecords())
224
- );
225
- }),
226
- catchError((finalError) => {
227
- console.error(`createTableRecords: All retries exhausted for '${tableName}'`, finalError);
228
- throw finalError;
229
- })
230
- );
231
- })
232
- );
233
- })
234
- );
235
- }
236
-
237
- private inferSchemaFromRecords(records: any[]): string | null {
238
- if (!Array.isArray(records) || records.length === 0) {
239
- return null;
240
- }
241
-
242
- const sample = records.find((record: any) => record && typeof record === 'object');
243
- if (!sample) {
244
- return null;
245
- }
246
-
247
- const fields = Object.keys(sample)
248
- .filter((key) => key !== 'id')
249
- .filter((key) => {
250
- const value = sample[key];
251
- return value === null || ['string', 'number', 'boolean'].includes(typeof value);
252
- })
253
- .sort();
254
-
255
- return ['++id', ...fields].join(', ');
256
- }
257
-
258
- private isMissingObjectStoreError(error: any): boolean {
259
- const name = String(error?.name || '').toLowerCase();
260
- const innerName = String(error?.inner?.name || '').toLowerCase();
261
- const message = String(error?.message || error?.inner?.message || '').toLowerCase();
262
-
263
- return (
264
- name.includes('notfounderror') ||
265
- innerName.includes('notfounderror') ||
266
- message.includes('object store') ||
267
- message.includes('one of the specified object stores was not found')
268
- );
269
- }
270
-
271
- updateTableRecord(table: string, record: any) {
272
- const tableName = this.cleanTableName(table);
273
- return this.updateTableRecords(tableName, [record])
274
- .pipe(
275
- map(item => item.length > 0 ? item[0] : null)
276
- )
277
- }
278
-
279
- updateTableRecords(table: string, records: any[]) {
280
-
281
- const tableName = this.cleanTableName(table);
282
-
283
- return this.getDatabaseTable(tableName).pipe(
284
-
285
- switchMap((tableData: any) => {
286
-
287
- if (!tableData) {
288
- console.warn(`updateTableRecords: Table '${tableName}' not found`);
289
- return EMPTY;
290
- }
291
-
292
- const insertRecords = records.map((record: any) => {
293
- const payload = { ...(record || {}) };
294
- if (payload.id === undefined || payload.id === null || payload.id === '') {
295
- delete payload.id;
296
- }
297
- return payload;
298
- });
299
-
300
- return from(tableData.bulkPut(insertRecords)).pipe(
301
- map(() => insertRecords)
302
- );
303
-
304
- })
305
-
306
- )
307
-
308
- }
309
-
310
- deleteTableRecord<T>(table: string, id: number) {
311
- const tableName = this.cleanTableName(table);
312
- return this.deleteTableRecords(tableName, [id])
313
- .pipe(
314
- map(item => item.length > 0 ? item[0] : null)
315
- )
316
- }
317
-
318
- deleteTableRecords(table: string, ids: number[]) {
319
- const tableName = this.cleanTableName(table);
320
- return this.getDatabaseTable(tableName).pipe(
321
-
322
- switchMap((tableData: any) => {
323
-
324
- return this.getDatabaseTableSchema(tableName).pipe(
325
-
326
- switchMap((schema: string[]) => {
327
-
328
- console.log(`deleteTableRecords: Starting delete of ${ids.length} records from ${table}. IDs:`, ids);
329
-
330
- return from(tableData.bulkDelete(ids)).pipe(
331
- map(() => ids)
332
- );
333
-
334
- })
335
-
336
- )
337
-
338
- })
339
-
340
- )
341
-
342
- }
343
-
344
- clearTable(table: string) {
345
-
346
- const tableName = this.cleanTableName(table);
347
-
348
- try {
349
- const tableInstance = this.table(tableName);
350
- if (!tableInstance) {
351
- console.warn(`clearTable: Table '${tableName}' not found`);
352
- return of([]);
353
- }
354
-
355
- // console.log(`clearTable: Clearing table '${tableName}'...`);
356
-
357
- // Use table.clear() directly and wrap in Observable
358
- return from(Promise.resolve().then(() => {
359
- return tableInstance.clear();
360
- })).pipe(
361
- // tap(() => console.log(`clearTable: ✅ Table '${tableName}' cleared successfully`)),
362
- map(() => [])
363
- );
364
- } catch (error) {
365
- console.error(`clearTable: ❌ Error:`, error);
366
- return of([]);
367
- }
368
- }
369
-
370
- clearDatabase(): void {
371
- this.deleteAndReinitialize().pipe(
372
- tap(() => this.localStorageManager.clearAllStoredData()),
373
- catchError((error) => {
374
- console.error('clearDatabase: ❌ Error clearing database:', error);
375
- return of(false);
376
- })
377
- ).subscribe();
378
- }
379
-
380
- resetDatabase(): Observable<boolean> {
381
- return this.deleteAndReinitialize();
382
- }
383
-
384
- }