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,304 @@
1
+ import { TinyPluginCore, TinyPlugin, TinyPluginLayer } from '../../plugin/TinyPlugin.mjs';
2
+ /**
3
+ * The data payload contained within the message.
4
+ * @typedef {any} MessagePayload
5
+ */
6
+ /**
7
+ * A function that handles the actual postMessage call back to the main thread.
8
+ * @callback MessageApiReply
9
+ * @param {string} type - The type identifier for the api reply message.
10
+ * @param {MessagePayload} [data] - The payload to be sent in the api reply.
11
+ * @param {number} [timeout=10000] - Wait time.
12
+ * @returns {Promise<any>}
13
+ */
14
+ /**
15
+ * @typedef {Object} ApiHandlerOptions
16
+ * @property {MessagePayload} [data] - The payload received from the main thread.
17
+ * @property {string} correlationId - The request ID.
18
+ */
19
+ /**
20
+ * @callback ApiHandlerCallback
21
+ * @param {ApiHandlerOptions} options - Options for the API handler.
22
+ * @returns {Promise<MessagePayload|undefined> | (MessagePayload|undefined)} The response payload.
23
+ */
24
+ /**
25
+ * An enriched message object containing the event and utility methods for responding.
26
+ * @typedef {Object} MessageObj
27
+ * @property {string} type - The identifier for the message type.
28
+ * @property {MessageEvent} event - The original message event.
29
+ * @property {MessagePayload} [data] - The payload sent within the message.
30
+ */
31
+ /**
32
+ * A callback function executed when a registered message type is received.
33
+ * @callback MessageCallback
34
+ * @param {MessageObj} msg - The enriched message data object.
35
+ */
36
+ /** @type {DedicatedWorkerGlobalScope} */
37
+ // @ts-ignore
38
+ const workerScope = self;
39
+ /**
40
+ * The reserved message type used by the engine to announce that it is ready to receive messages.
41
+ * @type {string}
42
+ */
43
+ const READY_EVENT_TYPE = 'ww:EngineReady';
44
+ /**
45
+ * A function used to install a plugin into the engine.
46
+ * @template {TinyPluginLayer} Layer
47
+ * @template {string} IdString
48
+ * @template {string} VersionString
49
+ * @template {any[]} Options
50
+ * @typedef {import('../../plugin/TinyPlugin.mjs').TinyPluginInstaller<TinyWebWorkerEngine, Layer, IdString, VersionString, Options>} SwPluginInstaller
51
+ */
52
+ /**
53
+ * Represents a plugin instance designed to be integrated into a TinyWebWorkerEngine.
54
+ * @template {TinyPluginLayer} Layer
55
+ * @template {string} IdString
56
+ * @template {string} VersionString
57
+ * @template {any[]} Options
58
+ * @typedef {TinyPlugin<TinyWebWorkerEngine, Layer, IdString, VersionString, Options>} TinyServiceWorkerPlugin
59
+ */
60
+ /**
61
+ * Manages the lifecycle and execution of modules inside a Dedicated Web Worker.
62
+ */
63
+ class TinyWebWorkerEngine extends TinyPluginCore {
64
+ /**
65
+ * Validates if an event type is a reserved name for the internal lifecycle.
66
+ * @param {string} type - The name of the event to validate.
67
+ * @throws {TypeError} If the event name is in the reserved list.
68
+ */
69
+ static #validateEventType(type) {
70
+ if (type.startsWith('ww:')) {
71
+ throw new TypeError(`The event type "${type}" is reserved for internal Web Worker lifecycle management.`);
72
+ }
73
+ }
74
+ /** @type {Map<string, ApiHandlerCallback>} */
75
+ #apiHandlers = new Map();
76
+ /** @type {Map<string, MessageCallback>} */
77
+ #messages = new Map();
78
+ /** @type {Map<string, {resolve: (value: any) => void, reject: (reason: Error) => void, timer: NodeJS.Timeout}>} */
79
+ #pendingRequests = new Map();
80
+ /** @type {boolean} */
81
+ #started = false;
82
+ /**
83
+ * Indicates if the engine has been initialized.
84
+ * @returns {boolean} True if started, false otherwise.
85
+ */
86
+ get started() {
87
+ return this.#started;
88
+ }
89
+ /**
90
+ * Initializes a new instance of the TinyWebWorkerEngine.
91
+ * @param {Object} [lgConfig] - Configuration options for the instance.
92
+ * @param {boolean} [lgConfig.debugMode=false] - Whether to enable internal debug logging.
93
+ * @param {boolean} [lgConfig.useLogColors=false] - Whether to enable log color support.
94
+ * @param {Partial<Console>} [lgConfig.logger=console] - A custom logger object.
95
+ */
96
+ constructor(lgConfig = {}) {
97
+ super({
98
+ logCfg: {
99
+ id: '[_main_class_TinyWW-Engine_reset_]',
100
+ logger: lgConfig.logger ?? console,
101
+ debugMode: lgConfig.debugMode ?? false,
102
+ useLogColors: lgConfig.useLogColors ?? false,
103
+ },
104
+ });
105
+ }
106
+ /**
107
+ * Registers a handler for API calls coming from the main thread.
108
+ * @param {string} type - The identifier for the call.
109
+ * @param {ApiHandlerCallback} callback - Function that processes the request and returns a payload.
110
+ * @throws {TypeError} If callback is not a function.
111
+ */
112
+ onApi(type, callback) {
113
+ if (typeof callback !== 'function')
114
+ throw new TypeError('Callback must be a function.');
115
+ this.#apiHandlers.set(type, callback);
116
+ }
117
+ /**
118
+ * Removes a registered API handler.
119
+ * @param {string} type - The identifier for the call.
120
+ * @returns {boolean} True if the handler was removed.
121
+ */
122
+ offApi(type) {
123
+ return this.#apiHandlers.delete(type);
124
+ }
125
+ /**
126
+ * Adds a message listener for unidirectional messages.
127
+ * @param {string} type - The identifier for the message type.
128
+ * @param {MessageCallback} callback - The callback to execute.
129
+ * @throws {TypeError} If callback is not a function.
130
+ */
131
+ addMessageListener(type, callback) {
132
+ if (typeof callback !== 'function')
133
+ throw new TypeError('Callback must be a function.');
134
+ this.#messages.set(type, callback);
135
+ }
136
+ /**
137
+ * Removes a message listener.
138
+ * @param {string} type - The identifier for the message type.
139
+ * @returns {boolean} True if the listener was removed.
140
+ */
141
+ removeMessageListener(type) {
142
+ return this.#messages.delete(type);
143
+ }
144
+ /**
145
+ * Sends a unidirectional message to the main thread.
146
+ *
147
+ * Note: this intentionally reuses the `emit` name with a message-oriented
148
+ * signature. The rest parameter keeps it assignable to the inherited
149
+ * `EventEmitter.emit` contract.
150
+ *
151
+ * @override
152
+ * @param {string} type - The identifier for the message type.
153
+ * @param {...any} args - The data content (only the first argument is used).
154
+ * @returns {boolean} Always true when the message is dispatched.
155
+ * @throws {TypeError} If type is not a string or data is invalid.
156
+ */
157
+ emit(type, ...args) {
158
+ const data = args[0];
159
+ if (typeof type !== 'string')
160
+ throw new TypeError('type must be a string.');
161
+ if (typeof data !== 'undefined' &&
162
+ (Array.isArray(data) || typeof data !== 'object' || data === null)) {
163
+ throw new TypeError('data must be a non-null object.');
164
+ }
165
+ TinyWebWorkerEngine.#validateEventType(type);
166
+ workerScope.postMessage({ type, data });
167
+ return true;
168
+ }
169
+ /**
170
+ * Sends a request to the main thread and waits for a response.
171
+ * @param {string} type - The identifier for the call.
172
+ * @param {MessagePayload} [data] - The request payload.
173
+ * @param {number} [timeout=10000] - Maximum waiting time in milliseconds.
174
+ * @returns {Promise<any>} A promise that resolves with the result object.
175
+ * @throws {Error} If the timeout is reached.
176
+ */
177
+ async emitApi(type, data, timeout = 10000) {
178
+ const correlationId = crypto.randomUUID();
179
+ return new Promise((resolve, reject) => {
180
+ const timer = setTimeout(() => {
181
+ if (this.#pendingRequests.has(correlationId)) {
182
+ this.#pendingRequests.delete(correlationId);
183
+ reject(new Error(`API timeout: ${type}`));
184
+ }
185
+ }, timeout);
186
+ this.#pendingRequests.set(correlationId, { resolve, reject, timer });
187
+ workerScope.postMessage({
188
+ type,
189
+ data,
190
+ correlationId,
191
+ isApi: true,
192
+ });
193
+ });
194
+ }
195
+ /**
196
+ * Initializes the Web Worker event listeners.
197
+ * @returns {void}
198
+ * @throws {Error} If the engine has already been started.
199
+ */
200
+ init() {
201
+ if (this.#started)
202
+ throw new Error('TinyWebWorkerEngine is already initialized.');
203
+ workerScope.addEventListener('message', (event) => {
204
+ const payload = event.data;
205
+ // Strict validation
206
+ if (Array.isArray(payload) || typeof payload !== 'object' || payload === null)
207
+ return;
208
+ if (typeof payload.type !== 'string')
209
+ return;
210
+ if (typeof payload.data !== 'undefined' &&
211
+ (Array.isArray(payload.data) || typeof payload.data !== 'object' || payload.data === null))
212
+ return;
213
+ const { type, data, correlationId, isApi, error } = payload;
214
+ // 1. Handle API responses coming from the Main Thread
215
+ if (type === 'ww:ApiResponse') {
216
+ if (typeof correlationId !== 'string') {
217
+ this.log('error', 'Received API response with missing or invalid "correlationId".');
218
+ return;
219
+ }
220
+ const pending = this.#pendingRequests.get(correlationId);
221
+ if (pending) {
222
+ clearTimeout(pending.timer);
223
+ this.#pendingRequests.delete(correlationId);
224
+ if (error) {
225
+ pending.reject(new Error(error));
226
+ }
227
+ else {
228
+ pending.resolve(data);
229
+ }
230
+ }
231
+ return;
232
+ }
233
+ // 2. Handle API calls coming from the Main Thread
234
+ if (isApi === true) {
235
+ if (typeof correlationId !== 'string') {
236
+ this.log('error', 'Received API request with missing or invalid "correlationId".');
237
+ return;
238
+ }
239
+ const handler = this.#apiHandlers.get(type);
240
+ if (!handler) {
241
+ workerScope.postMessage({
242
+ correlationId,
243
+ type: 'ww:ApiResponse',
244
+ error: `No API handler registered in worker for type: ${type}`,
245
+ });
246
+ return;
247
+ }
248
+ try {
249
+ /** @param {MessagePayload} [r] */
250
+ const sendResult = (r) => workerScope.postMessage({
251
+ correlationId,
252
+ type: 'ww:ApiResponse',
253
+ data: r,
254
+ });
255
+ const result = handler({
256
+ data,
257
+ correlationId,
258
+ });
259
+ if (result instanceof Promise) {
260
+ result.then(sendResult).catch((err) => {
261
+ workerScope.postMessage({
262
+ correlationId,
263
+ type: 'ww:ApiResponse',
264
+ error: err instanceof Error ? err.message : String(err),
265
+ });
266
+ });
267
+ }
268
+ else {
269
+ sendResult(result);
270
+ }
271
+ }
272
+ catch (err) {
273
+ workerScope.postMessage({
274
+ correlationId,
275
+ type: 'ww:ApiResponse',
276
+ error: err instanceof Error ? err.message : String(err),
277
+ });
278
+ }
279
+ return;
280
+ }
281
+ // 3. Handle standard unidirectional messages
282
+ const messageHandler = this.#messages.get(type);
283
+ /** @type {MessageObj} */
284
+ const msgData = { type, event, data };
285
+ super.emit('beforeMessage', msgData);
286
+ if (messageHandler) {
287
+ try {
288
+ messageHandler(msgData);
289
+ }
290
+ catch (err) {
291
+ this.log('error', `Error executing handler for message type "${type}":`, err);
292
+ super.emit('messageError', { type, error: err, data: msgData });
293
+ }
294
+ }
295
+ super.emit('afterMessage', msgData);
296
+ });
297
+ this.#started = true;
298
+ this.log('info', 'Web Worker Engine initialized.');
299
+ // NOTE: workerScope.postMessage is called directly on purpose.
300
+ // The public emit() method rejects every "ww:" prefixed type, and this signal is internal.
301
+ workerScope.postMessage({ type: READY_EVENT_TYPE });
302
+ }
303
+ }
304
+ export default TinyWebWorkerEngine;
@@ -0,0 +1,185 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * A function type used to define custom validation logic for an email address.
5
+ * @typedef {(email: string) => boolean} EmailValidatorFn
6
+ */
7
+
8
+ /**
9
+ * Configuration options for customizing email regex patterns and validation rules.
10
+ * @typedef {Object} EmailRegexOptions
11
+ * @property {string} [validName] - The regular expression pattern used to match the username portion of the email.
12
+ * @property {string} [validDomain] - The regular expression pattern used to match the domain portion of the email.
13
+ * @property {string[]} [blacklistDomains] - An array of domain strings that are explicitly forbidden during validation.
14
+ * @property {string[]} [whitelistDomains] - An array of domain strings that are the only permitted domains.
15
+ * @property {string[]} [blacklistUsernames] - An array of username strings that are explicitly forbidden during validation.
16
+ * @property {string[]} [whitelistUsernames] - An array of username strings that are the only permitted usernames.
17
+ * @property {EmailValidatorFn} [customValidator] - A callback function that receives the email string and returns a boolean to perform custom validation logic.
18
+ */
19
+
20
+ /**
21
+ * Validates the EmailRegexOptions object to ensure all properties match the required types.
22
+ * This is a private helper used to maintain strict type safety at runtime.
23
+ *
24
+ * @param {EmailRegexOptions} options - The configuration options to validate.
25
+ * @throws {TypeError} If the options are not an object or if any property fails type validation.
26
+ * @private
27
+ */
28
+ const validateEmailRegexOptions = (options) => {
29
+ if (options === undefined) return;
30
+ if (typeof options !== 'object' || options === null || Array.isArray(options)) {
31
+ throw new TypeError('Options must be an object.');
32
+ }
33
+
34
+ /**
35
+ * Helper to validate if a property is an array of strings.
36
+ * @param {any} arr - The array to validate.
37
+ * @param {string} name - The name of the property for the error message.
38
+ * @private
39
+ */
40
+ const validateArray = (arr, name) => {
41
+ if (arr !== undefined) {
42
+ if (!Array.isArray(arr)) {
43
+ throw new TypeError(`${name} must be an array.`);
44
+ }
45
+ for (let i = 0; i < arr.length; i++) {
46
+ if (typeof arr[i] !== 'string') {
47
+ throw new TypeError(`All elements in ${name} must be strings.`);
48
+ }
49
+ }
50
+ }
51
+ };
52
+
53
+ validateArray(options.blacklistDomains, 'blacklistDomains');
54
+ validateArray(options.whitelistDomains, 'whitelistDomains');
55
+ validateArray(options.blacklistUsernames, 'blacklistUsernames');
56
+ validateArray(options.whitelistUsernames, 'whitelistUsernames');
57
+ if (options.customValidator !== undefined && typeof options.customValidator !== 'function') {
58
+ throw new TypeError('customValidator must be a function.');
59
+ }
60
+ };
61
+
62
+ /**
63
+ * Constructs a email regular expression pattern string based on the provided configuration options.
64
+ * @param {EmailRegexOptions} [options] - The configuration options.
65
+ * @returns {string} The generated regex pattern string.
66
+ */
67
+ const emailStringRegexBuilder = (options = {}) => {
68
+ validateEmailRegexOptions(options);
69
+ const { validName = '[a-zA-Z0-9._%+-]+', validDomain = '[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}' } =
70
+ options;
71
+ return `${validName}@${validDomain}`;
72
+ };
73
+
74
+ /**
75
+ * Creates a RegExp object anchored to the start and end of the string using the provided configuration.
76
+ * @param {EmailRegexOptions} [options] - The configuration options.
77
+ * @returns {RegExp} The resulting RegExp object.
78
+ */
79
+ function emailRegex(options) {
80
+ return new RegExp(`^${emailStringRegexBuilder(options)}$`);
81
+ }
82
+
83
+ /**
84
+ * Performs deep validation of an email string against specified whitelist and blacklist rules for domains and usernames.
85
+ *
86
+ * @param {string} s - The string to validate.
87
+ * @param {EmailRegexOptions} [options={}] - The configuration options.
88
+ * @returns {boolean} True if the string is a valid email, false otherwise.
89
+ * @throws {TypeError} If the input string is not a string.
90
+ */
91
+ function verifyEmail(s, options = {}) {
92
+ // Runs custom validation if provided
93
+ if (typeof options.customValidator === 'function' && !options.customValidator(s)) {
94
+ return false;
95
+ }
96
+
97
+ // Since the regex matched, we can safely split the string into username and domain.
98
+ const [username, domain] = s.split('@');
99
+
100
+ // Whitelist checks: If a whitelist exists, the value MUST be in it.
101
+ if (
102
+ Array.isArray(options.whitelistDomains) &&
103
+ options.whitelistDomains.length > 0 &&
104
+ !options.whitelistDomains.includes(domain)
105
+ ) {
106
+ return false;
107
+ }
108
+ if (
109
+ Array.isArray(options.whitelistUsernames) &&
110
+ options.whitelistUsernames.length > 0 &&
111
+ !options.whitelistUsernames.includes(username)
112
+ ) {
113
+ return false;
114
+ }
115
+
116
+ // Blacklist checks: If a blacklist exists, the value MUST NOT be in it.
117
+ if (
118
+ Array.isArray(options.blacklistDomains) &&
119
+ options.blacklistDomains.length > 0 &&
120
+ options.blacklistDomains.includes(domain)
121
+ ) {
122
+ return false;
123
+ }
124
+ if (
125
+ Array.isArray(options.blacklistUsernames) &&
126
+ options.blacklistUsernames.length > 0 &&
127
+ options.blacklistUsernames.includes(username)
128
+ ) {
129
+ return false;
130
+ }
131
+
132
+ return true;
133
+ }
134
+
135
+ /**
136
+ * Validates whether a given string matches the specified email pattern,
137
+ * respects blacklist/whitelist rules, and passes a custom validator if provided.
138
+ * @param {string} s - The string to validate.
139
+ * @param {EmailRegexOptions} [options={}] - The configuration options.
140
+ * @param {RegExp} [regex] - The regex used to execute the function.
141
+ * @returns {boolean} True if the string is a valid email, false otherwise.
142
+ * @throws {TypeError} If the input string is not a string.
143
+ */
144
+ function isValidEmail(s, options = {}, regex) {
145
+ if (typeof s !== 'string') {
146
+ throw new TypeError('The input must be a string.');
147
+ }
148
+
149
+ const pattern = regex ?? emailRegex(options);
150
+ if (!pattern.test(s)) {
151
+ return false;
152
+ }
153
+
154
+ return verifyEmail(s, options);
155
+ }
156
+
157
+ /**
158
+ * Generates a global RegExp object used to find all occurrences of URLs within a text.
159
+ * @param {EmailRegexOptions} [options] - The configuration options.
160
+ * @returns {RegExp} The resulting global RegExp object.
161
+ */
162
+ function findEmailRegex(options) {
163
+ return new RegExp(`\\b${emailStringRegexBuilder(options)}\\b`, 'g');
164
+ }
165
+
166
+ /**
167
+ * Extracts all matching email strings from a given text using the provided configuration.
168
+ * @param {string} text - The text to search.
169
+ * @param {EmailRegexOptions} [options] - The configuration options.
170
+ * @param {RegExp} [regex] - The regex used to execute the function.
171
+ * @returns {string[]} An array of matches or null if no matches are found.
172
+ * @throws {TypeError} If the input text is not a string.
173
+ */
174
+ function extractEmails(text, options, regex) {
175
+ if (typeof text !== 'string') {
176
+ throw new TypeError('The input must be a string.');
177
+ }
178
+ return text.match(regex ?? findEmailRegex(options))?.filter((s) => verifyEmail(s, options)) ?? [];
179
+ }
180
+
181
+ exports.emailRegex = emailRegex;
182
+ exports.emailStringRegexBuilder = emailStringRegexBuilder;
183
+ exports.extractEmails = extractEmails;
184
+ exports.findEmailRegex = findEmailRegex;
185
+ exports.isValidEmail = isValidEmail;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * A function type used to define custom validation logic for an email address.
3
+ * @typedef {(email: string) => boolean} EmailValidatorFn
4
+ */
5
+ export type EmailValidatorFn = (email: string) => boolean;
6
+ export type EmailRegexOptions = {
7
+ /**
8
+ * - The regular expression pattern used to match the username portion of the email.
9
+ */
10
+ validName?: string;
11
+ /**
12
+ * - The regular expression pattern used to match the domain portion of the email.
13
+ */
14
+ validDomain?: string;
15
+ /**
16
+ * - An array of domain strings that are explicitly forbidden during validation.
17
+ */
18
+ blacklistDomains?: string[];
19
+ /**
20
+ * - An array of domain strings that are the only permitted domains.
21
+ */
22
+ whitelistDomains?: string[];
23
+ /**
24
+ * - An array of username strings that are explicitly forbidden during validation.
25
+ */
26
+ blacklistUsernames?: string[];
27
+ /**
28
+ * - An array of username strings that are the only permitted usernames.
29
+ */
30
+ whitelistUsernames?: string[];
31
+ /**
32
+ * - A callback function that receives the email string and returns a boolean to perform custom validation logic.
33
+ */
34
+ customValidator?: EmailValidatorFn;
35
+ };
36
+ /**
37
+ * Constructs a email regular expression pattern string based on the provided configuration options.
38
+ * @param {EmailRegexOptions} [options] - The configuration options.
39
+ * @returns {string} The generated regex pattern string.
40
+ */
41
+ export declare const emailStringRegexBuilder: (options?: EmailRegexOptions) => string;
42
+ /**
43
+ * Creates a RegExp object anchored to the start and end of the string using the provided configuration.
44
+ * @param {EmailRegexOptions} [options] - The configuration options.
45
+ * @returns {RegExp} The resulting RegExp object.
46
+ */
47
+ export declare function emailRegex(options?: EmailRegexOptions): RegExp;
48
+ /**
49
+ * Validates whether a given string matches the specified email pattern,
50
+ * respects blacklist/whitelist rules, and passes a custom validator if provided.
51
+ * @param {string} s - The string to validate.
52
+ * @param {EmailRegexOptions} [options={}] - The configuration options.
53
+ * @param {RegExp} [regex] - The regex used to execute the function.
54
+ * @returns {boolean} True if the string is a valid email, false otherwise.
55
+ * @throws {TypeError} If the input string is not a string.
56
+ */
57
+ export declare function isValidEmail(s: string, options?: EmailRegexOptions, regex?: RegExp): boolean;
58
+ /**
59
+ * Generates a global RegExp object used to find all occurrences of URLs within a text.
60
+ * @param {EmailRegexOptions} [options] - The configuration options.
61
+ * @returns {RegExp} The resulting global RegExp object.
62
+ */
63
+ export declare function findEmailRegex(options?: EmailRegexOptions): RegExp;
64
+ /**
65
+ * Extracts all matching email strings from a given text using the provided configuration.
66
+ * @param {string} text - The text to search.
67
+ * @param {EmailRegexOptions} [options] - The configuration options.
68
+ * @param {RegExp} [regex] - The regex used to execute the function.
69
+ * @returns {string[]} An array of matches or null if no matches are found.
70
+ * @throws {TypeError} If the input text is not a string.
71
+ */
72
+ export declare function extractEmails(text: string, options?: EmailRegexOptions, regex?: RegExp): string[];
73
+ //# sourceMappingURL=Email.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Email.d.mts","sourceRoot":"","sources":["../../../src/v1/regexp/Email.mjs"],"names":[],"mappings":"AAAA;;;GAGG;AADA,YAAsC,gBAAgB,GAA5C,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAkB;AAKtD,YAAkB,iBAAiB,GACnC;;;;IAAoB,SAAS,AAA7B,CACA,EADW,MAAM,CACjB;;;;IAAoB,WAAW,AAA/B,CACA,EADW,MAAM,CACjB;;;;IAAsB,gBAAgB,AAAtC,CACA,EADW,MAAM,EAAE,CACnB;;;;IAAsB,gBAAgB,AAAtC,CACA,EADW,MAAM,EAAE,CACnB;;;;IAAsB,kBAAkB,AAAxC,CACA,EADW,MAAM,EAAE,CACnB;;;;IAAsB,kBAAkB,AAAxC,CACA,EADW,MAAM,EAAE,CACnB;;;;IAA8B,eAAe,AAA7C,CACF,EADa,gBAAgB,CAC7B;CAAA,CAAA;AA4CD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,aAHzB,iBAAiB,KACf,MAOZ,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,AAH/B,CACA,EADQ,iBAGuB,GAFrB,MAAM,CAIlB;AAsDD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EANnB,MAMmB,EAAE,OAAO,AALpC,CACA,EADQ,iBAKiC,EAAE,KAAK,AAJhD,CACA,EADQ,MAIwC,GAHtC,OAAO,CAcnB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,AAHnC,CACA,EADQ,iBAG2B,GAFzB,MAAM,CAIlB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EANvB,MAMuB,EAAE,OAAO,AALxC,CACA,EADQ,iBAKgC,EAAE,KAAK,AAJ/C,CACA,EADQ,MAIuC,GAHrC,MAAM,EAAE,CAQpB"}