@futdevpro/fsm-dynamo 1.15.17 → 1.15.20

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 (543) hide show
  1. package/.cursor/rules/__assistant_guide.mdc +30 -30
  2. package/.cursor/rules/_ag_backend-structure.mdc +85 -85
  3. package/.cursor/rules/_ag_backend.mdc +16 -16
  4. package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
  5. package/.cursor/rules/_ag_frontend.mdc +39 -39
  6. package/.cursor/rules/_ag_import-rules.mdc +44 -44
  7. package/.cursor/rules/_ag_naming.mdc +115 -115
  8. package/.cursor/rules/_ag_should-be.mdc +6 -6
  9. package/.cursor/rules/ai_development_guide.md +60 -60
  10. package/.cursor/rules/cursor-rules.md +160 -160
  11. package/.cursor/rules/default-command.mdc +464 -464
  12. package/.cursor/rules/error_code_pattern.md +39 -39
  13. package/.cursor/rules/saved rule mcp server use.md +15 -15
  14. package/.dynamo/pipeline.cicd.config.json +128 -128
  15. package/.github/workflows/main.yml +433 -433
  16. package/.vscode/settings.json +11 -11
  17. package/LICENSE +21 -21
  18. package/__documentations/2026-06-01-fr047-fc-foundation.md +48 -0
  19. package/build/_models/data-models/errors.data-model.d.ts +43 -0
  20. package/build/_models/data-models/errors.data-model.d.ts.map +1 -1
  21. package/build/_models/data-models/errors.data-model.js +30 -0
  22. package/build/_models/data-models/errors.data-model.js.map +1 -1
  23. package/build/_modules/ai/_models/ai-model-capabilities.interface.d.ts +8 -0
  24. package/build/_modules/ai/_models/ai-model-capabilities.interface.d.ts.map +1 -1
  25. package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.d.ts.map +1 -1
  26. package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.js +3 -0
  27. package/build/_modules/ai/_modules/anthropic/_collections/aai-models.const.js.map +1 -1
  28. package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.d.ts.map +1 -1
  29. package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.js +1 -0
  30. package/build/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.js.map +1 -1
  31. package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.d.ts.map +1 -1
  32. package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.js +4 -0
  33. package/build/_modules/ai/_modules/google-ai/_collections/gai-models.const.js.map +1 -1
  34. package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.d.ts.map +1 -1
  35. package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.js +2 -0
  36. package/build/_modules/ai/_modules/local-ai/_collections/lai-models.const.js.map +1 -1
  37. package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.d.ts.map +1 -1
  38. package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.js +11 -0
  39. package/build/_modules/ai/_modules/open-ai/_collections/oai-models.const.js.map +1 -1
  40. package/build/_modules/socket/_models/sck-socket-event.control-model.js +1 -1
  41. package/eslint.config.js +4 -4
  42. package/nodemon.json +22 -22
  43. package/package.json +11 -11
  44. package/scripts/crypto/CRYPTO-STABILITY-SOLUTION.md +196 -196
  45. package/scripts/crypto/README.md +113 -113
  46. package/scripts/crypto/demo-crypto-stability.js +120 -120
  47. package/scripts/crypto/stress-test-crypto.js +379 -379
  48. package/scripts/run-coverage-tests.js +24 -24
  49. package/spec/support/helpers/ts-node-helper.js +9 -9
  50. package/spec/support/jasmine.coverage.json +23 -23
  51. package/spec/support/jasmine.json +24 -24
  52. package/src/_collections/constants/data-sizes.const.ts +40 -40
  53. package/src/_collections/constants/error-defaults.const.ts +20 -20
  54. package/src/_collections/constants/global-settings.const.ts +24 -24
  55. package/src/_collections/constants/numbers.const.ts +40 -40
  56. package/src/_collections/constants/times.const.ts +45 -45
  57. package/src/_collections/utils/array.util.spec.ts +306 -306
  58. package/src/_collections/utils/array.util.ts +813 -813
  59. package/src/_collections/utils/async.util.spec.ts +354 -354
  60. package/src/_collections/utils/async.util.ts +197 -197
  61. package/src/_collections/utils/data.util.spec.ts +345 -345
  62. package/src/_collections/utils/data.util.ts +226 -226
  63. package/src/_collections/utils/json-error-helper.util.spec.ts +521 -521
  64. package/src/_collections/utils/json-error-helper.util.ts +301 -301
  65. package/src/_collections/utils/log.util.spec.ts +975 -975
  66. package/src/_collections/utils/log.util.ts +665 -665
  67. package/src/_collections/utils/math/box-bounds.spec.ts +73 -73
  68. package/src/_collections/utils/math/box-bounds.util.ts +183 -183
  69. package/src/_collections/utils/math/math.util.spec.ts +94 -94
  70. package/src/_collections/utils/math/math.util.ts +141 -141
  71. package/src/_collections/utils/math/random.util.spec.ts +82 -82
  72. package/src/_collections/utils/math/random.util.ts +139 -139
  73. package/src/_collections/utils/math/trigonometry.util.spec.ts +57 -57
  74. package/src/_collections/utils/math/trigonometry.util.ts +102 -102
  75. package/src/_collections/utils/math/vector2.util.spec.ts +94 -94
  76. package/src/_collections/utils/math/vector2.util.ts +653 -653
  77. package/src/_collections/utils/object.util.spec.ts +646 -646
  78. package/src/_collections/utils/regex/password-regex.util.spec.ts +51 -51
  79. package/src/_collections/utils/regex/password-regex.util.ts +65 -65
  80. package/src/_collections/utils/regex/regex.util.spec.ts +42 -42
  81. package/src/_collections/utils/regex/regex.util.ts +6 -6
  82. package/src/_collections/utils/regex/username-regex.util.spec.ts +61 -61
  83. package/src/_collections/utils/regex/username-regex.util.ts +35 -35
  84. package/src/_collections/utils/round-list.util.spec.ts +79 -79
  85. package/src/_collections/utils/round-list.util.ts +162 -162
  86. package/src/_collections/utils/stack.util.spec.ts +372 -372
  87. package/src/_collections/utils/stack.util.ts +164 -164
  88. package/src/_collections/utils/string-case.util.spec.ts +441 -441
  89. package/src/_collections/utils/string-case.util.ts +362 -362
  90. package/src/_collections/utils/string.util.spec.ts +975 -975
  91. package/src/_collections/utils/string.util.ts +449 -449
  92. package/src/_collections/utils/time.util.spec.ts +50 -50
  93. package/src/_collections/utils/time.util.ts +481 -481
  94. package/src/_collections/utils/type-cloning-facility.util.spec.ts +51 -51
  95. package/src/_collections/utils/type-cloning-facility.util.ts +168 -168
  96. package/src/_collections/utils/utilities.util.spec.ts +201 -201
  97. package/src/_collections/utils/utilities.util.ts +68 -68
  98. package/src/_collections/utils/uuid.util.spec.ts +30 -30
  99. package/src/_collections/utils/uuid.util.ts +50 -50
  100. package/src/_enums/basic-property-type.enum.ts +20 -20
  101. package/src/_enums/data-model-type.enum.ts +29 -29
  102. package/src/_enums/environment-flag.enum.ts +28 -28
  103. package/src/_enums/error-level.enum.ts +28 -28
  104. package/src/_enums/http/http-call-type.enum.ts +43 -43
  105. package/src/_enums/http/http-event-type.enum.ts +40 -40
  106. package/src/_enums/http/http-response-type.enum.ts +18 -18
  107. package/src/_enums/log-style.enum.ts +44 -44
  108. package/src/_enums/server-connection-status.enum.ts +6 -6
  109. package/src/_enums/time/day-of-week.enum.ts +55 -55
  110. package/src/_enums/time/month.enum.ts +25 -25
  111. package/src/_enums/time/relative-date.enum.ts +24 -24
  112. package/src/_models/control-models/data-model-params.control-model.spec.ts +85 -85
  113. package/src/_models/control-models/data-model-params.control-model.ts +300 -300
  114. package/src/_models/control-models/data-property-params.control-model.spec.ts +93 -93
  115. package/src/_models/control-models/data-property-params.control-model.ts +201 -201
  116. package/src/_models/control-models/error.control-model.spec.ts +912 -912
  117. package/src/_models/control-models/error.control-model.ts +1215 -1215
  118. package/src/_models/control-models/http/http-error-response.control-model.spec.ts +116 -116
  119. package/src/_models/control-models/http/http-error-response.control-model.ts +52 -52
  120. package/src/_models/control-models/http/http-headers.control-model.spec.ts +25 -25
  121. package/src/_models/control-models/http/http-headers.control-model.ts +124 -124
  122. package/src/_models/control-models/http/http-response.model-base.spec.ts +46 -46
  123. package/src/_models/control-models/http/http-response.model-base.ts +57 -57
  124. package/src/_models/control-models/poll.control-model.spec.ts +63 -63
  125. package/src/_models/control-models/poll.control-model.ts +151 -151
  126. package/src/_models/control-models/range-value.control-model.spec.ts +187 -187
  127. package/src/_models/control-models/range-value.control-model.ts +289 -289
  128. package/src/_models/control-models/server-status.control-model.spec.ts +66 -66
  129. package/src/_models/control-models/server-status.control-model.ts +85 -85
  130. package/src/_models/control-models/service-endpoint-settings-base.control-model.spec.ts +145 -145
  131. package/src/_models/control-models/service-endpoint-settings-base.control-model.ts +186 -186
  132. package/src/_models/data-models/errors.data-model.spec.ts +71 -71
  133. package/src/_models/data-models/errors.data-model.ts +148 -91
  134. package/src/_models/data-models/metadata.data-model.spec.ts +184 -184
  135. package/src/_models/data-models/metadata.data-model.ts +128 -128
  136. package/src/_models/interfaces/box-bounds.interface.ts +7 -7
  137. package/src/_models/interfaces/environment/global-log-settings.interface.ts +86 -86
  138. package/src/_models/interfaces/environment/global-settings.interface.ts +47 -47
  139. package/src/_models/interfaces/error-defaults.interface.ts +11 -11
  140. package/src/_models/interfaces/paged.interface.ts +12 -12
  141. package/src/_models/interfaces/random-weight.interface.ts +7 -7
  142. package/src/_models/interfaces/route-settings.interface.ts +15 -15
  143. package/src/_models/interfaces/search-query.interface.ts +23 -23
  144. package/src/_models/interfaces/search-result.interface.ts +5 -5
  145. package/src/_models/interfaces/server-error-statistics.interface.ts +24 -24
  146. package/src/_models/interfaces/vector2.interface.ts +20 -20
  147. package/src/_models/types/db-filter.type.ts +110 -110
  148. package/src/_models/types/db-sort.type.ts +4 -4
  149. package/src/_models/types/ds-filter.type.ts +68 -68
  150. package/src/_models/types/ds-sort.type.ts +21 -21
  151. package/src/_modules/ai/_collections/ai-model-ref.util.ts +88 -88
  152. package/src/_modules/ai/_collections/ai-model-registry.util.spec.ts +37 -37
  153. package/src/_modules/ai/_collections/ai-model-registry.util.ts +30 -30
  154. package/src/_modules/ai/_enums/ai-message-role.enum.ts +7 -7
  155. package/src/_modules/ai/_enums/ai-model-type.enum.ts +7 -7
  156. package/src/_modules/ai/_enums/ai-provider.enum.ts +7 -7
  157. package/src/_modules/ai/_models/ai-call-settings.interface.ts +84 -84
  158. package/src/_modules/ai/_models/ai-embedding-request.interface.ts +20 -20
  159. package/src/_modules/ai/_models/ai-embedding-response.interface.ts +26 -26
  160. package/src/_modules/ai/_models/ai-llm-request.interface.ts +24 -24
  161. package/src/_modules/ai/_models/ai-llm-response.interface.ts +30 -30
  162. package/src/_modules/ai/_models/ai-message.interface.ts +12 -12
  163. package/src/_modules/ai/_models/ai-model-capabilities.interface.ts +35 -27
  164. package/src/_modules/ai/_models/ai-model-info.interface.ts +63 -63
  165. package/src/_modules/ai/_models/ai-model-settings-schema.interface.ts +52 -52
  166. package/src/_modules/ai/_models/ai-provider-capabilities.interface.ts +28 -28
  167. package/src/_modules/ai/_models/ai-settings.interface.ts +17 -17
  168. package/src/_modules/ai/_models/ai-tool-call.interface.ts +18 -18
  169. package/src/_modules/ai/_models/ai-tool-handler.type.ts +11 -11
  170. package/src/_modules/ai/_models/ai-tool-result.interface.ts +16 -16
  171. package/src/_modules/ai/_models/ai-tool.interface.ts +16 -16
  172. package/src/_modules/ai/_models/ai-user-provider-config.control-model.ts +29 -29
  173. package/src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts +81 -78
  174. package/src/_modules/ai/_modules/anthropic/_enums/aai-model.enum.ts +19 -19
  175. package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.spec.ts +28 -28
  176. package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.ts +23 -23
  177. package/src/_modules/ai/_modules/anthropic/_models/aai-client-options.interface.ts +10 -10
  178. package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.spec.ts +22 -22
  179. package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.ts +27 -27
  180. package/src/_modules/ai/_modules/anthropic/_models/aai-user-provider-config.control-model.ts +20 -20
  181. package/src/_modules/ai/_modules/anthropic/index.ts +14 -14
  182. package/src/_modules/ai/_modules/document-ai/_models/dai-embedding-info.interface.ts +12 -12
  183. package/src/_modules/ai/_modules/document-ai/_models/dai-vector-search-params.interface.ts +22 -22
  184. package/src/_modules/ai/_modules/document-ai/index.ts +4 -4
  185. package/src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts +34 -33
  186. package/src/_modules/ai/_modules/fdp-ai/_enums/fdpai-model.enum.ts +6 -6
  187. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-call-settings.control-model.ts +19 -19
  188. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-client-options.interface.ts +11 -11
  189. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-settings.control-model.ts +24 -24
  190. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-user-provider-config.control-model.ts +20 -20
  191. package/src/_modules/ai/_modules/fdp-ai/index.ts +11 -11
  192. package/src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts +99 -95
  193. package/src/_modules/ai/_modules/google-ai/_enums/gai-model.enum.ts +16 -16
  194. package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.spec.ts +28 -28
  195. package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.ts +21 -21
  196. package/src/_modules/ai/_modules/google-ai/_models/gai-client-options.interface.ts +8 -8
  197. package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.spec.ts +22 -22
  198. package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.ts +25 -25
  199. package/src/_modules/ai/_modules/google-ai/_models/gai-user-provider-config.control-model.ts +20 -20
  200. package/src/_modules/ai/_modules/google-ai/index.ts +14 -14
  201. package/src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts +53 -51
  202. package/src/_modules/ai/_modules/local-ai/_enums/lai-model.enum.ts +6 -6
  203. package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.spec.ts +28 -28
  204. package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.ts +18 -18
  205. package/src/_modules/ai/_modules/local-ai/_models/lai-client-options.interface.ts +9 -9
  206. package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.spec.ts +22 -22
  207. package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.ts +23 -23
  208. package/src/_modules/ai/_modules/local-ai/index.ts +14 -14
  209. package/src/_modules/ai/_modules/open-ai/_collections/oai-embedding-model-dimensions.const.ts +7 -7
  210. package/src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts +252 -241
  211. package/src/_modules/ai/_modules/open-ai/_enums/oai-model.enum.ts +179 -179
  212. package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.spec.ts +28 -28
  213. package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.ts +21 -21
  214. package/src/_modules/ai/_modules/open-ai/_models/oai-client-options.interface.ts +81 -81
  215. package/src/_modules/ai/_modules/open-ai/_models/oai-embedding-info.interface.ts +13 -13
  216. package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.spec.ts +22 -22
  217. package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.ts +25 -25
  218. package/src/_modules/ai/_modules/open-ai/_models/oai-user-provider-config.control-model.ts +21 -21
  219. package/src/_modules/ai/_modules/open-ai/index.ts +28 -28
  220. package/src/_modules/ai/index.ts +27 -27
  221. package/src/_modules/ci-tools/_enums/cit-ci-result-code.enum.ts +11 -11
  222. package/src/_modules/ci-tools/_enums/cit-ci-step-result-code.enum.ts +9 -9
  223. package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.spec.ts +58 -58
  224. package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.ts +77 -77
  225. package/src/_modules/ci-tools/_models/cit-ci-step-result.interface.ts +12 -12
  226. package/src/_modules/ci-tools/index.ts +8 -8
  227. package/src/_modules/crypto/_collections/crypto.util.simple.spec.ts +512 -512
  228. package/src/_modules/crypto/index.ts +13 -13
  229. package/src/_modules/custom-data/_collections/cud-module-settings.const.ts +21 -21
  230. package/src/_modules/custom-data/_models/cud.data-model.spec.ts +38 -38
  231. package/src/_modules/custom-data/_models/cud.data-model.ts +39 -39
  232. package/src/_modules/custom-data/index.ts +10 -10
  233. package/src/_modules/data-handler/_models/data-handler-settings.control-model.spec.ts +110 -110
  234. package/src/_modules/data-handler/_models/data-handler-settings.control-model.ts +110 -110
  235. package/src/_modules/data-handler/_models/data-handler.control-model.spec.ts +445 -445
  236. package/src/_modules/data-handler/_models/data-handler.control-model.ts +459 -459
  237. package/src/_modules/data-handler/_models/data-list-handler.control-model.spec.ts +263 -263
  238. package/src/_modules/data-handler/_models/data-list-handler.control-model.ts +252 -252
  239. package/src/_modules/data-handler/_models/data-search-handler.control-model.spec.ts +417 -417
  240. package/src/_modules/data-handler/_models/data-search-handler.control-model.ts +390 -390
  241. package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.spec.ts +374 -374
  242. package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.ts +274 -274
  243. package/src/_modules/data-handler/index.ts +6 -6
  244. package/src/_modules/location/_collections/assets/country-codes-ISO-3166.json +3239 -3239
  245. package/src/_modules/location/_collections/assets/country-divisions-ISO-3166-all-list.json +19035 -19035
  246. package/src/_modules/location/_collections/assets/country-divisions-ISO-3166.json +4993 -4993
  247. package/src/_modules/location/_collections/assets/country-phone-codes.json +1203 -1203
  248. package/src/_modules/location/_collections/assets/country-subdivisions/afghanistan.json +137 -137
  249. package/src/_modules/location/_collections/assets/country-subdivisions/albania.json +49 -49
  250. package/src/_modules/location/_collections/assets/country-subdivisions/algeria.json +193 -193
  251. package/src/_modules/location/_collections/assets/country-subdivisions/andorra.json +29 -29
  252. package/src/_modules/location/_collections/assets/country-subdivisions/angola.json +73 -73
  253. package/src/_modules/location/_collections/assets/country-subdivisions/antigua-and-barbuda.json +33 -33
  254. package/src/_modules/location/_collections/assets/country-subdivisions/argentina.json +97 -97
  255. package/src/_modules/location/_collections/assets/country-subdivisions/armenia.json +45 -45
  256. package/src/_modules/location/_collections/assets/country-subdivisions/australia.json +33 -33
  257. package/src/_modules/location/_collections/assets/country-subdivisions/austria.json +37 -37
  258. package/src/_modules/location/_collections/assets/country-subdivisions/azerbaijan.json +5 -5
  259. package/src/_modules/location/_collections/assets/country-subdivisions/bahamas.json +125 -125
  260. package/src/_modules/location/_collections/assets/country-subdivisions/bahrain.json +21 -21
  261. package/src/_modules/location/_collections/assets/country-subdivisions/bangladesh.json +29 -29
  262. package/src/_modules/location/_collections/assets/country-subdivisions/barbados.json +45 -45
  263. package/src/_modules/location/_collections/assets/country-subdivisions/belarus.json +29 -29
  264. package/src/_modules/location/_collections/assets/country-subdivisions/belgium.json +13 -13
  265. package/src/_modules/location/_collections/assets/country-subdivisions/belize.json +25 -25
  266. package/src/_modules/location/_collections/assets/country-subdivisions/benin.json +49 -49
  267. package/src/_modules/location/_collections/assets/country-subdivisions/bhutan.json +81 -81
  268. package/src/_modules/location/_collections/assets/country-subdivisions/bolivia.json +37 -37
  269. package/src/_modules/location/_collections/assets/country-subdivisions/bosnia-and-herzegovina.json +13 -13
  270. package/src/_modules/location/_collections/assets/country-subdivisions/botswana.json +65 -65
  271. package/src/_modules/location/_collections/assets/country-subdivisions/brazil.json +109 -109
  272. package/src/_modules/location/_collections/assets/country-subdivisions/brunei-darussalam.json +17 -17
  273. package/src/_modules/location/_collections/assets/country-subdivisions/bulgaria.json +113 -113
  274. package/src/_modules/location/_collections/assets/country-subdivisions/burkina-faso.json +53 -53
  275. package/src/_modules/location/_collections/assets/country-subdivisions/burundi.json +69 -69
  276. package/src/_modules/location/_collections/assets/country-subdivisions/cambodia.json +97 -97
  277. package/src/_modules/location/_collections/assets/country-subdivisions/cameroon.json +41 -41
  278. package/src/_modules/location/_collections/assets/country-subdivisions/canada.json +79 -79
  279. package/src/_modules/location/_collections/assets/country-subdivisions/cape-verde.json +9 -9
  280. package/src/_modules/location/_collections/assets/country-subdivisions/central-african-republic.json +69 -69
  281. package/src/_modules/location/_collections/assets/country-subdivisions/chad.json +89 -89
  282. package/src/_modules/location/_collections/assets/country-subdivisions/chile.json +61 -61
  283. package/src/_modules/location/_collections/assets/country-subdivisions/china.json +205 -205
  284. package/src/_modules/location/_collections/assets/country-subdivisions/colombia.json +133 -133
  285. package/src/_modules/location/_collections/assets/country-subdivisions/comoros.json +13 -13
  286. package/src/_modules/location/_collections/assets/country-subdivisions/congo-the-democratic-republic-of-the.json +45 -45
  287. package/src/_modules/location/_collections/assets/country-subdivisions/congo.json +49 -49
  288. package/src/_modules/location/_collections/assets/country-subdivisions/costa-rica.json +29 -29
  289. package/src/_modules/location/_collections/assets/country-subdivisions/cote-d-ivoire-republic-of.json +77 -77
  290. package/src/_modules/location/_collections/assets/country-subdivisions/croatia.json +85 -85
  291. package/src/_modules/location/_collections/assets/country-subdivisions/cuba.json +65 -65
  292. package/src/_modules/location/_collections/assets/country-subdivisions/cyprus.json +25 -25
  293. package/src/_modules/location/_collections/assets/country-subdivisions/czech-republic.json +57 -57
  294. package/src/_modules/location/_collections/assets/country-subdivisions/denmark.json +21 -21
  295. package/src/_modules/location/_collections/assets/country-subdivisions/djibouti.json +25 -25
  296. package/src/_modules/location/_collections/assets/country-subdivisions/dominica.json +41 -41
  297. package/src/_modules/location/_collections/assets/country-subdivisions/dominican-republic.json +41 -41
  298. package/src/_modules/location/_collections/assets/country-subdivisions/ecuador.json +97 -97
  299. package/src/_modules/location/_collections/assets/country-subdivisions/egypt.json +117 -117
  300. package/src/_modules/location/_collections/assets/country-subdivisions/el-salvador.json +57 -57
  301. package/src/_modules/location/_collections/assets/country-subdivisions/equatorial-guinea.json +9 -9
  302. package/src/_modules/location/_collections/assets/country-subdivisions/eritrea.json +25 -25
  303. package/src/_modules/location/_collections/assets/country-subdivisions/estonia.json +61 -61
  304. package/src/_modules/location/_collections/assets/country-subdivisions/ethiopia.json +45 -45
  305. package/src/_modules/location/_collections/assets/country-subdivisions/fiji.json +21 -21
  306. package/src/_modules/location/_collections/assets/country-subdivisions/finland.json +77 -77
  307. package/src/_modules/location/_collections/assets/country-subdivisions/france.json +133 -133
  308. package/src/_modules/location/_collections/assets/country-subdivisions/gabon.json +37 -37
  309. package/src/_modules/location/_collections/assets/country-subdivisions/gambia.json +25 -25
  310. package/src/_modules/location/_collections/assets/country-subdivisions/georgia.json +49 -49
  311. package/src/_modules/location/_collections/assets/country-subdivisions/germany.json +65 -65
  312. package/src/_modules/location/_collections/assets/country-subdivisions/ghana.json +41 -41
  313. package/src/_modules/location/_collections/assets/country-subdivisions/greece.json +53 -53
  314. package/src/_modules/location/_collections/assets/country-subdivisions/greenland.json +17 -17
  315. package/src/_modules/location/_collections/assets/country-subdivisions/grenada.json +29 -29
  316. package/src/_modules/location/_collections/assets/country-subdivisions/guatemala.json +89 -89
  317. package/src/_modules/location/_collections/assets/country-subdivisions/guinea-bissau.json +13 -13
  318. package/src/_modules/location/_collections/assets/country-subdivisions/guinea.json +33 -33
  319. package/src/_modules/location/_collections/assets/country-subdivisions/guyana.json +41 -41
  320. package/src/_modules/location/_collections/assets/country-subdivisions/haiti.json +41 -41
  321. package/src/_modules/location/_collections/assets/country-subdivisions/honduras.json +73 -73
  322. package/src/_modules/location/_collections/assets/country-subdivisions/hong-kong.json +4 -4
  323. package/src/_modules/location/_collections/assets/country-subdivisions/hungary.json +173 -173
  324. package/src/_modules/location/_collections/assets/country-subdivisions/iceland.json +37 -37
  325. package/src/_modules/location/_collections/assets/country-subdivisions/india.json +181 -181
  326. package/src/_modules/location/_collections/assets/country-subdivisions/indonesia.json +29 -29
  327. package/src/_modules/location/_collections/assets/country-subdivisions/iran-islamic-republic-of.json +125 -125
  328. package/src/_modules/location/_collections/assets/country-subdivisions/iraq.json +73 -73
  329. package/src/_modules/location/_collections/assets/country-subdivisions/ireland.json +17 -17
  330. package/src/_modules/location/_collections/assets/country-subdivisions/israel.json +25 -25
  331. package/src/_modules/location/_collections/assets/country-subdivisions/italy.json +81 -81
  332. package/src/_modules/location/_collections/assets/country-subdivisions/jamaica.json +57 -57
  333. package/src/_modules/location/_collections/assets/country-subdivisions/japan.json +189 -189
  334. package/src/_modules/location/_collections/assets/country-subdivisions/jordan.json +49 -49
  335. package/src/_modules/location/_collections/assets/country-subdivisions/kazakhstan.json +65 -65
  336. package/src/_modules/location/_collections/assets/country-subdivisions/kenya.json +33 -33
  337. package/src/_modules/location/_collections/assets/country-subdivisions/kiribati.json +13 -13
  338. package/src/_modules/location/_collections/assets/country-subdivisions/korea-democratic-people-s-republic-of.json +45 -45
  339. package/src/_modules/location/_collections/assets/country-subdivisions/korea-republic-of.json +69 -69
  340. package/src/_modules/location/_collections/assets/country-subdivisions/kuwait.json +25 -25
  341. package/src/_modules/location/_collections/assets/country-subdivisions/kyrgyzstan.json +33 -33
  342. package/src/_modules/location/_collections/assets/country-subdivisions/lao-people-s-democratic-republic.json +73 -73
  343. package/src/_modules/location/_collections/assets/country-subdivisions/latvia.json +477 -477
  344. package/src/_modules/location/_collections/assets/country-subdivisions/lebanon.json +33 -33
  345. package/src/_modules/location/_collections/assets/country-subdivisions/lesotho.json +41 -41
  346. package/src/_modules/location/_collections/assets/country-subdivisions/liberia.json +61 -61
  347. package/src/_modules/location/_collections/assets/country-subdivisions/libyan-arab-jamahiriya.json +89 -89
  348. package/src/_modules/location/_collections/assets/country-subdivisions/liechtenstein.json +45 -45
  349. package/src/_modules/location/_collections/assets/country-subdivisions/lithuania.json +41 -41
  350. package/src/_modules/location/_collections/assets/country-subdivisions/luxembourg.json +13 -13
  351. package/src/_modules/location/_collections/assets/country-subdivisions/macedonia-the-former-yugoslav-republic-of.json +337 -337
  352. package/src/_modules/location/_collections/assets/country-subdivisions/madagascar.json +25 -25
  353. package/src/_modules/location/_collections/assets/country-subdivisions/malawi.json +13 -13
  354. package/src/_modules/location/_collections/assets/country-subdivisions/malaysia.json +81 -81
  355. package/src/_modules/location/_collections/assets/country-subdivisions/maldives.json +33 -33
  356. package/src/_modules/location/_collections/assets/country-subdivisions/mali.json +37 -37
  357. package/src/_modules/location/_collections/assets/country-subdivisions/malta.json +273 -273
  358. package/src/_modules/location/_collections/assets/country-subdivisions/marshall-islands.json +9 -9
  359. package/src/_modules/location/_collections/assets/country-subdivisions/mauritania.json +53 -53
  360. package/src/_modules/location/_collections/assets/country-subdivisions/mauritius.json +69 -69
  361. package/src/_modules/location/_collections/assets/country-subdivisions/mexico.json +161 -161
  362. package/src/_modules/location/_collections/assets/country-subdivisions/micronesia-federated-states-of.json +17 -17
  363. package/src/_modules/location/_collections/assets/country-subdivisions/moldova-republic-of.json +149 -149
  364. package/src/_modules/location/_collections/assets/country-subdivisions/monaco.json +69 -69
  365. package/src/_modules/location/_collections/assets/country-subdivisions/mongolia.json +89 -89
  366. package/src/_modules/location/_collections/assets/country-subdivisions/montenegro.json +93 -93
  367. package/src/_modules/location/_collections/assets/country-subdivisions/morocco.json +65 -65
  368. package/src/_modules/location/_collections/assets/country-subdivisions/mozambique.json +45 -45
  369. package/src/_modules/location/_collections/assets/country-subdivisions/myanmar.json +57 -57
  370. package/src/_modules/location/_collections/assets/country-subdivisions/namibia.json +57 -57
  371. package/src/_modules/location/_collections/assets/country-subdivisions/nauru.json +57 -57
  372. package/src/_modules/location/_collections/assets/country-subdivisions/nepal.json +21 -21
  373. package/src/_modules/location/_collections/assets/country-subdivisions/netherlands.json +91 -91
  374. package/src/_modules/location/_collections/assets/country-subdivisions/new-zealand.json +111 -111
  375. package/src/_modules/location/_collections/assets/country-subdivisions/nicaragua.json +69 -69
  376. package/src/_modules/location/_collections/assets/country-subdivisions/niger.json +33 -33
  377. package/src/_modules/location/_collections/assets/country-subdivisions/nigeria.json +149 -149
  378. package/src/_modules/location/_collections/assets/country-subdivisions/norway.json +85 -85
  379. package/src/_modules/location/_collections/assets/country-subdivisions/oman.json +37 -37
  380. package/src/_modules/location/_collections/assets/country-subdivisions/pakistan.json +33 -33
  381. package/src/_modules/location/_collections/assets/country-subdivisions/palau.json +65 -65
  382. package/src/_modules/location/_collections/assets/country-subdivisions/palestinian-territory-occupied.json +65 -65
  383. package/src/_modules/location/_collections/assets/country-subdivisions/panama.json +53 -53
  384. package/src/_modules/location/_collections/assets/country-subdivisions/papua-new-guinea.json +81 -81
  385. package/src/_modules/location/_collections/assets/country-subdivisions/paraguay.json +73 -73
  386. package/src/_modules/location/_collections/assets/country-subdivisions/peru.json +105 -105
  387. package/src/_modules/location/_collections/assets/country-subdivisions/philippines.json +69 -69
  388. package/src/_modules/location/_collections/assets/country-subdivisions/poland.json +65 -65
  389. package/src/_modules/location/_collections/assets/country-subdivisions/portugal.json +81 -81
  390. package/src/_modules/location/_collections/assets/country-subdivisions/qatar.json +29 -29
  391. package/src/_modules/location/_collections/assets/country-subdivisions/romania.json +169 -169
  392. package/src/_modules/location/_collections/assets/country-subdivisions/russian-federation.json +499 -499
  393. package/src/_modules/location/_collections/assets/country-subdivisions/rwanda.json +21 -21
  394. package/src/_modules/location/_collections/assets/country-subdivisions/saint-helena-ascension-and-tristan-da-cunha.json +13 -13
  395. package/src/_modules/location/_collections/assets/country-subdivisions/saint-kitts-and-nevis.json +9 -9
  396. package/src/_modules/location/_collections/assets/country-subdivisions/saint-lucia.json +45 -45
  397. package/src/_modules/location/_collections/assets/country-subdivisions/saint-vincent-and-the-grenadines.json +25 -25
  398. package/src/_modules/location/_collections/assets/country-subdivisions/samoa.json +45 -45
  399. package/src/_modules/location/_collections/assets/country-subdivisions/san-marino.json +37 -37
  400. package/src/_modules/location/_collections/assets/country-subdivisions/sao-tome-and-principe.json +9 -9
  401. package/src/_modules/location/_collections/assets/country-subdivisions/saudi-arabia.json +53 -53
  402. package/src/_modules/location/_collections/assets/country-subdivisions/senegal.json +57 -57
  403. package/src/_modules/location/_collections/assets/country-subdivisions/serbia.json +9 -9
  404. package/src/_modules/location/_collections/assets/country-subdivisions/seychelles.json +101 -101
  405. package/src/_modules/location/_collections/assets/country-subdivisions/sierra-leone.json +17 -17
  406. package/src/_modules/location/_collections/assets/country-subdivisions/singapore.json +21 -21
  407. package/src/_modules/location/_collections/assets/country-subdivisions/slovakia.json +33 -33
  408. package/src/_modules/location/_collections/assets/country-subdivisions/slovenia.json +841 -841
  409. package/src/_modules/location/_collections/assets/country-subdivisions/solomon-islands.json +41 -41
  410. package/src/_modules/location/_collections/assets/country-subdivisions/somalia.json +73 -73
  411. package/src/_modules/location/_collections/assets/country-subdivisions/south-africa.json +37 -37
  412. package/src/_modules/location/_collections/assets/country-subdivisions/south-sudan.json +41 -41
  413. package/src/_modules/location/_collections/assets/country-subdivisions/spain.json +346 -346
  414. package/src/_modules/location/_collections/assets/country-subdivisions/sri-lanka.json +37 -37
  415. package/src/_modules/location/_collections/assets/country-subdivisions/sudan.json +69 -69
  416. package/src/_modules/location/_collections/assets/country-subdivisions/suriname.json +41 -41
  417. package/src/_modules/location/_collections/assets/country-subdivisions/swaziland.json +17 -17
  418. package/src/_modules/location/_collections/assets/country-subdivisions/sweden.json +85 -85
  419. package/src/_modules/location/_collections/assets/country-subdivisions/switzerland.json +105 -105
  420. package/src/_modules/location/_collections/assets/country-subdivisions/syrian-arab-republic.json +57 -57
  421. package/src/_modules/location/_collections/assets/country-subdivisions/taiwan-province-of-china.json +93 -93
  422. package/src/_modules/location/_collections/assets/country-subdivisions/tajikistan.json +17 -17
  423. package/src/_modules/location/_collections/assets/country-subdivisions/tanzania-united-republic-of.json +105 -105
  424. package/src/_modules/location/_collections/assets/country-subdivisions/thailand.json +313 -313
  425. package/src/_modules/location/_collections/assets/country-subdivisions/timor-leste.json +53 -53
  426. package/src/_modules/location/_collections/assets/country-subdivisions/togo.json +21 -21
  427. package/src/_modules/location/_collections/assets/country-subdivisions/tonga.json +21 -21
  428. package/src/_modules/location/_collections/assets/country-subdivisions/trinidad-and-tobago.json +65 -65
  429. package/src/_modules/location/_collections/assets/country-subdivisions/tunisia.json +97 -97
  430. package/src/_modules/location/_collections/assets/country-subdivisions/turkey.json +325 -325
  431. package/src/_modules/location/_collections/assets/country-subdivisions/turkmenistan.json +25 -25
  432. package/src/_modules/location/_collections/assets/country-subdivisions/tuvalu.json +33 -33
  433. package/src/_modules/location/_collections/assets/country-subdivisions/uganda.json +17 -17
  434. package/src/_modules/location/_collections/assets/country-subdivisions/ukraine.json +109 -109
  435. package/src/_modules/location/_collections/assets/country-subdivisions/united-arab-emirates.json +29 -29
  436. package/src/_modules/location/_collections/assets/country-subdivisions/united-kingdom.json +1196 -1196
  437. package/src/_modules/location/_collections/assets/country-subdivisions/united-states-minor-outlying-islands.json +37 -37
  438. package/src/_modules/location/_collections/assets/country-subdivisions/united-states.json +286 -286
  439. package/src/_modules/location/_collections/assets/country-subdivisions/uruguay.json +77 -77
  440. package/src/_modules/location/_collections/assets/country-subdivisions/uzbekistan.json +57 -57
  441. package/src/_modules/location/_collections/assets/country-subdivisions/vanuatu.json +25 -25
  442. package/src/_modules/location/_collections/assets/country-subdivisions/venezuela.json +101 -101
  443. package/src/_modules/location/_collections/assets/country-subdivisions/viet-nam.json +257 -257
  444. package/src/_modules/location/_collections/assets/country-subdivisions/yemen.json +85 -85
  445. package/src/_modules/location/_collections/assets/country-subdivisions/zambia.json +37 -37
  446. package/src/_modules/location/_collections/assets/country-subdivisions/zimbabwe.json +41 -41
  447. package/src/_modules/location/_collections/loc-country-divisions.const.ts +10 -10
  448. package/src/_modules/location/_collections/loc-country-isos.const.ts +8 -8
  449. package/src/_modules/location/_collections/loc-regions.util.spec.ts +61 -61
  450. package/src/_modules/location/_collections/loc-regions.util.ts +137 -137
  451. package/src/_modules/location/_collections/loc.util.spec.ts +52 -52
  452. package/src/_modules/location/_collections/loc.util.ts +74 -74
  453. package/src/_modules/location/_enums/loc-region.enum.ts +14 -14
  454. package/src/_modules/location/_enums/loc-sub-region.enum.ts +31 -31
  455. package/src/_modules/location/_enums/loc-subdivision-region-type.enum.ts +47 -47
  456. package/src/_modules/location/_models/loc-coordinates.interface.ts +7 -7
  457. package/src/_modules/location/_models/loc-country-division.interface.ts +8 -8
  458. package/src/_modules/location/_models/loc-country-iso.interface.ts +23 -23
  459. package/src/_modules/location/_models/loc-country-phone-code.interface.ts +9 -9
  460. package/src/_modules/location/_models/loc-division-collection.interface.ts +12 -12
  461. package/src/_modules/location/_models/loc-division-region-data.interface.ts +9 -9
  462. package/src/_modules/location/_models/loc-geo-ip-location.interface.ts +27 -27
  463. package/src/_modules/location/index.ts +22 -22
  464. package/src/_modules/messaging/README.md +279 -279
  465. package/src/_modules/messaging/_collections/msg-module-settings.const.ts +46 -46
  466. package/src/_modules/messaging/_enums/msg-attachment-type.enum.ts +26 -26
  467. package/src/_modules/messaging/_enums/msg-delivery-status.enum.ts +17 -17
  468. package/src/_modules/messaging/_enums/msg-event-key.enum.ts +31 -31
  469. package/src/_modules/messaging/_enums/msg-participant-role.enum.ts +20 -20
  470. package/src/_modules/messaging/_enums/msg-provider-type.enum.ts +7 -7
  471. package/src/_modules/messaging/_enums/msg-type.enum.ts +23 -23
  472. package/src/_modules/messaging/_models/msg-attachment.interface.ts +46 -46
  473. package/src/_modules/messaging/_models/msg-conversation.data-model.spec.ts +69 -69
  474. package/src/_modules/messaging/_models/msg-conversation.data-model.ts +96 -96
  475. package/src/_modules/messaging/_models/msg-mention.interface.ts +29 -29
  476. package/src/_modules/messaging/_models/msg-message.data-model.spec.ts +79 -79
  477. package/src/_modules/messaging/_models/msg-message.data-model.ts +127 -127
  478. package/src/_modules/messaging/_models/msg-participant.interface.ts +46 -46
  479. package/src/_modules/messaging/_models/msg-reaction.interface.ts +20 -20
  480. package/src/_modules/messaging/_models/msg-thread-info.interface.ts +35 -35
  481. package/src/_modules/messaging/_modules/agent/_enums/agt-process-step-type.enum.ts +35 -35
  482. package/src/_modules/messaging/_modules/agent/_enums/agt-tool-status.enum.ts +23 -23
  483. package/src/_modules/messaging/_modules/agent/_models/agt-process-step.interface.ts +55 -55
  484. package/src/_modules/messaging/_modules/agent/_models/agt-reasoning-info.interface.ts +26 -26
  485. package/src/_modules/messaging/_modules/agent/_models/agt-tool-usage.interface.ts +37 -37
  486. package/src/_modules/messaging/_modules/agent/index.ts +8 -8
  487. package/src/_modules/messaging/index.ts +28 -28
  488. package/src/_modules/pipe/_collections/pip-transforms.const.ts +42 -42
  489. package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.spec.ts +47 -47
  490. package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.ts +41 -41
  491. package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.spec.ts +39 -39
  492. package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.ts +30 -30
  493. package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.spec.ts +41 -41
  494. package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.ts +36 -36
  495. package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.spec.ts +62 -62
  496. package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.ts +17 -17
  497. package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.spec.ts +34 -34
  498. package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.ts +25 -25
  499. package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.spec.ts +67 -67
  500. package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.ts +226 -226
  501. package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.spec.ts +28 -28
  502. package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.ts +21 -21
  503. package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.spec.ts +59 -59
  504. package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.ts +106 -106
  505. package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.spec.ts +31 -31
  506. package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.ts +35 -35
  507. package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.spec.ts +44 -44
  508. package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.ts +23 -23
  509. package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.spec.ts +21 -21
  510. package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.ts +33 -33
  511. package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.spec.ts +62 -62
  512. package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.ts +80 -80
  513. package/src/_modules/pipe/_enums/pip-range-pipe-setting.enum.ts +15 -15
  514. package/src/_modules/pipe/_enums/pip.enum.ts +65 -65
  515. package/src/_modules/pipe/_models/pip-multi-pipe-settings.type.ts +8 -8
  516. package/src/_modules/pipe/_models/pip-transforms.interface.ts +30 -30
  517. package/src/_modules/pipe/index.ts +30 -30
  518. package/src/_modules/socket/_enums/sck-event-key.enum.ts +21 -21
  519. package/src/_modules/socket/_models/sck-client-params.control-model.spec.ts +67 -67
  520. package/src/_modules/socket/_models/sck-client-params.control-model.ts +50 -50
  521. package/src/_modules/socket/_models/sck-socket-event.control-model.spec.ts +66 -66
  522. package/src/_modules/socket/_models/sck-socket-event.control-model.ts +172 -172
  523. package/src/_modules/socket/_services/sck-client.service-base.spec.ts +99 -99
  524. package/src/_modules/socket/_services/sck-client.service-base.ts +353 -353
  525. package/src/_modules/socket/index.ts +14 -14
  526. package/src/_modules/test/_collections/tst-module-settings.const.ts +67 -67
  527. package/src/_modules/test/index.ts +5 -5
  528. package/src/_modules/usage/_collections/usg-module-settings.const.ts +33 -33
  529. package/src/_modules/usage/_models/usg-action.control-model.spec.ts +27 -27
  530. package/src/_modules/usage/_models/usg-action.control-model.ts +28 -28
  531. package/src/_modules/usage/_models/usg-daily-usage-data.control-model.spec.ts +36 -36
  532. package/src/_modules/usage/_models/usg-daily-usage-data.control-model.ts +35 -35
  533. package/src/_modules/usage/_models/usg-data.control-model.spec.ts +41 -41
  534. package/src/_modules/usage/_models/usg-data.control-model.ts +35 -35
  535. package/src/_modules/usage/_models/usg-session.data-model.spec.ts +97 -97
  536. package/src/_modules/usage/_models/usg-session.data-model.ts +72 -72
  537. package/src/_modules/usage/index.ts +11 -11
  538. package/src/index.ts +102 -102
  539. package/tsconfig.app.json +12 -12
  540. package/tsconfig.json +31 -31
  541. package/tsconfig.test.json +16 -16
  542. package/tslint.json +153 -153
  543. package/pipeline.cicd.config.json +0 -128
@@ -1,646 +1,646 @@
1
-
2
- import { DyFM_Object } from './object.util';
3
-
4
- describe('| DyFM_Object', () => {
5
-
6
- describe('| mapObjList', () => {
7
- it('| should remap object list based on given paths', () => {
8
- const objList = [
9
- {
10
- first: {
11
- sub: { label: 'vlmi' },
12
- dif: { name: 'asd' }
13
- }
14
- }
15
- ];
16
- const paths = [['first', 'sub', 'label'], ['first', 'dif', 'name']];
17
- const expected = [{ label: 'vlmi', name: 'asd' }];
18
-
19
- const result = DyFM_Object.mapObjList(objList, paths);
20
-
21
- expect(result).toEqual(expected);
22
- });
23
- });
24
-
25
- describe('| getNestedData', () => {
26
- it('| should return nested value from object', () => {
27
- const obj = {
28
- nestLvl1: {
29
- nestLvl2: {
30
- nestLvl3: 'value'
31
- }
32
- }
33
- };
34
- const path = ['nestLvl1', 'nestLvl2', 'nestLvl3'];
35
-
36
- const result = DyFM_Object.getNestedData(obj, path);
37
-
38
- expect(result).toBe('value');
39
- });
40
- });
41
-
42
- describe('| nestData', () => {
43
- xit('should nest data at specified path', () => {
44
- const obj = {};
45
- const path = ['level1', 'level2'];
46
- const value = 'nestedValue';
47
- const expected = { level1: { level2: 'nestedValue' } };
48
-
49
- const result = DyFM_Object.nestData(obj, path, value);
50
-
51
- expect(result).toEqual(expected);
52
- });
53
- });
54
-
55
- describe('| addToNestedData', () => {
56
- it('| should add to nested data at specified path', () => {
57
- const obj = { level1: { level2: 5 } };
58
- const path = ['level1', 'level2'];
59
- const valueToAdd = 3;
60
- const expected = { level1: { level2: 8 } };
61
-
62
- const result = DyFM_Object.addToNestedData(obj, path, valueToAdd);
63
-
64
- expect(result).toEqual(expected);
65
- });
66
- });
67
-
68
- describe('| pushToNestedData', () => {
69
- it('| should push to nested array at specified path', () => {
70
- const obj = { level1: { level2: [1, 2] } };
71
- const path = ['level1', 'level2'];
72
- const valueToPush = 3;
73
- const expected = { level1: { level2: [1, 2, 3] } };
74
-
75
- const result = DyFM_Object.pushToNestedData(obj, path, valueToPush);
76
-
77
- expect(result).toEqual(expected);
78
- });
79
-
80
- it('| should create an array and push if none exists', () => {
81
- const obj = { level1: {} };
82
- const path = ['level1', 'level2'];
83
- const valueToPush = 3;
84
- const expected = { level1: { level2: [3] } };
85
-
86
- const result = DyFM_Object.pushToNestedData(obj, path, valueToPush);
87
-
88
- expect(result).toEqual(expected);
89
- });
90
- });
91
-
92
- describe('| nestRecursiveListedData', () => {
93
- it('| should nest data in recursive list structure', () => {
94
- const obj = { listKey: [{ listKey: [{ listKey: [{}] }] }] };
95
- const nestedListKey = 'listKey';
96
- const nestIndexes = [0, 0, 0];
97
- const value = 'nestedValue';
98
- const expected = { listKey: [{ listKey: [{ listKey: ['nestedValue'] }] }] };
99
-
100
- const result = DyFM_Object.nestRecursiveListedData(obj, nestedListKey, nestIndexes, value);
101
-
102
- expect(result).toEqual(expected);
103
- });
104
- });
105
-
106
- xdescribe('| resolveCirculation', () => {
107
- xit('should resolve circular references in data', () => {
108
- const obj: any = { inner: {} };
109
- obj.inner.self = obj;
110
- const expected = { inner: { self: 'CIRCULATION:Object.inner' } };
111
-
112
- const result = DyFM_Object.resolveCirculation(obj);
113
-
114
- expect(result).toEqual(expected);
115
- });
116
-
117
- xit('should resolve self-circular root reference', () => {
118
- const obj: any = {};
119
- obj.self = obj;
120
- const expected = { self: 'CIRCULATION:ROOT;Object.self' };
121
-
122
- const result = DyFM_Object.resolveCirculation(obj);
123
-
124
- expect(result).toEqual(expected);
125
- });
126
- });
127
-
128
- describe('| findCirculations', () => {
129
- xit('should find circular references in data', () => {
130
- const obj: any = {};
131
- obj.self = obj;
132
- const expected = [{
133
- object: obj,
134
- pathsOfAllDuplications: ['ROOT;Object', 'self']
135
- }];
136
-
137
- const result = DyFM_Object.findCirculations(obj);
138
-
139
- expect(result).toEqual(expected);
140
- });
141
- });
142
-
143
- describe('| failableSafeParseJSON', () => {
144
-
145
- describe('| Basic JSON parsing', () => {
146
- it('| should parse valid JSON object', () => {
147
- const input = '{"name": "test", "value": 123}';
148
- const expected = { name: 'test', value: 123 };
149
-
150
- const result = DyFM_Object.failableSafeParseJSON(input);
151
-
152
- expect(result).toEqual(expected);
153
- });
154
-
155
- it('| should parse valid JSON array', () => {
156
- const input = '[1, 2, 3, "test"]';
157
- const expected = [1, 2, 3, 'test'];
158
-
159
- const result = DyFM_Object.failableSafeParseJSON(input);
160
-
161
- expect(result).toEqual(expected);
162
- });
163
-
164
- it('| should parse valid JSON string', () => {
165
- const input = '"simple string"';
166
- const expected = 'simple string';
167
-
168
- const result = DyFM_Object.failableSafeParseJSON(input);
169
-
170
- expect(result).toBe(expected);
171
- });
172
-
173
- it('| should parse valid JSON number', () => {
174
- const input = '42.5';
175
- const expected = 42.5;
176
-
177
- const result = DyFM_Object.failableSafeParseJSON(input);
178
-
179
- expect(result).toBe(expected);
180
- });
181
-
182
- it('| should parse valid JSON boolean', () => {
183
- const input = 'true';
184
- const expected = true;
185
-
186
- const result = DyFM_Object.failableSafeParseJSON(input);
187
-
188
- expect(result).toBe(expected);
189
- });
190
-
191
- it('| should parse valid JSON null', () => {
192
- const input = 'null';
193
- const expected = null;
194
-
195
- const result = DyFM_Object.failableSafeParseJSON(input);
196
-
197
- expect(result).toBe(expected);
198
- });
199
- });
200
-
201
- describe('| JSON extraction from code blocks', () => {
202
- it('| should extract JSON from ```json code block', () => {
203
- const input = '```json\n{"name": "test", "value": 123}\n```';
204
- const expected = { name: 'test', value: 123 };
205
-
206
- const result = DyFM_Object.failableSafeParseJSON(input);
207
-
208
- expect(result).toEqual(expected);
209
- });
210
-
211
- it('| should extract JSON from ```json code block with extra text', () => {
212
- const input = 'Here is the JSON:\n```json\n{"name": "test", "value": 123}\n```\nEnd of JSON';
213
- const expected = { name: 'test', value: 123 };
214
-
215
- const result = DyFM_Object.failableSafeParseJSON(input);
216
-
217
- expect(result).toEqual(expected);
218
- });
219
-
220
- it('| should extract complex JSON from ```json code block', () => {
221
- const input = '```json\n{\n "users": [\n {"id": 1, "name": "John"},\n {"id": 2, "name": "Jane"}\n ],\n "total": 2\n}\n```';
222
- const expected = {
223
- users: [
224
- { id: 1, name: 'John' },
225
- { id: 2, name: 'Jane' }
226
- ],
227
- total: 2
228
- };
229
-
230
- const result = DyFM_Object.failableSafeParseJSON(input);
231
-
232
- expect(result).toEqual(expected);
233
- });
234
-
235
- it('| should handle JSON with newlines in ```json code block', () => {
236
- const input = '```json\n{\n "message": "Line 1\\nLine 2\\nLine 3",\n "type": "multiline"\n}\n```';
237
- const expected = {
238
- message: 'Line 1\nLine 2\nLine 3',
239
- type: 'multiline'
240
- };
241
-
242
- const result = DyFM_Object.failableSafeParseJSON(input);
243
-
244
- expect(result).toEqual(expected);
245
- });
246
- });
247
-
248
- describe('| JSON extraction without code blocks', () => {
249
- it('| should parse JSON when no code block markers present', () => {
250
- const input = '{"name": "test", "value": 123}';
251
- const expected = { name: 'test', value: 123 };
252
-
253
- const result = DyFM_Object.failableSafeParseJSON(input);
254
-
255
- expect(result).toEqual(expected);
256
- });
257
- });
258
-
259
- describe('| Complex and stringified content', () => {
260
- it('| should parse JSON containing escaped quotes', () => {
261
- const input = '{"message": "He said \\"Hello\\" to her"}';
262
- const expected = { message: 'He said "Hello" to her' };
263
-
264
- const result = DyFM_Object.failableSafeParseJSON(input);
265
-
266
- expect(result).toEqual(expected);
267
- });
268
-
269
- it('| should parse JSON containing stringified JSON', () => {
270
- const input = '{"data": "{\\"nested\\": \\"value\\", \\"number\\": 42}"}';
271
- const expected = { data: '{"nested": "value", "number": 42}' };
272
-
273
- const result = DyFM_Object.failableSafeParseJSON(input);
274
-
275
- expect(result).toEqual(expected);
276
- });
277
-
278
- it('| should parse JSON with complex nested structures', () => {
279
- const input = '{"config": {"database": {"host": "localhost", "port": 5432}, "cache": {"ttl": 3600}}, "features": ["auth", "cache"]}';
280
- const expected = {
281
- config: {
282
- database: { host: 'localhost', port: 5432 },
283
- cache: { ttl: 3600 }
284
- },
285
- features: ['auth', 'cache']
286
- };
287
-
288
- const result = DyFM_Object.failableSafeParseJSON(input);
289
-
290
- expect(result).toEqual(expected);
291
- });
292
-
293
- it('| should parse JSON with special characters and unicode', () => {
294
- const input = '{"unicode": "🚀 Test ñáéíóú", "special": "Line1\\nLine2\\tTabbed"}';
295
- const expected = {
296
- unicode: '🚀 Test ñáéíóú',
297
- special: 'Line1\nLine2\tTabbed'
298
- };
299
-
300
- const result = DyFM_Object.failableSafeParseJSON(input);
301
-
302
- expect(result).toEqual(expected);
303
- });
304
-
305
- it('| should parse JSON with very long strings', () => {
306
- const longString = 'a'.repeat(1000);
307
- const input = `{"longString": "${longString}", "length": ${longString.length}}`;
308
- const expected = { longString: longString, length: 1000 };
309
-
310
- const result = DyFM_Object.failableSafeParseJSON(input);
311
-
312
- expect(result).toEqual(expected);
313
- });
314
-
315
- it('| should parse JSON with deep nesting', () => {
316
- const input = '{"level1": {"level2": {"level3": {"level4": {"level5": "deep value"}}}}}';
317
- const expected = {
318
- level1: {
319
- level2: {
320
- level3: {
321
- level4: {
322
- level5: 'deep value'
323
- }
324
- }
325
- }
326
- }
327
- };
328
-
329
- const result = DyFM_Object.failableSafeParseJSON(input);
330
-
331
- expect(result).toEqual(expected);
332
- });
333
- });
334
-
335
- describe('| Error handling and validation', () => {
336
- it('| should throw error for null input', () => {
337
- expect(() => {
338
- DyFM_Object.failableSafeParseJSON(null as any);
339
- }).toThrow();
340
- });
341
-
342
- it('| should throw error for undefined input', () => {
343
- expect(() => {
344
- DyFM_Object.failableSafeParseJSON(undefined as any);
345
- }).toThrow();
346
- });
347
-
348
- it('| should throw error for empty string', () => {
349
- expect(() => {
350
- DyFM_Object.failableSafeParseJSON('');
351
- }).toThrow();
352
- });
353
-
354
- it('| should throw enhanced error for malformed JSON with line context', () => {
355
- const input = '{\n "name": "test",\n "value": 123,\n "invalid": \n}';
356
-
357
- try {
358
- DyFM_Object.failableSafeParseJSON(input);
359
- fail('Expected error to be thrown');
360
- } catch (error) {
361
- expect(error).toBeInstanceOf(Error);
362
- const errorMessage = (error as Error).message;
363
- expect(errorMessage).toContain('JSON parsing failed');
364
- // The error should mention the parsing issue
365
- expect(errorMessage.length).toBeGreaterThan(10);
366
- }
367
- });
368
-
369
- it('| should throw enhanced error for missing comma with detailed context', () => {
370
- const input = '{\n "name": "test",\n "value": 123\n "missing_comma": true\n}';
371
-
372
- try {
373
- DyFM_Object.failableSafeParseJSON(input);
374
- fail('Expected error to be thrown');
375
- } catch (error) {
376
- expect(error).toBeInstanceOf(Error);
377
- const errorMessage = (error as Error).message;
378
- expect(errorMessage).toContain('JSON parsing failed');
379
-
380
- // Should show enhanced error format with line info when position is available
381
- if (errorMessage.includes('at position')) {
382
- expect(errorMessage).toContain('line');
383
- expect(errorMessage).toContain('Error at line');
384
- }
385
- }
386
- });
387
-
388
- it('| should throw enhanced error for unterminated string with context', () => {
389
- const input = '{\n "name": "unterminated string\n "value": 123\n}';
390
-
391
- try {
392
- DyFM_Object.failableSafeParseJSON(input);
393
- fail('Expected error to be thrown');
394
- } catch (error) {
395
- expect(error).toBeInstanceOf(Error);
396
- const errorMessage = (error as Error).message;
397
- expect(errorMessage).toContain('JSON parsing failed');
398
- expect(errorMessage.length).toBeGreaterThan(10);
399
- }
400
- });
401
-
402
- it('| should throw enhanced error for unexpected end of input', () => {
403
- const input = '{\n "name": "test",\n "value": 123';
404
-
405
- try {
406
- DyFM_Object.failableSafeParseJSON(input);
407
- fail('Expected error to be thrown');
408
- } catch (error) {
409
- expect(error).toBeInstanceOf(Error);
410
- const errorMessage = (error as Error).message;
411
- expect(errorMessage).toContain('JSON parsing failed');
412
- expect(errorMessage.length).toBeGreaterThan(10);
413
- }
414
- });
415
-
416
- it('| should provide enhanced error context for code block JSON', () => {
417
- const input = '```json\n{\n "valid": true,\n "invalid": [\n 1,\n 2,\n 3\n 4\n ]\n}\n```';
418
-
419
- try {
420
- DyFM_Object.failableSafeParseJSON(input);
421
- fail('Expected error to be thrown');
422
- } catch (error) {
423
- const errorMessage = (error as Error).message;
424
-
425
- // Should contain JSON parsing error info
426
- expect(errorMessage).toContain('JSON parsing failed');
427
-
428
- // If enhanced error reporting works, should show context
429
- if (errorMessage.includes('Error at line')) {
430
- expect(errorMessage).toContain('>>>'); // Error line marker
431
- expect(errorMessage).toMatch(/\d+:/); // Line numbers
432
- }
433
- }
434
- });
435
-
436
- it('| should show context lines when error position is available', () => {
437
- // This JSON has a clear syntax error that should trigger enhanced reporting
438
- const input = '```json\n{\n "name": "test",\n "value": 123,\n "missing_comma": true\n "error": "here"\n}\n```';
439
-
440
- try {
441
- DyFM_Object.failableSafeParseJSON(input);
442
- fail('Expected error to be thrown');
443
- } catch (error) {
444
- const errorMessage = (error as Error).message;
445
-
446
- expect(errorMessage).toContain('JSON parsing failed');
447
-
448
- // Should show enhanced error format when position info is available
449
- if (errorMessage.includes('at position')) {
450
- // Should show line context
451
- expect(errorMessage).toContain('Error at line');
452
- expect(errorMessage).toContain('>>>'); // Error line marker
453
-
454
- // Should show multiple context lines
455
- const contextLines = errorMessage.split('\n').filter(line =>
456
- line.match(/^\s*(\d+|>>>)/)
457
- );
458
- expect(contextLines.length).toBeGreaterThan(0);
459
- }
460
- }
461
- });
462
- });
463
-
464
- describe('| Edge cases and robustness', () => {
465
- it('| should handle JSON with only whitespace', () => {
466
- expect(() => {
467
- DyFM_Object.failableSafeParseJSON(' \n\t ');
468
- }).toThrow();
469
- });
470
-
471
- it('| should handle very large JSON objects', () => {
472
- const largeObj: any = {};
473
- for (let i = 0; i < 100; i++) {
474
- largeObj[`key${i}`] = `value${i}`;
475
- }
476
- const input = JSON.stringify(largeObj);
477
-
478
- const result = DyFM_Object.failableSafeParseJSON(input);
479
-
480
- expect(result).toEqual(largeObj);
481
- expect(Object.keys(result)).toHaveSize(100);
482
- });
483
-
484
- it('| should handle JSON with mixed types in arrays', () => {
485
- const input = '[1, "string", true, null, {"nested": "object"}, [1, 2, 3]]';
486
- const expected = [1, 'string', true, null, { nested: 'object' }, [1, 2, 3]];
487
-
488
- const result = DyFM_Object.failableSafeParseJSON(input);
489
-
490
- expect(result).toEqual(expected);
491
- });
492
-
493
- it('| should handle JSON with scientific notation', () => {
494
- const input = '{"small": 1e-10, "large": 1e10, "normal": 123.45}';
495
- const expected = { small: 1e-10, large: 1e10, normal: 123.45 };
496
-
497
- const result = DyFM_Object.failableSafeParseJSON(input);
498
-
499
- expect(result).toEqual(expected);
500
- });
501
-
502
- it('| should handle JSON with negative numbers', () => {
503
- const input = '{"negative": -42, "positiveZero": 0, "negativeZero": -0}';
504
- const expected = { negative: -42, positiveZero: 0, negativeZero: -0 };
505
-
506
- const result = DyFM_Object.failableSafeParseJSON(input);
507
-
508
- expect(result).toEqual(expected);
509
- });
510
-
511
- it('| should preserve object key order', () => {
512
- const input = '{"z": 1, "a": 2, "m": 3}';
513
- const result = DyFM_Object.failableSafeParseJSON(input);
514
-
515
- const keys = Object.keys(result);
516
- expect(keys).toEqual(['z', 'a', 'm']);
517
- });
518
-
519
- it('| should handle empty objects and arrays', () => {
520
- const input = '{"empty_obj": {}, "empty_arr": [], "null_val": null}';
521
- const expected = { empty_obj: {}, empty_arr: [], null_val: null };
522
-
523
- const result = DyFM_Object.failableSafeParseJSON(input);
524
-
525
- expect(result).toEqual(expected);
526
- });
527
- });
528
-
529
- describe('| Real-world scenarios', () => {
530
- it('| should parse API response format', () => {
531
- const input = '{"status": "success", "data": {"users": [{"id": 1, "name": "John"}]}, "pagination": {"page": 1, "total": 100}}';
532
- const expected = {
533
- status: 'success',
534
- data: { users: [{ id: 1, name: 'John' }] },
535
- pagination: { page: 1, total: 100 }
536
- };
537
-
538
- const result = DyFM_Object.failableSafeParseJSON(input);
539
-
540
- expect(result).toEqual(expected);
541
- });
542
-
543
- it('| should parse configuration format', () => {
544
- const input = '{"database": {"host": "localhost", "port": 5432, "ssl": true}, "logging": {"level": "info", "file": "/var/log/app.log"}}';
545
- const expected = {
546
- database: { host: 'localhost', port: 5432, ssl: true },
547
- logging: { level: 'info', file: '/var/log/app.log' }
548
- };
549
-
550
- const result = DyFM_Object.failableSafeParseJSON(input);
551
-
552
- expect(result).toEqual(expected);
553
- });
554
-
555
- it('| should parse JSON from AI model response with markdown', () => {
556
- const input = 'Here is the requested JSON:\n\n```json\n{\n "response": "success",\n "data": {\n "generated": true,\n "model": "gpt-4"\n }\n}\n```\n\nThis should work correctly.';
557
- const expected = {
558
- response: 'success',
559
- data: {
560
- generated: true,
561
- model: 'gpt-4'
562
- }
563
- };
564
-
565
- const result = DyFM_Object.failableSafeParseJSON(input);
566
-
567
- expect(result).toEqual(expected);
568
- });
569
-
570
- it('| should parse JSON with sub-inserted JSON', () => {
571
- const sub = JSON.stringify({
572
- name: "sub",
573
- value: 456
574
- });
575
- const input = JSON.stringify({
576
- name: "test",
577
- value: 123,
578
- sub: sub
579
- });
580
- const expected = {
581
- name: 'test',
582
- value: 123,
583
- sub: sub
584
- };
585
-
586
- const result = DyFM_Object.failableSafeParseJSON(input);
587
-
588
- expect(result).toEqual(expected);
589
- });
590
-
591
- it('| should parse JSON with sub-inserted JSON in a code block', () => {
592
- const input = 'things around ```json\n' + JSON.stringify({
593
- name: "test",
594
- value: 123,
595
- sub: '```json\n{"name": "sub", "value": 456}\n```'
596
- }) + '\n``` things around';
597
- const expected = {
598
- name: 'test',
599
- value: 123,
600
- sub: '```json\n{"name": "sub", "value": 456}\n```'
601
- };
602
-
603
- const result = DyFM_Object.failableSafeParseJSON(input);
604
-
605
- expect(result).toEqual(expected);
606
- });
607
-
608
- it('| should parse JSON with sub-inserted JSON in a code block with only ```json within', () => {
609
- const input = JSON.stringify({
610
- name: "test",
611
- value: 123,
612
- sub: "```json\n{\"name\": \"sub\", \"value\": 456}\n```"
613
- });
614
- const expected = {
615
- name: 'test',
616
- value: 123,
617
- sub: "```json\n{\"name\": \"sub\", \"value\": 456}\n```"
618
- };
619
-
620
- const result = DyFM_Object.failableSafeParseJSON(input);
621
-
622
- expect(result).toEqual(expected);
623
- });
624
-
625
- it('| should parse JSON with sub-inserted commas', () => {
626
- const input = JSON.stringify({
627
- name: "test",
628
- value: 123,
629
- sub: 'content wit \"commas\" and "commas"'
630
- });
631
- const expected = {
632
- name: 'test',
633
- value: 123,
634
- sub: 'content wit \"commas\" and "commas"'
635
- };
636
- const result = DyFM_Object.failableSafeParseJSON(input);
637
- expect(result).toEqual(expected);
638
- });
639
-
640
-
641
-
642
-
643
- });
644
- });
645
-
646
- });
1
+
2
+ import { DyFM_Object } from './object.util';
3
+
4
+ describe('| DyFM_Object', () => {
5
+
6
+ describe('| mapObjList', () => {
7
+ it('| should remap object list based on given paths', () => {
8
+ const objList = [
9
+ {
10
+ first: {
11
+ sub: { label: 'vlmi' },
12
+ dif: { name: 'asd' }
13
+ }
14
+ }
15
+ ];
16
+ const paths = [['first', 'sub', 'label'], ['first', 'dif', 'name']];
17
+ const expected = [{ label: 'vlmi', name: 'asd' }];
18
+
19
+ const result = DyFM_Object.mapObjList(objList, paths);
20
+
21
+ expect(result).toEqual(expected);
22
+ });
23
+ });
24
+
25
+ describe('| getNestedData', () => {
26
+ it('| should return nested value from object', () => {
27
+ const obj = {
28
+ nestLvl1: {
29
+ nestLvl2: {
30
+ nestLvl3: 'value'
31
+ }
32
+ }
33
+ };
34
+ const path = ['nestLvl1', 'nestLvl2', 'nestLvl3'];
35
+
36
+ const result = DyFM_Object.getNestedData(obj, path);
37
+
38
+ expect(result).toBe('value');
39
+ });
40
+ });
41
+
42
+ describe('| nestData', () => {
43
+ xit('should nest data at specified path', () => {
44
+ const obj = {};
45
+ const path = ['level1', 'level2'];
46
+ const value = 'nestedValue';
47
+ const expected = { level1: { level2: 'nestedValue' } };
48
+
49
+ const result = DyFM_Object.nestData(obj, path, value);
50
+
51
+ expect(result).toEqual(expected);
52
+ });
53
+ });
54
+
55
+ describe('| addToNestedData', () => {
56
+ it('| should add to nested data at specified path', () => {
57
+ const obj = { level1: { level2: 5 } };
58
+ const path = ['level1', 'level2'];
59
+ const valueToAdd = 3;
60
+ const expected = { level1: { level2: 8 } };
61
+
62
+ const result = DyFM_Object.addToNestedData(obj, path, valueToAdd);
63
+
64
+ expect(result).toEqual(expected);
65
+ });
66
+ });
67
+
68
+ describe('| pushToNestedData', () => {
69
+ it('| should push to nested array at specified path', () => {
70
+ const obj = { level1: { level2: [1, 2] } };
71
+ const path = ['level1', 'level2'];
72
+ const valueToPush = 3;
73
+ const expected = { level1: { level2: [1, 2, 3] } };
74
+
75
+ const result = DyFM_Object.pushToNestedData(obj, path, valueToPush);
76
+
77
+ expect(result).toEqual(expected);
78
+ });
79
+
80
+ it('| should create an array and push if none exists', () => {
81
+ const obj = { level1: {} };
82
+ const path = ['level1', 'level2'];
83
+ const valueToPush = 3;
84
+ const expected = { level1: { level2: [3] } };
85
+
86
+ const result = DyFM_Object.pushToNestedData(obj, path, valueToPush);
87
+
88
+ expect(result).toEqual(expected);
89
+ });
90
+ });
91
+
92
+ describe('| nestRecursiveListedData', () => {
93
+ it('| should nest data in recursive list structure', () => {
94
+ const obj = { listKey: [{ listKey: [{ listKey: [{}] }] }] };
95
+ const nestedListKey = 'listKey';
96
+ const nestIndexes = [0, 0, 0];
97
+ const value = 'nestedValue';
98
+ const expected = { listKey: [{ listKey: [{ listKey: ['nestedValue'] }] }] };
99
+
100
+ const result = DyFM_Object.nestRecursiveListedData(obj, nestedListKey, nestIndexes, value);
101
+
102
+ expect(result).toEqual(expected);
103
+ });
104
+ });
105
+
106
+ xdescribe('| resolveCirculation', () => {
107
+ xit('should resolve circular references in data', () => {
108
+ const obj: any = { inner: {} };
109
+ obj.inner.self = obj;
110
+ const expected = { inner: { self: 'CIRCULATION:Object.inner' } };
111
+
112
+ const result = DyFM_Object.resolveCirculation(obj);
113
+
114
+ expect(result).toEqual(expected);
115
+ });
116
+
117
+ xit('should resolve self-circular root reference', () => {
118
+ const obj: any = {};
119
+ obj.self = obj;
120
+ const expected = { self: 'CIRCULATION:ROOT;Object.self' };
121
+
122
+ const result = DyFM_Object.resolveCirculation(obj);
123
+
124
+ expect(result).toEqual(expected);
125
+ });
126
+ });
127
+
128
+ describe('| findCirculations', () => {
129
+ xit('should find circular references in data', () => {
130
+ const obj: any = {};
131
+ obj.self = obj;
132
+ const expected = [{
133
+ object: obj,
134
+ pathsOfAllDuplications: ['ROOT;Object', 'self']
135
+ }];
136
+
137
+ const result = DyFM_Object.findCirculations(obj);
138
+
139
+ expect(result).toEqual(expected);
140
+ });
141
+ });
142
+
143
+ describe('| failableSafeParseJSON', () => {
144
+
145
+ describe('| Basic JSON parsing', () => {
146
+ it('| should parse valid JSON object', () => {
147
+ const input = '{"name": "test", "value": 123}';
148
+ const expected = { name: 'test', value: 123 };
149
+
150
+ const result = DyFM_Object.failableSafeParseJSON(input);
151
+
152
+ expect(result).toEqual(expected);
153
+ });
154
+
155
+ it('| should parse valid JSON array', () => {
156
+ const input = '[1, 2, 3, "test"]';
157
+ const expected = [1, 2, 3, 'test'];
158
+
159
+ const result = DyFM_Object.failableSafeParseJSON(input);
160
+
161
+ expect(result).toEqual(expected);
162
+ });
163
+
164
+ it('| should parse valid JSON string', () => {
165
+ const input = '"simple string"';
166
+ const expected = 'simple string';
167
+
168
+ const result = DyFM_Object.failableSafeParseJSON(input);
169
+
170
+ expect(result).toBe(expected);
171
+ });
172
+
173
+ it('| should parse valid JSON number', () => {
174
+ const input = '42.5';
175
+ const expected = 42.5;
176
+
177
+ const result = DyFM_Object.failableSafeParseJSON(input);
178
+
179
+ expect(result).toBe(expected);
180
+ });
181
+
182
+ it('| should parse valid JSON boolean', () => {
183
+ const input = 'true';
184
+ const expected = true;
185
+
186
+ const result = DyFM_Object.failableSafeParseJSON(input);
187
+
188
+ expect(result).toBe(expected);
189
+ });
190
+
191
+ it('| should parse valid JSON null', () => {
192
+ const input = 'null';
193
+ const expected = null;
194
+
195
+ const result = DyFM_Object.failableSafeParseJSON(input);
196
+
197
+ expect(result).toBe(expected);
198
+ });
199
+ });
200
+
201
+ describe('| JSON extraction from code blocks', () => {
202
+ it('| should extract JSON from ```json code block', () => {
203
+ const input = '```json\n{"name": "test", "value": 123}\n```';
204
+ const expected = { name: 'test', value: 123 };
205
+
206
+ const result = DyFM_Object.failableSafeParseJSON(input);
207
+
208
+ expect(result).toEqual(expected);
209
+ });
210
+
211
+ it('| should extract JSON from ```json code block with extra text', () => {
212
+ const input = 'Here is the JSON:\n```json\n{"name": "test", "value": 123}\n```\nEnd of JSON';
213
+ const expected = { name: 'test', value: 123 };
214
+
215
+ const result = DyFM_Object.failableSafeParseJSON(input);
216
+
217
+ expect(result).toEqual(expected);
218
+ });
219
+
220
+ it('| should extract complex JSON from ```json code block', () => {
221
+ const input = '```json\n{\n "users": [\n {"id": 1, "name": "John"},\n {"id": 2, "name": "Jane"}\n ],\n "total": 2\n}\n```';
222
+ const expected = {
223
+ users: [
224
+ { id: 1, name: 'John' },
225
+ { id: 2, name: 'Jane' }
226
+ ],
227
+ total: 2
228
+ };
229
+
230
+ const result = DyFM_Object.failableSafeParseJSON(input);
231
+
232
+ expect(result).toEqual(expected);
233
+ });
234
+
235
+ it('| should handle JSON with newlines in ```json code block', () => {
236
+ const input = '```json\n{\n "message": "Line 1\\nLine 2\\nLine 3",\n "type": "multiline"\n}\n```';
237
+ const expected = {
238
+ message: 'Line 1\nLine 2\nLine 3',
239
+ type: 'multiline'
240
+ };
241
+
242
+ const result = DyFM_Object.failableSafeParseJSON(input);
243
+
244
+ expect(result).toEqual(expected);
245
+ });
246
+ });
247
+
248
+ describe('| JSON extraction without code blocks', () => {
249
+ it('| should parse JSON when no code block markers present', () => {
250
+ const input = '{"name": "test", "value": 123}';
251
+ const expected = { name: 'test', value: 123 };
252
+
253
+ const result = DyFM_Object.failableSafeParseJSON(input);
254
+
255
+ expect(result).toEqual(expected);
256
+ });
257
+ });
258
+
259
+ describe('| Complex and stringified content', () => {
260
+ it('| should parse JSON containing escaped quotes', () => {
261
+ const input = '{"message": "He said \\"Hello\\" to her"}';
262
+ const expected = { message: 'He said "Hello" to her' };
263
+
264
+ const result = DyFM_Object.failableSafeParseJSON(input);
265
+
266
+ expect(result).toEqual(expected);
267
+ });
268
+
269
+ it('| should parse JSON containing stringified JSON', () => {
270
+ const input = '{"data": "{\\"nested\\": \\"value\\", \\"number\\": 42}"}';
271
+ const expected = { data: '{"nested": "value", "number": 42}' };
272
+
273
+ const result = DyFM_Object.failableSafeParseJSON(input);
274
+
275
+ expect(result).toEqual(expected);
276
+ });
277
+
278
+ it('| should parse JSON with complex nested structures', () => {
279
+ const input = '{"config": {"database": {"host": "localhost", "port": 5432}, "cache": {"ttl": 3600}}, "features": ["auth", "cache"]}';
280
+ const expected = {
281
+ config: {
282
+ database: { host: 'localhost', port: 5432 },
283
+ cache: { ttl: 3600 }
284
+ },
285
+ features: ['auth', 'cache']
286
+ };
287
+
288
+ const result = DyFM_Object.failableSafeParseJSON(input);
289
+
290
+ expect(result).toEqual(expected);
291
+ });
292
+
293
+ it('| should parse JSON with special characters and unicode', () => {
294
+ const input = '{"unicode": "🚀 Test ñáéíóú", "special": "Line1\\nLine2\\tTabbed"}';
295
+ const expected = {
296
+ unicode: '🚀 Test ñáéíóú',
297
+ special: 'Line1\nLine2\tTabbed'
298
+ };
299
+
300
+ const result = DyFM_Object.failableSafeParseJSON(input);
301
+
302
+ expect(result).toEqual(expected);
303
+ });
304
+
305
+ it('| should parse JSON with very long strings', () => {
306
+ const longString = 'a'.repeat(1000);
307
+ const input = `{"longString": "${longString}", "length": ${longString.length}}`;
308
+ const expected = { longString: longString, length: 1000 };
309
+
310
+ const result = DyFM_Object.failableSafeParseJSON(input);
311
+
312
+ expect(result).toEqual(expected);
313
+ });
314
+
315
+ it('| should parse JSON with deep nesting', () => {
316
+ const input = '{"level1": {"level2": {"level3": {"level4": {"level5": "deep value"}}}}}';
317
+ const expected = {
318
+ level1: {
319
+ level2: {
320
+ level3: {
321
+ level4: {
322
+ level5: 'deep value'
323
+ }
324
+ }
325
+ }
326
+ }
327
+ };
328
+
329
+ const result = DyFM_Object.failableSafeParseJSON(input);
330
+
331
+ expect(result).toEqual(expected);
332
+ });
333
+ });
334
+
335
+ describe('| Error handling and validation', () => {
336
+ it('| should throw error for null input', () => {
337
+ expect(() => {
338
+ DyFM_Object.failableSafeParseJSON(null as any);
339
+ }).toThrow();
340
+ });
341
+
342
+ it('| should throw error for undefined input', () => {
343
+ expect(() => {
344
+ DyFM_Object.failableSafeParseJSON(undefined as any);
345
+ }).toThrow();
346
+ });
347
+
348
+ it('| should throw error for empty string', () => {
349
+ expect(() => {
350
+ DyFM_Object.failableSafeParseJSON('');
351
+ }).toThrow();
352
+ });
353
+
354
+ it('| should throw enhanced error for malformed JSON with line context', () => {
355
+ const input = '{\n "name": "test",\n "value": 123,\n "invalid": \n}';
356
+
357
+ try {
358
+ DyFM_Object.failableSafeParseJSON(input);
359
+ fail('Expected error to be thrown');
360
+ } catch (error) {
361
+ expect(error).toBeInstanceOf(Error);
362
+ const errorMessage = (error as Error).message;
363
+ expect(errorMessage).toContain('JSON parsing failed');
364
+ // The error should mention the parsing issue
365
+ expect(errorMessage.length).toBeGreaterThan(10);
366
+ }
367
+ });
368
+
369
+ it('| should throw enhanced error for missing comma with detailed context', () => {
370
+ const input = '{\n "name": "test",\n "value": 123\n "missing_comma": true\n}';
371
+
372
+ try {
373
+ DyFM_Object.failableSafeParseJSON(input);
374
+ fail('Expected error to be thrown');
375
+ } catch (error) {
376
+ expect(error).toBeInstanceOf(Error);
377
+ const errorMessage = (error as Error).message;
378
+ expect(errorMessage).toContain('JSON parsing failed');
379
+
380
+ // Should show enhanced error format with line info when position is available
381
+ if (errorMessage.includes('at position')) {
382
+ expect(errorMessage).toContain('line');
383
+ expect(errorMessage).toContain('Error at line');
384
+ }
385
+ }
386
+ });
387
+
388
+ it('| should throw enhanced error for unterminated string with context', () => {
389
+ const input = '{\n "name": "unterminated string\n "value": 123\n}';
390
+
391
+ try {
392
+ DyFM_Object.failableSafeParseJSON(input);
393
+ fail('Expected error to be thrown');
394
+ } catch (error) {
395
+ expect(error).toBeInstanceOf(Error);
396
+ const errorMessage = (error as Error).message;
397
+ expect(errorMessage).toContain('JSON parsing failed');
398
+ expect(errorMessage.length).toBeGreaterThan(10);
399
+ }
400
+ });
401
+
402
+ it('| should throw enhanced error for unexpected end of input', () => {
403
+ const input = '{\n "name": "test",\n "value": 123';
404
+
405
+ try {
406
+ DyFM_Object.failableSafeParseJSON(input);
407
+ fail('Expected error to be thrown');
408
+ } catch (error) {
409
+ expect(error).toBeInstanceOf(Error);
410
+ const errorMessage = (error as Error).message;
411
+ expect(errorMessage).toContain('JSON parsing failed');
412
+ expect(errorMessage.length).toBeGreaterThan(10);
413
+ }
414
+ });
415
+
416
+ it('| should provide enhanced error context for code block JSON', () => {
417
+ const input = '```json\n{\n "valid": true,\n "invalid": [\n 1,\n 2,\n 3\n 4\n ]\n}\n```';
418
+
419
+ try {
420
+ DyFM_Object.failableSafeParseJSON(input);
421
+ fail('Expected error to be thrown');
422
+ } catch (error) {
423
+ const errorMessage = (error as Error).message;
424
+
425
+ // Should contain JSON parsing error info
426
+ expect(errorMessage).toContain('JSON parsing failed');
427
+
428
+ // If enhanced error reporting works, should show context
429
+ if (errorMessage.includes('Error at line')) {
430
+ expect(errorMessage).toContain('>>>'); // Error line marker
431
+ expect(errorMessage).toMatch(/\d+:/); // Line numbers
432
+ }
433
+ }
434
+ });
435
+
436
+ it('| should show context lines when error position is available', () => {
437
+ // This JSON has a clear syntax error that should trigger enhanced reporting
438
+ const input = '```json\n{\n "name": "test",\n "value": 123,\n "missing_comma": true\n "error": "here"\n}\n```';
439
+
440
+ try {
441
+ DyFM_Object.failableSafeParseJSON(input);
442
+ fail('Expected error to be thrown');
443
+ } catch (error) {
444
+ const errorMessage = (error as Error).message;
445
+
446
+ expect(errorMessage).toContain('JSON parsing failed');
447
+
448
+ // Should show enhanced error format when position info is available
449
+ if (errorMessage.includes('at position')) {
450
+ // Should show line context
451
+ expect(errorMessage).toContain('Error at line');
452
+ expect(errorMessage).toContain('>>>'); // Error line marker
453
+
454
+ // Should show multiple context lines
455
+ const contextLines = errorMessage.split('\n').filter(line =>
456
+ line.match(/^\s*(\d+|>>>)/)
457
+ );
458
+ expect(contextLines.length).toBeGreaterThan(0);
459
+ }
460
+ }
461
+ });
462
+ });
463
+
464
+ describe('| Edge cases and robustness', () => {
465
+ it('| should handle JSON with only whitespace', () => {
466
+ expect(() => {
467
+ DyFM_Object.failableSafeParseJSON(' \n\t ');
468
+ }).toThrow();
469
+ });
470
+
471
+ it('| should handle very large JSON objects', () => {
472
+ const largeObj: any = {};
473
+ for (let i = 0; i < 100; i++) {
474
+ largeObj[`key${i}`] = `value${i}`;
475
+ }
476
+ const input = JSON.stringify(largeObj);
477
+
478
+ const result = DyFM_Object.failableSafeParseJSON(input);
479
+
480
+ expect(result).toEqual(largeObj);
481
+ expect(Object.keys(result)).toHaveSize(100);
482
+ });
483
+
484
+ it('| should handle JSON with mixed types in arrays', () => {
485
+ const input = '[1, "string", true, null, {"nested": "object"}, [1, 2, 3]]';
486
+ const expected = [1, 'string', true, null, { nested: 'object' }, [1, 2, 3]];
487
+
488
+ const result = DyFM_Object.failableSafeParseJSON(input);
489
+
490
+ expect(result).toEqual(expected);
491
+ });
492
+
493
+ it('| should handle JSON with scientific notation', () => {
494
+ const input = '{"small": 1e-10, "large": 1e10, "normal": 123.45}';
495
+ const expected = { small: 1e-10, large: 1e10, normal: 123.45 };
496
+
497
+ const result = DyFM_Object.failableSafeParseJSON(input);
498
+
499
+ expect(result).toEqual(expected);
500
+ });
501
+
502
+ it('| should handle JSON with negative numbers', () => {
503
+ const input = '{"negative": -42, "positiveZero": 0, "negativeZero": -0}';
504
+ const expected = { negative: -42, positiveZero: 0, negativeZero: -0 };
505
+
506
+ const result = DyFM_Object.failableSafeParseJSON(input);
507
+
508
+ expect(result).toEqual(expected);
509
+ });
510
+
511
+ it('| should preserve object key order', () => {
512
+ const input = '{"z": 1, "a": 2, "m": 3}';
513
+ const result = DyFM_Object.failableSafeParseJSON(input);
514
+
515
+ const keys = Object.keys(result);
516
+ expect(keys).toEqual(['z', 'a', 'm']);
517
+ });
518
+
519
+ it('| should handle empty objects and arrays', () => {
520
+ const input = '{"empty_obj": {}, "empty_arr": [], "null_val": null}';
521
+ const expected = { empty_obj: {}, empty_arr: [], null_val: null };
522
+
523
+ const result = DyFM_Object.failableSafeParseJSON(input);
524
+
525
+ expect(result).toEqual(expected);
526
+ });
527
+ });
528
+
529
+ describe('| Real-world scenarios', () => {
530
+ it('| should parse API response format', () => {
531
+ const input = '{"status": "success", "data": {"users": [{"id": 1, "name": "John"}]}, "pagination": {"page": 1, "total": 100}}';
532
+ const expected = {
533
+ status: 'success',
534
+ data: { users: [{ id: 1, name: 'John' }] },
535
+ pagination: { page: 1, total: 100 }
536
+ };
537
+
538
+ const result = DyFM_Object.failableSafeParseJSON(input);
539
+
540
+ expect(result).toEqual(expected);
541
+ });
542
+
543
+ it('| should parse configuration format', () => {
544
+ const input = '{"database": {"host": "localhost", "port": 5432, "ssl": true}, "logging": {"level": "info", "file": "/var/log/app.log"}}';
545
+ const expected = {
546
+ database: { host: 'localhost', port: 5432, ssl: true },
547
+ logging: { level: 'info', file: '/var/log/app.log' }
548
+ };
549
+
550
+ const result = DyFM_Object.failableSafeParseJSON(input);
551
+
552
+ expect(result).toEqual(expected);
553
+ });
554
+
555
+ it('| should parse JSON from AI model response with markdown', () => {
556
+ const input = 'Here is the requested JSON:\n\n```json\n{\n "response": "success",\n "data": {\n "generated": true,\n "model": "gpt-4"\n }\n}\n```\n\nThis should work correctly.';
557
+ const expected = {
558
+ response: 'success',
559
+ data: {
560
+ generated: true,
561
+ model: 'gpt-4'
562
+ }
563
+ };
564
+
565
+ const result = DyFM_Object.failableSafeParseJSON(input);
566
+
567
+ expect(result).toEqual(expected);
568
+ });
569
+
570
+ it('| should parse JSON with sub-inserted JSON', () => {
571
+ const sub = JSON.stringify({
572
+ name: "sub",
573
+ value: 456
574
+ });
575
+ const input = JSON.stringify({
576
+ name: "test",
577
+ value: 123,
578
+ sub: sub
579
+ });
580
+ const expected = {
581
+ name: 'test',
582
+ value: 123,
583
+ sub: sub
584
+ };
585
+
586
+ const result = DyFM_Object.failableSafeParseJSON(input);
587
+
588
+ expect(result).toEqual(expected);
589
+ });
590
+
591
+ it('| should parse JSON with sub-inserted JSON in a code block', () => {
592
+ const input = 'things around ```json\n' + JSON.stringify({
593
+ name: "test",
594
+ value: 123,
595
+ sub: '```json\n{"name": "sub", "value": 456}\n```'
596
+ }) + '\n``` things around';
597
+ const expected = {
598
+ name: 'test',
599
+ value: 123,
600
+ sub: '```json\n{"name": "sub", "value": 456}\n```'
601
+ };
602
+
603
+ const result = DyFM_Object.failableSafeParseJSON(input);
604
+
605
+ expect(result).toEqual(expected);
606
+ });
607
+
608
+ it('| should parse JSON with sub-inserted JSON in a code block with only ```json within', () => {
609
+ const input = JSON.stringify({
610
+ name: "test",
611
+ value: 123,
612
+ sub: "```json\n{\"name\": \"sub\", \"value\": 456}\n```"
613
+ });
614
+ const expected = {
615
+ name: 'test',
616
+ value: 123,
617
+ sub: "```json\n{\"name\": \"sub\", \"value\": 456}\n```"
618
+ };
619
+
620
+ const result = DyFM_Object.failableSafeParseJSON(input);
621
+
622
+ expect(result).toEqual(expected);
623
+ });
624
+
625
+ it('| should parse JSON with sub-inserted commas', () => {
626
+ const input = JSON.stringify({
627
+ name: "test",
628
+ value: 123,
629
+ sub: 'content wit \"commas\" and "commas"'
630
+ });
631
+ const expected = {
632
+ name: 'test',
633
+ value: 123,
634
+ sub: 'content wit \"commas\" and "commas"'
635
+ };
636
+ const result = DyFM_Object.failableSafeParseJSON(input);
637
+ expect(result).toEqual(expected);
638
+ });
639
+
640
+
641
+
642
+
643
+ });
644
+ });
645
+
646
+ });