tiny-essentials 1.28.19 → 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 (555) 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/index.cjs +88 -3
  109. package/dist/v1/index.d.mts +31 -6
  110. package/dist/v1/index.d.mts.map +1 -1
  111. package/dist/v1/index.mjs +32 -7
  112. package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
  113. package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
  114. package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
  115. package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
  116. package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
  117. package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
  118. package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
  119. package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
  120. package/dist/v1/libs/fs/constants.cjs +74 -0
  121. package/dist/v1/libs/fs/constants.d.mts +22 -0
  122. package/dist/v1/libs/fs/constants.d.mts.map +1 -0
  123. package/dist/v1/libs/fs/constants.mjs +53 -0
  124. package/dist/v1/libs/fs/encoding.cjs +118 -0
  125. package/dist/v1/libs/fs/encoding.d.mts +50 -0
  126. package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
  127. package/dist/v1/libs/fs/encoding.mjs +102 -0
  128. package/dist/v1/libs/fs/error.cjs +188 -0
  129. package/dist/v1/libs/fs/error.d.mts +105 -0
  130. package/dist/v1/libs/fs/error.d.mts.map +1 -0
  131. package/dist/v1/libs/fs/error.mjs +158 -0
  132. package/dist/v1/libs/fs/handle.cjs +121 -0
  133. package/dist/v1/libs/fs/handle.d.mts +56 -0
  134. package/dist/v1/libs/fs/handle.d.mts.map +1 -0
  135. package/dist/v1/libs/fs/handle.mjs +100 -0
  136. package/dist/v1/libs/fs/index.cjs +700 -0
  137. package/dist/v1/libs/fs/index.d.mts +377 -0
  138. package/dist/v1/libs/fs/index.d.mts.map +1 -0
  139. package/dist/v1/libs/fs/index.mjs +630 -0
  140. package/dist/v1/libs/fs/path.cjs +234 -0
  141. package/dist/v1/libs/fs/path.d.mts +176 -0
  142. package/dist/v1/libs/fs/path.d.mts.map +1 -0
  143. package/dist/v1/libs/fs/path.mjs +197 -0
  144. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
  145. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
  146. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
  147. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
  148. package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
  149. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
  150. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
  151. package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
  152. package/dist/v1/libs/fs/stats.cjs +245 -0
  153. package/dist/v1/libs/fs/stats.d.mts +226 -0
  154. package/dist/v1/libs/fs/stats.d.mts.map +1 -0
  155. package/dist/v1/libs/fs/stats.mjs +197 -0
  156. package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
  157. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
  158. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
  159. package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
  160. package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
  161. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
  162. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
  163. package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
  164. package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
  165. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
  166. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
  167. package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
  168. package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
  169. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
  170. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
  171. package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
  172. package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
  173. package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
  174. package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
  175. package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
  176. package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
  177. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
  178. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
  179. package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
  180. package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
  181. package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
  182. package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
  183. package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
  184. package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
  185. package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
  186. package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
  187. package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
  188. package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
  189. package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
  190. package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
  191. package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
  192. package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
  193. package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
  194. package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
  195. package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
  196. package/dist/v1/libs/router/TinyRouter.cjs +661 -0
  197. package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
  198. package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
  199. package/dist/v1/libs/router/TinyRouter.mjs +572 -0
  200. package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
  201. package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
  202. package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
  203. package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
  204. package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
  205. package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
  206. package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
  207. package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
  208. package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
  209. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
  210. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
  211. package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
  212. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
  213. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
  214. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
  215. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
  216. package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
  217. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
  218. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
  219. package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
  220. package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
  221. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
  222. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
  223. package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
  224. package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
  225. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
  226. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
  227. package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
  228. package/dist/v1/libs/sw/browser/utils.cjs +28 -0
  229. package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
  230. package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
  231. package/dist/v1/libs/sw/browser/utils.mjs +21 -0
  232. package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
  233. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
  234. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
  235. package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
  236. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
  237. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
  238. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
  239. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
  240. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
  241. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
  242. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
  243. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
  244. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
  245. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
  246. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
  247. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
  248. package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
  249. package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
  250. package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
  251. package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
  252. package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
  253. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
  254. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
  255. package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
  256. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
  257. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
  258. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
  259. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
  260. package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
  261. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
  262. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
  263. package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
  264. package/dist/v1/libs/sw/utils.cjs +57 -0
  265. package/dist/v1/libs/sw/utils.d.mts +173 -0
  266. package/dist/v1/libs/sw/utils.d.mts.map +1 -0
  267. package/dist/v1/libs/sw/utils.mjs +50 -0
  268. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
  269. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
  270. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
  271. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
  272. package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
  273. package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
  274. package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
  275. package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
  276. package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
  277. package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
  278. package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
  279. package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
  280. package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
  281. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
  282. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
  283. package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
  284. package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
  285. package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
  286. package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
  287. package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
  288. package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
  289. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
  290. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
  291. package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
  292. package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
  293. package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
  294. package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
  295. package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
  296. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
  297. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
  298. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
  299. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
  300. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
  301. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
  302. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
  303. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
  304. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
  305. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
  306. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
  307. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
  308. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
  309. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
  310. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
  311. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
  312. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
  313. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
  314. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
  315. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
  316. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
  317. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
  318. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
  319. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
  320. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
  321. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
  322. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
  323. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
  324. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
  325. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
  326. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
  327. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
  328. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
  329. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
  330. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
  331. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
  332. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
  333. package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
  334. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
  335. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
  336. package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
  337. package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
  338. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
  339. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
  340. package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
  341. package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
  342. package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
  343. package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
  344. package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
  345. package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
  346. package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
  347. package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
  348. package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
  349. package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
  350. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
  351. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
  352. package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
  353. package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
  354. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
  355. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
  356. package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
  357. package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
  358. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
  359. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
  360. package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
  361. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
  362. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
  363. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
  364. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
  365. package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
  366. package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
  367. package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
  368. package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
  369. package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
  370. package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
  371. package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
  372. package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
  373. package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
  374. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
  375. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
  376. package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
  377. package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
  378. package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
  379. package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
  380. package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
  381. package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
  382. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
  383. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
  384. package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
  385. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
  386. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
  387. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
  388. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
  389. package/dist/v1/regexp/Email.cjs +185 -0
  390. package/dist/v1/regexp/Email.d.mts +73 -0
  391. package/dist/v1/regexp/Email.d.mts.map +1 -0
  392. package/dist/v1/regexp/Email.mjs +153 -0
  393. package/dist/v1/regexp/Glob.cjs +293 -0
  394. package/dist/v1/regexp/Glob.d.mts +45 -0
  395. package/dist/v1/regexp/Glob.d.mts.map +1 -0
  396. package/dist/v1/regexp/Glob.mjs +260 -0
  397. package/dist/v1/regexp/Ipv4.cjs +57 -0
  398. package/dist/v1/regexp/Ipv4.d.mts +29 -0
  399. package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
  400. package/dist/v1/regexp/Ipv4.mjs +45 -0
  401. package/dist/v1/regexp/Ipv6.cjs +67 -0
  402. package/dist/v1/regexp/Ipv6.d.mts +29 -0
  403. package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
  404. package/dist/v1/regexp/Ipv6.mjs +54 -0
  405. package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
  406. package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
  407. package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
  408. package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
  409. package/dist/v1/regexp/UrlDetector.cjs +125 -0
  410. package/dist/v1/regexp/UrlDetector.d.mts +67 -0
  411. package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
  412. package/dist/v1/regexp/UrlDetector.mjs +102 -0
  413. package/dist/v1/regexp/Username/index.cjs +233 -0
  414. package/dist/v1/regexp/Username/index.d.mts +77 -0
  415. package/dist/v1/regexp/Username/index.d.mts.map +1 -0
  416. package/dist/v1/regexp/Username/index.mjs +199 -0
  417. package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
  418. package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
  419. package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
  420. package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
  421. package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
  422. package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
  423. package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
  424. package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
  425. package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
  426. package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
  427. package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
  428. package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
  429. package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
  430. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
  431. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
  432. package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
  433. package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
  434. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
  435. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
  436. package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
  437. package/dist/v1/regexp/Username/templates/index.cjs +11 -0
  438. package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
  439. package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
  440. package/dist/v1/regexp/Username/templates/index.mjs +4 -0
  441. package/dist/v1/regexp/index.cjs +41 -0
  442. package/dist/v1/regexp/index.d.mts +9 -0
  443. package/dist/v1/regexp/index.d.mts.map +1 -0
  444. package/dist/v1/regexp/index.mjs +8 -0
  445. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
  446. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
  447. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
  448. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
  449. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
  450. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
  451. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
  452. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
  453. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
  454. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
  455. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
  456. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
  457. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
  458. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
  459. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
  460. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
  461. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +30 -4
  462. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +5 -2
  463. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -1
  464. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +29 -5
  465. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
  466. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
  467. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
  468. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
  469. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
  470. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
  471. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
  472. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
  473. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
  474. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
  475. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
  476. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
  477. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
  478. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
  479. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
  480. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
  481. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
  482. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
  483. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
  484. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
  485. package/docs/info/RegExp.md +74 -0
  486. package/docs/v1/Exports.md +101 -0
  487. package/docs/v1/README.md +113 -15
  488. package/docs/v1/basics/asyncReplace.md +2 -0
  489. package/docs/v1/basics/browserDetector.md +28 -11
  490. package/docs/v1/basics/crypto.md +85 -0
  491. package/docs/v1/basics/deprecated/html.md +2 -0
  492. package/docs/v1/basics/deprecated/objFilter.md +2 -0
  493. package/docs/v1/basics/html.md +2 -0
  494. package/docs/v1/basics/objChecker.md +55 -0
  495. package/docs/v1/basics/objFilter.md +57 -86
  496. package/docs/v1/basics/promiseUtils.md +12 -3
  497. package/docs/v1/basics/text.md +0 -1
  498. package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
  499. package/docs/v1/libs/fs/TinyFS.md +752 -0
  500. package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
  501. package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
  502. package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
  503. package/docs/v1/libs/plugin/TinyVersion.md +145 -0
  504. package/docs/v1/libs/router/TinyRouter.md +216 -0
  505. package/docs/v1/libs/storage/TinyMapCache.md +219 -0
  506. package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
  507. package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
  508. package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
  509. package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
  510. package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
  511. package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
  512. package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
  513. package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
  514. package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
  515. package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
  516. package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
  517. package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
  518. package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
  519. package/docs/v1/libs/text/TinyI18.md +80 -56
  520. package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
  521. package/docs/v1/libs/tools/TinyDebugger.md +117 -1
  522. package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
  523. package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
  524. package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
  525. package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
  526. package/docs/v1/libs/tools/TinySiteMap.md +134 -0
  527. package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
  528. package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
  529. package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
  530. package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
  531. package/docs/v1/libs/tools/TinyUriParser.md +128 -0
  532. package/docs/v1/libs/utils/TinyCloner.md +126 -0
  533. package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
  534. package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
  535. package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
  536. package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
  537. package/docs/v1/regexp/Email.md +127 -0
  538. package/docs/v1/regexp/Glob.md +155 -0
  539. package/docs/v1/regexp/IPv4.md +103 -0
  540. package/docs/v1/regexp/IPv6.md +122 -0
  541. package/docs/v1/regexp/SegmentExtractor.md +120 -0
  542. package/docs/v1/regexp/UrlDetector.md +117 -0
  543. package/docs/v1/regexp/Username/Base.md +131 -0
  544. package/docs/v1/regexp/Username/Discord.md +267 -0
  545. package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
  546. package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +569 -0
  547. package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +19 -7
  548. package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
  549. package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
  550. package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
  551. package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
  552. package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
  553. package/package.json +303 -13
  554. package/types/EventEmitter.d.ts +48 -0
  555. package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
@@ -1,9 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var promises = require('fs/promises');
4
- var fs = require('fs');
5
- var path = require('path');
6
- var tools = require('../utils/tools.cjs');
3
+ var tools = require('../../utils/tools.cjs');
7
4
 
8
5
  const checkDestroy = tools.createCheckDestroyed('TinyI18');
9
6
 
@@ -17,74 +14,76 @@ const checkDestroy = tools.createCheckDestroyed('TinyI18');
17
14
  /**
18
15
  * Dictionary of translation keys mapped to values.
19
16
  *
20
- * @typedef {Record<string, any>} Dict
17
+ * @typedef {Record<string, any>} Dict - A collection of key-value pairs for translations.
21
18
  */
22
19
 
23
20
  /**
24
21
  * Represents a translation entry as it appears in JSON files.
25
22
  *
26
- * @typedef {{
27
- * $pattern: string,
28
- * $fn: string,
29
- * [key: string]: string
30
- * }} FileValue
31
- *
32
- * `$pattern` - Regex string (will be compiled into RegExp).
33
- *
34
- * `$fn` - Helper function name associated with this entry.
23
+ * @typedef {Object} FileValueBase
24
+ * @property {string} $pattern - Regex string (will be compiled into RegExp).
25
+ * @property {string} $fn - Helper function name associated with this entry.
26
+ * @property {string} [key] - Additional key-value pairs for interpolation or extra metadata.
27
+ */
35
28
 
36
- * `[key]` - Additional key-value pairs for interpolation or extra metadata.
29
+ /**
30
+ * Represents a translation entry as it appears in JSON files, extending
31
+ * the base pattern/function fields with arbitrary string key-value pairs.
32
+ *
33
+ * @typedef {FileValueBase & { [key: string]: string }} FileValue
37
34
  */
38
35
 
39
36
  /**
40
37
  * Represents a valid locale code string.
41
38
  * Example: "en", "pt-BR", "fr".
42
39
  *
43
- * @typedef {string} LocaleCode
40
+ * @typedef {string} LocaleCode - A string representing a valid locale identifier.
44
41
  */
45
42
 
46
43
  /**
47
- * Value types stored per locale:
48
- * - string: a direct translation with optional {named} interpolation
49
- * - Function: (params, helpers) => any (advanced rendering; HTML-safe if you control it)
50
- * - { $pattern: RegExp, value: string | { $fn: string, args?: any } | Function }
51
- * - { $fn: string, args?: any } // in file mode; resolved to a registered function
44
+ * Value types stored per locale.
45
+ *
46
+ * @typedef {string|{ $fn: string; args?: any }} TranslationValue - The type of a value used in a translation entry.
52
47
  */
53
48
 
54
49
  /**
55
- * Represents a single regex-based translation entry.
50
+ * A resolved translation value.
56
51
  *
57
- * @typedef {Object} PatternEntry
58
- * @property {RegExp} $pattern - Compiled regular expression used for matching.
59
- * @property {any} value - Translation value or resolver function associated with the pattern.
60
- * @property {any} elseValue - Translation value or resolver function associated with the pattern.
52
+ * @typedef {string|null} TranslateResult - A resolved translation value, typically a string or null.
61
53
  */
62
54
 
63
55
  /**
64
- * @typedef {Object} FileModeEntryJSON
65
- * @property {string} [$pattern] - regex as string e.g. "^user\\.(\\d+)$"
66
- * @property {string|Object} value - string or { $fn: string, args?: any }
67
- * @property {string|Object} elseValue - string or { $fn: string, args?: any }
56
+ * Represents a single regex-based translation entry.
57
+ *
58
+ * @typedef {Object} PatternEntry - A representation of a translation entry that matches via a regular expression.
59
+ * @property {RegExp} $pattern - Compiled regular expression used for matching.
60
+ * @property {TranslationValue} value - Translation value or resolver function associated with the pattern.
61
+ * @property {TranslationValue} elseValue - Translation value or resolver function associated with the pattern.
68
62
  */
69
63
 
70
64
  /**
71
- * @typedef {Object} TinyI18Options
72
- * @property {ModeTypes} mode
73
- * @property {LocaleCode} defaultLocale
74
- * @property {string} [basePath] - Required in file mode. Directory with <locale>.json
75
- * @property {Dict} [localResources] - Optional initial map { locale: dict } for local mode
76
- * @property {boolean} [strict=true] - If true, throws on missing keys; else returns key
65
+ * Configuration options for the TinyI18 instance.
66
+ *
67
+ * @typedef {Object} TinyI18Options - Configuration options for the TinyI18 constructor.
68
+ * @property {ModeTypes} mode - The operating mode of the instance.
69
+ * @property {LocaleCode} defaultLocale - The fallback locale used when a key is missing.
70
+ * @property {string} [basePath] - Required in file mode. Directory containing <locale>.json files.
71
+ * @property {Dict} [localResources] - Optional initial map { locale: dict } for local mode.
72
+ * @property {boolean} [strict=true] - If true, throws on missing keys or invalid data; else returns fallback.
73
+ * @property {boolean} [acceptNullResults=false] - If true, returns null instead of the key for missing translations.
77
74
  */
78
75
 
79
76
  /**
80
- * @typedef {Object} ResolveOptions
81
- * @property {LocaleCode} [locale] - force resolve using a specific locale first
77
+ * Options used to customize the translation resolution process.
78
+ *
79
+ * @typedef {Object} ResolveOptions - Options to control the translation resolution process.
80
+ * @property {LocaleCode} [locale] - Force resolution using a specific locale first.
82
81
  */
83
82
 
84
83
  /**
85
- * Represents statistics for a specific locale.
84
+ * Statistics for a specific locale.
86
85
  *
87
- * @typedef {Object} StatLocale
86
+ * @typedef {Object} StatLocale - Information about the contents and status of a specific locale.
88
87
  * @property {string} locale - The locale code (e.g., "en", "pt-BR").
89
88
  * @property {number} strings - Total number of static string entries in this locale.
90
89
  * @property {number} patterns - Total number of regex-based pattern entries in this locale.
@@ -96,12 +95,12 @@ const checkDestroy = tools.createCheckDestroyed('TinyI18');
96
95
  * Read-only view of registered helpers, exposed to function-based entries.
97
96
  *
98
97
  * Provides safe access to:
99
- * - check if a helper exists by name
100
- * - call a helper by name, passing arguments
98
+ * - Check if a helper exists by name.
99
+ * - Call a helper by name, passing arguments.
101
100
  *
102
101
  * @template {any} T
103
102
  * @template {any} R
104
- * @typedef {Object} HelpersReadonly
103
+ * @typedef {Object} HelpersReadonly - A read-only interface for interacting with registered helpers.
105
104
  * @property {(name: string) => boolean} [has] - Check if a helper with given name is registered.
106
105
  * @property {(name: string, arg: T, extras?: HelpersReadonly<T, R>) => R} [call] -
107
106
  * Invoke a helper by name with an argument and optional extras.
@@ -113,9 +112,11 @@ const checkDestroy = tools.createCheckDestroyed('TinyI18');
113
112
  * - Receives user-supplied parameters and a read-only facade for calling other helpers.
114
113
  * - Must return a string (e.g. processed, interpolated, or formatted output).
115
114
  *
115
+ * @template {any} T
116
+ * @template {any} R
116
117
  * @callback HelperCallback
117
118
  * @param {Dict} params - Key-value parameters passed from the translation entry.
118
- * @param {HelpersReadonly<any, any>} helpers - Read-only access to other registered helpers.
119
+ * @param {HelpersReadonly<T, R>} helpers - Read-only access to other registered helpers.
119
120
  * @returns {string} Processed string result.
120
121
  */
121
122
 
@@ -131,16 +132,90 @@ const checkDestroy = tools.createCheckDestroyed('TinyI18');
131
132
  * - Safe: no dynamic code eval from files; functions in file mode are referenced by name ("$fn").
132
133
  */
133
134
  class TinyI18 {
135
+ /**
136
+ * Cached path join function used to resolve locale file paths.
137
+ * @type {((...paths: string[]) => string)|null}
138
+ */
139
+ static #join = null;
140
+ /**
141
+ * Cached file existence check function.
142
+ * @type {((path: string) => boolean)|null|false}
143
+ */
144
+ static #existsSync = null;
145
+ /**
146
+ * Cached asynchronous file read function.
147
+ * @type {((path: string, options: BufferEncoding) => Promise<string>)|null}
148
+ */
149
+ static #readFile = null;
150
+ /**
151
+ * Cached asynchronous file write function.
152
+ * @type {((path: string, data: string, options: BufferEncoding) => Promise<any>)|null}
153
+ */
154
+ static #writeFile = null;
155
+
156
+ /**
157
+ * Sets the path join function used to resolve locale file paths.
158
+ * Throws if a non-function value is provided or if the function has already been set.
159
+ * @param {(...paths: string[]) => string} value - The path join function to cache.
160
+ */
161
+ static set _join(value) {
162
+ if (typeof value !== 'function') throw new TypeError('TinyI18: "_join" must be a function');
163
+ if (TinyI18.#join !== null) throw new Error('TinyI18: "_join" has already been set');
164
+ TinyI18.#join = value;
165
+ }
166
+
167
+ /**
168
+ * Sets the file existence check function.
169
+ * Throws if a non-function value is provided or if the function has already been set.
170
+ * @param {((path: string) => boolean)|false} value - The existence check function, or false to disable.
171
+ */
172
+ static set _existsSync(value) {
173
+ if (typeof value !== 'function' && value !== false)
174
+ throw new TypeError('TinyI18: "_existsSync" must be a function or false');
175
+ if (TinyI18.#existsSync !== null)
176
+ throw new Error('TinyI18: "_existsSync" has already been set');
177
+ TinyI18.#existsSync = value;
178
+ }
179
+
180
+ /**
181
+ * Sets the asynchronous file read function.
182
+ * Throws if a non-function value is provided or if the function has already been set.
183
+ * @param {(path: string, options: BufferEncoding) => Promise<string>} value - The file read function to cache.
184
+ */
185
+ static set _readFile(value) {
186
+ if (typeof value !== 'function') throw new TypeError('TinyI18: "_readFile" must be a function');
187
+ if (TinyI18.#readFile !== null) throw new Error('TinyI18: "_readFile" has already been set');
188
+ TinyI18.#readFile = value;
189
+ }
190
+
191
+ /**
192
+ * Sets the asynchronous file write function.
193
+ * Throws if a non-function value is provided or if the function has already been set.
194
+ * @param {(path: string, data: string, options: BufferEncoding) => Promise<void>} value - The file write function to cache.
195
+ */
196
+ static set _writeFile(value) {
197
+ if (typeof value !== 'function')
198
+ throw new TypeError('TinyI18: "_writeFile" must be a function');
199
+ if (TinyI18.#writeFile !== null) throw new Error('TinyI18: "_writeFile" has already been set');
200
+ TinyI18.#writeFile = value;
201
+ }
202
+
134
203
  /**
135
204
  * Merges multiple JSON locale files into a single file for TinyI18 usage.
136
- * @param {Object} options
205
+ *
206
+ * @param {Object} options - Configuration for the merge operation.
137
207
  * @param {string[]} options.files - List of JSON file paths to merge.
138
208
  * @param {string} options.output - Path where the merged JSON file will be written.
139
- * @param {number} [options.spaces=0] - Number of spaces to use for indentation in the output file (0 for compact JSON).
209
+ * @param {number} [options.spaces=0] - Number of spaces to use for indentation in the output file.
140
210
  * @throws {TypeError} If arguments are invalid.
141
211
  * @throws {Error} If file reading or writing fails.
142
212
  */
143
213
  static async mergeLocaleFiles({ files, output, spaces = 0 }) {
214
+ if (TinyI18.#existsSync === null || TinyI18.#readFile === null || TinyI18.#writeFile === null)
215
+ throw new Error(
216
+ 'TinyI18: "mergeLocaleFiles" requires "_existsSync", "_readFile", and "_writeFile" to be set',
217
+ );
218
+
144
219
  if (typeof spaces !== 'number' || Number.isNaN(spaces) || spaces < 0)
145
220
  throw new TypeError('mergeLocaleFiles: "spaces" must be a non-negative number');
146
221
  if (!Array.isArray(files) || files.length === 0)
@@ -153,10 +228,10 @@ class TinyI18 {
153
228
  for (const filePath of files) {
154
229
  if (typeof filePath !== 'string' || !filePath)
155
230
  throw new TypeError('mergeLocaleFiles: each file path must be a non-empty string');
156
- if (!fs.existsSync(filePath))
231
+ if (TinyI18.#existsSync !== false && !TinyI18.#existsSync(filePath))
157
232
  throw new Error(`mergeLocaleFiles: file "${filePath}" does not exist`);
158
233
 
159
- const raw = await promises.readFile(filePath, 'utf-8');
234
+ const raw = await TinyI18.#readFile(filePath, 'utf-8');
160
235
  let json;
161
236
  try {
162
237
  json = JSON.parse(raw);
@@ -168,11 +243,11 @@ class TinyI18 {
168
243
  Object.assign(merged, json);
169
244
  }
170
245
 
171
- await promises.writeFile(output, JSON.stringify(merged, null, spaces), 'utf-8');
246
+ await TinyI18.#writeFile(output, JSON.stringify(merged, null, spaces), 'utf-8');
172
247
  }
173
248
 
174
249
  /**
175
- * Tracks whether the instance has been destroyed.
250
+ * Indicates whether the instance has been destroyed.
176
251
  * @type {boolean}
177
252
  */
178
253
  #destroyed = false;
@@ -186,33 +261,31 @@ class TinyI18 {
186
261
  return this.#destroyed;
187
262
  }
188
263
 
189
- /** @type {ModeTypes} */
264
+ /** @type {ModeTypes} - The current operating mode of the instance. */
190
265
  #mode;
191
- /** @type {LocaleCode} */
266
+ /** @type {LocaleCode} - The default fallback locale. */
192
267
  #defaultLocale;
193
- /** @type {LocaleCode|null} */
268
+ /** @type {LocaleCode|null} - The currently active locale. */
194
269
  #currentLocale = null;
195
- /** @type {boolean} */
270
+ /** @type {boolean} - Whether to throw errors on missing keys or invalid data. */
196
271
  #strict;
197
- /** @type {string|null} */
272
+ /** @type {boolean} - Whether to return null instead of the key for missing translations. */
273
+ #acceptNullResults = false;
274
+ /** @type {string|null} - The base directory for file-mode operations. */
198
275
  #basePath = null;
199
276
 
200
- /** @type {Map<LocaleCode, Dict>} */
201
- #stringTables = new Map(); // plain key => string | { $fn } | Function
202
-
203
- /** @type {Map<LocaleCode, PatternEntry[]>} */
204
- #patternTables = new Map(); // array of { $pattern: RegExp, value }
205
-
206
- // Helpers registry for function-based entries in both modes.
207
- /** @type {Map<string, HelperCallback>} */
277
+ /** @type {Map<LocaleCode, Dict>} - Internal storage for string translations per locale. */
278
+ #stringTables = new Map();
279
+ /** @type {Map<LocaleCode, PatternEntry[]>} - Internal storage for regex pattern entries per locale. */
280
+ #patternTables = new Map();
281
+ /** @type {Map<string, HelperCallback<any, any>>} - Registry of available helper functions. */
208
282
  #helpers = new Map();
209
-
210
- /** @type {Map<string, RegExp>} */
283
+ /** @type {Map<string, RegExp>} - Cache for compiled regular expression objects. */
211
284
  #regexCache = new Map();
212
285
 
213
286
  /**
214
287
  * Gets the currently selected locale, or null if only default is active.
215
- * @returns {LocaleCode|null}
288
+ * @returns {LocaleCode|null} The currently active locale code, or null.
216
289
  */
217
290
  get currentLocale() {
218
291
  checkDestroy(this.#destroyed);
@@ -251,6 +324,15 @@ class TinyI18 {
251
324
  return this.#strict;
252
325
  }
253
326
 
327
+ /**
328
+ * Whether null results are accepted when a translation is missing.
329
+ * @type {boolean}
330
+ */
331
+ get acceptNullResults() {
332
+ checkDestroy(this.#destroyed);
333
+ return this.#acceptNullResults;
334
+ }
335
+
254
336
  /**
255
337
  * Base directory path used in `"file"` mode to locate locale JSON files.
256
338
  * - In `"local"` mode this will always be `null`.
@@ -264,7 +346,7 @@ class TinyI18 {
264
346
 
265
347
  /**
266
348
  * Returns basic stats for debugging/memory insights.
267
- * @returns {StatLocale[]}
349
+ * @returns {StatLocale[]} Array of statistics for each registered locale.
268
350
  */
269
351
  get stats() {
270
352
  checkDestroy(this.#destroyed);
@@ -276,7 +358,7 @@ class TinyI18 {
276
358
  /**
277
359
  * Deep-cloned view of string tables (Map → Object).
278
360
  * Preserves strings, $fn objects, and functions.
279
- * @returns {Record<string, Dict>}
361
+ * @returns {Record<string, Dict>} A deep clone of the string tables.
280
362
  */
281
363
  get stringTables() {
282
364
  checkDestroy(this.#destroyed);
@@ -291,7 +373,7 @@ class TinyI18 {
291
373
  /**
292
374
  * Deep-cloned view of pattern tables (Map → Object).
293
375
  * Recreates RegExp objects to avoid mutation.
294
- * @returns {Record<string, PatternEntry[]>}
376
+ * @returns {Record<string, PatternEntry[]>} A deep clone of the pattern tables.
295
377
  */
296
378
  get patternTables() {
297
379
  checkDestroy(this.#destroyed);
@@ -310,11 +392,11 @@ class TinyI18 {
310
392
  /**
311
393
  * Deep-cloned view of helpers (Map → Object).
312
394
  * Functions are referenced (cannot deep clone functions).
313
- * @returns {Record<string, HelperCallback>}
395
+ * @returns {Record<string, HelperCallback<any, any>>} A copy of the helpers registry.
314
396
  */
315
397
  get helpers() {
316
398
  checkDestroy(this.#destroyed);
317
- /** @type {Record<string, HelperCallback>} */
399
+ /** @type {Record<string, HelperCallback<any, any>>} */
318
400
  const obj = {};
319
401
  for (const [name, fn] of this.#helpers.entries()) {
320
402
  obj[name] = fn;
@@ -325,7 +407,7 @@ class TinyI18 {
325
407
  /**
326
408
  * Deep-cloned view of regex cache (Map → Object).
327
409
  * Recreates RegExp objects to avoid mutation.
328
- * @returns {Record<string, RegExp>}
410
+ * @returns {Record<string, RegExp>} A copy of the regex cache.
329
411
  */
330
412
  get regexCache() {
331
413
  checkDestroy(this.#destroyed);
@@ -345,8 +427,8 @@ class TinyI18 {
345
427
  * - Objects/arrays are recursively cloned
346
428
  * - Functions are returned as-is
347
429
  * - RegExp are cloned
348
- * @param {any} value
349
- * @returns {any}
430
+ * @param {any} value - The value to clone.
431
+ * @returns {any} The deep-cloned value.
350
432
  */
351
433
  #deepClone(value) {
352
434
  if (
@@ -439,9 +521,11 @@ class TinyI18 {
439
521
  * - function (params, helpers) => any
440
522
  * - { $fn: string, args?: any } // file mode placeholder resolved via helpers
441
523
  *
442
- * @param {string | HelperCallback | { $fn: string; args?: any }} value
443
- * @param {Dict} [params]
444
- * @returns {string}
524
+ * @template {any} T
525
+ * @template {any} R
526
+ * @param {string | HelperCallback<T, R> | { $fn: string; args?: any }} value - The raw translation value.
527
+ * @param {Dict} [params] - Data used for interpolation or helper arguments.
528
+ * @returns {string} The processed translation string.
445
529
  */
446
530
  #materialize(value, params) {
447
531
  if (value === null || value === undefined) {
@@ -613,18 +697,20 @@ class TinyI18 {
613
697
  * - `$pattern` entries are compiled to RegExp and stored in the pattern table.
614
698
  * - `$fn` references are preserved for later resolution via helpers.
615
699
  *
616
- * @param {LocaleCode} locale - Locale identifier (e.g. "en", "pt-BR").
617
- * @returns {Promise<void>}
700
+ * @param {LocaleCode} locale - Locale identifier (e.g., "en", "pt-BR").
701
+ * @returns {Promise<void>} A promise that resolves when the locale file has been loaded and ingested.
618
702
  */
619
703
  async #loadLocaleFromFile(locale) {
704
+ if (TinyI18.#join === null || TinyI18.#readFile === null)
705
+ throw new Error('TinyI18: "file" mode requires "_join" and "_readFile" to be set');
620
706
  if (typeof locale !== 'string' || !locale)
621
707
  throw new TypeError('#loadLocaleFromFile: "locale" must be a non-empty string');
622
708
  if (typeof this.#basePath !== 'string' || !this.#basePath)
623
709
  throw new TypeError('#loadLocaleFromFile: "this.#basePath" must be a non-empty string');
624
- const file = path.join(this.#basePath, `${locale}.json`);
710
+ const file = TinyI18.#join(this.#basePath, `${locale}.json`);
625
711
  let json;
626
712
  try {
627
- const raw = await promises.readFile(file, 'utf8');
713
+ const raw = await TinyI18.#readFile(file, 'utf8');
628
714
  json = JSON.parse(raw);
629
715
  } catch (err) {
630
716
  if (!(err instanceof Error)) return;
@@ -645,7 +731,7 @@ class TinyI18 {
645
731
 
646
732
  /**
647
733
  * @param {string} prefix
648
- * @param {FileValue|string|null} node
734
+ * @param {FileValue|TranslateResult} node
649
735
  */
650
736
  const walk = (prefix, node) => {
651
737
  if (node == null) return;
@@ -696,7 +782,7 @@ class TinyI18 {
696
782
  * In strict mode, throws on invalid regex; otherwise returns a never-matching regex.
697
783
  *
698
784
  * @param {string} src - Regex source pattern (no flags allowed).
699
- * @returns {RegExp}
785
+ * @returns {RegExp} The compiled regular expression, or a never-matching regex in non-strict mode.
700
786
  */
701
787
  #safeRegExp(src) {
702
788
  if (typeof src !== 'string' || !src)
@@ -721,8 +807,8 @@ class TinyI18 {
721
807
  * - string → returned as-is
722
808
  * - { $fn: string, args?: any } → preserved for helper resolution
723
809
  *
724
- * @param {string|FileValue} v
725
- * @returns {string|{ $fn: string, args?: any }}
810
+ * @param {string|FileValue} v - The value to normalize.
811
+ * @returns {TranslationValue} The normalized translation value.
726
812
  */
727
813
  #coerceFileValue(v) {
728
814
  // Strings pass through; objects with $fn kept as-is; everything else ignored gracefully
@@ -752,13 +838,22 @@ class TinyI18 {
752
838
  if (!options || typeof options !== 'object') {
753
839
  throw new TypeError('TinyI18: options must be an object');
754
840
  }
755
- const { mode, defaultLocale, basePath, localResources, strict = true } = options;
841
+ const {
842
+ mode,
843
+ defaultLocale,
844
+ basePath,
845
+ localResources,
846
+ strict = true,
847
+ acceptNullResults = false,
848
+ } = options;
756
849
 
757
850
  if (mode !== 'local' && mode !== 'file')
758
851
  throw new TypeError('TinyI18: "mode" must be "local" or "file"');
759
852
  if (typeof defaultLocale !== 'string' || !defaultLocale)
760
853
  throw new TypeError('TinyI18: "defaultLocale" must be a non-empty string');
761
854
  if (typeof strict !== 'boolean') throw new TypeError('TinyI18: "strict" must be a boolean');
855
+ if (typeof acceptNullResults !== 'boolean')
856
+ throw new TypeError('TinyI18: "acceptNullResults" must be a boolean');
762
857
 
763
858
  if (mode === 'file') {
764
859
  if (typeof basePath !== 'string' || !basePath)
@@ -769,6 +864,7 @@ class TinyI18 {
769
864
  this.#mode = mode;
770
865
  this.#defaultLocale = defaultLocale;
771
866
  this.#strict = strict;
867
+ this.#acceptNullResults = acceptNullResults;
772
868
 
773
869
  if (mode === 'local' && localResources && typeof localResources === 'object') {
774
870
  for (const [loc, data] of Object.entries(localResources)) {
@@ -799,8 +895,10 @@ class TinyI18 {
799
895
 
800
896
  /**
801
897
  * Registers a helper function available to function-based entries and $fn references.
802
- * @param {string} name
803
- * @param {HelperCallback} fn
898
+ * @template {any} T
899
+ * @template {any} R
900
+ * @param {string} name - The unique name of the helper.
901
+ * @param {HelperCallback<T, R>} fn - The callback function to register.
804
902
  */
805
903
  registerHelper(name, fn) {
806
904
  checkDestroy(this.#destroyed);
@@ -821,14 +919,14 @@ class TinyI18 {
821
919
  unregisterHelper(name) {
822
920
  checkDestroy(this.#destroyed);
823
921
  if (typeof name !== 'string' || !name)
824
- throw new TypeError('unregisterHelper: "name" must be non-empty string');
922
+ throw new TypeError('unregisterHelper: "name" must be a non-empty string');
825
923
  return this.#helpers.delete(name);
826
924
  }
827
925
 
828
926
  /**
829
927
  * Loads or updates a locale data in-memory (local mode only).
830
- * @param {LocaleCode} locale
831
- * @param {Dict} data
928
+ * @param {LocaleCode} locale - The locale to load.
929
+ * @param {Dict} data - The dictionary data for the locale.
832
930
  */
833
931
  loadLocaleLocal(locale, data) {
834
932
  checkDestroy(this.#destroyed);
@@ -840,7 +938,8 @@ class TinyI18 {
840
938
  /**
841
939
  * Sets the current selected locale. In file mode, loads it from disk.
842
940
  * Keeps only the default and the selected locale in memory (unloads previous selected).
843
- * @param {LocaleCode|null} locale - null -> keep only default
941
+ * @param {LocaleCode|null} locale - The locale to set, or null to use only the default.
942
+ * @returns {Promise<void>} A promise that resolves when the locale has been set and loaded.
844
943
  */
845
944
  async setLocale(locale) {
846
945
  checkDestroy(this.#destroyed);
@@ -875,7 +974,7 @@ class TinyI18 {
875
974
  * @param {string} key - Translation key (dot.notation).
876
975
  * @param {Dict} [params] - Parameters for string interpolation or helper functions.
877
976
  * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
878
- * @returns {any} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
977
+ * @returns {TranslateResult} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
879
978
  */
880
979
  t(key, params = undefined, options = undefined) {
881
980
  return this.get(key, params, options);
@@ -883,10 +982,10 @@ class TinyI18 {
883
982
 
884
983
  /**
885
984
  * Alias of t()
886
- * @param {string} key
887
- * @param {Dict} [params]
888
- * @param {ResolveOptions} [options]
889
- * @returns {any}
985
+ * @param {string} key - Translation key (dot.notation).
986
+ * @param {Dict} [params] - Parameters for string interpolation or helper functions.
987
+ * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
988
+ * @returns {TranslateResult} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
890
989
  */
891
990
  get(key, params = undefined, options = undefined) {
892
991
  checkDestroy(this.#destroyed);
@@ -899,6 +998,7 @@ class TinyI18 {
899
998
  let resolved = this.#resolveExact(order, key);
900
999
  if (resolved === undefined) {
901
1000
  if (this.#strict) throw new Error(`TinyI18: missing translation for key "${key}"`);
1001
+ if (this.#acceptNullResults) return null;
902
1002
  return key; // graceful fallback to key
903
1003
  }
904
1004
 
@@ -912,7 +1012,7 @@ class TinyI18 {
912
1012
  *
913
1013
  * @param {string} key - Input string to test against regex patterns.
914
1014
  * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
915
- * @returns {any} - Translation value (string or custom return type).
1015
+ * @returns {TranslateResult} - Translation value (string or custom return type).
916
1016
  */
917
1017
  p(key, options) {
918
1018
  return this.resolveByPattern(key, options);
@@ -920,9 +1020,9 @@ class TinyI18 {
920
1020
 
921
1021
  /**
922
1022
  * Alias of p()
923
- * @param {string} key
924
- * @param {ResolveOptions} [options]
925
- * @returns {any}
1023
+ * @param {string} key - Input string to test against regex patterns.
1024
+ * @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
1025
+ * @returns {TranslateResult} - Translation value (string or custom return type).
926
1026
  */
927
1027
  resolveByPattern(key, options) {
928
1028
  checkDestroy(this.#destroyed);
@@ -933,6 +1033,7 @@ class TinyI18 {
933
1033
  let resolved = this.#resolveByPattern(order, key);
934
1034
  if (resolved === undefined) {
935
1035
  if (this.#strict) throw new Error(`TinyI18: missing translation for key "${key}"`);
1036
+ if (this.#acceptNullResults) return null;
936
1037
  return key; // graceful fallback to key
937
1038
  }
938
1039
  return resolved;
@@ -956,8 +1057,8 @@ class TinyI18 {
956
1057
 
957
1058
  /**
958
1059
  * Returns stats for a specific locale.
959
- * @param {LocaleCode} locale
960
- * @returns {StatLocale}
1060
+ * @param {LocaleCode} locale - The locale code to query.
1061
+ * @returns {StatLocale} An object containing the locale's current statistics.
961
1062
  * @throws {Error} If the locale is not registered.
962
1063
  */
963
1064
  getStatsForLocale(locale) {
@@ -984,7 +1085,7 @@ class TinyI18 {
984
1085
  * to free up memory. Once destroyed, the instance cannot be reused.
985
1086
  *
986
1087
  * @throws {Error} If the instance has already been destroyed.
987
- * @returns {void}
1088
+ * @returns {void} This method does not return a value.
988
1089
  */
989
1090
  destroy() {
990
1091
  if (this.#destroyed) return;