tiny-essentials 1.28.19 → 1.29.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 (556) hide show
  1. package/README.md +1 -1
  2. package/changelog/1/28/19.md +24 -0
  3. package/changelog/1/29/0.md +58 -0
  4. package/changelog/1/29/1.md +11 -0
  5. package/dist/v1/ColorSafeStringify.min.js +1 -1
  6. package/dist/v1/TinyAdvancedRaffle.min.js +1 -1
  7. package/dist/v1/TinyAfterScrollWatcher.min.js +1 -1
  8. package/dist/v1/TinyAnalogClock.min.js +1 -1
  9. package/dist/v1/TinyArrayComparator.min.js +1 -1
  10. package/dist/v1/TinyArrayPaginator.min.js +1 -1
  11. package/dist/v1/TinyBasicsEs.min.js +1 -1
  12. package/dist/v1/TinyBrowserMonitor.min.js +1 -0
  13. package/dist/v1/TinyClassManager.min.js +1 -1
  14. package/dist/v1/TinyClipboard.min.js +1 -1
  15. package/dist/v1/TinyCloner.min.js +1 -0
  16. package/dist/v1/TinyColorConverter.min.js +1 -1
  17. package/dist/v1/TinyColorValidator.min.js +1 -1
  18. package/dist/v1/TinyCookieConsent.min.js +1 -1
  19. package/dist/v1/TinyDayNightCycle.min.js +1 -1
  20. package/dist/v1/TinyDebugger.min.js +1 -1
  21. package/dist/v1/TinyDomReadyManager.min.js +1 -1
  22. package/dist/v1/TinyDragDropDetector.min.js +1 -1
  23. package/dist/v1/TinyDragger.min.js +1 -1
  24. package/dist/v1/TinyElementObserver.min.js +1 -1
  25. package/dist/v1/TinyEssentials.min.js +1 -1
  26. package/dist/v1/TinyGamepad.min.js +1 -1
  27. package/dist/v1/TinyHtml.min.js +1 -1
  28. package/dist/v1/TinyHtmlTagRegexBuilder.min.js +1 -0
  29. package/dist/v1/TinyHttpResponseRegistry.min.js +1 -0
  30. package/dist/v1/TinyI18.min.js +1 -1
  31. package/dist/v1/TinyIframeEvents.min.js +1 -1
  32. package/dist/v1/TinyInventory.min.js +1 -1
  33. package/dist/v1/TinyInventoryTrader.min.js +1 -1
  34. package/dist/v1/TinyLevelUp.min.js +1 -1
  35. package/dist/v1/TinyLoadingScreen.min.js +1 -1
  36. package/dist/v1/TinyLocalStorage.min.js +1 -1
  37. package/dist/v1/TinyMaInSys.min.js +1 -1
  38. package/dist/v1/TinyMapCache.min.js +1 -0
  39. package/dist/v1/TinyMediaPlayer.min.js +1 -1
  40. package/dist/v1/TinyNeedBar.min.js +1 -1
  41. package/dist/v1/TinyNewWinEvents.min.js +1 -1
  42. package/dist/v1/TinyNotificationAdapter.min.js +1 -0
  43. package/dist/v1/TinyNotifications.min.js +1 -1
  44. package/dist/v1/TinyNotifyCenter.min.js +1 -1
  45. package/dist/v1/TinyOPFSFileSystem.min.js +1 -0
  46. package/dist/v1/TinyPasswordValidator.min.js +1 -0
  47. package/dist/v1/TinyPluginPackage.min.js +1 -0
  48. package/dist/v1/TinyPromiseQueue.min.js +1 -1
  49. package/dist/v1/TinyPushManager.min.js +1 -0
  50. package/dist/v1/TinyPushPayload.min.js +1 -0
  51. package/dist/v1/TinyPushRouter.min.js +1 -0
  52. package/dist/v1/TinyRadioFm.min.js +1 -1
  53. package/dist/v1/TinyRateLimiter.min.js +1 -1
  54. package/dist/v1/TinyRegexEs.min.js +1 -0
  55. package/dist/v1/TinyRouter.min.js +1 -0
  56. package/dist/v1/TinyServiceWorker.min.js +1 -0
  57. package/dist/v1/TinyServiceWorkerEngine.min.js +1 -0
  58. package/dist/v1/TinySetMapPackage.min.js +1 -0
  59. package/dist/v1/TinySimpleDice.min.js +1 -1
  60. package/dist/v1/TinySmartScroller.min.js +1 -1
  61. package/dist/v1/TinyStorageBucketFileSystem.min.js +1 -0
  62. package/dist/v1/TinyTextDiffer.min.js +1 -1
  63. package/dist/v1/TinyTextRangeEditor.min.js +1 -1
  64. package/dist/v1/TinyTextarea.min.js +1 -1
  65. package/dist/v1/TinyThrottledApi.min.js +1 -0
  66. package/dist/v1/TinyTimeout.min.js +1 -1
  67. package/dist/v1/TinyToastNotify.min.js +1 -1
  68. package/dist/v1/TinyUploadClicker.min.js +1 -1
  69. package/dist/v1/TinyUriParser.min.js +1 -0
  70. package/dist/v1/TinyVersion.min.js +1 -0
  71. package/dist/v1/TinyWebWorker.min.js +1 -0
  72. package/dist/v1/TinyWebWorkerEngine.min.js +1 -0
  73. package/dist/v1/UltraRandomMsgGen.min.js +1 -1
  74. package/dist/v1/basics/array.cjs +2 -2
  75. package/dist/v1/basics/array.d.mts +2 -0
  76. package/dist/v1/basics/array.d.mts.map +1 -1
  77. package/dist/v1/basics/array.mjs +2 -1
  78. package/dist/v1/basics/browserDetector.cjs +37 -12
  79. package/dist/v1/basics/browserDetector.d.mts +8 -0
  80. package/dist/v1/basics/browserDetector.d.mts.map +1 -1
  81. package/dist/v1/basics/browserDetector.mjs +32 -13
  82. package/dist/v1/basics/crypto.cjs +23 -0
  83. package/dist/v1/basics/crypto.d.mts +10 -0
  84. package/dist/v1/basics/crypto.d.mts.map +1 -0
  85. package/dist/v1/basics/crypto.mjs +18 -0
  86. package/dist/v1/basics/html.cjs +0 -3
  87. package/dist/v1/basics/html.d.mts.map +1 -1
  88. package/dist/v1/basics/html.mjs +0 -2
  89. package/dist/v1/basics/index.cjs +8 -1
  90. package/dist/v1/basics/index.d.mts +6 -5
  91. package/dist/v1/basics/index.d.mts.map +1 -1
  92. package/dist/v1/basics/index.mjs +6 -5
  93. package/dist/v1/basics/objChecker.cjs +88 -0
  94. package/dist/v1/basics/objChecker.d.mts +26 -0
  95. package/dist/v1/basics/objChecker.d.mts.map +1 -1
  96. package/dist/v1/basics/objChecker.mjs +74 -0
  97. package/dist/v1/basics/objFilter.cjs +234 -93
  98. package/dist/v1/basics/objFilter.d.mts +96 -22
  99. package/dist/v1/basics/objFilter.d.mts.map +1 -1
  100. package/dist/v1/basics/objFilter.mjs +216 -92
  101. package/dist/v1/basics/promiseUtils.cjs +48 -12
  102. package/dist/v1/basics/promiseUtils.d.mts +45 -12
  103. package/dist/v1/basics/promiseUtils.d.mts.map +1 -1
  104. package/dist/v1/basics/promiseUtils.mjs +47 -12
  105. package/dist/v1/basics/text.cjs +0 -12
  106. package/dist/v1/basics/text.d.mts +0 -10
  107. package/dist/v1/basics/text.d.mts.map +1 -1
  108. package/dist/v1/basics/text.mjs +0 -10
  109. package/dist/v1/index.cjs +88 -3
  110. package/dist/v1/index.d.mts +31 -6
  111. package/dist/v1/index.d.mts.map +1 -1
  112. package/dist/v1/index.mjs +32 -7
  113. package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
  114. package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
  115. package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
  116. package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
  117. package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
  118. package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
  119. package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
  120. package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
  121. package/dist/v1/libs/fs/constants.cjs +74 -0
  122. package/dist/v1/libs/fs/constants.d.mts +22 -0
  123. package/dist/v1/libs/fs/constants.d.mts.map +1 -0
  124. package/dist/v1/libs/fs/constants.mjs +53 -0
  125. package/dist/v1/libs/fs/encoding.cjs +118 -0
  126. package/dist/v1/libs/fs/encoding.d.mts +50 -0
  127. package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
  128. package/dist/v1/libs/fs/encoding.mjs +102 -0
  129. package/dist/v1/libs/fs/error.cjs +188 -0
  130. package/dist/v1/libs/fs/error.d.mts +105 -0
  131. package/dist/v1/libs/fs/error.d.mts.map +1 -0
  132. package/dist/v1/libs/fs/error.mjs +158 -0
  133. package/dist/v1/libs/fs/handle.cjs +121 -0
  134. package/dist/v1/libs/fs/handle.d.mts +56 -0
  135. package/dist/v1/libs/fs/handle.d.mts.map +1 -0
  136. package/dist/v1/libs/fs/handle.mjs +100 -0
  137. package/dist/v1/libs/fs/index.cjs +700 -0
  138. package/dist/v1/libs/fs/index.d.mts +377 -0
  139. package/dist/v1/libs/fs/index.d.mts.map +1 -0
  140. package/dist/v1/libs/fs/index.mjs +630 -0
  141. package/dist/v1/libs/fs/path.cjs +234 -0
  142. package/dist/v1/libs/fs/path.d.mts +176 -0
  143. package/dist/v1/libs/fs/path.d.mts.map +1 -0
  144. package/dist/v1/libs/fs/path.mjs +197 -0
  145. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
  146. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
  147. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
  148. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
  149. package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
  150. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
  151. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
  152. package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
  153. package/dist/v1/libs/fs/stats.cjs +245 -0
  154. package/dist/v1/libs/fs/stats.d.mts +226 -0
  155. package/dist/v1/libs/fs/stats.d.mts.map +1 -0
  156. package/dist/v1/libs/fs/stats.mjs +197 -0
  157. package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
  158. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
  159. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
  160. package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
  161. package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
  162. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
  163. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
  164. package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
  165. package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
  166. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
  167. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
  168. package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
  169. package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
  170. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
  171. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
  172. package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
  173. package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
  174. package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
  175. package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
  176. package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
  177. package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
  178. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
  179. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
  180. package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
  181. package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
  182. package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
  183. package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
  184. package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
  185. package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
  186. package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
  187. package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
  188. package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
  189. package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
  190. package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
  191. package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
  192. package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
  193. package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
  194. package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
  195. package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
  196. package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
  197. package/dist/v1/libs/router/TinyRouter.cjs +661 -0
  198. package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
  199. package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
  200. package/dist/v1/libs/router/TinyRouter.mjs +572 -0
  201. package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
  202. package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
  203. package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
  204. package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
  205. package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
  206. package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
  207. package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
  208. package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
  209. package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
  210. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
  211. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
  212. package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
  213. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
  214. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
  215. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
  216. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
  217. package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
  218. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
  219. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
  220. package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
  221. package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
  222. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
  223. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
  224. package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
  225. package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
  226. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
  227. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
  228. package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
  229. package/dist/v1/libs/sw/browser/utils.cjs +28 -0
  230. package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
  231. package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
  232. package/dist/v1/libs/sw/browser/utils.mjs +21 -0
  233. package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
  234. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
  235. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
  236. package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
  237. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
  238. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
  239. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
  240. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
  241. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
  242. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
  243. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
  244. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
  245. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
  246. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
  247. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
  248. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
  249. package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
  250. package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
  251. package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
  252. package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
  253. package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
  254. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
  255. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
  256. package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
  257. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
  258. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
  259. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
  260. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
  261. package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
  262. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
  263. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
  264. package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
  265. package/dist/v1/libs/sw/utils.cjs +57 -0
  266. package/dist/v1/libs/sw/utils.d.mts +173 -0
  267. package/dist/v1/libs/sw/utils.d.mts.map +1 -0
  268. package/dist/v1/libs/sw/utils.mjs +50 -0
  269. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
  270. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
  271. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
  272. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
  273. package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
  274. package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
  275. package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
  276. package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
  277. package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
  278. package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
  279. package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
  280. package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
  281. package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
  282. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
  283. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
  284. package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
  285. package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
  286. package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
  287. package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
  288. package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
  289. package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
  290. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
  291. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
  292. package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
  293. package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
  294. package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
  295. package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
  296. package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
  297. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
  298. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
  299. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
  300. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
  301. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
  302. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
  303. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
  304. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
  305. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
  306. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
  307. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
  308. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
  309. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
  310. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
  311. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
  312. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
  313. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
  314. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
  315. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
  316. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
  317. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
  318. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
  319. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
  320. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
  321. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
  322. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
  323. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
  324. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
  325. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
  326. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
  327. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
  328. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
  329. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
  330. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
  331. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
  332. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
  333. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
  334. package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
  335. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
  336. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
  337. package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
  338. package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
  339. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
  340. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
  341. package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
  342. package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
  343. package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
  344. package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
  345. package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
  346. package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
  347. package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
  348. package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
  349. package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
  350. package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
  351. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
  352. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
  353. package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
  354. package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
  355. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
  356. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
  357. package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
  358. package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
  359. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
  360. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
  361. package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
  362. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
  363. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
  364. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
  365. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
  366. package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
  367. package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
  368. package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
  369. package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
  370. package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
  371. package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
  372. package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
  373. package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
  374. package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
  375. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
  376. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
  377. package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
  378. package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
  379. package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
  380. package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
  381. package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
  382. package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
  383. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
  384. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
  385. package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
  386. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
  387. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
  388. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
  389. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
  390. package/dist/v1/regexp/Email.cjs +185 -0
  391. package/dist/v1/regexp/Email.d.mts +73 -0
  392. package/dist/v1/regexp/Email.d.mts.map +1 -0
  393. package/dist/v1/regexp/Email.mjs +153 -0
  394. package/dist/v1/regexp/Glob.cjs +293 -0
  395. package/dist/v1/regexp/Glob.d.mts +45 -0
  396. package/dist/v1/regexp/Glob.d.mts.map +1 -0
  397. package/dist/v1/regexp/Glob.mjs +260 -0
  398. package/dist/v1/regexp/Ipv4.cjs +57 -0
  399. package/dist/v1/regexp/Ipv4.d.mts +29 -0
  400. package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
  401. package/dist/v1/regexp/Ipv4.mjs +45 -0
  402. package/dist/v1/regexp/Ipv6.cjs +67 -0
  403. package/dist/v1/regexp/Ipv6.d.mts +29 -0
  404. package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
  405. package/dist/v1/regexp/Ipv6.mjs +54 -0
  406. package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
  407. package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
  408. package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
  409. package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
  410. package/dist/v1/regexp/UrlDetector.cjs +125 -0
  411. package/dist/v1/regexp/UrlDetector.d.mts +67 -0
  412. package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
  413. package/dist/v1/regexp/UrlDetector.mjs +102 -0
  414. package/dist/v1/regexp/Username/index.cjs +233 -0
  415. package/dist/v1/regexp/Username/index.d.mts +77 -0
  416. package/dist/v1/regexp/Username/index.d.mts.map +1 -0
  417. package/dist/v1/regexp/Username/index.mjs +199 -0
  418. package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
  419. package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
  420. package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
  421. package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
  422. package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
  423. package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
  424. package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
  425. package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
  426. package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
  427. package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
  428. package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
  429. package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
  430. package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
  431. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
  432. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
  433. package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
  434. package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
  435. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
  436. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
  437. package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
  438. package/dist/v1/regexp/Username/templates/index.cjs +11 -0
  439. package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
  440. package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
  441. package/dist/v1/regexp/Username/templates/index.mjs +4 -0
  442. package/dist/v1/regexp/index.cjs +41 -0
  443. package/dist/v1/regexp/index.d.mts +9 -0
  444. package/dist/v1/regexp/index.d.mts.map +1 -0
  445. package/dist/v1/regexp/index.mjs +8 -0
  446. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
  447. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
  448. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
  449. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
  450. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
  451. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
  452. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
  453. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
  454. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
  455. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
  456. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
  457. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
  458. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
  459. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
  460. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
  461. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
  462. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +30 -4
  463. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +5 -2
  464. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -1
  465. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +29 -5
  466. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
  467. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
  468. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
  469. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
  470. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
  471. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
  472. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
  473. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
  474. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
  475. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
  476. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
  477. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
  478. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
  479. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
  480. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
  481. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
  482. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
  483. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
  484. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
  485. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
  486. package/docs/info/RegExp.md +74 -0
  487. package/docs/v1/Exports.md +101 -0
  488. package/docs/v1/README.md +113 -15
  489. package/docs/v1/basics/asyncReplace.md +2 -0
  490. package/docs/v1/basics/browserDetector.md +28 -11
  491. package/docs/v1/basics/crypto.md +85 -0
  492. package/docs/v1/basics/deprecated/html.md +2 -0
  493. package/docs/v1/basics/deprecated/objFilter.md +2 -0
  494. package/docs/v1/basics/html.md +2 -0
  495. package/docs/v1/basics/objChecker.md +55 -0
  496. package/docs/v1/basics/objFilter.md +57 -86
  497. package/docs/v1/basics/promiseUtils.md +12 -3
  498. package/docs/v1/basics/text.md +0 -1
  499. package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
  500. package/docs/v1/libs/fs/TinyFS.md +752 -0
  501. package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
  502. package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
  503. package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
  504. package/docs/v1/libs/plugin/TinyVersion.md +145 -0
  505. package/docs/v1/libs/router/TinyRouter.md +216 -0
  506. package/docs/v1/libs/storage/TinyMapCache.md +219 -0
  507. package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
  508. package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
  509. package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
  510. package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
  511. package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
  512. package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
  513. package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
  514. package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
  515. package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
  516. package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
  517. package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
  518. package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
  519. package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
  520. package/docs/v1/libs/text/TinyI18.md +80 -56
  521. package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
  522. package/docs/v1/libs/tools/TinyDebugger.md +117 -1
  523. package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
  524. package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
  525. package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
  526. package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
  527. package/docs/v1/libs/tools/TinySiteMap.md +134 -0
  528. package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
  529. package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
  530. package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
  531. package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
  532. package/docs/v1/libs/tools/TinyUriParser.md +128 -0
  533. package/docs/v1/libs/utils/TinyCloner.md +126 -0
  534. package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
  535. package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
  536. package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
  537. package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
  538. package/docs/v1/regexp/Email.md +127 -0
  539. package/docs/v1/regexp/Glob.md +155 -0
  540. package/docs/v1/regexp/IPv4.md +103 -0
  541. package/docs/v1/regexp/IPv6.md +122 -0
  542. package/docs/v1/regexp/SegmentExtractor.md +120 -0
  543. package/docs/v1/regexp/UrlDetector.md +117 -0
  544. package/docs/v1/regexp/Username/Base.md +131 -0
  545. package/docs/v1/regexp/Username/Discord.md +267 -0
  546. package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
  547. package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +565 -0
  548. package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +19 -7
  549. package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
  550. package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
  551. package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
  552. package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
  553. package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
  554. package/package.json +340 -22
  555. package/types/EventEmitter.d.ts +48 -0
  556. package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
@@ -1,38 +1,93 @@
1
1
  'use strict';
2
2
 
3
3
  /**
4
- * @fileoverview Array comparison utility.
4
+ * @fileoverview Array comparison utility with deep object diffing capabilities.
5
5
  * @module TinyArrayComparator
6
6
  */
7
7
 
8
8
  /**
9
- * @template {any} ArrayItem
9
+ * @template Item
10
+ * @typedef {Object} HashEntry
11
+ * @property {Item} item - The original item stored in the map.
12
+ * @property {string} hash - The calculated hash representing the item's value.
13
+ */
14
+
15
+ // STRUCTURAL TRANSFORMATION & TYPE DERIVATION:
16
+ // Here we remove 'any' and use 'Partial<Item>' and Mapped Types.
17
+ // VSCode/Intellisense will now know exactly which keys exist within 'added', 'deleted', and 'modified',
18
+ // deriving the types directly from the data structure you pass to the class.
19
+
20
+ /**
21
+ * @template Item
22
+ * @typedef {Object} ObjectDiff
23
+ * @property {Partial<Item>} added - Properties added in the new object.
24
+ * @property {Partial<Item>} deleted - Properties removed from the old object.
25
+ * @property {Partial<{ [K in keyof Item]: { oldValue: Item[K], newValue: Item[K] } }>} modified - Properties that changed value.
26
+ * @property {Partial<{ [K in keyof Item]: ObjectDiff<Item[K]> }>} nested - Nested differences for nested objects.
27
+ */
28
+
29
+ // ADVANCED PATTERN MATCHING:
30
+ // We use a discriminated union (status) so the IDE knows that 'oldItem' and 'details'
31
+ // only make sense (or are more relevant) in contexts where the change requires it.
32
+
33
+ /**
34
+ * @template Item
35
+ * @typedef {Object} DiffResult
36
+ * @property {Item} item - The item that was affected.
37
+ * @property {Item} [oldItem] - The original item before the change (only for 'edited' status).
38
+ * @property {'added'|'deleted'|'edited'} status - The nature of the change.
39
+ * @property {ObjectDiff<Item>} [details] - Detailed property changes (only if status is 'edited' and deepComparison is enabled).
40
+ */
41
+
42
+ /**
43
+ * @template Item
10
44
  * @typedef {Object} InternalState
11
45
  * Holds the internal tracking variables during the comparison process.
12
- * @property {Map<string, ArrayItem>} oldItemsMap - A map storing the hash as the key and the original item as the value.
13
- * @property {AffectedItems<ArrayItem>} affectedItems - The final array that collects added or deleted items.
46
+ * @property {Map<string|number, HashEntry<Item>>} oldItemsMap - A map storing the identity key as the key and the hash entry as the value.
47
+ * @property {Array<DiffResult<Item>>} affectedItems - The final array that collects added, deleted, or edited items.
14
48
  */
15
49
 
16
50
  /**
17
- * The final array that collects added or deleted items.
18
- * @template {any} ArrayItem
19
- * @typedef {Array<{item: ArrayItem, status: 'added'|'deleted'}>} AffectedItems
51
+ * The final array that collects added, deleted, or edited items.
52
+ * @template Item
53
+ * @typedef {Array<DiffResult<Item>>} AffectedItems
20
54
  */
21
55
 
56
+ // ZERO-REDUNDANCY RULE:
57
+ // If 'Item' is a known object, 'idKey' will suggest the valid keys of that object (keyof Item).
58
+ // The '(string & {})' is an advanced trick to allow the user to type other strings if the base type is dynamic,
59
+ // without losing autocomplete for the known keys.
60
+
22
61
  /**
23
- * Compares two arrays efficiently by hashing their items to detect additions and deletions.
62
+ * Options to configure the comparator.
63
+ * @template Item
64
+ * @typedef {Object} ComparatorOptions
65
+ * @property {keyof Item | (string & {})} [idKey='id'] - The property name used as a unique identifier for objects to detect edits.
66
+ * @property {boolean} [deepComparison=true] - If true, provides detailed property-level diffs for edited objects.
67
+ */
68
+
69
+ /**
70
+ * Compares two arrays efficiently by hashing their items to detect additions, deletions, and edits.
24
71
  * @template {any} ArrayItem
25
72
  */
26
73
  class TinyArrayComparator {
27
74
  /**
28
75
  * Generates a simple 32-bit integer hash converted to a base36 string.
29
- * @param {any} item - The item to be hashed (can be an object, array, string, or number).
76
+ * @param {any} item - The item to be hashed.
30
77
  * @returns {string} The unique hash representing the item's value.
78
+ * @throws {TypeError} Throws a TypeError if the item cannot be stringified due to circular references.
31
79
  */
32
80
  static generateHash(item) {
33
- const stringified = typeof item === 'object' ? JSON.stringify(item) : String(item);
34
- let hash = 0;
81
+ let stringified;
82
+ try {
83
+ stringified = typeof item === 'object' && item !== null ? JSON.stringify(item) : String(item);
84
+ } catch (error) {
85
+ throw new TypeError(
86
+ 'Failed to stringify item for hashing. Ensure the object does not have circular references.',
87
+ );
88
+ }
35
89
 
90
+ let hash = 0;
36
91
  for (let i = 0, len = stringified.length; i < len; i++) {
37
92
  const char = stringified.charCodeAt(i);
38
93
  hash = (hash << 5) - hash + char;
@@ -48,6 +103,55 @@ class TinyArrayComparator {
48
103
  */
49
104
  #oldArray = [];
50
105
 
106
+ /**
107
+ * The key used to track identity of an object (e.g., 'id', 'uuid').
108
+ * @type {string|null}
109
+ */
110
+ #idKey = null;
111
+
112
+ /**
113
+ * Detects whether deep comparison is enabled.
114
+ * @type {boolean}
115
+ */
116
+ #deepComparison = true;
117
+
118
+ /**
119
+ * Gets the current identity key.
120
+ * @returns {string|null}
121
+ */
122
+ get idKey() {
123
+ return this.#idKey;
124
+ }
125
+
126
+ /**
127
+ * Sets the identity key used for object comparison.
128
+ * @param {string|null} value - The property name to use as an identifier.
129
+ * @throws {TypeError} Throws a TypeError if the value is not a string.
130
+ */
131
+ set idKey(value) {
132
+ if (value !== null && typeof value !== 'string')
133
+ throw new TypeError('The idKey must be a string or null.');
134
+ this.#idKey = value;
135
+ }
136
+
137
+ /**
138
+ * Gets whether deep comparison is enabled.
139
+ * @returns {boolean}
140
+ */
141
+ get deepComparison() {
142
+ return this.#deepComparison;
143
+ }
144
+
145
+ /**
146
+ * Sets whether deep comparison is enabled.
147
+ * @param {boolean} value - The configuration value.
148
+ */
149
+ set deepComparison(value) {
150
+ if (typeof value !== 'boolean')
151
+ throw new TypeError('The deepComparison option must be a boolean.');
152
+ this.#deepComparison = value;
153
+ }
154
+
51
155
  /**
52
156
  * Gets the current base array used for comparisons.
53
157
  * @returns {ArrayItem[]} The current initial state of the array.
@@ -68,16 +172,25 @@ class TinyArrayComparator {
68
172
  }
69
173
 
70
174
  /**
71
- * Initializes the comparator with an optional base array.
175
+ * Initializes the comparator with an optional base array and options.
72
176
  * @param {ArrayItem[]} [oldArray] - The initial state of the array to be stored.
177
+ * @param {ComparatorOptions<ArrayItem>} [options={}] - Configuration options for the comparator.
73
178
  */
74
- constructor(oldArray) {
179
+ constructor(oldArray, options = {}) {
75
180
  if (typeof oldArray !== 'undefined') this.oldArray = oldArray;
181
+
182
+ if (typeof options.idKey === 'string') {
183
+ this.idKey = options.idKey;
184
+ }
185
+
186
+ if (typeof options.deepComparison === 'boolean') {
187
+ this.deepComparison = options.deepComparison;
188
+ }
76
189
  }
77
190
 
78
191
  /**
79
192
  * Proxy to generates a hash converted to a string.
80
- * @param {ArrayItem} item - The item to be hashed (can be an object, array, string, or number).
193
+ * @param {ArrayItem} item - The item to be hashed.
81
194
  * @returns {string} The unique hash representing the item's value.
82
195
  * @private
83
196
  */
@@ -86,7 +199,70 @@ class TinyArrayComparator {
86
199
  }
87
200
 
88
201
  /**
89
- * Compares the stored older array with a newer array and identifies missing or new items.
202
+ * Recursively compares two objects to find differences.
203
+ * @param {Object} oldObj - The original object.
204
+ * @param {Object} newObj - The modified object.
205
+ * @returns {ObjectDiff<ArrayItem>} A structured object containing the differences.
206
+ */
207
+ #getDeepDiff(oldObj, newObj) {
208
+ /** @type {ObjectDiff<ArrayItem>} */
209
+ const diff = {
210
+ added: {},
211
+ deleted: {},
212
+ modified: {},
213
+ nested: {},
214
+ };
215
+
216
+ const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);
217
+
218
+ for (const key of allKeys) {
219
+ // @ts-ignore
220
+ const oldVal = oldObj[key];
221
+ // @ts-ignore
222
+ const newVal = newObj[key];
223
+
224
+ if (!(key in oldObj)) {
225
+ // Key exists in new object but not in old
226
+ // @ts-ignore
227
+ diff.added[key] = newVal;
228
+ } else if (!(key in newObj)) {
229
+ // Key exists in old object but not in new
230
+ // @ts-ignore
231
+ diff.deleted[key] = oldVal;
232
+ } else if (
233
+ typeof oldVal === 'object' &&
234
+ oldVal !== null &&
235
+ typeof newVal === 'object' &&
236
+ newVal !== null &&
237
+ !Array.isArray(oldVal) &&
238
+ !Array.isArray(newObj)
239
+ ) {
240
+ // Both are objects, recurse
241
+ const nestedDiff = this.#getDeepDiff(oldVal, newVal);
242
+ // Only add nested if it actually contains differences
243
+ if (
244
+ Object.keys(nestedDiff.added).length > 0 ||
245
+ Object.keys(nestedDiff.deleted).length > 0 ||
246
+ Object.keys(nestedDiff.modified).length > 0 ||
247
+ Object.keys(nestedDiff.nested).length > 0
248
+ ) {
249
+ // @ts-ignore
250
+ diff.nested[key] = nestedDiff;
251
+ }
252
+ } else if (oldVal !== newVal) {
253
+ // Values are different and not objects (or one is an array)
254
+ // @ts-ignore
255
+ diff.modified[key] = {
256
+ oldValue: oldVal,
257
+ newValue: newVal,
258
+ };
259
+ }
260
+ }
261
+ return diff;
262
+ }
263
+
264
+ /**
265
+ * Compares the stored older array with a newer array and identifies added, deleted, or edited items.
90
266
  *
91
267
  * @param {ArrayItem[]} newArray - The modified state of the array.
92
268
  * @returns {AffectedItems<ArrayItem>} An array containing the affected items and their status.
@@ -104,26 +280,65 @@ class TinyArrayComparator {
104
280
 
105
281
  // Step 1: Hash and store all items from the first array
106
282
  for (const item of this.#oldArray) {
107
- const hashKey = this._generateHash(item);
108
- state.oldItemsMap.set(hashKey, item);
283
+ const hash = this._generateHash(item);
284
+
285
+ // Identity is determined by the idKey. Otherwise, it relies purely on the hash.
286
+ const identityKey =
287
+ this.#idKey !== null && item !== null && typeof item === 'object' && this.#idKey in item
288
+ ? // @ts-ignore
289
+ item[this.#idKey]
290
+ : hash;
291
+
292
+ state.oldItemsMap.set(identityKey, { item, hash });
109
293
  }
110
294
 
111
- // Step 2: Iterate through the second array to find matches or additions
295
+ // Step 2: Iterate through the second array to find matches, edits or additions
112
296
  for (const item of newArray) {
113
- const hashKey = this._generateHash(item);
297
+ const hash = this._generateHash(item);
298
+
299
+ const identityKey =
300
+ this.#idKey !== null && item !== null && typeof item === 'object' && this.#idKey in item
301
+ ? // @ts-ignore
302
+ item[this.#idKey]
303
+ : hash;
304
+
305
+ const oldData = state.oldItemsMap.get(identityKey);
306
+ if (oldData) {
307
+ if (oldData.hash === hash) {
308
+ // Item exists and the content is identical. Unchanged.
309
+ state.oldItemsMap.delete(identityKey);
310
+ } else {
311
+ // Item has the same identity but a different hash. It was edited.
312
+ /** @type {DiffResult<ArrayItem>} */
313
+ const diffResult = {
314
+ item: item,
315
+ oldItem: oldData.item,
316
+ status: 'edited',
317
+ };
318
+
319
+ // Perform deep comparison if enabled and items are objects
320
+ if (
321
+ this.#deepComparison &&
322
+ typeof item === 'object' &&
323
+ item !== null &&
324
+ typeof oldData.item === 'object' &&
325
+ oldData.item !== null
326
+ ) {
327
+ diffResult.details = this.#getDeepDiff(oldData.item, item);
328
+ }
114
329
 
115
- if (state.oldItemsMap.has(hashKey)) {
116
- // Item exists in both, so it is unchanged. Remove from map.
117
- state.oldItemsMap.delete(hashKey);
330
+ state.affectedItems.push(diffResult);
331
+ state.oldItemsMap.delete(identityKey);
332
+ }
118
333
  } else {
119
- // Item was not in the old array, so it is an addition.
334
+ // Item identity was not found in the old array. It is an addition.
120
335
  state.affectedItems.push({ item, status: 'added' });
121
336
  }
122
337
  }
123
338
 
124
339
  // Step 3: Any item left in the oldItemsMap was not present in the new array (deleted)
125
- for (const item of state.oldItemsMap.values()) {
126
- state.affectedItems.push({ item, status: 'deleted' });
340
+ for (const oldData of state.oldItemsMap.values()) {
341
+ state.affectedItems.push({ item: oldData.item, status: 'deleted' });
127
342
  }
128
343
 
129
344
  return state.affectedItems;
@@ -1,45 +1,152 @@
1
1
  /**
2
- * @fileoverview Array comparison utility.
2
+ * @fileoverview Array comparison utility with deep object diffing capabilities.
3
3
  * @module TinyArrayComparator
4
4
  */
5
- export type InternalState<ArrayItem extends any> = {
5
+ export type HashEntry<Item> = {
6
6
  /**
7
- * - A map storing the hash as the key and the original item as the value.
7
+ * - The original item stored in the map.
8
8
  */
9
- oldItemsMap: Map<string, ArrayItem>;
9
+ item: Item;
10
10
  /**
11
- * - The final array that collects added or deleted items.
11
+ * - The calculated hash representing the item's value.
12
12
  */
13
- affectedItems: AffectedItems<ArrayItem>;
13
+ hash: string;
14
+ };
15
+ export type ObjectDiff<Item> = {
16
+ /**
17
+ * - Properties added in the new object.
18
+ */
19
+ added: Partial<Item>;
20
+ /**
21
+ * - Properties removed from the old object.
22
+ */
23
+ deleted: Partial<Item>;
24
+ /**
25
+ * - Properties that changed value.
26
+ */
27
+ modified: Partial<{ [K in keyof Item]: {
28
+ oldValue: Item[K];
29
+ newValue: Item[K];
30
+ }; }>;
31
+ /**
32
+ * - Nested differences for nested objects.
33
+ */
34
+ nested: Partial<{ [K in keyof Item]: ObjectDiff<Item[K]>; }>;
35
+ };
36
+ export type DiffResult<Item> = {
37
+ /**
38
+ * - The item that was affected.
39
+ */
40
+ item: Item;
41
+ /**
42
+ * - The original item before the change (only for 'edited' status).
43
+ */
44
+ oldItem?: Item;
45
+ /**
46
+ * - The nature of the change.
47
+ */
48
+ status: 'added' | 'deleted' | 'edited';
49
+ /**
50
+ * - Detailed property changes (only if status is 'edited' and deepComparison is enabled).
51
+ */
52
+ details?: ObjectDiff<Item>;
53
+ };
54
+ export type InternalState<Item> = {
55
+ /**
56
+ * - A map storing the identity key as the key and the hash entry as the value.
57
+ */
58
+ oldItemsMap: Map<string | number, HashEntry<Item>>;
59
+ /**
60
+ * - The final array that collects added, deleted, or edited items.
61
+ */
62
+ affectedItems: Array<DiffResult<Item>>;
63
+ };
64
+ export type AffectedItems<Item> = Array<DiffResult<Item>>;
65
+ export type ComparatorOptions<Item> = {
66
+ /**
67
+ * - The property name used as a unique identifier for objects to detect edits.
68
+ */
69
+ idKey?: keyof Item | (string & {});
70
+ /**
71
+ * - If true, provides detailed property-level diffs for edited objects.
72
+ */
73
+ deepComparison?: boolean;
14
74
  };
15
- export type AffectedItems<ArrayItem extends any> = Array<{
16
- item: ArrayItem;
17
- status: 'added' | 'deleted';
18
- }>;
19
75
  /**
20
- * @template {any} ArrayItem
76
+ * @template Item
77
+ * @typedef {Object} HashEntry
78
+ * @property {Item} item - The original item stored in the map.
79
+ * @property {string} hash - The calculated hash representing the item's value.
80
+ */
81
+ /**
82
+ * @template Item
83
+ * @typedef {Object} ObjectDiff
84
+ * @property {Partial<Item>} added - Properties added in the new object.
85
+ * @property {Partial<Item>} deleted - Properties removed from the old object.
86
+ * @property {Partial<{ [K in keyof Item]: { oldValue: Item[K], newValue: Item[K] } }>} modified - Properties that changed value.
87
+ * @property {Partial<{ [K in keyof Item]: ObjectDiff<Item[K]> }>} nested - Nested differences for nested objects.
88
+ */
89
+ /**
90
+ * @template Item
91
+ * @typedef {Object} DiffResult
92
+ * @property {Item} item - The item that was affected.
93
+ * @property {Item} [oldItem] - The original item before the change (only for 'edited' status).
94
+ * @property {'added'|'deleted'|'edited'} status - The nature of the change.
95
+ * @property {ObjectDiff<Item>} [details] - Detailed property changes (only if status is 'edited' and deepComparison is enabled).
96
+ */
97
+ /**
98
+ * @template Item
21
99
  * @typedef {Object} InternalState
22
100
  * Holds the internal tracking variables during the comparison process.
23
- * @property {Map<string, ArrayItem>} oldItemsMap - A map storing the hash as the key and the original item as the value.
24
- * @property {AffectedItems<ArrayItem>} affectedItems - The final array that collects added or deleted items.
101
+ * @property {Map<string|number, HashEntry<Item>>} oldItemsMap - A map storing the identity key as the key and the hash entry as the value.
102
+ * @property {Array<DiffResult<Item>>} affectedItems - The final array that collects added, deleted, or edited items.
25
103
  */
26
104
  /**
27
- * The final array that collects added or deleted items.
28
- * @template {any} ArrayItem
29
- * @typedef {Array<{item: ArrayItem, status: 'added'|'deleted'}>} AffectedItems
105
+ * The final array that collects added, deleted, or edited items.
106
+ * @template Item
107
+ * @typedef {Array<DiffResult<Item>>} AffectedItems
108
+ */
109
+ /**
110
+ * Options to configure the comparator.
111
+ * @template Item
112
+ * @typedef {Object} ComparatorOptions
113
+ * @property {keyof Item | (string & {})} [idKey='id'] - The property name used as a unique identifier for objects to detect edits.
114
+ * @property {boolean} [deepComparison=true] - If true, provides detailed property-level diffs for edited objects.
30
115
  */
31
116
  /**
32
- * Compares two arrays efficiently by hashing their items to detect additions and deletions.
117
+ * Compares two arrays efficiently by hashing their items to detect additions, deletions, and edits.
33
118
  * @template {any} ArrayItem
34
119
  */
35
120
  declare class TinyArrayComparator<ArrayItem extends any> {
36
121
  #private;
37
122
  /**
38
123
  * Generates a simple 32-bit integer hash converted to a base36 string.
39
- * @param {any} item - The item to be hashed (can be an object, array, string, or number).
124
+ * @param {any} item - The item to be hashed.
40
125
  * @returns {string} The unique hash representing the item's value.
126
+ * @throws {TypeError} Throws a TypeError if the item cannot be stringified due to circular references.
41
127
  */
42
128
  static generateHash(item: any): string;
129
+ /**
130
+ * Gets the current identity key.
131
+ * @returns {string|null}
132
+ */
133
+ get idKey(): string | null;
134
+ /**
135
+ * Sets the identity key used for object comparison.
136
+ * @param {string|null} value - The property name to use as an identifier.
137
+ * @throws {TypeError} Throws a TypeError if the value is not a string.
138
+ */
139
+ set idKey(value: string | null);
140
+ /**
141
+ * Gets whether deep comparison is enabled.
142
+ * @returns {boolean}
143
+ */
144
+ get deepComparison(): boolean;
145
+ /**
146
+ * Sets whether deep comparison is enabled.
147
+ * @param {boolean} value - The configuration value.
148
+ */
149
+ set deepComparison(value: boolean);
43
150
  /**
44
151
  * Gets the current base array used for comparisons.
45
152
  * @returns {ArrayItem[]} The current initial state of the array.
@@ -52,19 +159,20 @@ declare class TinyArrayComparator<ArrayItem extends any> {
52
159
  */
53
160
  set oldArray(oldArray: ArrayItem[]);
54
161
  /**
55
- * Initializes the comparator with an optional base array.
162
+ * Initializes the comparator with an optional base array and options.
56
163
  * @param {ArrayItem[]} [oldArray] - The initial state of the array to be stored.
164
+ * @param {ComparatorOptions<ArrayItem>} [options={}] - Configuration options for the comparator.
57
165
  */
58
- constructor(oldArray?: ArrayItem[]);
166
+ constructor(oldArray?: ArrayItem[], options?: ComparatorOptions<ArrayItem>);
59
167
  /**
60
168
  * Proxy to generates a hash converted to a string.
61
- * @param {ArrayItem} item - The item to be hashed (can be an object, array, string, or number).
169
+ * @param {ArrayItem} item - The item to be hashed.
62
170
  * @returns {string} The unique hash representing the item's value.
63
171
  * @private
64
172
  */
65
173
  private _generateHash;
66
174
  /**
67
- * Compares the stored older array with a newer array and identifies missing or new items.
175
+ * Compares the stored older array with a newer array and identifies added, deleted, or edited items.
68
176
  *
69
177
  * @param {ArrayItem[]} newArray - The modified state of the array.
70
178
  * @returns {AffectedItems<ArrayItem>} An array containing the affected items and their status.
@@ -1 +1 @@
1
- {"version":3,"file":"TinyArrayComparator.d.mts","sourceRoot":"","sources":["../../../../src/v1/libs/array/TinyArrayComparator.mjs"],"names":[],"mappings":"AAAA;;;GAGG;AAIA,YAAkB,aAAa,CADf,SAAS,SAAd,GAAc,IAGzB;;;;IAAmC,WAAW,EAAnC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CACjC;;;;IAAqC,aAAa,EAAvC,aAAa,CAAC,SAAS,CAAC,CACrC;CAAA,CAAA;AAKE,YAA+D,aAAa,CAD5D,SAAS,SAAd,GAAc,IACf,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,OAAO,GAAC,SAAS,CAAA;CAAC,CAAC,CAAe;AAX/E;;;;;;GAMG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH,cAAM,mBAAmB,CAFN,SAAS,SAAd,GAAc;;IAG1B;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAHb,GAGa,GAFX,MAAM,CAalB;IAQD;;;OAGG;IACH,IAAI,QAAQ,IAFC,SAAS,EAAE,CAIvB;IAED;;;;OAIG;IACH,IAAI,QAAQ,CAAC,QAAQ,EAHV,SAAS,EAGC,EAIpB;IAED;;;OAGG;IACH,YAAY,QAAQ,AAFjB,CACF,EADU,SAAS,EAEA,EAEnB;IAED;;;;;OAKG;YACH,aAAa;IAIb;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAJL,SAAS,EAIJ,GAHH,aAAa,CAAC,SAAS,CAAC,CAsCpC;CACF;eAEc,mBAAmB"}
1
+ {"version":3,"file":"TinyArrayComparator.d.mts","sourceRoot":"","sources":["../../../../src/v1/libs/array/TinyArrayComparator.mjs"],"names":[],"mappings":"AAAA;;;GAGG;AAIA,YAAkB,SAAS,CADjB,IAAI,IAEd;;;;IAAiB,IAAI,EAAV,IAAI,CACf;;;;IAAmB,IAAI,EAAZ,MAAM,CACnB;CAAA,CAAA;AASE,YAAkB,UAAU,CADlB,IAAI,IAEd;;;;IAA0B,KAAK,EAApB,OAAO,CAAC,IAAI,CAAC,CACxB;;;;IAA0B,OAAO,EAAtB,OAAO,CAAC,IAAI,CAAC,CACxB;;;;IAAqF,QAAQ,EAAlF,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG;QAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAAE,GAAE,CAAC,CACnF;;;;IAAgE,MAAM,EAA3D,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,CAChE;CAAA,CAAA;AAQE,YAAkB,UAAU,CADlB,IAAI,IAEd;;;;IAAiB,IAAI,EAAV,IAAI,CACf;;;;IAAkB,OAAO,AAAzB,CACA,EADW,IAAI,CACf;;;;IAAuC,MAAM,EAAlC,OAAO,GAAC,SAAS,GAAC,QAAQ,CACrC;;;;IAA8B,OAAO,AAArC,CACF,EADa,UAAU,CAAC,IAAI,CAAC,CAC7B;CAAA,CAAA;AAIE,YAAkB,aAAa,CADrB,IAAI,IAGd;;;;IAAgD,WAAW,EAAhD,GAAG,CAAC,MAAM,GAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAC9C;;;;IAAoC,aAAa,EAAtC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CACpC;CAAA,CAAA;AAKE,YAAmC,aAAa,CADtC,IAAI,IACJ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAe;AAWhD,YAAkB,iBAAiB,CADzB,IAAI,IAEd;;;;IAAwC,KAAK,AAA7C,CACA,EADW,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CACrC;;;;IAAqB,cAAc,AAAnC,CACF,EADa,OAAO,CACpB;CAAA,CAAA;AA3DD;;;;;GAKG;AAOH;;;;;;;GAOG;AAMH;;;;;;;GAOG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AAOH;;;;;;GAMG;AAEH;;;GAGG;AACH,cAAM,mBAAmB,CAFN,SAAS,SAAd,GAAc;;IAG1B;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAJb,GAIa,GAHX,MAAM,CAqBlB;IAoBD;;;OAGG;IACH,IAAI,KAAK,IAFI,MAAM,GAAC,IAAI,CAIvB;IAED;;;;OAIG;IACH,IAAI,KAAK,CAAC,KAAK,EAHJ,MAAM,GAAC,IAGH,EAId;IAED;;;OAGG;IACH,IAAI,cAAc,IAFL,OAAO,CAInB;IAED;;;OAGG;IACH,IAAI,cAAc,CAAC,KAAK,EAFb,OAEa,EAIvB;IAED;;;OAGG;IACH,IAAI,QAAQ,IAFC,SAAS,EAAE,CAIvB;IAED;;;;OAIG;IACH,IAAI,QAAQ,CAAC,QAAQ,EAHV,SAAS,EAGC,EAIpB;IAED;;;;OAIG;IACH,YAAY,QAAQ,AAHjB,CACA,EADQ,SAAS,EAGA,EAAE,OAAO,AAF1B,CACF,EADU,iBAAiB,CAAC,SAAS,CAEJ,EAUjC;IAED;;;;;OAKG;YACH,aAAa;IAmEb;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAJL,SAAS,EAIJ,GAHH,aAAa,CAAC,SAAS,CAAC,CA6EpC;CACF;eAEc,mBAAmB"}