tiny-essentials 1.28.18 → 1.29.0

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 (567) 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/dist/v1/ColorSafeStringify.min.js +1 -1
  5. package/dist/v1/TinyAdvancedRaffle.min.js +1 -1
  6. package/dist/v1/TinyAfterScrollWatcher.min.js +1 -1
  7. package/dist/v1/TinyAnalogClock.min.js +1 -1
  8. package/dist/v1/TinyArrayComparator.min.js +1 -1
  9. package/dist/v1/TinyArrayPaginator.min.js +1 -1
  10. package/dist/v1/TinyBasicsEs.min.js +1 -1
  11. package/dist/v1/TinyBrowserMonitor.min.js +1 -0
  12. package/dist/v1/TinyClassManager.min.js +1 -1
  13. package/dist/v1/TinyClipboard.min.js +1 -1
  14. package/dist/v1/TinyCloner.min.js +1 -0
  15. package/dist/v1/TinyColorConverter.min.js +1 -1
  16. package/dist/v1/TinyColorValidator.min.js +1 -1
  17. package/dist/v1/TinyCookieConsent.min.js +1 -1
  18. package/dist/v1/TinyDayNightCycle.min.js +1 -1
  19. package/dist/v1/TinyDebugger.min.js +1 -1
  20. package/dist/v1/TinyDomReadyManager.min.js +1 -1
  21. package/dist/v1/TinyDragDropDetector.min.js +1 -1
  22. package/dist/v1/TinyDragger.min.js +1 -1
  23. package/dist/v1/TinyElementObserver.min.js +1 -1
  24. package/dist/v1/TinyEssentials.min.js +1 -1
  25. package/dist/v1/TinyGamepad.min.js +1 -1
  26. package/dist/v1/TinyHtml.min.js +1 -1
  27. package/dist/v1/TinyHtmlTagRegexBuilder.min.js +1 -0
  28. package/dist/v1/TinyHttpResponseRegistry.min.js +1 -0
  29. package/dist/v1/TinyI18.min.js +1 -1
  30. package/dist/v1/TinyIframeEvents.min.js +1 -1
  31. package/dist/v1/TinyInventory.min.js +1 -1
  32. package/dist/v1/TinyInventoryTrader.min.js +1 -1
  33. package/dist/v1/TinyLevelUp.min.js +1 -1
  34. package/dist/v1/TinyLoadingScreen.min.js +1 -1
  35. package/dist/v1/TinyLocalStorage.min.js +1 -1
  36. package/dist/v1/TinyMaInSys.min.js +1 -1
  37. package/dist/v1/TinyMapCache.min.js +1 -0
  38. package/dist/v1/TinyMediaPlayer.min.js +1 -1
  39. package/dist/v1/TinyNeedBar.min.js +1 -1
  40. package/dist/v1/TinyNewWinEvents.min.js +1 -1
  41. package/dist/v1/TinyNotificationAdapter.min.js +1 -0
  42. package/dist/v1/TinyNotifications.min.js +1 -1
  43. package/dist/v1/TinyNotifyCenter.min.js +1 -1
  44. package/dist/v1/TinyOPFSFileSystem.min.js +1 -0
  45. package/dist/v1/TinyPasswordValidator.min.js +1 -0
  46. package/dist/v1/TinyPluginPackage.min.js +1 -0
  47. package/dist/v1/TinyPromiseQueue.min.js +1 -1
  48. package/dist/v1/TinyPushManager.min.js +1 -0
  49. package/dist/v1/TinyPushPayload.min.js +1 -0
  50. package/dist/v1/TinyPushRouter.min.js +1 -0
  51. package/dist/v1/TinyRadioFm.min.js +1 -1
  52. package/dist/v1/TinyRateLimiter.min.js +1 -1
  53. package/dist/v1/TinyRegexEs.min.js +1 -0
  54. package/dist/v1/TinyRouter.min.js +1 -0
  55. package/dist/v1/TinyServiceWorker.min.js +1 -0
  56. package/dist/v1/TinyServiceWorkerEngine.min.js +1 -0
  57. package/dist/v1/TinySetMapPackage.min.js +1 -0
  58. package/dist/v1/TinySimpleDice.min.js +1 -1
  59. package/dist/v1/TinySmartScroller.min.js +1 -1
  60. package/dist/v1/TinyStorageBucketFileSystem.min.js +1 -0
  61. package/dist/v1/TinyTextDiffer.min.js +1 -1
  62. package/dist/v1/TinyTextRangeEditor.min.js +1 -1
  63. package/dist/v1/TinyTextarea.min.js +1 -1
  64. package/dist/v1/TinyThrottledApi.min.js +1 -0
  65. package/dist/v1/TinyTimeout.min.js +1 -1
  66. package/dist/v1/TinyToastNotify.min.js +1 -1
  67. package/dist/v1/TinyUploadClicker.min.js +1 -1
  68. package/dist/v1/TinyUriParser.min.js +1 -0
  69. package/dist/v1/TinyVersion.min.js +1 -0
  70. package/dist/v1/TinyWebWorker.min.js +1 -0
  71. package/dist/v1/TinyWebWorkerEngine.min.js +1 -0
  72. package/dist/v1/UltraRandomMsgGen.min.js +1 -1
  73. package/dist/v1/basics/array.cjs +2 -2
  74. package/dist/v1/basics/array.d.mts +2 -0
  75. package/dist/v1/basics/array.d.mts.map +1 -1
  76. package/dist/v1/basics/array.mjs +2 -1
  77. package/dist/v1/basics/browserDetector.cjs +37 -12
  78. package/dist/v1/basics/browserDetector.d.mts +8 -0
  79. package/dist/v1/basics/browserDetector.d.mts.map +1 -1
  80. package/dist/v1/basics/browserDetector.mjs +32 -13
  81. package/dist/v1/basics/crypto.cjs +23 -0
  82. package/dist/v1/basics/crypto.d.mts +10 -0
  83. package/dist/v1/basics/crypto.d.mts.map +1 -0
  84. package/dist/v1/basics/crypto.mjs +18 -0
  85. package/dist/v1/basics/html.cjs +0 -3
  86. package/dist/v1/basics/html.d.mts.map +1 -1
  87. package/dist/v1/basics/html.mjs +0 -2
  88. package/dist/v1/basics/index.cjs +8 -1
  89. package/dist/v1/basics/index.d.mts +6 -5
  90. package/dist/v1/basics/index.d.mts.map +1 -1
  91. package/dist/v1/basics/index.mjs +6 -5
  92. package/dist/v1/basics/objChecker.cjs +88 -0
  93. package/dist/v1/basics/objChecker.d.mts +26 -0
  94. package/dist/v1/basics/objChecker.d.mts.map +1 -1
  95. package/dist/v1/basics/objChecker.mjs +74 -0
  96. package/dist/v1/basics/objFilter.cjs +234 -93
  97. package/dist/v1/basics/objFilter.d.mts +96 -22
  98. package/dist/v1/basics/objFilter.d.mts.map +1 -1
  99. package/dist/v1/basics/objFilter.mjs +216 -92
  100. package/dist/v1/basics/promiseUtils.cjs +48 -12
  101. package/dist/v1/basics/promiseUtils.d.mts +45 -12
  102. package/dist/v1/basics/promiseUtils.d.mts.map +1 -1
  103. package/dist/v1/basics/promiseUtils.mjs +47 -12
  104. package/dist/v1/basics/text.cjs +0 -12
  105. package/dist/v1/basics/text.d.mts +0 -10
  106. package/dist/v1/basics/text.d.mts.map +1 -1
  107. package/dist/v1/basics/text.mjs +0 -10
  108. package/dist/v1/css/TinyCookieConsent.min.css +1 -0
  109. package/dist/v1/css/TinyCookieConsent.min.css.map +1 -0
  110. package/dist/v1/css/TinyDraggerExample.min.css +1 -0
  111. package/dist/v1/css/TinyDraggerExample.min.css.map +1 -0
  112. package/dist/v1/css/TinyLoadingScreen.min.css +1 -0
  113. package/dist/v1/css/TinyLoadingScreen.min.css.map +1 -0
  114. package/dist/v1/css/TinyNotify.min.css +1 -0
  115. package/dist/v1/css/TinyNotify.min.css.map +1 -0
  116. package/dist/v1/css/aiMarker.min.css +1 -0
  117. package/dist/v1/css/aiMarker.min.css.map +1 -0
  118. package/dist/v1/index.cjs +88 -3
  119. package/dist/v1/index.d.mts +31 -6
  120. package/dist/v1/index.d.mts.map +1 -1
  121. package/dist/v1/index.mjs +32 -7
  122. package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
  123. package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
  124. package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
  125. package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
  126. package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
  127. package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
  128. package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
  129. package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
  130. package/dist/v1/libs/fs/constants.cjs +74 -0
  131. package/dist/v1/libs/fs/constants.d.mts +22 -0
  132. package/dist/v1/libs/fs/constants.d.mts.map +1 -0
  133. package/dist/v1/libs/fs/constants.mjs +53 -0
  134. package/dist/v1/libs/fs/encoding.cjs +118 -0
  135. package/dist/v1/libs/fs/encoding.d.mts +50 -0
  136. package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
  137. package/dist/v1/libs/fs/encoding.mjs +102 -0
  138. package/dist/v1/libs/fs/error.cjs +188 -0
  139. package/dist/v1/libs/fs/error.d.mts +105 -0
  140. package/dist/v1/libs/fs/error.d.mts.map +1 -0
  141. package/dist/v1/libs/fs/error.mjs +158 -0
  142. package/dist/v1/libs/fs/handle.cjs +121 -0
  143. package/dist/v1/libs/fs/handle.d.mts +56 -0
  144. package/dist/v1/libs/fs/handle.d.mts.map +1 -0
  145. package/dist/v1/libs/fs/handle.mjs +100 -0
  146. package/dist/v1/libs/fs/index.cjs +700 -0
  147. package/dist/v1/libs/fs/index.d.mts +377 -0
  148. package/dist/v1/libs/fs/index.d.mts.map +1 -0
  149. package/dist/v1/libs/fs/index.mjs +630 -0
  150. package/dist/v1/libs/fs/path.cjs +234 -0
  151. package/dist/v1/libs/fs/path.d.mts +176 -0
  152. package/dist/v1/libs/fs/path.d.mts.map +1 -0
  153. package/dist/v1/libs/fs/path.mjs +197 -0
  154. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
  155. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
  156. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
  157. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
  158. package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
  159. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
  160. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
  161. package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
  162. package/dist/v1/libs/fs/stats.cjs +245 -0
  163. package/dist/v1/libs/fs/stats.d.mts +226 -0
  164. package/dist/v1/libs/fs/stats.d.mts.map +1 -0
  165. package/dist/v1/libs/fs/stats.mjs +197 -0
  166. package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
  167. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
  168. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
  169. package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
  170. package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
  171. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
  172. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
  173. package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
  174. package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
  175. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
  176. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
  177. package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
  178. package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
  179. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
  180. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
  181. package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
  182. package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
  183. package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
  184. package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
  185. package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
  186. package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
  187. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
  188. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
  189. package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
  190. package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
  191. package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
  192. package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
  193. package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
  194. package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
  195. package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
  196. package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
  197. package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
  198. package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
  199. package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
  200. package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
  201. package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
  202. package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
  203. package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
  204. package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
  205. package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
  206. package/dist/v1/libs/router/TinyRouter.cjs +661 -0
  207. package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
  208. package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
  209. package/dist/v1/libs/router/TinyRouter.mjs +572 -0
  210. package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
  211. package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
  212. package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
  213. package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
  214. package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
  215. package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
  216. package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
  217. package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
  218. package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
  219. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
  220. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
  221. package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
  222. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
  223. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
  224. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
  225. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
  226. package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
  227. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
  228. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
  229. package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
  230. package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
  231. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
  232. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
  233. package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
  234. package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
  235. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
  236. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
  237. package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
  238. package/dist/v1/libs/sw/browser/utils.cjs +28 -0
  239. package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
  240. package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
  241. package/dist/v1/libs/sw/browser/utils.mjs +21 -0
  242. package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
  243. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
  244. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
  245. package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
  246. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
  247. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
  248. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
  249. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
  250. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
  251. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
  252. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
  253. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
  254. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
  255. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
  256. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
  257. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
  258. package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
  259. package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
  260. package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
  261. package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
  262. package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
  263. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
  264. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
  265. package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
  266. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
  267. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
  268. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
  269. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
  270. package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
  271. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
  272. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
  273. package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
  274. package/dist/v1/libs/sw/utils.cjs +57 -0
  275. package/dist/v1/libs/sw/utils.d.mts +173 -0
  276. package/dist/v1/libs/sw/utils.d.mts.map +1 -0
  277. package/dist/v1/libs/sw/utils.mjs +50 -0
  278. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
  279. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
  280. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
  281. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
  282. package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
  283. package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
  284. package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
  285. package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
  286. package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
  287. package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
  288. package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
  289. package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
  290. package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
  291. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
  292. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
  293. package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
  294. package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
  295. package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
  296. package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
  297. package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
  298. package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
  299. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
  300. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
  301. package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
  302. package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
  303. package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
  304. package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
  305. package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
  306. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
  307. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
  308. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
  309. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
  310. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
  311. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
  312. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
  313. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
  314. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
  315. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
  316. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
  317. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
  318. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
  319. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
  320. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
  321. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
  322. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
  323. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
  324. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
  325. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
  326. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
  327. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
  328. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
  329. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
  330. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
  331. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
  332. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
  333. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
  334. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
  335. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
  336. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
  337. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
  338. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
  339. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
  340. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
  341. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
  342. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
  343. package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
  344. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
  345. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
  346. package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
  347. package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
  348. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
  349. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
  350. package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
  351. package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
  352. package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
  353. package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
  354. package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
  355. package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
  356. package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
  357. package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
  358. package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
  359. package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
  360. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
  361. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
  362. package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
  363. package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
  364. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
  365. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
  366. package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
  367. package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
  368. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
  369. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
  370. package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
  371. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
  372. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
  373. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
  374. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
  375. package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
  376. package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
  377. package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
  378. package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
  379. package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
  380. package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
  381. package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
  382. package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
  383. package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
  384. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
  385. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
  386. package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
  387. package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
  388. package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
  389. package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
  390. package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
  391. package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
  392. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
  393. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
  394. package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
  395. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
  396. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
  397. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
  398. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
  399. package/dist/v1/regexp/Email.cjs +185 -0
  400. package/dist/v1/regexp/Email.d.mts +73 -0
  401. package/dist/v1/regexp/Email.d.mts.map +1 -0
  402. package/dist/v1/regexp/Email.mjs +153 -0
  403. package/dist/v1/regexp/Glob.cjs +293 -0
  404. package/dist/v1/regexp/Glob.d.mts +45 -0
  405. package/dist/v1/regexp/Glob.d.mts.map +1 -0
  406. package/dist/v1/regexp/Glob.mjs +260 -0
  407. package/dist/v1/regexp/Ipv4.cjs +57 -0
  408. package/dist/v1/regexp/Ipv4.d.mts +29 -0
  409. package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
  410. package/dist/v1/regexp/Ipv4.mjs +45 -0
  411. package/dist/v1/regexp/Ipv6.cjs +67 -0
  412. package/dist/v1/regexp/Ipv6.d.mts +29 -0
  413. package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
  414. package/dist/v1/regexp/Ipv6.mjs +54 -0
  415. package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
  416. package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
  417. package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
  418. package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
  419. package/dist/v1/regexp/UrlDetector.cjs +125 -0
  420. package/dist/v1/regexp/UrlDetector.d.mts +67 -0
  421. package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
  422. package/dist/v1/regexp/UrlDetector.mjs +102 -0
  423. package/dist/v1/regexp/Username/index.cjs +233 -0
  424. package/dist/v1/regexp/Username/index.d.mts +77 -0
  425. package/dist/v1/regexp/Username/index.d.mts.map +1 -0
  426. package/dist/v1/regexp/Username/index.mjs +199 -0
  427. package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
  428. package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
  429. package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
  430. package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
  431. package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
  432. package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
  433. package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
  434. package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
  435. package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
  436. package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
  437. package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
  438. package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
  439. package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
  440. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
  441. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
  442. package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
  443. package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
  444. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
  445. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
  446. package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
  447. package/dist/v1/regexp/Username/templates/index.cjs +11 -0
  448. package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
  449. package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
  450. package/dist/v1/regexp/Username/templates/index.mjs +4 -0
  451. package/dist/v1/regexp/index.cjs +41 -0
  452. package/dist/v1/regexp/index.d.mts +9 -0
  453. package/dist/v1/regexp/index.d.mts.map +1 -0
  454. package/dist/v1/regexp/index.mjs +8 -0
  455. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
  456. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
  457. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
  458. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
  459. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
  460. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
  461. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
  462. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
  463. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
  464. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
  465. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
  466. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
  467. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
  468. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
  469. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
  470. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
  471. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +725 -0
  472. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +293 -0
  473. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -0
  474. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +614 -0
  475. package/dist/v1/webTemplates/bootstrap/5.3/scss/input/Placeholder-Colors-Fix.scss +64 -0
  476. package/dist/v1/webTemplates/bootstrap/5.3/scss/spacing/Spacing-Plus.scss +31 -0
  477. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
  478. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
  479. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
  480. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
  481. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
  482. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
  483. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
  484. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
  485. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
  486. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
  487. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
  488. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
  489. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
  490. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
  491. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
  492. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
  493. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
  494. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
  495. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
  496. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
  497. package/docs/info/RegExp.md +74 -0
  498. package/docs/v1/Exports.md +111 -0
  499. package/docs/v1/README.md +117 -13
  500. package/docs/v1/basics/asyncReplace.md +2 -0
  501. package/docs/v1/basics/browserDetector.md +28 -11
  502. package/docs/v1/basics/crypto.md +85 -0
  503. package/docs/v1/basics/deprecated/html.md +2 -0
  504. package/docs/v1/basics/deprecated/objFilter.md +2 -0
  505. package/docs/v1/basics/html.md +2 -0
  506. package/docs/v1/basics/objChecker.md +55 -0
  507. package/docs/v1/basics/objFilter.md +57 -86
  508. package/docs/v1/basics/promiseUtils.md +12 -3
  509. package/docs/v1/basics/text.md +0 -1
  510. package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
  511. package/docs/v1/libs/fs/TinyFS.md +752 -0
  512. package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
  513. package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
  514. package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
  515. package/docs/v1/libs/plugin/TinyVersion.md +145 -0
  516. package/docs/v1/libs/router/TinyRouter.md +216 -0
  517. package/docs/v1/libs/storage/TinyMapCache.md +219 -0
  518. package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
  519. package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
  520. package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
  521. package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
  522. package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
  523. package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
  524. package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
  525. package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
  526. package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
  527. package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
  528. package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
  529. package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
  530. package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
  531. package/docs/v1/libs/text/TinyI18.md +80 -56
  532. package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
  533. package/docs/v1/libs/tools/TinyDebugger.md +117 -1
  534. package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
  535. package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
  536. package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
  537. package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
  538. package/docs/v1/libs/tools/TinySiteMap.md +134 -0
  539. package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
  540. package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
  541. package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
  542. package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
  543. package/docs/v1/libs/tools/TinyUriParser.md +128 -0
  544. package/docs/v1/libs/utils/TinyCloner.md +126 -0
  545. package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
  546. package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
  547. package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
  548. package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
  549. package/docs/v1/regexp/Email.md +127 -0
  550. package/docs/v1/regexp/Glob.md +155 -0
  551. package/docs/v1/regexp/IPv4.md +103 -0
  552. package/docs/v1/regexp/IPv6.md +122 -0
  553. package/docs/v1/regexp/SegmentExtractor.md +120 -0
  554. package/docs/v1/regexp/UrlDetector.md +117 -0
  555. package/docs/v1/regexp/Username/Base.md +131 -0
  556. package/docs/v1/regexp/Username/Discord.md +267 -0
  557. package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
  558. package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +569 -0
  559. package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +174 -0
  560. package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
  561. package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
  562. package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
  563. package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
  564. package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
  565. package/package.json +313 -18
  566. package/types/EventEmitter.d.ts +48 -0
  567. package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
@@ -0,0 +1,294 @@
1
+ import { EventEmitter } from 'events';
2
+ import TinyPromiseQueue from './TinyPromiseQueue.mjs';
3
+ import { waitForTrue } from '../../basics/promiseUtils.mjs';
4
+ import TinyTimeout from '../math/TinyTimeout.mjs';
5
+ import { createCheckDestroyed } from './tools.mjs';
6
+ const checkDestroy = createCheckDestroyed('TinyThrottledApi');
7
+ /**
8
+ * @template T
9
+ * @typedef {Promise<T>} QueueResult
10
+ * Represents the eventual result of a queued operation.
11
+ */
12
+ /**
13
+ * Event map for {@link TinyThrottledApi}.
14
+ * @typedef {Object} TinyThrottledApiEvents
15
+ * @property {(id: string) => void} ExecTask - Emitted when a task starts executing.
16
+ * @property {(id: string) => void} TaskEnded - Emitted when a task finishes executing.
17
+ * @property {(id: string) => void} WaitingTask - Emitted when a task is queued and waiting for a slot.
18
+ * @property {() => void} Destroyed - Emitted when the instance is destroyed.
19
+ * @property {(value: number) => void} SetConcurrencyLimit - Emitted when the concurrency limit changes.
20
+ * @property {(value: number) => void} SetTimeoutValue - Emitted when the timeout value changes.
21
+ * @property {(value: number) => void} SetTimeoutLimit - Emitted when the timeout limit changes.
22
+ */
23
+ /** @type {new () => import('../../jsdoc/EventEmitter.mjs').ICustomEventEmitter<TinyThrottledApiEvents>} */
24
+ const TypedEventEmitter = /** @type {any} */ (EventEmitter);
25
+ /**
26
+ * A client that manages asynchronous requests with a concurrency limit.
27
+ * It uses TinyPromiseQueue to manage waiting tasks and waitForTrue to poll for availability.
28
+ * @template {(...args: any) => Promise<any>} API
29
+ */
30
+ class TinyThrottledApi extends TypedEventEmitter {
31
+ static TinyTimeout = TinyTimeout;
32
+ /** @type {number} The current number of active asynchronous operations. */
33
+ #activeCount = 0;
34
+ /** @type {number} The maximum number of concurrent operations allowed. */
35
+ #concurrencyLimit;
36
+ /** @type {TinyPromiseQueue} The internal queue used to manage pending tasks. */
37
+ #queue = new TinyPromiseQueue();
38
+ /** @type {API} The target API function to be executed. */
39
+ #api;
40
+ /** @type {TinyTimeout|null} The optional timeout instance to regulate execution frequency. */
41
+ #timeoutInstance;
42
+ /** @type {number} - Base delay multiplier in milliseconds. */
43
+ #timeoutValue = 100;
44
+ /** @type {number|null} - Optional maximum delay cap. */
45
+ #timeoutLimit = 5000;
46
+ /** @type {boolean} Indicates whether the instance has been destroyed. */
47
+ #isDestroyed = false;
48
+ /** @type {boolean} Indicates whether the first execution should be delayed by the timeout. */
49
+ #timeoutFirst = false;
50
+ /**
51
+ * Initializes a new instance of the TinyThrottledApi class.
52
+ *
53
+ * @param {number} concurrencyLimit - The maximum number of simultaneous requests.
54
+ * @param {API} api - The API implementation.
55
+ * @param {TinyTimeout|null} [timeoutInstance=null] - Optional TinyTimeout instance to regulate execution frequency.
56
+ * @throws {TypeError} If concurrencyLimit is not a positive number.
57
+ * @throws {TypeError} If API is not a function.
58
+ */
59
+ constructor(concurrencyLimit, api, timeoutInstance = null) {
60
+ super();
61
+ if (typeof concurrencyLimit !== 'number' || concurrencyLimit <= 0) {
62
+ throw new TypeError('Concurrency limit must be a positive number.');
63
+ }
64
+ if (typeof api !== 'function') {
65
+ throw new TypeError('API must be a function.');
66
+ }
67
+ if (typeof timeoutInstance !== 'undefined' &&
68
+ timeoutInstance !== null &&
69
+ !(timeoutInstance instanceof TinyTimeout)) {
70
+ throw new TypeError('timeoutInstance must be a TinyTimeout instance.');
71
+ }
72
+ this.#concurrencyLimit = concurrencyLimit;
73
+ this.#api = api;
74
+ this.#timeoutInstance = timeoutInstance ?? null;
75
+ }
76
+ /**
77
+ * Executes an API request, respecting the concurrency limit and optional rate limiting.
78
+ *
79
+ * @param {Parameters<API>} args
80
+ * @returns {QueueResult<ReturnType<API>>} A promise that resolves with the API result.
81
+ * @throws {TypeError} If the internal state is corrupted.
82
+ */
83
+ async exec(...args) {
84
+ checkDestroy(this.#isDestroyed);
85
+ const id = crypto.randomUUID(); // Using UUID for better collision resistance
86
+ // If we are under the limit, reserve the slot SYNCHRONOUSLY to prevent race conditions.
87
+ if (this.#activeCount < this.#concurrencyLimit) {
88
+ this.#activeCount++;
89
+ this.emit('ExecTask', id);
90
+ const final = await this.#performRequest(...args);
91
+ this.emit('TaskEnded', id);
92
+ return final;
93
+ }
94
+ // If we reached the limit, queue a task that waits for a slot.
95
+ return this.#queue.enqueue(async () => {
96
+ this.emit('WaitingTask', id);
97
+ // The task in the queue waits until a slot is available via polling.
98
+ const waitCounter = () => waitForTrue(() => this.#activeCount < this.#concurrencyLimit);
99
+ // If a TinyTimeout instance is provided, we wait for its next scheduled "tick".
100
+ // This introduces a dynamic delay that increases as more tasks are processed.
101
+ const waitTimeout = async () => {
102
+ if (this.#timeoutInstance) {
103
+ await new Promise((resolve) => {
104
+ // We use a constant ID so the frequency is tracked across all calls to this instance.
105
+ if (this.#timeoutInstance)
106
+ this.#timeoutInstance.set('api_throttle', resolve, this.#timeoutValue, this.#timeoutLimit);
107
+ else
108
+ resolve(undefined);
109
+ });
110
+ }
111
+ };
112
+ if (this.#timeoutFirst) {
113
+ await waitTimeout();
114
+ await waitCounter();
115
+ }
116
+ else {
117
+ await waitCounter();
118
+ await waitTimeout();
119
+ }
120
+ // Once available and the throttle allows, we reserve the slot.
121
+ this.#activeCount++;
122
+ this.emit('ExecTask', id);
123
+ const final = await this.#performRequest(...args);
124
+ this.emit('TaskEnded', id);
125
+ return final;
126
+ }, undefined, id);
127
+ }
128
+ /**
129
+ * Cleans up the instance, removing all listeners and stopping pending tasks.
130
+ * @returns {void}
131
+ */
132
+ destroy() {
133
+ if (this.#isDestroyed)
134
+ return;
135
+ this.removeAllListeners();
136
+ this.#isDestroyed = true;
137
+ this.emit('Destroyed');
138
+ }
139
+ /**
140
+ * Internal method to handle the actual execution and counter management.
141
+ *
142
+ * @param {Parameters<API>} args
143
+ * @returns {QueueResult<ReturnType<API>>}
144
+ */
145
+ async #performRequest(...args) {
146
+ try {
147
+ const apiFunction = this.#api;
148
+ return await apiFunction(...args);
149
+ }
150
+ finally {
151
+ // The decrement happens here, ensuring the slot is released even on failure.
152
+ this.#activeCount--;
153
+ }
154
+ }
155
+ /**
156
+ * Returns whether the instance has been destroyed.
157
+ * @returns {boolean}
158
+ */
159
+ get isDestroyed() {
160
+ return this.#isDestroyed;
161
+ }
162
+ /**
163
+ * Gets the internal task queue.
164
+ * @returns {TinyPromiseQueue} The internal task queue.
165
+ */
166
+ get queue() {
167
+ checkDestroy(this.#isDestroyed);
168
+ return this.#queue;
169
+ }
170
+ /**
171
+ * Gets the original API function.
172
+ * @returns {API} The original API function.
173
+ */
174
+ get api() {
175
+ checkDestroy(this.#isDestroyed);
176
+ return this.#api;
177
+ }
178
+ /**
179
+ * Gets the current concurrency limit.
180
+ * @returns {number} The current concurrency limit.
181
+ */
182
+ get concurrencyLimit() {
183
+ checkDestroy(this.#isDestroyed);
184
+ return this.#concurrencyLimit;
185
+ }
186
+ /**
187
+ * Sets a new concurrency limit.
188
+ * @param {number} value - The new maximum number of simultaneous requests.
189
+ * @throws {TypeError} If value is not a positive number.
190
+ */
191
+ set concurrencyLimit(value) {
192
+ checkDestroy(this.#isDestroyed);
193
+ if (typeof value !== 'number' || value <= 0) {
194
+ throw new TypeError('Concurrency limit must be a positive number.');
195
+ }
196
+ this.#concurrencyLimit = value;
197
+ this.emit('SetConcurrencyLimit', value);
198
+ }
199
+ /**
200
+ * Gets the current TinyTimeout instance used for rate limiting.
201
+ * @returns {TinyTimeout|null}
202
+ */
203
+ get timeoutInstance() {
204
+ checkDestroy(this.#isDestroyed);
205
+ return this.#timeoutInstance;
206
+ }
207
+ /**
208
+ * Gets the current base delay multiplier in milliseconds.
209
+ * @returns {number}
210
+ */
211
+ get timeoutValue() {
212
+ checkDestroy(this.#isDestroyed);
213
+ return this.#timeoutValue;
214
+ }
215
+ /**
216
+ * Sets a new base delay multiplier in milliseconds.
217
+ * @param {number} value - The new base delay multiplier.
218
+ * @throws {TypeError} If the value is not a number.
219
+ * @throws {RangeError} If the value is a negative number.
220
+ */
221
+ set timeoutValue(value) {
222
+ checkDestroy(this.#isDestroyed);
223
+ if (typeof value !== 'number') {
224
+ throw new TypeError('Timeout value must be a number.');
225
+ }
226
+ if (value < 0) {
227
+ throw new RangeError('Timeout value cannot be negative.');
228
+ }
229
+ this.#timeoutValue = value;
230
+ this.emit('SetTimeoutValue', value);
231
+ }
232
+ /**
233
+ * Gets the current maximum delay cap.
234
+ * @returns {number|null}
235
+ */
236
+ get timeoutLimit() {
237
+ checkDestroy(this.#isDestroyed);
238
+ return this.#timeoutLimit;
239
+ }
240
+ /**
241
+ * Gets whether the first execution should be delayed by the timeout.
242
+ * @returns {boolean}
243
+ */
244
+ get timeoutFirst() {
245
+ return this.#timeoutFirst;
246
+ }
247
+ /**
248
+ * Sets whether the first execution should be delayed by the timeout.
249
+ * @param {boolean} value - The new boolean value.
250
+ * @throws {TypeError} If the value is not a boolean.
251
+ */
252
+ set timeoutFirst(value) {
253
+ if (typeof value !== 'boolean') {
254
+ throw new TypeError('timeoutFirst must be a boolean.');
255
+ }
256
+ this.#timeoutFirst = value;
257
+ }
258
+ /**
259
+ * Sets a new maximum delay cap.
260
+ * @param {number} value - The new maximum delay cap.
261
+ * @throws {TypeError} If the value is not a number.
262
+ * @throws {RangeError} If the value is a negative number.
263
+ */
264
+ set timeoutLimit(value) {
265
+ checkDestroy(this.#isDestroyed);
266
+ if (typeof value !== 'number') {
267
+ throw new TypeError('Timeout limit must be a number.');
268
+ }
269
+ if (value < 0) {
270
+ throw new RangeError('Timeout limit cannot be negative.');
271
+ }
272
+ this.#timeoutLimit = value;
273
+ this.emit('SetTimeoutLimit', value);
274
+ }
275
+ /**
276
+ * Returns the number of currently active requests.
277
+ *
278
+ * @returns {number}
279
+ */
280
+ get activeCount() {
281
+ checkDestroy(this.#isDestroyed);
282
+ return this.#activeCount;
283
+ }
284
+ /**
285
+ * Returns the number of tasks waiting in the queue.
286
+ *
287
+ * @returns {number}
288
+ */
289
+ get queuedCount() {
290
+ checkDestroy(this.#isDestroyed);
291
+ return this.#queue.getQueuedIds().length;
292
+ }
293
+ }
294
+ export default TinyThrottledApi;
@@ -0,0 +1,342 @@
1
+ 'use strict';
2
+
3
+ var TinyPlugin = require('../../plugin/TinyPlugin.cjs');
4
+ var tools = require('../../utils/tools.cjs');
5
+
6
+ const checkDestroy = tools.createCheckDestroyed('TinyWebWorker');
7
+
8
+ /**
9
+ * The data payload contained within the message.
10
+ * @typedef {any} MessagePayload
11
+ */
12
+
13
+ /**
14
+ * @typedef {Object} ApiHandlerOptions
15
+ * @property {MessagePayload} [data] - The payload received from the worker.
16
+ * @property {string} correlationId - The request ID.
17
+ */
18
+
19
+ /**
20
+ * @callback ApiHandlerCallback
21
+ * @param {ApiHandlerOptions} options - Options for the API handler.
22
+ * @returns {Promise<MessagePayload|undefined> | (MessagePayload|undefined)} The response payload.
23
+ */
24
+
25
+ /**
26
+ * Manages Web Worker initialization, lifecycle, and strictly typed messaging.
27
+ */
28
+ class TinyWebWorker extends TinyPlugin.TinyPluginCore {
29
+ /**
30
+ * Validates if an event type is a reserved name for the internal lifecycle.
31
+ * @param {string} type - The name of the event to validate.
32
+ * @throws {TypeError} If the event name starts with the reserved prefix 'ww:'.
33
+ */
34
+ static #validateEventType(type) {
35
+ if (type.startsWith('ww:')) {
36
+ throw new TypeError(
37
+ `The event type "${type}" is reserved for internal Web Worker lifecycle management.`,
38
+ );
39
+ }
40
+ }
41
+
42
+ /** @type {Worker | null} The active Web Worker instance. */
43
+ #worker = null;
44
+ /** @type {string} The unique identifier for this instance. */
45
+ #id;
46
+ /** @type {string | URL} The URL of the web worker file. */
47
+ #workerUrl;
48
+ /** @type {WorkerOptions} Options for the worker initialization. */
49
+ #workerOptions;
50
+
51
+ /** @type {boolean} Indicates if the worker is fully initialized and ready. */
52
+ #isReady = false;
53
+ /** @type {boolean} Internal flag to track if the instance has been destroyed. */
54
+ #isDestroyed = false;
55
+
56
+ /** @type {Map<string, {resolve: (value: any) => void, reject: (reason: Error) => void, timer: NodeJS.Timeout}>} */
57
+ #pendingRequests = new Map();
58
+ /** @type {Map<string, ApiHandlerCallback>} A map of registered API handlers. */
59
+ #apiHandlers = new Map();
60
+
61
+ /** @type {((event: MessageEvent) => void) | null} */
62
+ #messageHandler = null;
63
+ /** @type {((event: ErrorEvent) => void) | null} */
64
+ #errorHandler = null;
65
+
66
+ /** @returns {boolean} True if the worker is ready. */
67
+ get isReady() {
68
+ return this.#isReady;
69
+ }
70
+
71
+ /** @returns {boolean} True if the instance has been destroyed. */
72
+ get isDestroyed() {
73
+ return this.#isDestroyed;
74
+ }
75
+
76
+ /** @returns {Worker | null} The native worker instance. */
77
+ get worker() {
78
+ checkDestroy(this.#isDestroyed);
79
+ return this.#worker;
80
+ }
81
+
82
+ /**
83
+ * @param {Object} options - Configuration options for the instance.
84
+ * @param {string} options.id - The unique identifier for this manager instance.
85
+ * @param {string | URL} options.workerUrl - The path to the web worker file.
86
+ * @param {WorkerOptions} [options.workerOptions={}] - Native worker options.
87
+ * @param {boolean} [options.debugMode=false] - Whether to enable internal debug logging.
88
+ * @param {boolean} [options.useLogColors=false] - Whether to enable log color support.
89
+ * @param {Partial<Console>} [options.logger=console] - A custom logger object.
90
+ * @throws {TypeError} If parameters are not the correct types.
91
+ */
92
+ constructor({ id, workerUrl, workerOptions = {}, logger, debugMode, useLogColors }) {
93
+ super({
94
+ logCfg: {
95
+ id: '[_sub_class_TinyWebWorker_reset_]',
96
+ logger: logger ?? console,
97
+ debugMode: debugMode ?? false,
98
+ useLogColors: useLogColors ?? false,
99
+ },
100
+ });
101
+
102
+ if (typeof id !== 'string' || id.trim() === '') {
103
+ throw new TypeError('The "id" parameter must be a non-empty string.');
104
+ }
105
+ if (typeof workerUrl !== 'string' && !(workerUrl instanceof URL)) {
106
+ throw new TypeError('The "workerUrl" parameter must be a string or URL.');
107
+ }
108
+
109
+ this.#id = id;
110
+ this.#workerUrl = workerUrl;
111
+ this.#workerOptions = workerOptions;
112
+ }
113
+
114
+ /**
115
+ * Initializes the Web Worker and sets up the message bridges.
116
+ * @returns {Promise<void>} Resolves when the engine inside the worker signals readiness.
117
+ */
118
+ async init() {
119
+ checkDestroy(this.#isDestroyed);
120
+ if (this.#worker) throw new Error('Worker is already initialized.');
121
+
122
+ return new Promise((resolve, reject) => {
123
+ try {
124
+ this.#worker = new Worker(this.#workerUrl, this.#workerOptions);
125
+ } catch (error) {
126
+ this.log('error', 'Failed to instantiate Worker:', error);
127
+ return reject(error);
128
+ }
129
+
130
+ this.#messageHandler = (event) => {
131
+ const payload = event.data;
132
+ if (Array.isArray(payload) || typeof payload !== 'object' || payload === null) return;
133
+ if (typeof payload.type !== 'string') return;
134
+
135
+ // Engine Ready signal
136
+ if (payload.type === 'ww:EngineReady') {
137
+ this.#isReady = true;
138
+ super.emit('ww:Started');
139
+ resolve();
140
+ return;
141
+ }
142
+
143
+ const type = payload.type;
144
+ const data = payload.data;
145
+ const correlationId = payload.correlationId;
146
+ const isApi = payload.isApi;
147
+
148
+ // 1. API responses coming from the Worker
149
+ if (type === 'ww:ApiResponse') {
150
+ if (typeof correlationId !== 'string') return;
151
+ const pending = this.#pendingRequests.get(correlationId);
152
+ if (pending) {
153
+ clearTimeout(pending.timer);
154
+ this.#pendingRequests.delete(correlationId);
155
+ if (payload.error) {
156
+ pending.reject(new Error(payload.error));
157
+ } else {
158
+ pending.resolve(data);
159
+ }
160
+ }
161
+ return;
162
+ }
163
+
164
+ // 2. API requests coming from the Worker
165
+ if (isApi === true) {
166
+ if (typeof correlationId !== 'string') return;
167
+ const handler = this.#apiHandlers.get(type);
168
+ if (!handler) {
169
+ this.#worker?.postMessage({
170
+ correlationId,
171
+ type: 'ww:ApiResponse',
172
+ error: `No API handler registered in Main Thread for type: ${type}`,
173
+ });
174
+ return;
175
+ }
176
+
177
+ try {
178
+ /** @param {MessagePayload} [r] */
179
+ const sendResult = (r) =>
180
+ this.#worker?.postMessage({
181
+ correlationId,
182
+ type: 'ww:ApiResponse',
183
+ data: r,
184
+ });
185
+
186
+ const result = handler({ data, correlationId });
187
+ if (result instanceof Promise)
188
+ result.then(sendResult).catch((err) => {
189
+ this.#worker?.postMessage({
190
+ correlationId,
191
+ type: 'ww:ApiResponse',
192
+ error: err instanceof Error ? err.message : String(err),
193
+ });
194
+ });
195
+ else sendResult(result);
196
+ } catch (error) {
197
+ this.#worker?.postMessage({
198
+ correlationId,
199
+ type: 'ww:ApiResponse',
200
+ error: error instanceof Error ? error.message : String(error),
201
+ });
202
+ }
203
+ return;
204
+ }
205
+
206
+ // 3. Emit standard event to plugins/listeners
207
+ super.emit(type, { data, event });
208
+ };
209
+
210
+ this.#errorHandler = (errorEvent) => {
211
+ this.log('error', `Worker Error [${this.#id}]:`, errorEvent.message);
212
+ super.emit('ww:Error', { error: errorEvent });
213
+
214
+ // Calling reject() after the promise is already resolved is a no-op,
215
+ // so this is safe for runtime errors that happen after startup.
216
+ reject(
217
+ new Error(
218
+ `Web Worker [${this.#id}] failed to start: ${errorEvent.message || 'unknown error'}`,
219
+ ),
220
+ );
221
+ };
222
+
223
+ this.#worker.addEventListener('message', this.#messageHandler);
224
+ this.#worker.addEventListener('error', this.#errorHandler);
225
+ });
226
+ }
227
+
228
+ /**
229
+ * Internal sender method.
230
+ * @param {string} type
231
+ * @param {MessagePayload} [data]
232
+ * @param {boolean} strictMode
233
+ */
234
+ #emitMessage(type, data, strictMode = false) {
235
+ checkDestroy(this.#isDestroyed);
236
+ if (!this.#worker) throw new Error('Worker is not initialized.');
237
+ if (typeof type !== 'string') throw new TypeError('Payload.type must be a string.');
238
+ if (
239
+ typeof data !== 'undefined' &&
240
+ (Array.isArray(data) || typeof data !== 'object' || data === null)
241
+ ) {
242
+ throw new TypeError('Payload.data must be a non-null object.');
243
+ }
244
+
245
+ if (strictMode) TinyWebWorker.#validateEventType(type);
246
+
247
+ this.#worker.postMessage({ type, data });
248
+ }
249
+
250
+ /**
251
+ * Sends a message to the active Web Worker.
252
+ * @param {string} type
253
+ * @param {MessagePayload} [data]
254
+ */
255
+ emitMessage(type, data) {
256
+ this.#emitMessage(type, data, true);
257
+ }
258
+
259
+ /**
260
+ * Registers a handler for API calls coming from the Worker.
261
+ * @param {string} type
262
+ * @param {ApiHandlerCallback} callback
263
+ */
264
+ onApi(type, callback) {
265
+ if (typeof callback !== 'function') throw new TypeError('Callback must be a function.');
266
+ this.#apiHandlers.set(type, callback);
267
+ }
268
+
269
+ /**
270
+ * Removes a registered API handler.
271
+ * @param {string} type
272
+ */
273
+ offApi(type) {
274
+ return this.#apiHandlers.delete(type);
275
+ }
276
+
277
+ /**
278
+ * Sends an API request to the Web Worker and waits for the response.
279
+ * @param {string} type - The API call identifier.
280
+ * @param {MessagePayload} [data] - The request payload.
281
+ * @param {number} [timeout=10000] - Maximum waiting time in milliseconds.
282
+ * @returns {Promise<any>}
283
+ */
284
+ async emitApi(type, data, timeout = 10000) {
285
+ checkDestroy(this.#isDestroyed);
286
+ if (!this.#worker) throw new Error('Worker is not initialized.');
287
+
288
+ const correlationId = crypto.randomUUID();
289
+ return new Promise((resolve, reject) => {
290
+ const timer = setTimeout(() => {
291
+ if (this.#pendingRequests.has(correlationId)) {
292
+ this.#pendingRequests.delete(correlationId);
293
+ reject(new Error(`API request timeout: ${type} (ID: ${correlationId})`));
294
+ }
295
+ }, timeout);
296
+
297
+ this.#pendingRequests.set(correlationId, { resolve, reject, timer });
298
+
299
+ this.#worker?.postMessage({
300
+ type,
301
+ data,
302
+ correlationId,
303
+ isApi: true,
304
+ });
305
+ });
306
+ }
307
+
308
+ /**
309
+ * Terminates the Web Worker immediately and cleans up listeners.
310
+ */
311
+ terminate() {
312
+ if (this.#isDestroyed) return;
313
+
314
+ if (this.#worker) {
315
+ if (this.#messageHandler) this.#worker.removeEventListener('message', this.#messageHandler);
316
+ if (this.#errorHandler) this.#worker.removeEventListener('error', this.#errorHandler);
317
+ this.#worker.terminate();
318
+ this.log('info', `Web Worker [${this.#id}] terminated.`);
319
+ }
320
+
321
+ this.#worker = null;
322
+ this.#messageHandler = null;
323
+ this.#errorHandler = null;
324
+ this.#isReady = false;
325
+
326
+ super.emit('ww:Terminated');
327
+ }
328
+
329
+ /**
330
+ * Hard destroys the instance, clearing all references to avoid memory leaks.
331
+ */
332
+ destroy() {
333
+ if (this.#isDestroyed) return;
334
+ this.terminate();
335
+ this.removeAllListeners();
336
+ this.destroyPlugins();
337
+ this.#isDestroyed = true;
338
+ this.log('info', `[${this.#id}] Destroyed successfully.`);
339
+ }
340
+ }
341
+
342
+ module.exports = TinyWebWorker;