tiny-essentials 1.28.19 → 1.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/README.md +1 -1
  2. package/changelog/1/28/19.md +24 -0
  3. package/changelog/1/29/0.md +58 -0
  4. package/changelog/1/29/1.md +11 -0
  5. package/dist/v1/ColorSafeStringify.min.js +1 -1
  6. package/dist/v1/TinyAdvancedRaffle.min.js +1 -1
  7. package/dist/v1/TinyAfterScrollWatcher.min.js +1 -1
  8. package/dist/v1/TinyAnalogClock.min.js +1 -1
  9. package/dist/v1/TinyArrayComparator.min.js +1 -1
  10. package/dist/v1/TinyArrayPaginator.min.js +1 -1
  11. package/dist/v1/TinyBasicsEs.min.js +1 -1
  12. package/dist/v1/TinyBrowserMonitor.min.js +1 -0
  13. package/dist/v1/TinyClassManager.min.js +1 -1
  14. package/dist/v1/TinyClipboard.min.js +1 -1
  15. package/dist/v1/TinyCloner.min.js +1 -0
  16. package/dist/v1/TinyColorConverter.min.js +1 -1
  17. package/dist/v1/TinyColorValidator.min.js +1 -1
  18. package/dist/v1/TinyCookieConsent.min.js +1 -1
  19. package/dist/v1/TinyDayNightCycle.min.js +1 -1
  20. package/dist/v1/TinyDebugger.min.js +1 -1
  21. package/dist/v1/TinyDomReadyManager.min.js +1 -1
  22. package/dist/v1/TinyDragDropDetector.min.js +1 -1
  23. package/dist/v1/TinyDragger.min.js +1 -1
  24. package/dist/v1/TinyElementObserver.min.js +1 -1
  25. package/dist/v1/TinyEssentials.min.js +1 -1
  26. package/dist/v1/TinyGamepad.min.js +1 -1
  27. package/dist/v1/TinyHtml.min.js +1 -1
  28. package/dist/v1/TinyHtmlTagRegexBuilder.min.js +1 -0
  29. package/dist/v1/TinyHttpResponseRegistry.min.js +1 -0
  30. package/dist/v1/TinyI18.min.js +1 -1
  31. package/dist/v1/TinyIframeEvents.min.js +1 -1
  32. package/dist/v1/TinyInventory.min.js +1 -1
  33. package/dist/v1/TinyInventoryTrader.min.js +1 -1
  34. package/dist/v1/TinyLevelUp.min.js +1 -1
  35. package/dist/v1/TinyLoadingScreen.min.js +1 -1
  36. package/dist/v1/TinyLocalStorage.min.js +1 -1
  37. package/dist/v1/TinyMaInSys.min.js +1 -1
  38. package/dist/v1/TinyMapCache.min.js +1 -0
  39. package/dist/v1/TinyMediaPlayer.min.js +1 -1
  40. package/dist/v1/TinyNeedBar.min.js +1 -1
  41. package/dist/v1/TinyNewWinEvents.min.js +1 -1
  42. package/dist/v1/TinyNotificationAdapter.min.js +1 -0
  43. package/dist/v1/TinyNotifications.min.js +1 -1
  44. package/dist/v1/TinyNotifyCenter.min.js +1 -1
  45. package/dist/v1/TinyOPFSFileSystem.min.js +1 -0
  46. package/dist/v1/TinyPasswordValidator.min.js +1 -0
  47. package/dist/v1/TinyPluginPackage.min.js +1 -0
  48. package/dist/v1/TinyPromiseQueue.min.js +1 -1
  49. package/dist/v1/TinyPushManager.min.js +1 -0
  50. package/dist/v1/TinyPushPayload.min.js +1 -0
  51. package/dist/v1/TinyPushRouter.min.js +1 -0
  52. package/dist/v1/TinyRadioFm.min.js +1 -1
  53. package/dist/v1/TinyRateLimiter.min.js +1 -1
  54. package/dist/v1/TinyRegexEs.min.js +1 -0
  55. package/dist/v1/TinyRouter.min.js +1 -0
  56. package/dist/v1/TinyServiceWorker.min.js +1 -0
  57. package/dist/v1/TinyServiceWorkerEngine.min.js +1 -0
  58. package/dist/v1/TinySetMapPackage.min.js +1 -0
  59. package/dist/v1/TinySimpleDice.min.js +1 -1
  60. package/dist/v1/TinySmartScroller.min.js +1 -1
  61. package/dist/v1/TinyStorageBucketFileSystem.min.js +1 -0
  62. package/dist/v1/TinyTextDiffer.min.js +1 -1
  63. package/dist/v1/TinyTextRangeEditor.min.js +1 -1
  64. package/dist/v1/TinyTextarea.min.js +1 -1
  65. package/dist/v1/TinyThrottledApi.min.js +1 -0
  66. package/dist/v1/TinyTimeout.min.js +1 -1
  67. package/dist/v1/TinyToastNotify.min.js +1 -1
  68. package/dist/v1/TinyUploadClicker.min.js +1 -1
  69. package/dist/v1/TinyUriParser.min.js +1 -0
  70. package/dist/v1/TinyVersion.min.js +1 -0
  71. package/dist/v1/TinyWebWorker.min.js +1 -0
  72. package/dist/v1/TinyWebWorkerEngine.min.js +1 -0
  73. package/dist/v1/UltraRandomMsgGen.min.js +1 -1
  74. package/dist/v1/basics/array.cjs +2 -2
  75. package/dist/v1/basics/array.d.mts +2 -0
  76. package/dist/v1/basics/array.d.mts.map +1 -1
  77. package/dist/v1/basics/array.mjs +2 -1
  78. package/dist/v1/basics/browserDetector.cjs +37 -12
  79. package/dist/v1/basics/browserDetector.d.mts +8 -0
  80. package/dist/v1/basics/browserDetector.d.mts.map +1 -1
  81. package/dist/v1/basics/browserDetector.mjs +32 -13
  82. package/dist/v1/basics/crypto.cjs +23 -0
  83. package/dist/v1/basics/crypto.d.mts +10 -0
  84. package/dist/v1/basics/crypto.d.mts.map +1 -0
  85. package/dist/v1/basics/crypto.mjs +18 -0
  86. package/dist/v1/basics/html.cjs +0 -3
  87. package/dist/v1/basics/html.d.mts.map +1 -1
  88. package/dist/v1/basics/html.mjs +0 -2
  89. package/dist/v1/basics/index.cjs +8 -1
  90. package/dist/v1/basics/index.d.mts +6 -5
  91. package/dist/v1/basics/index.d.mts.map +1 -1
  92. package/dist/v1/basics/index.mjs +6 -5
  93. package/dist/v1/basics/objChecker.cjs +88 -0
  94. package/dist/v1/basics/objChecker.d.mts +26 -0
  95. package/dist/v1/basics/objChecker.d.mts.map +1 -1
  96. package/dist/v1/basics/objChecker.mjs +74 -0
  97. package/dist/v1/basics/objFilter.cjs +234 -93
  98. package/dist/v1/basics/objFilter.d.mts +96 -22
  99. package/dist/v1/basics/objFilter.d.mts.map +1 -1
  100. package/dist/v1/basics/objFilter.mjs +216 -92
  101. package/dist/v1/basics/promiseUtils.cjs +48 -12
  102. package/dist/v1/basics/promiseUtils.d.mts +45 -12
  103. package/dist/v1/basics/promiseUtils.d.mts.map +1 -1
  104. package/dist/v1/basics/promiseUtils.mjs +47 -12
  105. package/dist/v1/basics/text.cjs +0 -12
  106. package/dist/v1/basics/text.d.mts +0 -10
  107. package/dist/v1/basics/text.d.mts.map +1 -1
  108. package/dist/v1/basics/text.mjs +0 -10
  109. package/dist/v1/index.cjs +88 -3
  110. package/dist/v1/index.d.mts +31 -6
  111. package/dist/v1/index.d.mts.map +1 -1
  112. package/dist/v1/index.mjs +32 -7
  113. package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
  114. package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
  115. package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
  116. package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
  117. package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
  118. package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
  119. package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
  120. package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
  121. package/dist/v1/libs/fs/constants.cjs +74 -0
  122. package/dist/v1/libs/fs/constants.d.mts +22 -0
  123. package/dist/v1/libs/fs/constants.d.mts.map +1 -0
  124. package/dist/v1/libs/fs/constants.mjs +53 -0
  125. package/dist/v1/libs/fs/encoding.cjs +118 -0
  126. package/dist/v1/libs/fs/encoding.d.mts +50 -0
  127. package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
  128. package/dist/v1/libs/fs/encoding.mjs +102 -0
  129. package/dist/v1/libs/fs/error.cjs +188 -0
  130. package/dist/v1/libs/fs/error.d.mts +105 -0
  131. package/dist/v1/libs/fs/error.d.mts.map +1 -0
  132. package/dist/v1/libs/fs/error.mjs +158 -0
  133. package/dist/v1/libs/fs/handle.cjs +121 -0
  134. package/dist/v1/libs/fs/handle.d.mts +56 -0
  135. package/dist/v1/libs/fs/handle.d.mts.map +1 -0
  136. package/dist/v1/libs/fs/handle.mjs +100 -0
  137. package/dist/v1/libs/fs/index.cjs +700 -0
  138. package/dist/v1/libs/fs/index.d.mts +377 -0
  139. package/dist/v1/libs/fs/index.d.mts.map +1 -0
  140. package/dist/v1/libs/fs/index.mjs +630 -0
  141. package/dist/v1/libs/fs/path.cjs +234 -0
  142. package/dist/v1/libs/fs/path.d.mts +176 -0
  143. package/dist/v1/libs/fs/path.d.mts.map +1 -0
  144. package/dist/v1/libs/fs/path.mjs +197 -0
  145. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
  146. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
  147. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
  148. package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
  149. package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
  150. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
  151. package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
  152. package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
  153. package/dist/v1/libs/fs/stats.cjs +245 -0
  154. package/dist/v1/libs/fs/stats.d.mts +226 -0
  155. package/dist/v1/libs/fs/stats.d.mts.map +1 -0
  156. package/dist/v1/libs/fs/stats.mjs +197 -0
  157. package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
  158. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
  159. package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
  160. package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
  161. package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
  162. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
  163. package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
  164. package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
  165. package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
  166. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
  167. package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
  168. package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
  169. package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
  170. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
  171. package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
  172. package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
  173. package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
  174. package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
  175. package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
  176. package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
  177. package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
  178. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
  179. package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
  180. package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
  181. package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
  182. package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
  183. package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
  184. package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
  185. package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
  186. package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
  187. package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
  188. package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
  189. package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
  190. package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
  191. package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
  192. package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
  193. package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
  194. package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
  195. package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
  196. package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
  197. package/dist/v1/libs/router/TinyRouter.cjs +661 -0
  198. package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
  199. package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
  200. package/dist/v1/libs/router/TinyRouter.mjs +572 -0
  201. package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
  202. package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
  203. package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
  204. package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
  205. package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
  206. package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
  207. package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
  208. package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
  209. package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
  210. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
  211. package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
  212. package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
  213. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
  214. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
  215. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
  216. package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
  217. package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
  218. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
  219. package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
  220. package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
  221. package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
  222. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
  223. package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
  224. package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
  225. package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
  226. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
  227. package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
  228. package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
  229. package/dist/v1/libs/sw/browser/utils.cjs +28 -0
  230. package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
  231. package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
  232. package/dist/v1/libs/sw/browser/utils.mjs +21 -0
  233. package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
  234. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
  235. package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
  236. package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
  237. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
  238. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
  239. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
  240. package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
  241. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
  242. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
  243. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
  244. package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
  245. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
  246. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
  247. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
  248. package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
  249. package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
  250. package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
  251. package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
  252. package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
  253. package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
  254. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
  255. package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
  256. package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
  257. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
  258. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
  259. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
  260. package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
  261. package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
  262. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
  263. package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
  264. package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
  265. package/dist/v1/libs/sw/utils.cjs +57 -0
  266. package/dist/v1/libs/sw/utils.d.mts +173 -0
  267. package/dist/v1/libs/sw/utils.d.mts.map +1 -0
  268. package/dist/v1/libs/sw/utils.mjs +50 -0
  269. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
  270. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
  271. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
  272. package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
  273. package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
  274. package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
  275. package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
  276. package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
  277. package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
  278. package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
  279. package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
  280. package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
  281. package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
  282. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
  283. package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
  284. package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
  285. package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
  286. package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
  287. package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
  288. package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
  289. package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
  290. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
  291. package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
  292. package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
  293. package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
  294. package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
  295. package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
  296. package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
  297. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
  298. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
  299. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
  300. package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
  301. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
  302. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
  303. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
  304. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
  305. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
  306. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
  307. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
  308. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
  309. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
  310. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
  311. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
  312. package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
  313. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
  314. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
  315. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
  316. package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
  317. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
  318. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
  319. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
  320. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
  321. package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
  322. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
  323. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
  324. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
  325. package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
  326. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
  327. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
  328. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
  329. package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
  330. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
  331. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
  332. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
  333. package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
  334. package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
  335. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
  336. package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
  337. package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
  338. package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
  339. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
  340. package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
  341. package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
  342. package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
  343. package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
  344. package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
  345. package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
  346. package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
  347. package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
  348. package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
  349. package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
  350. package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
  351. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
  352. package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
  353. package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
  354. package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
  355. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
  356. package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
  357. package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
  358. package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
  359. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
  360. package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
  361. package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
  362. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
  363. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
  364. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
  365. package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
  366. package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
  367. package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
  368. package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
  369. package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
  370. package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
  371. package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
  372. package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
  373. package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
  374. package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
  375. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
  376. package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
  377. package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
  378. package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
  379. package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
  380. package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
  381. package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
  382. package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
  383. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
  384. package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
  385. package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
  386. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
  387. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
  388. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
  389. package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
  390. package/dist/v1/regexp/Email.cjs +185 -0
  391. package/dist/v1/regexp/Email.d.mts +73 -0
  392. package/dist/v1/regexp/Email.d.mts.map +1 -0
  393. package/dist/v1/regexp/Email.mjs +153 -0
  394. package/dist/v1/regexp/Glob.cjs +293 -0
  395. package/dist/v1/regexp/Glob.d.mts +45 -0
  396. package/dist/v1/regexp/Glob.d.mts.map +1 -0
  397. package/dist/v1/regexp/Glob.mjs +260 -0
  398. package/dist/v1/regexp/Ipv4.cjs +57 -0
  399. package/dist/v1/regexp/Ipv4.d.mts +29 -0
  400. package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
  401. package/dist/v1/regexp/Ipv4.mjs +45 -0
  402. package/dist/v1/regexp/Ipv6.cjs +67 -0
  403. package/dist/v1/regexp/Ipv6.d.mts +29 -0
  404. package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
  405. package/dist/v1/regexp/Ipv6.mjs +54 -0
  406. package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
  407. package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
  408. package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
  409. package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
  410. package/dist/v1/regexp/UrlDetector.cjs +125 -0
  411. package/dist/v1/regexp/UrlDetector.d.mts +67 -0
  412. package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
  413. package/dist/v1/regexp/UrlDetector.mjs +102 -0
  414. package/dist/v1/regexp/Username/index.cjs +233 -0
  415. package/dist/v1/regexp/Username/index.d.mts +77 -0
  416. package/dist/v1/regexp/Username/index.d.mts.map +1 -0
  417. package/dist/v1/regexp/Username/index.mjs +199 -0
  418. package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
  419. package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
  420. package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
  421. package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
  422. package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
  423. package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
  424. package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
  425. package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
  426. package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
  427. package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
  428. package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
  429. package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
  430. package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
  431. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
  432. package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
  433. package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
  434. package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
  435. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
  436. package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
  437. package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
  438. package/dist/v1/regexp/Username/templates/index.cjs +11 -0
  439. package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
  440. package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
  441. package/dist/v1/regexp/Username/templates/index.mjs +4 -0
  442. package/dist/v1/regexp/index.cjs +41 -0
  443. package/dist/v1/regexp/index.d.mts +9 -0
  444. package/dist/v1/regexp/index.d.mts.map +1 -0
  445. package/dist/v1/regexp/index.mjs +8 -0
  446. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
  447. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
  448. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
  449. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
  450. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
  451. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
  452. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
  453. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
  454. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
  455. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
  456. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
  457. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
  458. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
  459. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
  460. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
  461. package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
  462. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +30 -4
  463. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +5 -2
  464. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -1
  465. package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +29 -5
  466. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
  467. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
  468. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
  469. package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
  470. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
  471. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
  472. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
  473. package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
  474. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
  475. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
  476. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
  477. package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
  478. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
  479. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
  480. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
  481. package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
  482. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
  483. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
  484. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
  485. package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
  486. package/docs/info/RegExp.md +74 -0
  487. package/docs/v1/Exports.md +101 -0
  488. package/docs/v1/README.md +113 -15
  489. package/docs/v1/basics/asyncReplace.md +2 -0
  490. package/docs/v1/basics/browserDetector.md +28 -11
  491. package/docs/v1/basics/crypto.md +85 -0
  492. package/docs/v1/basics/deprecated/html.md +2 -0
  493. package/docs/v1/basics/deprecated/objFilter.md +2 -0
  494. package/docs/v1/basics/html.md +2 -0
  495. package/docs/v1/basics/objChecker.md +55 -0
  496. package/docs/v1/basics/objFilter.md +57 -86
  497. package/docs/v1/basics/promiseUtils.md +12 -3
  498. package/docs/v1/basics/text.md +0 -1
  499. package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
  500. package/docs/v1/libs/fs/TinyFS.md +752 -0
  501. package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
  502. package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
  503. package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
  504. package/docs/v1/libs/plugin/TinyVersion.md +145 -0
  505. package/docs/v1/libs/router/TinyRouter.md +216 -0
  506. package/docs/v1/libs/storage/TinyMapCache.md +219 -0
  507. package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
  508. package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
  509. package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
  510. package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
  511. package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
  512. package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
  513. package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
  514. package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
  515. package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
  516. package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
  517. package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
  518. package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
  519. package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
  520. package/docs/v1/libs/text/TinyI18.md +80 -56
  521. package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
  522. package/docs/v1/libs/tools/TinyDebugger.md +117 -1
  523. package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
  524. package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
  525. package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
  526. package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
  527. package/docs/v1/libs/tools/TinySiteMap.md +134 -0
  528. package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
  529. package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
  530. package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
  531. package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
  532. package/docs/v1/libs/tools/TinyUriParser.md +128 -0
  533. package/docs/v1/libs/utils/TinyCloner.md +126 -0
  534. package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
  535. package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
  536. package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
  537. package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
  538. package/docs/v1/regexp/Email.md +127 -0
  539. package/docs/v1/regexp/Glob.md +155 -0
  540. package/docs/v1/regexp/IPv4.md +103 -0
  541. package/docs/v1/regexp/IPv6.md +122 -0
  542. package/docs/v1/regexp/SegmentExtractor.md +120 -0
  543. package/docs/v1/regexp/UrlDetector.md +117 -0
  544. package/docs/v1/regexp/Username/Base.md +131 -0
  545. package/docs/v1/regexp/Username/Discord.md +267 -0
  546. package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
  547. package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +565 -0
  548. package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +19 -7
  549. package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
  550. package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
  551. package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
  552. package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
  553. package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
  554. package/package.json +340 -22
  555. package/types/EventEmitter.d.ts +48 -0
  556. package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
@@ -0,0 +1,268 @@
1
+ 'use strict';
2
+
3
+ var objChecker = require('../../../basics/objChecker.cjs');
4
+ var index = require('../../text/TinyI18/index.cjs');
5
+ var RequestCodes = require('./RequestCodes.cjs');
6
+
7
+ /**
8
+ * @typedef {import('./JsDoc.mjs').HttpResponse} HttpResponse
9
+ * @typedef {import('./JsDoc.mjs').HttpResponses} HttpResponses
10
+ */
11
+
12
+ /**
13
+ * A centralized registry designed for managing HTTP response metadata.
14
+ * It provides strict data validation and integrated internationalization (i18n) support,
15
+ * enabling the retrieval of localized response names, summaries, and descriptions
16
+ * while preventing accidental state mutation.
17
+ */
18
+ class TinyHttpResponseRegistry {
19
+ /** @type {HttpResponses} */
20
+ static #DefaultRequestCodes = RequestCodes;
21
+
22
+ /**
23
+ * A collection of utility methods to check HTTP status code ranges.
24
+ */
25
+ static codeIs = Object.freeze({
26
+ /**
27
+ * Checks if the status code is in the 1xx (Informational) range.
28
+ * @param {number} code - The HTTP status code to evaluate.
29
+ * @returns {boolean} True if the code is between 100 and 199, inclusive.
30
+ * @throws {TypeError} If the provided code is not a number or is NaN.
31
+ */
32
+ info: (code) => {
33
+ if (typeof code !== 'number' || Number.isNaN(code))
34
+ throw new TypeError('The status code must be a valid number.');
35
+ return code >= 100 && code <= 199;
36
+ },
37
+ /**
38
+ * Checks if the status code is in the 2xx (Success) range.
39
+ * @param {number} code - The HTTP status code to evaluate.
40
+ * @returns {boolean} True if the code is between 200 and 299, inclusive.
41
+ * @throws {TypeError} If the provided code is not a number or is NaN.
42
+ */
43
+ success: (code) => {
44
+ if (typeof code !== 'number' || Number.isNaN(code))
45
+ throw new TypeError('The status code must be a valid number.');
46
+ return code >= 200 && code <= 299;
47
+ },
48
+ /**
49
+ * Checks if the status code is in the 3xx (Redirection) range.
50
+ * @param {number} code - The HTTP status code to evaluate.
51
+ * @returns {boolean} True if the code is between 300 and 399, inclusive.
52
+ * @throws {TypeError} If the provided code is not a number or is NaN.
53
+ */
54
+ redirect: (code) => {
55
+ if (typeof code !== 'number' || Number.isNaN(code))
56
+ throw new TypeError('The status code must be a valid number.');
57
+ return code >= 300 && code <= 399;
58
+ },
59
+ /**
60
+ * Checks if the status code is in the 4xx (Client Error) range.
61
+ * @param {number} code - The HTTP status code to evaluate.
62
+ * @returns {boolean} True if the code is between 400 and 499, inclusive.
63
+ * @throws {TypeError} If the provided code is not a number or is NaN.
64
+ */
65
+ clientError: (code) => {
66
+ if (typeof code !== 'number' || Number.isNaN(code))
67
+ throw new TypeError('The status code must be a valid number.');
68
+ return code >= 400 && code <= 499;
69
+ },
70
+ /**
71
+ * Checks if the status code is in the 5xx (Server Error) range.
72
+ * @param {number} code - The HTTP status code to evaluate.
73
+ * @returns {boolean} True if the code is between 500 and 599, inclusive.
74
+ * @throws {TypeError} If the provided code is not a number or is NaN.
75
+ */
76
+ serverError: (code) => {
77
+ if (typeof code !== 'number' || Number.isNaN(code))
78
+ throw new TypeError('The status code must be a valid number.');
79
+ return code >= 500 && code <= 599;
80
+ },
81
+ });
82
+
83
+ /**
84
+ * Getter for the default request codes.
85
+ * Returns a deep clone to prevent external mutation of the private state.
86
+ *
87
+ * @returns {HttpResponses} A deep copy of the current status codes.
88
+ */
89
+ static get defaultRequestCodes() {
90
+ return structuredClone(TinyHttpResponseRegistry.#DefaultRequestCodes);
91
+ }
92
+
93
+ /**
94
+ * Setter for the default request codes.
95
+ * Performs deep validation and stores a deep clone to prevent external mutation.
96
+ *
97
+ * @param {HttpResponses} newCodes - The new mapping of HTTP responses.
98
+ * @throws {TypeError} If the input is not a valid HttpResponses object.
99
+ */
100
+ static set defaultRequestCodes(newCodes) {
101
+ // 1. Validate that the input is a non-null object
102
+ if (typeof newCodes !== 'object' || newCodes === null || Array.isArray(newCodes)) {
103
+ throw new TypeError('The value must be a non-null object.');
104
+ }
105
+
106
+ // 2. Deep validation of the object structure
107
+ for (const [key, response] of Object.entries(newCodes)) {
108
+ // Validate that the key represents a valid number
109
+ if (Number.isNaN(Number(key))) {
110
+ throw new TypeError(`Invalid key: "${key}". Status code keys must be numeric.`);
111
+ }
112
+
113
+ // Validate that the value is a valid object
114
+ if (typeof response !== 'object' || response === null || Array.isArray(response)) {
115
+ throw new TypeError(`The value for status code ${key} must be an object.`);
116
+ }
117
+
118
+ // Validate internal properties of the HttpResponse object
119
+ if (typeof response.name !== 'string') {
120
+ throw new TypeError(`Property 'name' in status ${key} must be a string.`);
121
+ }
122
+ if (typeof response.summary !== 'string') {
123
+ throw new TypeError(`Property 'summary' in status ${key} must be a string.`);
124
+ }
125
+ if (typeof response.description !== 'string') {
126
+ throw new TypeError(`Property 'description' in status ${key} must be a string.`);
127
+ }
128
+ }
129
+
130
+ // 3. Store a deep clone to ensure the class owns the data entirely
131
+ TinyHttpResponseRegistry.#DefaultRequestCodes = structuredClone(newCodes);
132
+ }
133
+
134
+ /** @type {Set<number>} The set of all registered HTTP status codes. */
135
+ #reqCodes = new Set();
136
+
137
+ /** @type {TinyI18} The internationalization instance used for managing localized response data. */
138
+ #i18;
139
+
140
+ /** @type {string} The current active locale for the registry. */
141
+ #locale = 'en';
142
+
143
+ /**
144
+ * Initializes a new instance of the TinyHttpResponseRegistry.
145
+ * @param {typeof TinyI18} I18 - The TinyI18 constructor.
146
+ * @param {HttpResponses} [initialResponses] - An object of initial response objects to populate the registry.
147
+ * @throws {TypeError} If the input is not an object.
148
+ */
149
+ constructor(I18, initialResponses = {}) {
150
+ if (!objChecker.isJsonObject(initialResponses)) {
151
+ throw new TypeError('Initial responses must be an object.');
152
+ }
153
+
154
+ this.#i18 = new I18({
155
+ defaultLocale: 'en',
156
+ mode: 'local',
157
+ strict: false,
158
+ acceptNullResults: true,
159
+ });
160
+
161
+ if (!(this.#i18 instanceof index))
162
+ throw new TypeError('The "i18" must be an instance of TinyI18.');
163
+
164
+ this.#i18.loadLocaleLocal(this.#locale, {});
165
+ for (const id in TinyHttpResponseRegistry.#DefaultRequestCodes) {
166
+ const response = TinyHttpResponseRegistry.#DefaultRequestCodes[id];
167
+ this.addResponse(Number(id), response);
168
+ }
169
+ for (const id in initialResponses) {
170
+ const response = initialResponses[id];
171
+ this.addResponse(Number(id), response);
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Validates the structure and types of a response object.
177
+ * @param {number} id - The HTTP status code (e.g., 404).
178
+ * @param {any} data - The data to validate.
179
+ * @throws {TypeError} If the data structure or types are incorrect.
180
+ * @throws {RangeError} If the ID is not a valid HTTP status code range.
181
+ * @throws {Error} If the ID already exists in the registry.
182
+ */
183
+ #validateResponse(id, data) {
184
+ if (typeof data !== 'object' || data === null) {
185
+ throw new TypeError('Response must be a non-null object.');
186
+ }
187
+
188
+ if (typeof data.name !== 'string') {
189
+ throw new TypeError('The "name" property must be a string.');
190
+ }
191
+
192
+ if (typeof data.summary !== 'string') {
193
+ throw new TypeError('The "summary" property must be a string.');
194
+ }
195
+
196
+ if (typeof data.description !== 'string') {
197
+ throw new TypeError('The "description" property must be a string.');
198
+ }
199
+
200
+ if (this.#i18.get(String(id))) {
201
+ throw new Error(`Response with ID ${id} already exists in the registry.`);
202
+ }
203
+ }
204
+
205
+ /**
206
+ * Adds a new response to the registry.
207
+ * The object is frozen to prevent any modifications to its properties.
208
+ * @param {number} id - The HTTP status code (e.g., 404).
209
+ * @param {HttpResponse} response - The response object to be added.
210
+ * @param {string} [locale] - The locale to use for storing the response.
211
+ */
212
+ addResponse(id, response, locale = this.#locale) {
213
+ this.#validateResponse(id, response);
214
+ this.#reqCodes.add(id);
215
+
216
+ // Create a frozen copy to ensure immutability of the stored object
217
+ this.#i18.loadLocaleLocal(locale, {
218
+ [id]: {
219
+ name: response.name,
220
+ summary: response.summary,
221
+ description: response.description,
222
+ },
223
+ });
224
+ }
225
+
226
+ /**
227
+ * Retrieves a response by its ID.
228
+ * @param {number} id - The HTTP status code.
229
+ * @returns {HttpResponse | null} The response object or null if not found.
230
+ * @param {import('../../text/TinyI18/index.mjs').Dict} [params]
231
+ * @param {string} [locale] - The locale to use for retrieval.
232
+ */
233
+ get(id, params = {}, locale = this.#locale) {
234
+ const name = this.#i18.get(`${id}.name`, params, { locale });
235
+ const summary = this.#i18.get(`${id}.summary`, params, { locale });
236
+ const description = this.#i18.get(`${id}.description`, params, { locale });
237
+
238
+ if (typeof name !== 'string' || typeof summary !== 'string' || typeof description !== 'string')
239
+ return null;
240
+
241
+ return { name, summary, description };
242
+ }
243
+
244
+ /**
245
+ * Checks if a response ID exists in the registry.
246
+ * @param {number} id - The HTTP status code.
247
+ * @returns {boolean} True if the ID exists, false otherwise.
248
+ */
249
+ has(id) {
250
+ return !!this.#i18.get(String(id));
251
+ }
252
+
253
+ /**
254
+ * Returns all registered responses as an object.
255
+ * @returns {HttpResponses} An object containing all registered response objects.
256
+ */
257
+ getAll() {
258
+ /** @type {HttpResponses} */
259
+ const result = {};
260
+ this.#reqCodes.forEach((code) => {
261
+ const data = this.get(code);
262
+ if (data) result[code] = data;
263
+ });
264
+ return result;
265
+ }
266
+ }
267
+
268
+ module.exports = TinyHttpResponseRegistry;
@@ -0,0 +1,107 @@
1
+ import TinyI18 from '../../text/TinyI18/index.mjs';
2
+ export type HttpResponse = import('./JsDoc.mjs').HttpResponse;
3
+ export type HttpResponses = import('./JsDoc.mjs').HttpResponses;
4
+ /**
5
+ * @typedef {import('./JsDoc.mjs').HttpResponse} HttpResponse
6
+ * @typedef {import('./JsDoc.mjs').HttpResponses} HttpResponses
7
+ */
8
+ /**
9
+ * A centralized registry designed for managing HTTP response metadata.
10
+ * It provides strict data validation and integrated internationalization (i18n) support,
11
+ * enabling the retrieval of localized response names, summaries, and descriptions
12
+ * while preventing accidental state mutation.
13
+ */
14
+ declare class TinyHttpResponseRegistry {
15
+ #private;
16
+ /**
17
+ * A collection of utility methods to check HTTP status code ranges.
18
+ */
19
+ static codeIs: Readonly<{
20
+ /**
21
+ * Checks if the status code is in the 1xx (Informational) range.
22
+ * @param {number} code - The HTTP status code to evaluate.
23
+ * @returns {boolean} True if the code is between 100 and 199, inclusive.
24
+ * @throws {TypeError} If the provided code is not a number or is NaN.
25
+ */
26
+ info: (code: number) => boolean;
27
+ /**
28
+ * Checks if the status code is in the 2xx (Success) range.
29
+ * @param {number} code - The HTTP status code to evaluate.
30
+ * @returns {boolean} True if the code is between 200 and 299, inclusive.
31
+ * @throws {TypeError} If the provided code is not a number or is NaN.
32
+ */
33
+ success: (code: number) => boolean;
34
+ /**
35
+ * Checks if the status code is in the 3xx (Redirection) range.
36
+ * @param {number} code - The HTTP status code to evaluate.
37
+ * @returns {boolean} True if the code is between 300 and 399, inclusive.
38
+ * @throws {TypeError} If the provided code is not a number or is NaN.
39
+ */
40
+ redirect: (code: number) => boolean;
41
+ /**
42
+ * Checks if the status code is in the 4xx (Client Error) range.
43
+ * @param {number} code - The HTTP status code to evaluate.
44
+ * @returns {boolean} True if the code is between 400 and 499, inclusive.
45
+ * @throws {TypeError} If the provided code is not a number or is NaN.
46
+ */
47
+ clientError: (code: number) => boolean;
48
+ /**
49
+ * Checks if the status code is in the 5xx (Server Error) range.
50
+ * @param {number} code - The HTTP status code to evaluate.
51
+ * @returns {boolean} True if the code is between 500 and 599, inclusive.
52
+ * @throws {TypeError} If the provided code is not a number or is NaN.
53
+ */
54
+ serverError: (code: number) => boolean;
55
+ }>;
56
+ /**
57
+ * Getter for the default request codes.
58
+ * Returns a deep clone to prevent external mutation of the private state.
59
+ *
60
+ * @returns {HttpResponses} A deep copy of the current status codes.
61
+ */
62
+ static get defaultRequestCodes(): HttpResponses;
63
+ /**
64
+ * Setter for the default request codes.
65
+ * Performs deep validation and stores a deep clone to prevent external mutation.
66
+ *
67
+ * @param {HttpResponses} newCodes - The new mapping of HTTP responses.
68
+ * @throws {TypeError} If the input is not a valid HttpResponses object.
69
+ */
70
+ static set defaultRequestCodes(newCodes: HttpResponses);
71
+ /**
72
+ * Initializes a new instance of the TinyHttpResponseRegistry.
73
+ * @param {typeof TinyI18} I18 - The TinyI18 constructor.
74
+ * @param {HttpResponses} [initialResponses] - An object of initial response objects to populate the registry.
75
+ * @throws {TypeError} If the input is not an object.
76
+ */
77
+ constructor(I18: typeof TinyI18, initialResponses?: HttpResponses);
78
+ /**
79
+ * Adds a new response to the registry.
80
+ * The object is frozen to prevent any modifications to its properties.
81
+ * @param {number} id - The HTTP status code (e.g., 404).
82
+ * @param {HttpResponse} response - The response object to be added.
83
+ * @param {string} [locale] - The locale to use for storing the response.
84
+ */
85
+ addResponse(id: number, response: HttpResponse, locale?: string): void;
86
+ /**
87
+ * Retrieves a response by its ID.
88
+ * @param {number} id - The HTTP status code.
89
+ * @returns {HttpResponse | null} The response object or null if not found.
90
+ * @param {import('../../text/TinyI18/index.mjs').Dict} [params]
91
+ * @param {string} [locale] - The locale to use for retrieval.
92
+ */
93
+ get(id: number, params?: import('../../text/TinyI18/index.mjs').Dict, locale?: string): HttpResponse | null;
94
+ /**
95
+ * Checks if a response ID exists in the registry.
96
+ * @param {number} id - The HTTP status code.
97
+ * @returns {boolean} True if the ID exists, false otherwise.
98
+ */
99
+ has(id: number): boolean;
100
+ /**
101
+ * Returns all registered responses as an object.
102
+ * @returns {HttpResponses} An object containing all registered response objects.
103
+ */
104
+ getAll(): HttpResponses;
105
+ }
106
+ export default TinyHttpResponseRegistry;
107
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../../src/v1/libs/tools/TinyHttpResponseRegistry/index.mjs"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,8BAA8B,CAAC;AAIhD,YAA8C,YAAY,GAAhD,OAAO,aAAa,EAAE,YAAY,CAAc;AAC1D,YAA+C,aAAa,GAAlD,OAAO,aAAa,EAAE,aAAa,CAAe;AAF/D;;;GAGG;AAEH;;;;;GAKG;AACH,cAAM,wBAAwB;;IAI5B;;OAEG;IACH,MAAM,CAAC,MAAM;QACX;;;;;WAKG;qBAHQ,MAAM,KACJ,OAAO;QAQpB;;;;;WAKG;wBAHQ,MAAM,KACJ,OAAO;QAQpB;;;;;WAKG;yBAHQ,MAAM,KACJ,OAAO;QAQpB;;;;;WAKG;4BAHQ,MAAM,KACJ,OAAO;QAQpB;;;;;WAKG;4BAHQ,MAAM,KACJ,OAAO;OAQnB;IAEH;;;;;OAKG;IACH,MAAM,KAAK,mBAAmB,IAFjB,aAAa,CAIzB;IAED;;;;;;OAMG;IACH,MAAM,KAAK,mBAAmB,CAAC,QAAQ,EAH5B,aAG4B,EAgCtC;IAWD;;;;;OAKG;IACH,YAAY,GAAG,EAJJ,OAAO,OAIH,EAAE,gBAAgB,AAH9B,CACA,EADQ,aAG2B,EAwBrC;IAgCD;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,EAJH,MAIG,EAAE,QAAQ,EAHb,YAGa,EAAE,MAAM,AAF7B,CACF,EADU,MAEoC,QAY9C;IAED;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,EALK,MAKL,EAAE,MAAM,AAHX,CACA,EADQ,OAAO,8BAA8B,EAAE,IAG/B,EAAE,MAAM,AAFxB,CACF,EADU,MAE+B,GAJ7B,YAAY,GAAG,IAAI,CAa/B;IAED;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAHK,MAGL,GAFO,OAAO,CAInB;IAED;;;OAGG;IACH,MAAM,IAFO,aAAa,CAUzB;CACF;eAEc,wBAAwB"}
@@ -0,0 +1,238 @@
1
+ import { isJsonObject } from '../../../basics/objChecker.mjs';
2
+ import TinyI18 from '../../text/TinyI18/index.mjs';
3
+ import RequestCodes from './RequestCodes.mjs';
4
+ /**
5
+ * @typedef {import('./JsDoc.mjs').HttpResponse} HttpResponse
6
+ * @typedef {import('./JsDoc.mjs').HttpResponses} HttpResponses
7
+ */
8
+ /**
9
+ * A centralized registry designed for managing HTTP response metadata.
10
+ * It provides strict data validation and integrated internationalization (i18n) support,
11
+ * enabling the retrieval of localized response names, summaries, and descriptions
12
+ * while preventing accidental state mutation.
13
+ */
14
+ class TinyHttpResponseRegistry {
15
+ /** @type {HttpResponses} */
16
+ static #DefaultRequestCodes = RequestCodes;
17
+ /**
18
+ * A collection of utility methods to check HTTP status code ranges.
19
+ */
20
+ static codeIs = Object.freeze({
21
+ /**
22
+ * Checks if the status code is in the 1xx (Informational) range.
23
+ * @param {number} code - The HTTP status code to evaluate.
24
+ * @returns {boolean} True if the code is between 100 and 199, inclusive.
25
+ * @throws {TypeError} If the provided code is not a number or is NaN.
26
+ */
27
+ info: (code) => {
28
+ if (typeof code !== 'number' || Number.isNaN(code))
29
+ throw new TypeError('The status code must be a valid number.');
30
+ return code >= 100 && code <= 199;
31
+ },
32
+ /**
33
+ * Checks if the status code is in the 2xx (Success) range.
34
+ * @param {number} code - The HTTP status code to evaluate.
35
+ * @returns {boolean} True if the code is between 200 and 299, inclusive.
36
+ * @throws {TypeError} If the provided code is not a number or is NaN.
37
+ */
38
+ success: (code) => {
39
+ if (typeof code !== 'number' || Number.isNaN(code))
40
+ throw new TypeError('The status code must be a valid number.');
41
+ return code >= 200 && code <= 299;
42
+ },
43
+ /**
44
+ * Checks if the status code is in the 3xx (Redirection) range.
45
+ * @param {number} code - The HTTP status code to evaluate.
46
+ * @returns {boolean} True if the code is between 300 and 399, inclusive.
47
+ * @throws {TypeError} If the provided code is not a number or is NaN.
48
+ */
49
+ redirect: (code) => {
50
+ if (typeof code !== 'number' || Number.isNaN(code))
51
+ throw new TypeError('The status code must be a valid number.');
52
+ return code >= 300 && code <= 399;
53
+ },
54
+ /**
55
+ * Checks if the status code is in the 4xx (Client Error) range.
56
+ * @param {number} code - The HTTP status code to evaluate.
57
+ * @returns {boolean} True if the code is between 400 and 499, inclusive.
58
+ * @throws {TypeError} If the provided code is not a number or is NaN.
59
+ */
60
+ clientError: (code) => {
61
+ if (typeof code !== 'number' || Number.isNaN(code))
62
+ throw new TypeError('The status code must be a valid number.');
63
+ return code >= 400 && code <= 499;
64
+ },
65
+ /**
66
+ * Checks if the status code is in the 5xx (Server Error) range.
67
+ * @param {number} code - The HTTP status code to evaluate.
68
+ * @returns {boolean} True if the code is between 500 and 599, inclusive.
69
+ * @throws {TypeError} If the provided code is not a number or is NaN.
70
+ */
71
+ serverError: (code) => {
72
+ if (typeof code !== 'number' || Number.isNaN(code))
73
+ throw new TypeError('The status code must be a valid number.');
74
+ return code >= 500 && code <= 599;
75
+ },
76
+ });
77
+ /**
78
+ * Getter for the default request codes.
79
+ * Returns a deep clone to prevent external mutation of the private state.
80
+ *
81
+ * @returns {HttpResponses} A deep copy of the current status codes.
82
+ */
83
+ static get defaultRequestCodes() {
84
+ return structuredClone(TinyHttpResponseRegistry.#DefaultRequestCodes);
85
+ }
86
+ /**
87
+ * Setter for the default request codes.
88
+ * Performs deep validation and stores a deep clone to prevent external mutation.
89
+ *
90
+ * @param {HttpResponses} newCodes - The new mapping of HTTP responses.
91
+ * @throws {TypeError} If the input is not a valid HttpResponses object.
92
+ */
93
+ static set defaultRequestCodes(newCodes) {
94
+ // 1. Validate that the input is a non-null object
95
+ if (typeof newCodes !== 'object' || newCodes === null || Array.isArray(newCodes)) {
96
+ throw new TypeError('The value must be a non-null object.');
97
+ }
98
+ // 2. Deep validation of the object structure
99
+ for (const [key, response] of Object.entries(newCodes)) {
100
+ // Validate that the key represents a valid number
101
+ if (Number.isNaN(Number(key))) {
102
+ throw new TypeError(`Invalid key: "${key}". Status code keys must be numeric.`);
103
+ }
104
+ // Validate that the value is a valid object
105
+ if (typeof response !== 'object' || response === null || Array.isArray(response)) {
106
+ throw new TypeError(`The value for status code ${key} must be an object.`);
107
+ }
108
+ // Validate internal properties of the HttpResponse object
109
+ if (typeof response.name !== 'string') {
110
+ throw new TypeError(`Property 'name' in status ${key} must be a string.`);
111
+ }
112
+ if (typeof response.summary !== 'string') {
113
+ throw new TypeError(`Property 'summary' in status ${key} must be a string.`);
114
+ }
115
+ if (typeof response.description !== 'string') {
116
+ throw new TypeError(`Property 'description' in status ${key} must be a string.`);
117
+ }
118
+ }
119
+ // 3. Store a deep clone to ensure the class owns the data entirely
120
+ TinyHttpResponseRegistry.#DefaultRequestCodes = structuredClone(newCodes);
121
+ }
122
+ /** @type {Set<number>} The set of all registered HTTP status codes. */
123
+ #reqCodes = new Set();
124
+ /** @type {TinyI18} The internationalization instance used for managing localized response data. */
125
+ #i18;
126
+ /** @type {string} The current active locale for the registry. */
127
+ #locale = 'en';
128
+ /**
129
+ * Initializes a new instance of the TinyHttpResponseRegistry.
130
+ * @param {typeof TinyI18} I18 - The TinyI18 constructor.
131
+ * @param {HttpResponses} [initialResponses] - An object of initial response objects to populate the registry.
132
+ * @throws {TypeError} If the input is not an object.
133
+ */
134
+ constructor(I18, initialResponses = {}) {
135
+ if (!isJsonObject(initialResponses)) {
136
+ throw new TypeError('Initial responses must be an object.');
137
+ }
138
+ this.#i18 = new I18({
139
+ defaultLocale: 'en',
140
+ mode: 'local',
141
+ strict: false,
142
+ acceptNullResults: true,
143
+ });
144
+ if (!(this.#i18 instanceof TinyI18))
145
+ throw new TypeError('The "i18" must be an instance of TinyI18.');
146
+ this.#i18.loadLocaleLocal(this.#locale, {});
147
+ for (const id in TinyHttpResponseRegistry.#DefaultRequestCodes) {
148
+ const response = TinyHttpResponseRegistry.#DefaultRequestCodes[id];
149
+ this.addResponse(Number(id), response);
150
+ }
151
+ for (const id in initialResponses) {
152
+ const response = initialResponses[id];
153
+ this.addResponse(Number(id), response);
154
+ }
155
+ }
156
+ /**
157
+ * Validates the structure and types of a response object.
158
+ * @param {number} id - The HTTP status code (e.g., 404).
159
+ * @param {any} data - The data to validate.
160
+ * @throws {TypeError} If the data structure or types are incorrect.
161
+ * @throws {RangeError} If the ID is not a valid HTTP status code range.
162
+ * @throws {Error} If the ID already exists in the registry.
163
+ */
164
+ #validateResponse(id, data) {
165
+ if (typeof data !== 'object' || data === null) {
166
+ throw new TypeError('Response must be a non-null object.');
167
+ }
168
+ if (typeof data.name !== 'string') {
169
+ throw new TypeError('The "name" property must be a string.');
170
+ }
171
+ if (typeof data.summary !== 'string') {
172
+ throw new TypeError('The "summary" property must be a string.');
173
+ }
174
+ if (typeof data.description !== 'string') {
175
+ throw new TypeError('The "description" property must be a string.');
176
+ }
177
+ if (this.#i18.get(String(id))) {
178
+ throw new Error(`Response with ID ${id} already exists in the registry.`);
179
+ }
180
+ }
181
+ /**
182
+ * Adds a new response to the registry.
183
+ * The object is frozen to prevent any modifications to its properties.
184
+ * @param {number} id - The HTTP status code (e.g., 404).
185
+ * @param {HttpResponse} response - The response object to be added.
186
+ * @param {string} [locale] - The locale to use for storing the response.
187
+ */
188
+ addResponse(id, response, locale = this.#locale) {
189
+ this.#validateResponse(id, response);
190
+ this.#reqCodes.add(id);
191
+ // Create a frozen copy to ensure immutability of the stored object
192
+ this.#i18.loadLocaleLocal(locale, {
193
+ [id]: {
194
+ name: response.name,
195
+ summary: response.summary,
196
+ description: response.description,
197
+ },
198
+ });
199
+ }
200
+ /**
201
+ * Retrieves a response by its ID.
202
+ * @param {number} id - The HTTP status code.
203
+ * @returns {HttpResponse | null} The response object or null if not found.
204
+ * @param {import('../../text/TinyI18/index.mjs').Dict} [params]
205
+ * @param {string} [locale] - The locale to use for retrieval.
206
+ */
207
+ get(id, params = {}, locale = this.#locale) {
208
+ const name = this.#i18.get(`${id}.name`, params, { locale });
209
+ const summary = this.#i18.get(`${id}.summary`, params, { locale });
210
+ const description = this.#i18.get(`${id}.description`, params, { locale });
211
+ if (typeof name !== 'string' || typeof summary !== 'string' || typeof description !== 'string')
212
+ return null;
213
+ return { name, summary, description };
214
+ }
215
+ /**
216
+ * Checks if a response ID exists in the registry.
217
+ * @param {number} id - The HTTP status code.
218
+ * @returns {boolean} True if the ID exists, false otherwise.
219
+ */
220
+ has(id) {
221
+ return !!this.#i18.get(String(id));
222
+ }
223
+ /**
224
+ * Returns all registered responses as an object.
225
+ * @returns {HttpResponses} An object containing all registered response objects.
226
+ */
227
+ getAll() {
228
+ /** @type {HttpResponses} */
229
+ const result = {};
230
+ this.#reqCodes.forEach((code) => {
231
+ const data = this.get(code);
232
+ if (data)
233
+ result[code] = data;
234
+ });
235
+ return result;
236
+ }
237
+ }
238
+ export default TinyHttpResponseRegistry;