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,379 @@
1
+ import TinyUriParser from '../TinyUriParser.mjs';
2
+ /**
3
+ * Matrix Protocol (matrix.org)
4
+ * Official Documentation: https://spec.matrix.org/latest/appendices/#identifier-grammar
5
+ */
6
+ /**
7
+ * Defines the valid types for Matrix resource identifiers.
8
+ * @typedef {'roomId' | 'room' | 'user'} IdTypes
9
+ */
10
+ /**
11
+ * Represents the data structure for parsed Matrix Content (MXC) URIs.
12
+ * @typedef {Object} MXCData
13
+ * @property {'mxc'} dataType - The category of the data.
14
+ * @property {string} server - The Matrix server domain (e.g., 'matrix.org').
15
+ * @property {string} dataId - The unique identifier for the data.
16
+ */
17
+ /**
18
+ * Represents the data structure for parsed Matrix scheme URIs.
19
+ * @typedef {Object} MatrixSchemeData
20
+ * @property {'matrix_scheme'} dataType - The category of the data.
21
+ * @property {IdTypes | 'event'} type - The type of the matrix resource.
22
+ * @property {null|IdTypes} subType - The sub type of the matrix resource.
23
+ * @property {string} resourceId - The primary identifier (room ID or user ID).
24
+ * @property {string} [eventId] - The specific event ID (only if type is 'event').
25
+ * @property {string|null} server - The matrix server domain.
26
+ * @property {Record<string, string>} params - Key-value pairs of query parameters (e.g., { via: 'server.com' }).
27
+ */
28
+ /**
29
+ * Represents the data structure for parsed Matrix Web URLs.
30
+ * @typedef {Object} MatrixWebData
31
+ * @property {'matrix_web_url'} dataType - The category of the data.
32
+ * @property {string} decodedFragment - The decoded string from the URL fragment.
33
+ * @property {MatrixSchemeData | MXCData} parsed - The result of the parsed resource.
34
+ */
35
+ /**
36
+ * Regular expression used to match and extract components from an MXC (Matrix Content) URI.
37
+ * @type {RegExp}
38
+ */
39
+ const parseMxcRegex = /^mxc:\/\/([^/]+)\/(.+)$/;
40
+ /**
41
+ * Regex handles: matrix:<type>/<resource>[/e/<event>][<query>]
42
+ *
43
+ * Types supported: r (room), u (user), roomid (room), e (event)
44
+ * @type {RegExp}
45
+ */
46
+ const matrixSchemeRegex = /^matrix:(?<prefix>r|u|roomid|e)\/(?<resource>[^?/\s]+)(?:\/e\/(?<event>[^?/\s]+))?(?<query>\?.*)?$/;
47
+ /**
48
+ * Reconstructs a Matrix ID shorthand from MatrixSchemeData.
49
+ *
50
+ * This function reconstructs the shorthand and includes any provided query parameters.
51
+ *
52
+ * @param {MatrixSchemeData} parsed - The parsed Matrix scheme data object.
53
+ * @returns {string} The Matrix ID shorthand (e.g., '#room:server.com', '@user:server.com', '$eventid').
54
+ * @throws {TypeError} If the provided data is invalid or the type is unsupported.
55
+ */
56
+ const reconstructMatrixShorthand = (parsed) => {
57
+ // Validate the input object using the existing validation logic
58
+ validateMatrixSchemeData(parsed);
59
+ const typeToPrefix = {
60
+ room: '#',
61
+ roomId: '!',
62
+ user: '@',
63
+ event: '$',
64
+ };
65
+ const prefix = typeToPrefix[parsed.type];
66
+ if (!prefix) {
67
+ throw new TypeError(`reconstructMatrixShorthand: Unsupported type "${parsed.type}".`);
68
+ }
69
+ // Start with the resource ID (e.g., the room ID or user ID)
70
+ let resource = parsed.resourceId;
71
+ // If a server is present, append it to the resource (e.g., 'room_id:matrix.org')
72
+ if (parsed.server) {
73
+ resource += `:${parsed.server}`;
74
+ }
75
+ let result = `${prefix}${resource}`;
76
+ // Append query parameters if the params object is not empty
77
+ if (parsed.params && Object.keys(parsed.params).length > 0) {
78
+ const query = new URLSearchParams(parsed.params).toString();
79
+ result += `?${query}`;
80
+ }
81
+ return result;
82
+ };
83
+ /**
84
+ * Reconstructs an MXC URI from parsed data.
85
+ * @param {MXCData} parsed
86
+ * @returns {string}
87
+ */
88
+ const reconstructMxc = (parsed) => {
89
+ const { server, dataId } = parsed;
90
+ return `mxc://${server}/${dataId}`;
91
+ };
92
+ /**
93
+ * Reconstructs a Matrix Scheme URI from parsed data.
94
+ * @param {MatrixSchemeData} parsed
95
+ * @returns {string}
96
+ */
97
+ const reconstructMatrixScheme = (parsed) => {
98
+ const { type, subType, resourceId, eventId, server, params } = parsed;
99
+ const typeToPrefix = { room: 'r', user: 'u', roomId: 'roomid', event: 'e' };
100
+ const subTypeToPrefix = { room: 'r', user: 'u', roomId: 'roomid' };
101
+ // Determine the prefix based on the type or the subType if it's an event
102
+ // @ts-ignore
103
+ let prefix = typeToPrefix[type];
104
+ if (type === 'event' && subType) {
105
+ // @ts-ignore
106
+ prefix = subTypeToPrefix[subType];
107
+ }
108
+ let resource = resourceId;
109
+ if (server) {
110
+ resource += `:${server}`;
111
+ }
112
+ let result = `matrix:${prefix}/${resource}`;
113
+ if (type === 'event' && eventId) {
114
+ let eventPart = eventId;
115
+ // if (server) eventPart += `:${server}`;
116
+ result += `/e/${eventPart}`;
117
+ }
118
+ if (params && Object.keys(params).length > 0) {
119
+ const query = new URLSearchParams(params).toString();
120
+ result += `?${query}`;
121
+ }
122
+ return result;
123
+ };
124
+ /**
125
+ * Rebuilds the `matrix.to` fragment for a parsed Matrix scheme resource.
126
+ * @param {MatrixSchemeData} parsed - The parsed Matrix scheme data.
127
+ * @returns {string} The `matrix.to` fragment (e.g., `#room:server.com`).
128
+ * @throws {TypeError} If the resource type is unsupported.
129
+ */
130
+ const buildMatrixToFragment = (parsed) => {
131
+ const baseType = parsed.type === 'event' ? parsed.subType : parsed.type;
132
+ const prefixMap = { room: '#', roomId: '!', user: '@' };
133
+ // @ts-ignore
134
+ const prefix = prefixMap[baseType];
135
+ if (!prefix) {
136
+ throw new TypeError(`MatrixWebData: unsupported resource type "${baseType}".`);
137
+ }
138
+ let fragment = `${prefix}${parsed.resourceId}`;
139
+ if (parsed.server) {
140
+ fragment += `:${parsed.server}`;
141
+ }
142
+ if (parsed.type === 'event' && parsed.eventId) {
143
+ fragment += `/${parsed.eventId.startsWith('$') ? parsed.eventId : `$${parsed.eventId}`}`;
144
+ }
145
+ return fragment;
146
+ };
147
+ /**
148
+ * Reconstructs a Matrix Web URL from parsed data.
149
+ *
150
+ * The URL is rebuilt from the structured `parsed` payload, so the object does
151
+ * not need to keep a redundant copy of the original string in memory.
152
+ *
153
+ * @param {MatrixWebData} data - The parsed web URL data.
154
+ * @returns {string} The reconstructed Matrix Web URL.
155
+ * @throws {TypeError} If the data is malformed.
156
+ */
157
+ const reconstructMatrixWebUrl = (data) => {
158
+ if (data === null || typeof data !== 'object') {
159
+ throw new TypeError('MatrixWebData: data must be an object.');
160
+ }
161
+ const { parsed } = data;
162
+ if (parsed === null || typeof parsed !== 'object') {
163
+ throw new TypeError('MatrixWebData: parsed must be an object.');
164
+ }
165
+ if (parsed.dataType === 'mxc') {
166
+ return `https://matrix.to/#/${reconstructMxc(parsed)}`;
167
+ }
168
+ const query = parsed.params && Object.keys(parsed.params).length > 0
169
+ ? `?${new URLSearchParams(parsed.params)}`
170
+ : '';
171
+ return `https://matrix.to/#/${buildMatrixToFragment(parsed)}${query}`;
172
+ };
173
+ /**
174
+ * Parses MXC (Matrix Content) URIs.
175
+ *
176
+ * @param {string} uri - The raw MXC URI string.
177
+ * @returns {MXCData} The parsed MXC data object.
178
+ * @throws {Error} If the URI does not match the expected MXC format.
179
+ */
180
+ const parseMxc = (uri) => {
181
+ const match = uri.match(parseMxcRegex);
182
+ if (!match) {
183
+ throw new Error(`Invalid MXC URI format: ${uri}`);
184
+ }
185
+ const [_, server, dataId] = match;
186
+ /** @type {MXCData} */
187
+ const data = { server, dataId, dataType: 'mxc' };
188
+ validateMXCData(data);
189
+ return data;
190
+ };
191
+ /**
192
+ * Parses Matrix Scheme URIs (e.g., matrix:r/..., matrix:u/..., matrix:e/..., etc).
193
+ *
194
+ * @param {string} uri - The Matrix scheme URI string.
195
+ * @returns {MatrixSchemeData} The parsed Matrix scheme data object.
196
+ * @throws {Error} If the URI does not match the expected Matrix scheme format.
197
+ */
198
+ const parseMatrixScheme = (uri) => {
199
+ const match = uri.match(matrixSchemeRegex);
200
+ if (!match) {
201
+ throw new Error(`Invalid Matrix Scheme URI: ${uri}`);
202
+ }
203
+ const { prefix, resource, event, query } = match.groups ?? {};
204
+ const prefixType = prefix === 'r' ? '#' : prefix === 'e' ? '$' : prefix === 'roomid' ? '!' : '@';
205
+ /** @param {string} p */
206
+ const genType = (p) => p === 'r' ? 'room' : p === 'e' ? 'event' : p === 'roomid' ? 'roomId' : 'user';
207
+ // Capture the original type (room, user, etc.) before checking if it is an event
208
+ const baseType = genType(prefix);
209
+ /** @type {MatrixSchemeData} */
210
+ const data = {
211
+ dataType: 'matrix_scheme',
212
+ subType: null,
213
+ type: baseType,
214
+ resourceId: resource,
215
+ server: null,
216
+ params: {},
217
+ };
218
+ // Transforms the query string into a key/value object
219
+ if (query) {
220
+ const searchParams = new URLSearchParams(query);
221
+ data.params = Object.fromEntries(searchParams.entries());
222
+ }
223
+ // Always remove the identifier symbol if it is present, regardless of the server
224
+ let actualResource = resource;
225
+ if (actualResource.startsWith(prefixType)) {
226
+ actualResource = actualResource.substring(1);
227
+ }
228
+ // Handles the extraction of resourceId, server and all types
229
+ const lastColonIndex = actualResource.lastIndexOf(':');
230
+ if (lastColonIndex !== -1) {
231
+ data.server = actualResource.substring(lastColonIndex + 1);
232
+ data.resourceId = actualResource.substring(0, lastColonIndex);
233
+ }
234
+ else {
235
+ data.resourceId = actualResource;
236
+ }
237
+ if (prefix === 'e') {
238
+ // Since the resourceId has already been cleaned in the block above, simply reference it
239
+ data.eventId = data.resourceId;
240
+ data.type = 'event';
241
+ data.subType = null;
242
+ }
243
+ // If the URI contains a nested event (matrix:r/room/e/event)
244
+ if (event) {
245
+ let actualEvent = event;
246
+ if (actualEvent.startsWith('$')) {
247
+ actualEvent = actualEvent.substring(1);
248
+ }
249
+ // Ensures that the nested eventId is also cleaned, in case it has an associated server
250
+ const eventColonIndex = actualEvent.lastIndexOf(':');
251
+ if (eventColonIndex !== -1) {
252
+ data.eventId = actualEvent.substring(0, eventColonIndex);
253
+ }
254
+ else {
255
+ data.eventId = actualEvent;
256
+ }
257
+ data.type = 'event';
258
+ data.subType = baseType !== 'event' ? baseType : null;
259
+ }
260
+ validateMatrixSchemeData(data);
261
+ return data;
262
+ };
263
+ /**
264
+ * Parses Matrix Web URLs by decoding the URL fragment.
265
+ *
266
+ * @param {string} url - The full web URL (e.g., https://matrix.to/#/...).
267
+ * @returns {MatrixWebData} The parsed web URL data object.
268
+ * @throws {Error} If the URL is invalid or the fragment cannot be parsed.
269
+ */
270
+ const parseWebUrl = (url) => {
271
+ const urlObj = new URL(url);
272
+ const fragment = urlObj.hash.substring(2); // Remove '#/'
273
+ const decodedFragment = decodeURIComponent(fragment);
274
+ // Split into parts to support events contained within the matrix.to URL
275
+ // Ex: !room:server.com/$event_id -> mainPart: "!room:server.com", eventPart: "$event_id"
276
+ const parts = decodedFragment.split('/');
277
+ const mainPart = parts[0];
278
+ const eventPart = parts.length > 1 ? parts[1] : null;
279
+ let parsedResource;
280
+ if (mainPart.startsWith('#') || mainPart.startsWith('!')) {
281
+ const isId = mainPart.startsWith('!');
282
+ const type = !isId ? 'r' : 'roomid';
283
+ // Always construct by removing the initial symbol (!) or (#)
284
+ let normalizedResource = `matrix:${type}/${mainPart.substring(1)}`;
285
+ if (eventPart) {
286
+ // Remove the '$' if it exists to properly construct the scheme route
287
+ const safeEventPart = eventPart.startsWith('$') ? eventPart.substring(1) : eventPart;
288
+ normalizedResource += `/e/${safeEventPart}`;
289
+ }
290
+ parsedResource = parseMatrixScheme(normalizedResource);
291
+ }
292
+ else if (mainPart.startsWith('@')) {
293
+ // It's a user
294
+ const normalizedResource = `matrix:u/${mainPart.substring(1)}`;
295
+ parsedResource = parseMatrixScheme(normalizedResource);
296
+ }
297
+ else {
298
+ // Fallback: treat decoded fragment as a direct matrix scheme
299
+ parsedResource = parseMatrixScheme(`matrix:${decodedFragment}`);
300
+ }
301
+ return {
302
+ dataType: 'matrix_web_url',
303
+ decodedFragment,
304
+ parsed: parsedResource,
305
+ };
306
+ };
307
+ /**
308
+ * Validates the MXC data object for required properties and correct types.
309
+ *
310
+ * @param {MXCData} data - The MXC data object to validate.
311
+ * @throws {TypeError} If any property is missing or of an invalid type.
312
+ */
313
+ const validateMXCData = (data) => {
314
+ if (typeof data.server !== 'string' || data.server.length === 0) {
315
+ throw new TypeError('MXCData: server must be a non-empty string.');
316
+ }
317
+ if (typeof data.dataId !== 'string' || data.dataId.length === 0) {
318
+ throw new TypeError('MXCData: dataId must be a non-empty string.');
319
+ }
320
+ };
321
+ /**
322
+ * Validates the Matrix Scheme data object for required properties and correct types.
323
+ *
324
+ * @param {MatrixSchemeData} data - The Matrix scheme data object to validate.
325
+ * @throws {TypeError} If any property is missing or of an invalid type.
326
+ */
327
+ const validateMatrixSchemeData = (data) => {
328
+ const validTypes = ['roomId', 'room', 'user', 'event'];
329
+ if (!validTypes.includes(data.type)) {
330
+ throw new TypeError(`MatrixSchemeData: Invalid type "${data.type}".`);
331
+ }
332
+ if (typeof data.resourceId !== 'string' || data.resourceId.length === 0) {
333
+ throw new TypeError('MatrixSchemeData: resourceId must be a non-empty string.');
334
+ }
335
+ if (data.server !== null && (typeof data.server !== 'string' || data.server.length === 0)) {
336
+ throw new TypeError('MatrixSchemeData: server must be a non-empty string.');
337
+ }
338
+ if (data.type === 'event' && (typeof data.eventId !== 'string' || data.eventId.length === 0)) {
339
+ throw new TypeError('MatrixSchemeData: eventId must be a non-empty string when type is "event".');
340
+ }
341
+ if (data.params && typeof data.params !== 'object') {
342
+ throw new TypeError('MatrixSchemeData: params must be an object.');
343
+ }
344
+ };
345
+ /**
346
+ * A parser pair for MXC (Matrix Content) URIs, consisting of a predicate to check for the 'mxc://' prefix and a callback to parse the URI.
347
+ */
348
+ export const MatrixMcxParser = TinyUriParser.buildParserPair('mxc', (uriString) => uriString.startsWith('mxc://'), parseMxc, reconstructMxc);
349
+ /**
350
+ * A parser pair for Matrix scheme URIs, consisting of a predicate to check for the 'matrix:' prefix and a callback to parse the URI.
351
+ */
352
+ export const MatrixSchemeParser = TinyUriParser.buildParserPair('matrix_scheme', (uriString) => uriString.startsWith('matrix:'), parseMatrixScheme, reconstructMatrixScheme);
353
+ /**
354
+ * Handle Matrix ID shorthands (#room, !event, $event, @user)
355
+ */
356
+ export const MatrixShortHandParser = TinyUriParser.buildParserPair('matrix_shorthand', (uriString) => uriString.startsWith('#') ||
357
+ uriString.startsWith('!') ||
358
+ uriString.startsWith('$') ||
359
+ uriString.startsWith('@'), (uriString) => {
360
+ const prefixMap = { '#': 'r/', '!': 'roomid/', $: 'e/', '@': 'u/' };
361
+ // @ts-ignore
362
+ const prefix = prefixMap[uriString[0]];
363
+ if (!prefix)
364
+ throw new Error(`Unable to determine the protocol for the provided URI: ${uriString}`);
365
+ return parseMatrixScheme(`matrix:${prefix}${uriString.substring(1)}`);
366
+ }, reconstructMatrixShorthand);
367
+ /**
368
+ * Check for Web URLs (e.g., https://matrix.to/#/...)
369
+ */
370
+ export const MatrixWebUrlParser = TinyUriParser.buildParserPair('matrix_web_url', (uriString) => uriString.includes('://') && uriString.includes('#/'), parseWebUrl, reconstructMatrixWebUrl);
371
+ /**
372
+ * An array of Matrix Protocol parser pairs, where each pair contains a matching predicate and a parsing callback.
373
+ */
374
+ export const MatrixProtocolParsers = Object.freeze([
375
+ MatrixMcxParser,
376
+ MatrixSchemeParser,
377
+ MatrixShortHandParser,
378
+ MatrixWebUrlParser,
379
+ ]);
@@ -0,0 +1,217 @@
1
+ 'use strict';
2
+
3
+ var tools = require('../utils/tools.cjs');
4
+ var objChecker = require('../../basics/objChecker.cjs');
5
+
6
+ const checkDestroy = tools.createCheckDestroyed('TinyUriParser');
7
+
8
+ /**
9
+ * A generic template for parsed URI results.
10
+ * @typedef {Record<any, any>} ParsedData
11
+ */
12
+
13
+ /**
14
+ * A generic template for parsed URI results.
15
+ * @template {string} Type
16
+ * @template {ParsedData} Data
17
+ * @typedef {Object} ParsedUri
18
+ * @property {Type} type - The category of the URI.
19
+ * @property {Data} data - The parsed content.
20
+ */
21
+
22
+ /**
23
+ * A function type used to validate whether a provided URI string matches a specific pattern or protocol.
24
+ * @typedef {(uri: string) => boolean} ParseChecker
25
+ */
26
+
27
+ /**
28
+ * A function type that accepts a URI string and returns a structured `ParsedUri` object.
29
+ * @template {string} Type
30
+ * @template {ParsedData} Data
31
+ * @typedef {(uri: string) => ParsedUri<Type, Data>} ParserCallback
32
+ */
33
+
34
+ /**
35
+ * @template {string} Type
36
+ * @template {ParsedData} Data
37
+ * @typedef {(parsed: Data) => string} StringifyCallback
38
+ */
39
+
40
+ /**
41
+ * A tuple representing a single parsing unit, consisting of a validation function,
42
+ * its corresponding parsing function, and an reconstruction function.
43
+ * @template {string} Type
44
+ * @template {ParsedData} Data
45
+ * @typedef {readonly [Type, ParseChecker, ParserCallback<Type, Data>, StringifyCallback<Type, Data>]} ParserPair
46
+ */
47
+
48
+ /**
49
+ * A utility class designed to parse various Matrix-related URI formats into structured objects.
50
+ * @template {ParserPair<any, any>} Parser
51
+ */
52
+ class TinyUriParser {
53
+ /**
54
+ * Creates a frozen, immutable tuple containing the type, validation condition, parsing function, and stringification function for a specific URI type.
55
+ * @template {string} Type
56
+ * @template {ParsedData} Data
57
+ * @param {Type} type - The unique string identifier representing the URI category.
58
+ * @param {ParseChecker} conditions - A validation function that returns `true` if the URI matches the specific pattern.
59
+ * @param {(uri: string) => Data} parser - A function that extracts and returns the parsed data from the URI string.
60
+ * @param {StringifyCallback<Type, Data>} stringify - A function used to convert the parsed data back into a URI string.
61
+ * @returns {ParserPair<Type, Data>} An immutable tuple containing the type, validation checker, parser, and stringifier.
62
+ */
63
+ static buildParserPair(type, conditions, parser, stringify) {
64
+ return Object.freeze([
65
+ type,
66
+ conditions,
67
+ (uriString) => ({
68
+ type: type,
69
+ data: parser(uriString),
70
+ }),
71
+ stringify,
72
+ ]);
73
+ }
74
+
75
+ /**
76
+ * Whether this instance has been destroyed.
77
+ * @type {boolean}
78
+ */
79
+ #isDestroyed = false;
80
+
81
+ /**
82
+ * Indicates whether this instance has been destroyed.
83
+ * @type {boolean}
84
+ */
85
+ get isDestroyed() {
86
+ return this.#isDestroyed;
87
+ }
88
+
89
+ /**
90
+ * A collection of parser pairs used to iterate through and match URI strings.
91
+ * @type {Set<Parser>}
92
+ */
93
+ #parsers;
94
+
95
+ /**
96
+ * Returns an array containing shallow copies of the registered parser pairs to prevent direct mutation of the internal set.
97
+ * @type {Parser[]}
98
+ */
99
+ get parsers() {
100
+ checkDestroy(this.#isDestroyed);
101
+ /** @type {Parser[]} */
102
+ return Array.from(this.#parsers).map((parserPair) => [...parserPair]);
103
+ }
104
+
105
+ /**
106
+ * Returns the total number of registered parser pairs.
107
+ * @type {number}
108
+ */
109
+ get size() {
110
+ checkDestroy(this.#isDestroyed);
111
+ return this.#parsers.size;
112
+ }
113
+
114
+ /**
115
+ * Initializes the TinyUriParser instance with a collection of parser pairs.
116
+ * @param {...Parser} parsers
117
+ * @throws {TypeError} If any provided parser is not a valid ParserPair.
118
+ */
119
+ constructor(...parsers) {
120
+ for (const [index, parser] of parsers.entries()) {
121
+ // 1. Check if the argument is an array (the base of a tuple/ParserPair)
122
+ if (!Array.isArray(parser)) {
123
+ throw new TypeError(`Parser at index ${index} must be an array representing a ParserPair.`);
124
+ }
125
+
126
+ // 2. Check if the array has exactly four elements [Type, ParseChecker, ParserCallback, StringifyCallback]
127
+ if (parser.length !== 4) {
128
+ throw new TypeError(`Parser at index ${index} must contain exactly 4 elements.`);
129
+ }
130
+
131
+ // 3. Validate that the first element is a string (Type)
132
+ if (typeof parser[0] !== 'string') {
133
+ throw new TypeError(
134
+ `The first element of the parser at index ${index} must be a string (Type).`,
135
+ );
136
+ }
137
+
138
+ // 4. Validate that the second element is a function (ParseChecker)
139
+ if (typeof parser[1] !== 'function') {
140
+ throw new TypeError(
141
+ `The second element of the parser at index ${index} must be a function (ParseChecker).`,
142
+ );
143
+ }
144
+
145
+ // 5. Validate that the third element is a function (ParserCallback)
146
+ if (typeof parser[2] !== 'function') {
147
+ throw new TypeError(
148
+ `The third element of the parser at index ${index} must be a function (ParserCallback).`,
149
+ );
150
+ }
151
+
152
+ // 6. Validate that the fourth element is a function (StringifyCallback)
153
+ if (typeof parser[3] !== 'function') {
154
+ throw new TypeError(
155
+ `The fourth element of the parser at index ${index} must be a function (StringifyCallback).`,
156
+ );
157
+ }
158
+ }
159
+
160
+ this.#parsers = new Set(parsers);
161
+ }
162
+
163
+ /**
164
+ * Main entry point for parsing.
165
+ * @param {string} uriString - The raw URI string to parse.
166
+ * @returns {ReturnType<Parser[2]>} The parsed object.
167
+ * @throws {TypeError | RangeError | Error} If the input is invalid or parsing fails.
168
+ */
169
+ parse(uriString) {
170
+ checkDestroy(this.#isDestroyed);
171
+ if (typeof uriString !== 'string') {
172
+ throw new TypeError('The input must be a string.');
173
+ }
174
+ for (const parser of this.#parsers) {
175
+ // @ts-ignore
176
+ if (parser[1](uriString)) return parser[2](uriString);
177
+ }
178
+ throw new Error(`Unable to determine the protocol for the provided URI: ${uriString}`);
179
+ }
180
+
181
+ /**
182
+ * Reconstructs the original URI string from a parsed object.
183
+ * @param {ReturnType<Parser[2]>} parsedObject - The object returned by the parse method.
184
+ * @returns {string} The reconstructed URI string.
185
+ * @throws {TypeError | Error} If the object is invalid or no reconstructor is found.
186
+ */
187
+ stringify(parsedObject) {
188
+ checkDestroy(this.#isDestroyed);
189
+ if (!objChecker.isJsonObject(parsedObject) || typeof parsedObject.type !== 'string') {
190
+ throw new TypeError('The input must be a valid ParsedUri object with a "type" property.');
191
+ }
192
+
193
+ for (const parser of this.#parsers) {
194
+ const [type, , , reconstructor] = parser;
195
+ if (type === parsedObject.type && typeof reconstructor === 'function') {
196
+ const result = reconstructor(parsedObject.data);
197
+ if (typeof result === 'string') {
198
+ return result;
199
+ }
200
+ }
201
+ }
202
+
203
+ throw new Error(`No reconstructor found for the parsed type: ${parsedObject.type}`);
204
+ }
205
+
206
+ /**
207
+ * Cleans up internal parsers and marks the instance as destroyed to prevent memory leaks.
208
+ * @returns {void}
209
+ */
210
+ destroy() {
211
+ if (this.#isDestroyed) return;
212
+ this.#parsers.clear();
213
+ this.#isDestroyed = true;
214
+ }
215
+ }
216
+
217
+ module.exports = TinyUriParser;