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
@@ -1,7 +1,4 @@
1
- import { readFile, writeFile } from 'fs/promises';
2
- import { existsSync } from 'fs';
3
- import { join as pathJoin } from 'path';
4
- import { createCheckDestroyed } from '../utils/tools.mjs';
1
+ import { createCheckDestroyed } from '../../utils/tools.mjs';
5
2
  const checkDestroy = createCheckDestroyed('TinyI18');
6
3
  /**
7
4
  * Supported operating modes for TinyI18.
@@ -12,66 +9,67 @@ const checkDestroy = createCheckDestroyed('TinyI18');
12
9
  /**
13
10
  * Dictionary of translation keys mapped to values.
14
11
  *
15
- * @typedef {Record<string, any>} Dict
12
+ * @typedef {Record<string, any>} Dict - A collection of key-value pairs for translations.
16
13
  */
17
14
  /**
18
15
  * Represents a translation entry as it appears in JSON files.
19
16
  *
20
- * @typedef {{
21
- * $pattern: string,
22
- * $fn: string,
23
- * [key: string]: string
24
- * }} FileValue
25
- *
26
- * `$pattern` - Regex string (will be compiled into RegExp).
17
+ * @typedef {Object} FileValueBase
18
+ * @property {string} $pattern - Regex string (will be compiled into RegExp).
19
+ * @property {string} $fn - Helper function name associated with this entry.
20
+ * @property {string} [key] - Additional key-value pairs for interpolation or extra metadata.
21
+ */
22
+ /**
23
+ * Represents a translation entry as it appears in JSON files, extending
24
+ * the base pattern/function fields with arbitrary string key-value pairs.
27
25
  *
28
- * `$fn` - Helper function name associated with this entry.
29
-
30
- * `[key]` - Additional key-value pairs for interpolation or extra metadata.
26
+ * @typedef {FileValueBase & { [key: string]: string }} FileValue
31
27
  */
32
28
  /**
33
29
  * Represents a valid locale code string.
34
30
  * Example: "en", "pt-BR", "fr".
35
31
  *
36
- * @typedef {string} LocaleCode
32
+ * @typedef {string} LocaleCode - A string representing a valid locale identifier.
37
33
  */
38
34
  /**
39
- * Value types stored per locale:
40
- * - string: a direct translation with optional {named} interpolation
41
- * - Function: (params, helpers) => any (advanced rendering; HTML-safe if you control it)
42
- * - { $pattern: RegExp, value: string | { $fn: string, args?: any } | Function }
43
- * - { $fn: string, args?: any } // in file mode; resolved to a registered function
35
+ * Value types stored per locale.
36
+ *
37
+ * @typedef {string|{ $fn: string; args?: any }} TranslationValue - The type of a value used in a translation entry.
44
38
  */
45
39
  /**
46
- * Represents a single regex-based translation entry.
40
+ * A resolved translation value.
47
41
  *
48
- * @typedef {Object} PatternEntry
49
- * @property {RegExp} $pattern - Compiled regular expression used for matching.
50
- * @property {any} value - Translation value or resolver function associated with the pattern.
51
- * @property {any} elseValue - Translation value or resolver function associated with the pattern.
42
+ * @typedef {string|null} TranslateResult - A resolved translation value, typically a string or null.
52
43
  */
53
44
  /**
54
- * @typedef {Object} FileModeEntryJSON
55
- * @property {string} [$pattern] - regex as string e.g. "^user\\.(\\d+)$"
56
- * @property {string|Object} value - string or { $fn: string, args?: any }
57
- * @property {string|Object} elseValue - string or { $fn: string, args?: any }
45
+ * Represents a single regex-based translation entry.
46
+ *
47
+ * @typedef {Object} PatternEntry - A representation of a translation entry that matches via a regular expression.
48
+ * @property {RegExp} $pattern - Compiled regular expression used for matching.
49
+ * @property {TranslationValue} value - Translation value or resolver function associated with the pattern.
50
+ * @property {TranslationValue} elseValue - Translation value or resolver function associated with the pattern.
58
51
  */
59
52
  /**
60
- * @typedef {Object} TinyI18Options
61
- * @property {ModeTypes} mode
62
- * @property {LocaleCode} defaultLocale
63
- * @property {string} [basePath] - Required in file mode. Directory with <locale>.json
64
- * @property {Dict} [localResources] - Optional initial map { locale: dict } for local mode
65
- * @property {boolean} [strict=true] - If true, throws on missing keys; else returns key
53
+ * Configuration options for the TinyI18 instance.
54
+ *
55
+ * @typedef {Object} TinyI18Options - Configuration options for the TinyI18 constructor.
56
+ * @property {ModeTypes} mode - The operating mode of the instance.
57
+ * @property {LocaleCode} defaultLocale - The fallback locale used when a key is missing.
58
+ * @property {string} [basePath] - Required in file mode. Directory containing <locale>.json files.
59
+ * @property {Dict} [localResources] - Optional initial map { locale: dict } for local mode.
60
+ * @property {boolean} [strict=true] - If true, throws on missing keys or invalid data; else returns fallback.
61
+ * @property {boolean} [acceptNullResults=false] - If true, returns null instead of the key for missing translations.
66
62
  */
67
63
  /**
68
- * @typedef {Object} ResolveOptions
69
- * @property {LocaleCode} [locale] - force resolve using a specific locale first
64
+ * Options used to customize the translation resolution process.
65
+ *
66
+ * @typedef {Object} ResolveOptions - Options to control the translation resolution process.
67
+ * @property {LocaleCode} [locale] - Force resolution using a specific locale first.
70
68
  */
71
69
  /**
72
- * Represents statistics for a specific locale.
70
+ * Statistics for a specific locale.
73
71
  *
74
- * @typedef {Object} StatLocale
72
+ * @typedef {Object} StatLocale - Information about the contents and status of a specific locale.
75
73
  * @property {string} locale - The locale code (e.g., "en", "pt-BR").
76
74
  * @property {number} strings - Total number of static string entries in this locale.
77
75
  * @property {number} patterns - Total number of regex-based pattern entries in this locale.
@@ -82,12 +80,12 @@ const checkDestroy = createCheckDestroyed('TinyI18');
82
80
  * Read-only view of registered helpers, exposed to function-based entries.
83
81
  *
84
82
  * Provides safe access to:
85
- * - check if a helper exists by name
86
- * - call a helper by name, passing arguments
83
+ * - Check if a helper exists by name.
84
+ * - Call a helper by name, passing arguments.
87
85
  *
88
86
  * @template {any} T
89
87
  * @template {any} R
90
- * @typedef {Object} HelpersReadonly
88
+ * @typedef {Object} HelpersReadonly - A read-only interface for interacting with registered helpers.
91
89
  * @property {(name: string) => boolean} [has] - Check if a helper with given name is registered.
92
90
  * @property {(name: string, arg: T, extras?: HelpersReadonly<T, R>) => R} [call] -
93
91
  * Invoke a helper by name with an argument and optional extras.
@@ -98,9 +96,11 @@ const checkDestroy = createCheckDestroyed('TinyI18');
98
96
  * - Receives user-supplied parameters and a read-only facade for calling other helpers.
99
97
  * - Must return a string (e.g. processed, interpolated, or formatted output).
100
98
  *
99
+ * @template {any} T
100
+ * @template {any} R
101
101
  * @callback HelperCallback
102
102
  * @param {Dict} params - Key-value parameters passed from the translation entry.
103
- * @param {HelpersReadonly<any, any>} helpers - Read-only access to other registered helpers.
103
+ * @param {HelpersReadonly<T, R>} helpers - Read-only access to other registered helpers.
104
104
  * @returns {string} Processed string result.
105
105
  */
106
106
  /**
@@ -115,16 +115,87 @@ const checkDestroy = createCheckDestroyed('TinyI18');
115
115
  * - Safe: no dynamic code eval from files; functions in file mode are referenced by name ("$fn").
116
116
  */
117
117
  class TinyI18 {
118
+ /**
119
+ * Cached path join function used to resolve locale file paths.
120
+ * @type {((...paths: string[]) => string)|null}
121
+ */
122
+ static #join = null;
123
+ /**
124
+ * Cached file existence check function.
125
+ * @type {((path: string) => boolean)|null|false}
126
+ */
127
+ static #existsSync = null;
128
+ /**
129
+ * Cached asynchronous file read function.
130
+ * @type {((path: string, options: BufferEncoding) => Promise<string>)|null}
131
+ */
132
+ static #readFile = null;
133
+ /**
134
+ * Cached asynchronous file write function.
135
+ * @type {((path: string, data: string, options: BufferEncoding) => Promise<any>)|null}
136
+ */
137
+ static #writeFile = null;
138
+ /**
139
+ * Sets the path join function used to resolve locale file paths.
140
+ * Throws if a non-function value is provided or if the function has already been set.
141
+ * @param {(...paths: string[]) => string} value - The path join function to cache.
142
+ */
143
+ static set _join(value) {
144
+ if (typeof value !== 'function')
145
+ throw new TypeError('TinyI18: "_join" must be a function');
146
+ if (TinyI18.#join !== null)
147
+ throw new Error('TinyI18: "_join" has already been set');
148
+ TinyI18.#join = value;
149
+ }
150
+ /**
151
+ * Sets the file existence check function.
152
+ * Throws if a non-function value is provided or if the function has already been set.
153
+ * @param {((path: string) => boolean)|false} value - The existence check function, or false to disable.
154
+ */
155
+ static set _existsSync(value) {
156
+ if (typeof value !== 'function' && value !== false)
157
+ throw new TypeError('TinyI18: "_existsSync" must be a function or false');
158
+ if (TinyI18.#existsSync !== null)
159
+ throw new Error('TinyI18: "_existsSync" has already been set');
160
+ TinyI18.#existsSync = value;
161
+ }
162
+ /**
163
+ * Sets the asynchronous file read function.
164
+ * Throws if a non-function value is provided or if the function has already been set.
165
+ * @param {(path: string, options: BufferEncoding) => Promise<string>} value - The file read function to cache.
166
+ */
167
+ static set _readFile(value) {
168
+ if (typeof value !== 'function')
169
+ throw new TypeError('TinyI18: "_readFile" must be a function');
170
+ if (TinyI18.#readFile !== null)
171
+ throw new Error('TinyI18: "_readFile" has already been set');
172
+ TinyI18.#readFile = value;
173
+ }
174
+ /**
175
+ * Sets the asynchronous file write function.
176
+ * Throws if a non-function value is provided or if the function has already been set.
177
+ * @param {(path: string, data: string, options: BufferEncoding) => Promise<void>} value - The file write function to cache.
178
+ */
179
+ static set _writeFile(value) {
180
+ if (typeof value !== 'function')
181
+ throw new TypeError('TinyI18: "_writeFile" must be a function');
182
+ if (TinyI18.#writeFile !== null)
183
+ throw new Error('TinyI18: "_writeFile" has already been set');
184
+ TinyI18.#writeFile = value;
185
+ }
118
186
  /**
119
187
  * Merges multiple JSON locale files into a single file for TinyI18 usage.
120
- * @param {Object} options
188
+ *
189
+ * @param {Object} options - Configuration for the merge operation.
121
190
  * @param {string[]} options.files - List of JSON file paths to merge.
122
191
  * @param {string} options.output - Path where the merged JSON file will be written.
123
- * @param {number} [options.spaces=0] - Number of spaces to use for indentation in the output file (0 for compact JSON).
192
+ * @param {number} [options.spaces=0] - Number of spaces to use for indentation in the output file.
124
193
  * @throws {TypeError} If arguments are invalid.
125
194
  * @throws {Error} If file reading or writing fails.
126
195
  */
127
196
  static async mergeLocaleFiles({ files, output, spaces = 0 }) {
197
+ if (TinyI18.#existsSync === null || TinyI18.#readFile === null || TinyI18.#writeFile === null)
198
+ throw new Error('TinyI18: "mergeLocaleFiles" requires "_existsSync", "_readFile", and "_writeFile" to be set');
128
199
  if (typeof spaces !== 'number' || Number.isNaN(spaces) || spaces < 0)
129
200
  throw new TypeError('mergeLocaleFiles: "spaces" must be a non-negative number');
130
201
  if (!Array.isArray(files) || files.length === 0)
@@ -135,9 +206,9 @@ class TinyI18 {
135
206
  for (const filePath of files) {
136
207
  if (typeof filePath !== 'string' || !filePath)
137
208
  throw new TypeError('mergeLocaleFiles: each file path must be a non-empty string');
138
- if (!existsSync(filePath))
209
+ if (TinyI18.#existsSync !== false && !TinyI18.#existsSync(filePath))
139
210
  throw new Error(`mergeLocaleFiles: file "${filePath}" does not exist`);
140
- const raw = await readFile(filePath, 'utf-8');
211
+ const raw = await TinyI18.#readFile(filePath, 'utf-8');
141
212
  let json;
142
213
  try {
143
214
  json = JSON.parse(raw);
@@ -148,10 +219,10 @@ class TinyI18 {
148
219
  // Deep merge (locale-based)
149
220
  Object.assign(merged, json);
150
221
  }
151
- await writeFile(output, JSON.stringify(merged, null, spaces), 'utf-8');
222
+ await TinyI18.#writeFile(output, JSON.stringify(merged, null, spaces), 'utf-8');
152
223
  }
153
224
  /**
154
- * Tracks whether the instance has been destroyed.
225
+ * Indicates whether the instance has been destroyed.
155
226
  * @type {boolean}
156
227
  */
157
228
  #destroyed = false;
@@ -163,28 +234,29 @@ class TinyI18 {
163
234
  get destroyed() {
164
235
  return this.#destroyed;
165
236
  }
166
- /** @type {ModeTypes} */
237
+ /** @type {ModeTypes} - The current operating mode of the instance. */
167
238
  #mode;
168
- /** @type {LocaleCode} */
239
+ /** @type {LocaleCode} - The default fallback locale. */
169
240
  #defaultLocale;
170
- /** @type {LocaleCode|null} */
241
+ /** @type {LocaleCode|null} - The currently active locale. */
171
242
  #currentLocale = null;
172
- /** @type {boolean} */
243
+ /** @type {boolean} - Whether to throw errors on missing keys or invalid data. */
173
244
  #strict;
174
- /** @type {string|null} */
245
+ /** @type {boolean} - Whether to return null instead of the key for missing translations. */
246
+ #acceptNullResults = false;
247
+ /** @type {string|null} - The base directory for file-mode operations. */
175
248
  #basePath = null;
176
- /** @type {Map<LocaleCode, Dict>} */
177
- #stringTables = new Map(); // plain key => string | { $fn } | Function
178
- /** @type {Map<LocaleCode, PatternEntry[]>} */
179
- #patternTables = new Map(); // array of { $pattern: RegExp, value }
180
- // Helpers registry for function-based entries in both modes.
181
- /** @type {Map<string, HelperCallback>} */
249
+ /** @type {Map<LocaleCode, Dict>} - Internal storage for string translations per locale. */
250
+ #stringTables = new Map();
251
+ /** @type {Map<LocaleCode, PatternEntry[]>} - Internal storage for regex pattern entries per locale. */
252
+ #patternTables = new Map();
253
+ /** @type {Map<string, HelperCallback<any, any>>} - Registry of available helper functions. */
182
254
  #helpers = new Map();
183
- /** @type {Map<string, RegExp>} */
255
+ /** @type {Map<string, RegExp>} - Cache for compiled regular expression objects. */
184
256
  #regexCache = new Map();
185
257
  /**
186
258
  * Gets the currently selected locale, or null if only default is active.
187
- * @returns {LocaleCode|null}
259
+ * @returns {LocaleCode|null} The currently active locale code, or null.
188
260
  */
189
261
  get currentLocale() {
190
262
  checkDestroy(this.#destroyed);
@@ -219,6 +291,14 @@ class TinyI18 {
219
291
  checkDestroy(this.#destroyed);
220
292
  return this.#strict;
221
293
  }
294
+ /**
295
+ * Whether null results are accepted when a translation is missing.
296
+ * @type {boolean}
297
+ */
298
+ get acceptNullResults() {
299
+ checkDestroy(this.#destroyed);
300
+ return this.#acceptNullResults;
301
+ }
222
302
  /**
223
303
  * Base directory path used in `"file"` mode to locate locale JSON files.
224
304
  * - In `"local"` mode this will always be `null`.
@@ -231,7 +311,7 @@ class TinyI18 {
231
311
  }
232
312
  /**
233
313
  * Returns basic stats for debugging/memory insights.
234
- * @returns {StatLocale[]}
314
+ * @returns {StatLocale[]} Array of statistics for each registered locale.
235
315
  */
236
316
  get stats() {
237
317
  checkDestroy(this.#destroyed);
@@ -243,7 +323,7 @@ class TinyI18 {
243
323
  /**
244
324
  * Deep-cloned view of string tables (Map → Object).
245
325
  * Preserves strings, $fn objects, and functions.
246
- * @returns {Record<string, Dict>}
326
+ * @returns {Record<string, Dict>} A deep clone of the string tables.
247
327
  */
248
328
  get stringTables() {
249
329
  checkDestroy(this.#destroyed);
@@ -257,7 +337,7 @@ class TinyI18 {
257
337
  /**
258
338
  * Deep-cloned view of pattern tables (Map → Object).
259
339
  * Recreates RegExp objects to avoid mutation.
260
- * @returns {Record<string, PatternEntry[]>}
340
+ * @returns {Record<string, PatternEntry[]>} A deep clone of the pattern tables.
261
341
  */
262
342
  get patternTables() {
263
343
  checkDestroy(this.#destroyed);
@@ -275,11 +355,11 @@ class TinyI18 {
275
355
  /**
276
356
  * Deep-cloned view of helpers (Map → Object).
277
357
  * Functions are referenced (cannot deep clone functions).
278
- * @returns {Record<string, HelperCallback>}
358
+ * @returns {Record<string, HelperCallback<any, any>>} A copy of the helpers registry.
279
359
  */
280
360
  get helpers() {
281
361
  checkDestroy(this.#destroyed);
282
- /** @type {Record<string, HelperCallback>} */
362
+ /** @type {Record<string, HelperCallback<any, any>>} */
283
363
  const obj = {};
284
364
  for (const [name, fn] of this.#helpers.entries()) {
285
365
  obj[name] = fn;
@@ -289,7 +369,7 @@ class TinyI18 {
289
369
  /**
290
370
  * Deep-cloned view of regex cache (Map → Object).
291
371
  * Recreates RegExp objects to avoid mutation.
292
- * @returns {Record<string, RegExp>}
372
+ * @returns {Record<string, RegExp>} A copy of the regex cache.
293
373
  */
294
374
  get regexCache() {
295
375
  checkDestroy(this.#destroyed);
@@ -307,8 +387,8 @@ class TinyI18 {
307
387
  * - Objects/arrays are recursively cloned
308
388
  * - Functions are returned as-is
309
389
  * - RegExp are cloned
310
- * @param {any} value
311
- * @returns {any}
390
+ * @param {any} value - The value to clone.
391
+ * @returns {any} The deep-cloned value.
312
392
  */
313
393
  #deepClone(value) {
314
394
  if (value == null ||
@@ -398,9 +478,11 @@ class TinyI18 {
398
478
  * - function (params, helpers) => any
399
479
  * - { $fn: string, args?: any } // file mode placeholder resolved via helpers
400
480
  *
401
- * @param {string | HelperCallback | { $fn: string; args?: any }} value
402
- * @param {Dict} [params]
403
- * @returns {string}
481
+ * @template {any} T
482
+ * @template {any} R
483
+ * @param {string | HelperCallback<T, R> | { $fn: string; args?: any }} value - The raw translation value.
484
+ * @param {Dict} [params] - Data used for interpolation or helper arguments.
485
+ * @returns {string} The processed translation string.
404
486
  */
405
487
  #materialize(value, params) {
406
488
  if (value === null || value === undefined) {
@@ -563,18 +645,20 @@ class TinyI18 {
563
645
  * - `$pattern` entries are compiled to RegExp and stored in the pattern table.
564
646
  * - `$fn` references are preserved for later resolution via helpers.
565
647
  *
566
- * @param {LocaleCode} locale - Locale identifier (e.g. "en", "pt-BR").
567
- * @returns {Promise<void>}
648
+ * @param {LocaleCode} locale - Locale identifier (e.g., "en", "pt-BR").
649
+ * @returns {Promise<void>} A promise that resolves when the locale file has been loaded and ingested.
568
650
  */
569
651
  async #loadLocaleFromFile(locale) {
652
+ if (TinyI18.#join === null || TinyI18.#readFile === null)
653
+ throw new Error('TinyI18: "file" mode requires "_join" and "_readFile" to be set');
570
654
  if (typeof locale !== 'string' || !locale)
571
655
  throw new TypeError('#loadLocaleFromFile: "locale" must be a non-empty string');
572
656
  if (typeof this.#basePath !== 'string' || !this.#basePath)
573
657
  throw new TypeError('#loadLocaleFromFile: "this.#basePath" must be a non-empty string');
574
- const file = pathJoin(this.#basePath, `${locale}.json`);
658
+ const file = TinyI18.#join(this.#basePath, `${locale}.json`);
575
659
  let json;
576
660
  try {
577
- const raw = await readFile(file, 'utf8');
661
+ const raw = await TinyI18.#readFile(file, 'utf8');
578
662
  json = JSON.parse(raw);
579
663
  }
580
664
  catch (err) {
@@ -596,7 +680,7 @@ class TinyI18 {
596
680
  const patterns = [...(this.#patternTables.get(locale) ?? [])];
597
681
  /**
598
682
  * @param {string} prefix
599
- * @param {FileValue|string|null} node
683
+ * @param {FileValue|TranslateResult} node
600
684
  */
601
685
  const walk = (prefix, node) => {
602
686
  if (node == null)
@@ -639,7 +723,7 @@ class TinyI18 {
639
723
  * In strict mode, throws on invalid regex; otherwise returns a never-matching regex.
640
724
  *
641
725
  * @param {string} src - Regex source pattern (no flags allowed).
642
- * @returns {RegExp}
726
+ * @returns {RegExp} The compiled regular expression, or a never-matching regex in non-strict mode.
643
727
  */
644
728
  #safeRegExp(src) {
645
729
  if (typeof src !== 'string' || !src)
@@ -666,8 +750,8 @@ class TinyI18 {
666
750
  * - string → returned as-is
667
751
  * - { $fn: string, args?: any } → preserved for helper resolution
668
752
  *
669
- * @param {string|FileValue} v
670
- * @returns {string|{ $fn: string, args?: any }}
753
+ * @param {string|FileValue} v - The value to normalize.
754
+ * @returns {TranslationValue} The normalized translation value.
671
755
  */
672
756
  #coerceFileValue(v) {
673
757
  // Strings pass through; objects with $fn kept as-is; everything else ignored gracefully
@@ -697,13 +781,15 @@ class TinyI18 {
697
781
  if (!options || typeof options !== 'object') {
698
782
  throw new TypeError('TinyI18: options must be an object');
699
783
  }
700
- const { mode, defaultLocale, basePath, localResources, strict = true } = options;
784
+ const { mode, defaultLocale, basePath, localResources, strict = true, acceptNullResults = false, } = options;
701
785
  if (mode !== 'local' && mode !== 'file')
702
786
  throw new TypeError('TinyI18: "mode" must be "local" or "file"');
703
787
  if (typeof defaultLocale !== 'string' || !defaultLocale)
704
788
  throw new TypeError('TinyI18: "defaultLocale" must be a non-empty string');
705
789
  if (typeof strict !== 'boolean')
706
790
  throw new TypeError('TinyI18: "strict" must be a boolean');
791
+ if (typeof acceptNullResults !== 'boolean')
792
+ throw new TypeError('TinyI18: "acceptNullResults" must be a boolean');
707
793
  if (mode === 'file') {
708
794
  if (typeof basePath !== 'string' || !basePath)
709
795
  throw new TypeError('TinyI18: "basePath" is required in file mode');
@@ -712,6 +798,7 @@ class TinyI18 {
712
798
  this.#mode = mode;
713
799
  this.#defaultLocale = defaultLocale;
714
800
  this.#strict = strict;
801
+ this.#acceptNullResults = acceptNullResults;
715
802
  if (mode === 'local' && localResources && typeof localResources === 'object') {
716
803
  for (const [loc, data] of Object.entries(localResources)) {
717
804
  this.#ingestLocale(loc, data);
@@ -737,8 +824,10 @@ class TinyI18 {
737
824
  }
738
825
  /**
739
826
  * Registers a helper function available to function-based entries and $fn references.
740
- * @param {string} name
741
- * @param {HelperCallback} fn
827
+ * @template {any} T
828
+ * @template {any} R
829
+ * @param {string} name - The unique name of the helper.
830
+ * @param {HelperCallback<T, R>} fn - The callback function to register.
742
831
  */
743
832
  registerHelper(name, fn) {
744
833
  checkDestroy(this.#destroyed);
@@ -759,13 +848,13 @@ class TinyI18 {
759
848
  unregisterHelper(name) {
760
849
  checkDestroy(this.#destroyed);
761
850
  if (typeof name !== 'string' || !name)
762
- throw new TypeError('unregisterHelper: "name" must be non-empty string');
851
+ throw new TypeError('unregisterHelper: "name" must be a non-empty string');
763
852
  return this.#helpers.delete(name);
764
853
  }
765
854
  /**
766
855
  * Loads or updates a locale data in-memory (local mode only).
767
- * @param {LocaleCode} locale
768
- * @param {Dict} data
856
+ * @param {LocaleCode} locale - The locale to load.
857
+ * @param {Dict} data - The dictionary data for the locale.
769
858
  */
770
859
  loadLocaleLocal(locale, data) {
771
860
  checkDestroy(this.#destroyed);
@@ -776,7 +865,8 @@ class TinyI18 {
776
865
  /**
777
866
  * Sets the current selected locale. In file mode, loads it from disk.
778
867
  * Keeps only the default and the selected locale in memory (unloads previous selected).
779
- * @param {LocaleCode|null} locale - null -> keep only default
868
+ * @param {LocaleCode|null} locale - The locale to set, or null to use only the default.
869
+ * @returns {Promise<void>} A promise that resolves when the locale has been set and loaded.
780
870
  */
781
871
  async setLocale(locale) {
782
872
  checkDestroy(this.#destroyed);
@@ -808,17 +898,17 @@ class TinyI18 {
808
898
  * @param {string} key - Translation key (dot.notation).
809
899
  * @param {Dict} [params] - Parameters for string interpolation or helper functions.
810
900
  * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
811
- * @returns {any} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
901
+ * @returns {TranslateResult} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
812
902
  */
813
903
  t(key, params = undefined, options = undefined) {
814
904
  return this.get(key, params, options);
815
905
  }
816
906
  /**
817
907
  * Alias of t()
818
- * @param {string} key
819
- * @param {Dict} [params]
820
- * @param {ResolveOptions} [options]
821
- * @returns {any}
908
+ * @param {string} key - Translation key (dot.notation).
909
+ * @param {Dict} [params] - Parameters for string interpolation or helper functions.
910
+ * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
911
+ * @returns {TranslateResult} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
822
912
  */
823
913
  get(key, params = undefined, options = undefined) {
824
914
  checkDestroy(this.#destroyed);
@@ -830,6 +920,8 @@ class TinyI18 {
830
920
  if (resolved === undefined) {
831
921
  if (this.#strict)
832
922
  throw new Error(`TinyI18: missing translation for key "${key}"`);
923
+ if (this.#acceptNullResults)
924
+ return null;
833
925
  return key; // graceful fallback to key
834
926
  }
835
927
  return this.#materialize(resolved, params);
@@ -841,16 +933,16 @@ class TinyI18 {
841
933
  *
842
934
  * @param {string} key - Input string to test against regex patterns.
843
935
  * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
844
- * @returns {any} - Translation value (string or custom return type).
936
+ * @returns {TranslateResult} - Translation value (string or custom return type).
845
937
  */
846
938
  p(key, options) {
847
939
  return this.resolveByPattern(key, options);
848
940
  }
849
941
  /**
850
942
  * Alias of p()
851
- * @param {string} key
852
- * @param {ResolveOptions} [options]
853
- * @returns {any}
943
+ * @param {string} key - Input string to test against regex patterns.
944
+ * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
945
+ * @returns {TranslateResult} - Translation value (string or custom return type).
854
946
  */
855
947
  resolveByPattern(key, options) {
856
948
  checkDestroy(this.#destroyed);
@@ -862,6 +954,8 @@ class TinyI18 {
862
954
  if (resolved === undefined) {
863
955
  if (this.#strict)
864
956
  throw new Error(`TinyI18: missing translation for key "${key}"`);
957
+ if (this.#acceptNullResults)
958
+ return null;
865
959
  return key; // graceful fallback to key
866
960
  }
867
961
  return resolved;
@@ -883,8 +977,8 @@ class TinyI18 {
883
977
  }
884
978
  /**
885
979
  * Returns stats for a specific locale.
886
- * @param {LocaleCode} locale
887
- * @returns {StatLocale}
980
+ * @param {LocaleCode} locale - The locale code to query.
981
+ * @returns {StatLocale} An object containing the locale's current statistics.
888
982
  * @throws {Error} If the locale is not registered.
889
983
  */
890
984
  getStatsForLocale(locale) {
@@ -908,7 +1002,7 @@ class TinyI18 {
908
1002
  * to free up memory. Once destroyed, the instance cannot be reused.
909
1003
  *
910
1004
  * @throws {Error} If the instance has already been destroyed.
911
- * @returns {void}
1005
+ * @returns {void} This method does not return a value.
912
1006
  */
913
1007
  destroy() {
914
1008
  if (this.#destroyed)