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,67 @@
1
+ export type TinyWebWorkerConfig = {
2
+ /**
3
+ * - The source file path for the Web Worker (e.g., 'src/workers/myWorker.mjs').
4
+ */
5
+ entry: string;
6
+ /**
7
+ * - The output filename for the Web Worker (e.g., 'myWorker.js').
8
+ */
9
+ filename: string;
10
+ };
11
+ export type TinyVitePwaOptions = {
12
+ /**
13
+ * - The Web App Manifest object.
14
+ */
15
+ manifest: Record<any, any>;
16
+ /**
17
+ * - The URL path where the manifest should be served.
18
+ */
19
+ manifestPath: string;
20
+ /**
21
+ * - The source directory containing the Service Worker.
22
+ */
23
+ srcDir: string;
24
+ /**
25
+ * - The name of the Service Worker file.
26
+ */
27
+ filename: string;
28
+ /**
29
+ * - Optional. Whether to automatically inject the SW registration script into the HTML <head>.
30
+ */
31
+ injectRegister?: boolean;
32
+ /**
33
+ * - Optional. Whether to inject the manifest into the global scope via Vite's `define`.
34
+ */
35
+ injectManifestToGlobal?: boolean;
36
+ /**
37
+ * - Optional. Registration options for the Service Worker.
38
+ */
39
+ swRegistrationOptions?: RegistrationOptions;
40
+ /**
41
+ * - Optional. A list of Web Workers to be bundled and served alongside the PWA.
42
+ */
43
+ webWorkers?: TinyWebWorkerConfig[];
44
+ };
45
+ /**
46
+ * Custom PWA Plugin.
47
+ * Resolves Manifest, Dev HMR, Service Worker, and multiple Web Workers bundling.
48
+ *
49
+ * NOTE: The Service Worker and Web Worker files are always served from the root directory of the website.
50
+ *
51
+ * TypeScript Support: To enable IntelliSense and avoid type errors when using
52
+ * the injected '__TINY_PWA_MANIFEST__' global variable, add the following to your `env.d.ts` file:
53
+ *
54
+ * ```typescript
55
+ * declare global {
56
+ * interface Window {
57
+ * __TINY_PWA_MANIFEST__: Record<string, any>;
58
+ * }
59
+ * }
60
+ * ```
61
+ *
62
+ * @param {TinyVitePwaOptions} options - The configuration options for the plugin.
63
+ * @returns {import('vite').Plugin} The Vite plugin object.
64
+ */
65
+ declare const TinyVitePwaPlugin: (options: TinyVitePwaOptions) => import('vite').Plugin;
66
+ export default TinyVitePwaPlugin;
67
+ //# sourceMappingURL=TinyVitePwaPlugin.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TinyVitePwaPlugin.d.mts","sourceRoot":"","sources":["../../../../../../src/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs"],"names":[],"mappings":"AAIG,YAAkB,mBAAmB,GACrC;;;;IAAmB,KAAK,EAAb,MAAM,CACjB;;;;IAAmB,QAAQ,EAAhB,MAAM,CACnB;CAAA,CAAA;AAGE,YAAkB,kBAAkB,GACpC;;;;IAA6B,QAAQ,EAA1B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAC3B;;;;IAAmB,YAAY,EAApB,MAAM,CACjB;;;;IAAmB,MAAM,EAAd,MAAM,CACjB;;;;IAAmB,QAAQ,EAAhB,MAAM,CACjB;;;;IAAqB,cAAc,AAAnC,CACA,EADW,OAAO,CAClB;;;;IAAqB,sBAAsB,AAA3C,CACA,EADW,OAAO,CAClB;;;;IAAiC,qBAAqB,AAAtD,CACA,EADW,mBAAmB,CAC9B;;;;IAAmC,UAAU,AAA7C,CACF,EADa,mBAAmB,EAAE,CAClC;CAAA,CAAA;AAmCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,iBAAiB,YAHZ,kBAAkB,KAChB,OAAO,MAAM,EAAE,MAia3B,CAAC;eAEa,iBAAiB"}
@@ -0,0 +1,399 @@
1
+ import { resolve, relative } from 'path';
2
+ import { build } from 'vite';
3
+ /**
4
+ * @typedef {Object} TinyWebWorkerConfig
5
+ * @property {string} entry - The source file path for the Web Worker (e.g., 'src/workers/myWorker.mjs').
6
+ * @property {string} filename - The output filename for the Web Worker (e.g., 'myWorker.js').
7
+ */
8
+ /**
9
+ * @typedef {Object} TinyVitePwaOptions
10
+ * @property {Record<any, any>} manifest - The Web App Manifest object.
11
+ * @property {string} manifestPath - The URL path where the manifest should be served.
12
+ * @property {string} srcDir - The source directory containing the Service Worker.
13
+ * @property {string} filename - The name of the Service Worker file.
14
+ * @property {boolean} [injectRegister=true] - Optional. Whether to automatically inject the SW registration script into the HTML <head>.
15
+ * @property {boolean} [injectManifestToGlobal=true] - Optional. Whether to inject the manifest into the global scope via Vite's `define`.
16
+ * @property {RegistrationOptions} [swRegistrationOptions] - Optional. Registration options for the Service Worker.
17
+ * @property {TinyWebWorkerConfig[]} [webWorkers] - Optional. A list of Web Workers to be bundled and served alongside the PWA.
18
+ */
19
+ // ANSI Color Codes
20
+ const colors = {
21
+ reset: '\x1b[0m',
22
+ bright: '\x1b[1m',
23
+ dim: '\x1b[2m',
24
+ red: '\x1b[31m',
25
+ green: '\x1b[32m',
26
+ yellow: '\x1b[33m',
27
+ blue: '\x1b[34m',
28
+ magenta: '\x1b[35m',
29
+ cyan: '\x1b[36m',
30
+ };
31
+ /**
32
+ * Internal logger to maintain consistent plugin output formatting using ANSI colors.
33
+ */
34
+ const logger = {
35
+ prefix: `${colors.cyan}[tiny-vite-pwa]${colors.reset}`,
36
+ info: (/** @type {string} */ msg) => console.log(`${logger.prefix} ${colors.blue}[INFO]${colors.reset} ${msg}`),
37
+ success: (/** @type {string} */ msg) => console.log(`${logger.prefix} ${colors.green}[SUCCESS]${colors.reset} ${msg}${colors.reset}`),
38
+ warn: (/** @type {string} */ msg) => console.warn(`${logger.prefix} ${colors.yellow}[WARN]${colors.reset} ${msg}${colors.reset}`),
39
+ error: (/** @type {string} */ msg, /** @type {Error} */ err) => console.error(`${logger.prefix} ${colors.red}[ERROR]${colors.reset} ${msg}${colors.reset}`, err || ''),
40
+ log: (/** @type {string} */ msg) => console.log(msg),
41
+ dim: (/** @type {string} */ msg) => console.log(`${colors.dim}${msg}${colors.reset}`),
42
+ };
43
+ /**
44
+ * Custom PWA Plugin.
45
+ * Resolves Manifest, Dev HMR, Service Worker, and multiple Web Workers bundling.
46
+ *
47
+ * NOTE: The Service Worker and Web Worker files are always served from the root directory of the website.
48
+ *
49
+ * TypeScript Support: To enable IntelliSense and avoid type errors when using
50
+ * the injected '__TINY_PWA_MANIFEST__' global variable, add the following to your `env.d.ts` file:
51
+ *
52
+ * ```typescript
53
+ * declare global {
54
+ * interface Window {
55
+ * __TINY_PWA_MANIFEST__: Record<string, any>;
56
+ * }
57
+ * }
58
+ * ```
59
+ *
60
+ * @param {TinyVitePwaOptions} options - The configuration options for the plugin.
61
+ * @returns {import('vite').Plugin} The Vite plugin object.
62
+ */
63
+ const TinyVitePwaPlugin = (options) => {
64
+ // --- Strict Runtime Validation ---
65
+ if (typeof options !== 'object' || options === null) {
66
+ throw new TypeError('The "options" argument must be a non-null object.');
67
+ }
68
+ if (typeof options.manifest !== 'object' || options.manifest === null) {
69
+ throw new TypeError('The "manifest" property must be an object.');
70
+ }
71
+ if (typeof options.manifestPath !== 'string') {
72
+ throw new TypeError('The "manifestPath" property must be a string.');
73
+ }
74
+ if (typeof options.srcDir !== 'string') {
75
+ throw new TypeError('The "srcDir" property must be a string.');
76
+ }
77
+ if (typeof options.filename !== 'string') {
78
+ throw new TypeError('The "filename" property must be a string.');
79
+ }
80
+ if (options.injectRegister !== undefined && typeof options.injectRegister !== 'boolean') {
81
+ throw new TypeError('The "injectRegister" property must be a boolean.');
82
+ }
83
+ if (options.injectManifestToGlobal !== undefined &&
84
+ typeof options.injectManifestToGlobal !== 'boolean') {
85
+ throw new TypeError('The "injectManifestToGlobal" property must be a boolean.');
86
+ }
87
+ if (options.swRegistrationOptions !== undefined &&
88
+ (typeof options.swRegistrationOptions !== 'object' ||
89
+ options.swRegistrationOptions === null ||
90
+ Array.isArray(options.swRegistrationOptions))) {
91
+ throw new TypeError('The "swRegistrationOptions" property must be an object.');
92
+ }
93
+ const filenamePattern = /^[a-zA-Z0-9._-]+$/;
94
+ if (!filenamePattern.test(options.filename)) {
95
+ throw new RangeError('The "filename" property contains invalid characters. To prevent injection, only alphanumeric characters, dots (.), underscores (_), and hyphens (-) are allowed.');
96
+ }
97
+ // Validate Web Workers Array if provided
98
+ if (options.webWorkers !== undefined) {
99
+ if (!Array.isArray(options.webWorkers)) {
100
+ throw new TypeError('The "webWorkers" property must be an array.');
101
+ }
102
+ options.webWorkers.forEach((ww, index) => {
103
+ if (typeof ww !== 'object' || ww === null) {
104
+ throw new TypeError(`webWorkers[${index}] must be a non-null object.`);
105
+ }
106
+ if (typeof ww.entry !== 'string') {
107
+ throw new TypeError(`webWorkers[${index}].entry must be a string.`);
108
+ }
109
+ if (typeof ww.filename !== 'string') {
110
+ throw new TypeError(`webWorkers[${index}].filename must be a string.`);
111
+ }
112
+ if (!filenamePattern.test(ww.filename)) {
113
+ throw new RangeError(`webWorkers[${index}].filename contains invalid characters.`);
114
+ }
115
+ });
116
+ }
117
+ const { manifest, manifestPath, srcDir, filename, swRegistrationOptions, webWorkers = [], } = options;
118
+ const injectRegister = options.injectRegister ?? true;
119
+ const injectManifestToGlobal = options.injectManifestToGlobal ?? true;
120
+ /** @type {string} */
121
+ let swSourcePath;
122
+ /** @type {Array<{ entryPath: string, filename: string }>} */
123
+ let resolvedWebWorkers = [];
124
+ /** @type {import('vite').ResolvedConfig} */
125
+ let viteConfig;
126
+ return {
127
+ name: 'tiny-vite-pwa',
128
+ // Capture Vite configuration to use during build mode
129
+ configResolved(config) {
130
+ viteConfig = config;
131
+ swSourcePath = resolve(config.root, srcDir, filename);
132
+ // Resolve absolute paths for Web Workers
133
+ resolvedWebWorkers = webWorkers.map((ww) => ({
134
+ entryPath: resolve(config.root, ww.entry, ww.filename),
135
+ filename: ww.filename,
136
+ }));
137
+ },
138
+ config(config) {
139
+ const define = { ...config.define };
140
+ if (injectManifestToGlobal)
141
+ define.__TINY_PWA_MANIFEST__ = JSON.stringify(manifest);
142
+ return { ...config, define };
143
+ },
144
+ // REQUIREMENTS 1 & 4 (DEV Mode): Serve the manifest, Service Worker, and Web Workers
145
+ configureServer(server) {
146
+ // Extract server info to build a clickable URL
147
+ const serverConfig = server.config.server || {};
148
+ let host = serverConfig.host;
149
+ if (host === true) {
150
+ host = '0.0.0.0';
151
+ }
152
+ else if (typeof host !== 'string') {
153
+ host = 'localhost';
154
+ }
155
+ const port = serverConfig.port;
156
+ const isHttps = serverConfig.https ? true : false;
157
+ const protocol = isHttps ? 'https' : 'http';
158
+ // If host is 0.0.0.0, use localhost so the link is clickable in the terminal
159
+ const displayHost = host === '0.0.0.0' ? 'localhost' : host;
160
+ const baseUrl = `${protocol}://${displayHost}:${port}`;
161
+ const normalizedManifestPath = manifestPath.startsWith('/')
162
+ ? manifestPath
163
+ : `/${manifestPath}`;
164
+ const swUrl = `/${filename}`;
165
+ server.middlewares.use(async (req, res, next) => {
166
+ // We parse the incoming request URL to extract only the pathname.
167
+ // This ensures that requests with query parameters (e.g., /sw.js?v=123)
168
+ // are correctly matched to the file paths.
169
+ const requestUrl = new URL(req.url ?? '', 'http://localhost');
170
+ const pathname = requestUrl.pathname;
171
+ // Serve manifest.json dynamically
172
+ if (pathname === normalizedManifestPath) {
173
+ res.setHeader('Content-Type', 'application/json');
174
+ res.end(JSON.stringify(manifest, null, 2));
175
+ return;
176
+ }
177
+ // Serve the Service Worker in Dev mode using Vite's transformer
178
+ if (pathname === swUrl) {
179
+ try {
180
+ const transformed = await server.transformRequest(swSourcePath);
181
+ if (transformed) {
182
+ res.setHeader('Content-Type', 'application/javascript');
183
+ res.end(transformed.code);
184
+ return;
185
+ }
186
+ }
187
+ catch (e) {
188
+ logger.error('Error transforming the SW in dev:', e instanceof Error ? e : new Error('Unknown Error'));
189
+ }
190
+ }
191
+ // Serve Web Workers in Dev mode
192
+ for (const ww of resolvedWebWorkers) {
193
+ if (pathname === `/${ww.filename}`) {
194
+ try {
195
+ const transformed = await server.transformRequest(ww.entryPath);
196
+ if (transformed) {
197
+ res.setHeader('Content-Type', 'application/javascript');
198
+ res.end(transformed.code);
199
+ return;
200
+ }
201
+ }
202
+ catch (e) {
203
+ logger.error(`Error transforming Web Worker (${ww.filename}) in dev:`, e instanceof Error ? e : new Error('Unknown Error'));
204
+ }
205
+ }
206
+ }
207
+ next();
208
+ });
209
+ logger.success(`Manifest available at: ${baseUrl}${normalizedManifestPath}`);
210
+ logger.success(`Service Worker available at: ${baseUrl}${swUrl}`);
211
+ resolvedWebWorkers.forEach((ww) => {
212
+ logger.success(`Web Worker available at: ${baseUrl}/${ww.filename}`);
213
+ });
214
+ logger.warn(`NOTE: If your Service Worker implements client-side routing, ensure it is configured to bypass interception for the manifest, SW, and WW files.`);
215
+ },
216
+ // REQUIREMENT 3: Monitor SW and WW changes and notify the frontend
217
+ handleHotUpdate({ file, server }) {
218
+ // Check for Service Worker updates
219
+ if (file.startsWith(resolve(viteConfig.root, srcDir))) {
220
+ logger.info('Service Worker change detected. Notifying frontend...');
221
+ // Send a custom event via Vite's WebSocket
222
+ server.ws.send({
223
+ type: 'custom',
224
+ event: 'pwa:sw-updated',
225
+ data: { message: 'The Service Worker file has been changed.' },
226
+ });
227
+ // Return an empty array so Vite does not attempt a full page reload automatically
228
+ return [];
229
+ }
230
+ // Check for Web Worker updates
231
+ for (const ww of resolvedWebWorkers) {
232
+ if (file === ww.entryPath) {
233
+ logger.info(`Web Worker change detected (${ww.filename}). Notifying frontend...`);
234
+ server.ws.send({
235
+ type: 'custom',
236
+ event: 'pwa:ww-updated',
237
+ data: {
238
+ message: `The Web Worker file ${ww.filename} has been changed.`,
239
+ filename: ww.filename,
240
+ },
241
+ });
242
+ return [];
243
+ }
244
+ }
245
+ },
246
+ // INJECT HTML SCRIPT: Inject the SW registration code and the Manifest link into the output HTML
247
+ transformIndexHtml() {
248
+ // In production mode, we append a timestamp to the URL to force cache busting.
249
+ // In development mode, we omit the timestamp to avoid generating unnecessary logs on every reload.
250
+ const isBuild = viteConfig && viteConfig.command === 'build';
251
+ /**
252
+ * Safely appends a cache-busting timestamp to a URL string.
253
+ * @param {string} urlStr - The base URL path.
254
+ * @returns {string} The URL path with the 'v' parameter appended correctly.
255
+ */
256
+ const getVersionedUrl = (urlStr) => {
257
+ // We use a dummy base ('http://localhost') because the URL constructor
258
+ // requires an absolute URL to parse relative paths correctly.
259
+ const url = new URL(urlStr, 'http://localhost');
260
+ // .set() is smart: it uses '?' if no params exist, or '&' if they do.
261
+ url.searchParams.set('v', Date.now().toString());
262
+ // We return only the pathname and search (e.g., "/sw.js?v=123")
263
+ // to keep the injection relative for the HTML.
264
+ return url.pathname + url.search;
265
+ };
266
+ const swUrl = getVersionedUrl(`/${filename}`);
267
+ // Prepare the manifest URL with cache busting for production
268
+ const normalizedManifestHref = manifestPath.startsWith('/')
269
+ ? manifestPath
270
+ : `/${manifestPath}`;
271
+ const manifestUrl = getVersionedUrl(normalizedManifestHref);
272
+ /** @type {import('vite').HtmlTagDescriptor[]} */
273
+ const insertData = [];
274
+ // Manifest
275
+ logger.info(`Injecting Manifest into HTML: ${manifestUrl}`);
276
+ insertData.push({
277
+ tag: 'link',
278
+ injectTo: 'head',
279
+ attrs: {
280
+ rel: 'manifest',
281
+ href: manifestUrl,
282
+ },
283
+ });
284
+ // SW
285
+ if (injectRegister) {
286
+ logger.info(`Injecting Service Worker into HTML: ${swUrl}`);
287
+ // Prepare the registration options string safely using JSON.stringify
288
+ // If no options are provided, swOptionsString remains an empty string.
289
+ const swOptionsString = swRegistrationOptions
290
+ ? `, ${JSON.stringify(swRegistrationOptions)}`
291
+ : '';
292
+ insertData.push({
293
+ tag: 'script',
294
+ injectTo: 'head',
295
+ children: `
296
+ if ('serviceWorker' in navigator) {
297
+ window.addEventListener('load', () => {
298
+ navigator.serviceWorker.register('${swUrl}'${swOptionsString})${!isBuild ? `.then(() => console.log('[tiny-vite-pwa] SW registered.')).catch(err => console.error('[tiny-vite-pwa] SW error:', err))` : ''};
299
+ });
300
+ };`
301
+ .replace(/\n/g, '')
302
+ .replace(/ /g, '')
303
+ .trim(),
304
+ });
305
+ }
306
+ return insertData;
307
+ },
308
+ // REQUIREMENT 1 (PROD Mode): Save the manifest to the dist directory
309
+ generateBundle() {
310
+ // Remove the leading slash from the path to prevent Rollup errors
311
+ const emitPath = manifestPath.replace(/^\//, '');
312
+ this.emitFile({
313
+ type: 'asset',
314
+ fileName: emitPath,
315
+ source: JSON.stringify(manifest),
316
+ });
317
+ },
318
+ // REQUIREMENT 4 (PROD Mode): Bundle the Service Worker and Web Workers separately
319
+ async closeBundle() {
320
+ // Only run this during the build command (production)
321
+ if (viteConfig.command === 'build') {
322
+ const projectRoot = viteConfig.root || process.cwd();
323
+ logger.dim('--------------------------------------------------');
324
+ logger.log(` Mode: ${colors.bright}${viteConfig.mode}${colors.reset}`);
325
+ // --- Build Service Worker ---
326
+ const relativeSourceSW = relative(projectRoot, swSourcePath);
327
+ const relativeDestSW = relative(projectRoot, resolve(viteConfig.build.outDir, filename));
328
+ const manifestDestPath = resolve(viteConfig.build.outDir, manifestPath.replace(/^\//, ''));
329
+ const relativeDestManifest = relative(projectRoot, manifestDestPath);
330
+ logger.info('Initiating Service Worker bundling process...');
331
+ // Manifest Info
332
+ logger.log(` Manifest: ${colors.cyan}${relativeDestManifest}${colors.reset}`);
333
+ // Service Worker Info
334
+ logger.log(` SW Source: ${colors.cyan}${relativeSourceSW}${colors.reset}`);
335
+ logger.log(` SW Dest: ${colors.cyan}${relativeDestSW}${colors.reset}`);
336
+ try {
337
+ await build({
338
+ configFile: false, // Ignore the main vite.config.js to prevent infinite loops
339
+ mode: viteConfig.mode,
340
+ build: {
341
+ outDir: viteConfig.build.outDir,
342
+ emptyOutDir: false, // IMPORTANT: Do not delete the React build that was just completed
343
+ lib: {
344
+ entry: swSourcePath,
345
+ name: 'ServiceWorker',
346
+ formats: ['iife'], // IIFE bundles all imports into a single file (classic SW standard)
347
+ fileName: () => filename,
348
+ },
349
+ rollupOptions: {
350
+ // Ensures no hashes are added to the SW filename
351
+ output: { entryFileNames: filename },
352
+ },
353
+ },
354
+ });
355
+ logger.success('Service Worker bundled successfully.');
356
+ }
357
+ catch (e) {
358
+ logger.error('Failed to bundle the Service Worker.', e instanceof Error ? e : new Error('Unknown Error'));
359
+ }
360
+ // --- Build Web Workers ---
361
+ if (resolvedWebWorkers.length > 0) {
362
+ logger.dim('--------------------------------------------------');
363
+ logger.info('Initiating Web Workers bundling process...');
364
+ for (const ww of resolvedWebWorkers) {
365
+ const relativeSourceWW = relative(projectRoot, ww.entryPath);
366
+ const relativeDestWW = relative(projectRoot, resolve(viteConfig.build.outDir, ww.filename));
367
+ logger.log(` WW Source: ${colors.cyan}${relativeSourceWW}${colors.reset}`);
368
+ logger.log(` WW Dest: ${colors.cyan}${relativeDestWW}${colors.reset}`);
369
+ try {
370
+ await build({
371
+ configFile: false,
372
+ mode: viteConfig.mode,
373
+ build: {
374
+ outDir: viteConfig.build.outDir,
375
+ emptyOutDir: false,
376
+ lib: {
377
+ entry: ww.entryPath,
378
+ name: ww.filename.replace(/\.[^/.]+$/, ''),
379
+ formats: ['iife'],
380
+ fileName: () => ww.filename,
381
+ },
382
+ rollupOptions: {
383
+ output: { entryFileNames: ww.filename },
384
+ },
385
+ },
386
+ });
387
+ logger.success(`Web Worker (${ww.filename}) bundled successfully.`);
388
+ }
389
+ catch (e) {
390
+ logger.error(`Failed to bundle the Web Worker (${ww.filename}).`, e instanceof Error ? e : new Error('Unknown Error'));
391
+ }
392
+ }
393
+ }
394
+ logger.dim('--------------------------------------------------');
395
+ }
396
+ },
397
+ };
398
+ };
399
+ export default TinyVitePwaPlugin;
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var path = require('path');
4
+ var fs = require('fs');
5
+
6
+ /**
7
+ * Plugin to copy index.html to 404.html for GitHub Pages compatibility.
8
+ * @returns {import('vite').Plugin}
9
+ */
10
+ const CopyIndexToGithub404 = () => {
11
+ /**
12
+ * Variable to store the output directory captured from Vite
13
+ * @type {string}
14
+ */
15
+ let outDir;
16
+
17
+ return {
18
+ name: 'github-copy-index-to-404',
19
+ // Capture Vite configuration to know the actual output directory
20
+ configResolved(config) {
21
+ outDir = config.build.outDir;
22
+ },
23
+ closeBundle() {
24
+ if (!outDir) return;
25
+ const indexPath = path.resolve(outDir, 'index.html');
26
+ const targetPath = path.resolve(outDir, '404.html');
27
+
28
+ if (fs.existsSync(indexPath)) {
29
+ fs.copyFileSync(indexPath, targetPath);
30
+ }
31
+ },
32
+ };
33
+ };
34
+
35
+ exports.CopyIndexToGithub404 = CopyIndexToGithub404;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Plugin to copy index.html to 404.html for GitHub Pages compatibility.
3
+ * @returns {import('vite').Plugin}
4
+ */
5
+ export declare const CopyIndexToGithub404: () => import('vite').Plugin;
6
+ //# sourceMappingURL=githubUtils.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"githubUtils.d.mts","sourceRoot":"","sources":["../../../../../../src/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAFpB,OAAO,MAAM,EAAE,MAyB3B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { resolve } from 'path';
2
+ import { existsSync, copyFileSync } from 'fs';
3
+ /**
4
+ * Plugin to copy index.html to 404.html for GitHub Pages compatibility.
5
+ * @returns {import('vite').Plugin}
6
+ */
7
+ export const CopyIndexToGithub404 = () => {
8
+ /**
9
+ * Variable to store the output directory captured from Vite
10
+ * @type {string}
11
+ */
12
+ let outDir;
13
+ return {
14
+ name: 'github-copy-index-to-404',
15
+ // Capture Vite configuration to know the actual output directory
16
+ configResolved(config) {
17
+ outDir = config.build.outDir;
18
+ },
19
+ closeBundle() {
20
+ if (!outDir)
21
+ return;
22
+ const indexPath = resolve(outDir, 'index.html');
23
+ const targetPath = resolve(outDir, '404.html');
24
+ if (existsSync(indexPath)) {
25
+ copyFileSync(indexPath, targetPath);
26
+ }
27
+ },
28
+ };
29
+ };
@@ -0,0 +1,74 @@
1
+ # JavaScript RegExp: Reuse vs. Re-instantiation
2
+
3
+ This document serves as a guide for professional developers on when it is efficient and safe to reuse a `RegExp` object in JavaScript, and when doing so can lead to critical bugs.
4
+
5
+ ## 1. When to Reuse a RegExp
6
+
7
+ Reusing a `RegExp` object (storing it in a `const` outside of a function or loop) is a best practice in several scenarios.
8
+
9
+ ### A. Static Patterns (Single Source of Truth)
10
+ If you have a pattern that never changes, such as an email validation pattern, a phone number format, or a specific error code format, you should define it once.
11
+ * **Why:** It ensures consistency across your entire application. If the validation rule changes, you only update it in one location.
12
+
13
+ ### B. Performance Optimization (Pre-compilation)
14
+ When you define a regex using the literal syntax (e.g., `/pattern/`) or the `new RegExp()` constructor, the JavaScript engine must compile that pattern into an internal format.
15
+ * **Why:** If you are performing a regex operation inside a loop that runs thousands of times, defining the regex *inside* the loop forces the engine to re-compile the pattern on every iteration. Defining it *outside* the loop performs the compilation only once.
16
+
17
+ ### Example: Efficient Reuse
18
+ ```javascript
19
+ // GOOD: Compiled once, reused many times
20
+ const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
21
+
22
+ function validateEmails(emailList) {
23
+ return emailList.map(email => EMAIL_PATTERN.test(email));
24
+ }
25
+ ```
26
+
27
+ ---
28
+
29
+ ## 2. When NEVER to Reuse a RegExp
30
+
31
+ There are specific technical reasons why reusing a regex can cause your application to fail.
32
+
33
+ ### A. The `lastIndex` Trap (Stateful Regex)
34
+ This is the most critical reason to avoid reuse. When a `RegExp` has the global (`g`) or sticky (`y`) flag, it becomes **stateful**. It maintains a property called `lastIndex`, which tracks the position where the next match should begin.
35
+
36
+ * **The Problem:** If you use `.test()` or `.exec()` on a global regex, the `lastIndex` is updated after every match. If you reuse that same regex instance later, it will start searching from the *previous* position rather than the beginning of the string, often leading to false negatives.
37
+
38
+ ### Example: The `lastIndex` Bug
39
+ ```javascript
40
+ // BAD: Reusing a global regex leads to unpredictable results
41
+ const SEARCH_PATTERN = /abc/g;
42
+ const str = "abcabc";
43
+
44
+ console.log(SEARCH_PATTERN.test(str)); // true (lastIndex is now 3)
45
+ console.log(SEARCH_PATTERN.test(str)); // false! (Starts searching at index 3, finds nothing)
46
+
47
+ // FIX: Either do not use the 'g' flag if you only need to test once,
48
+ // or reset the index manually:
49
+ SEARCH_PATTERN.lastIndex = 0;
50
+ console.log(SEARCH_PATTERN.test(str)); // true
51
+ ```
52
+
53
+ ### B. Dynamic Patterns
54
+ If the pattern itself depends on a variable (e.g., searching for a user-provided string), you cannot use a static constant.
55
+ * **Why:** A constant is immutable. If the search criteria change, you must instantiate a new `RegExp` using the `new RegExp(patternString)` constructor.
56
+
57
+ ### Example: Dynamic Pattern
58
+ ```javascript
59
+ // GOOD: Creating a new instance because the pattern changes
60
+ function findUser(userName) {
61
+ // We must create a new instance because 'userName' is dynamic
62
+ const dynamicPattern = new RegExp(userName, 'i');
63
+ return dynamicPattern.test(currentData);
64
+ }
65
+ ```
66
+
67
+ ## Summary Table
68
+
69
+ | Scenario | Action | Reason |
70
+ | :--- | :--- | :--- |
71
+ | **Static Pattern (e.g., Email)** | **Reuse** | Consistency and Performance. |
72
+ | **Inside a Loop (Static Pattern)** | **Reuse** | Avoids repeated compilation overhead. |
73
+ | **Regex with `g` or `y` flags** | **Avoid Reuse** | Prevents `lastIndex` state bugs. |
74
+ | **Pattern depends on variables** | **Do Not Reuse** | The pattern is not constant. |