tiny-essentials 1.28.19 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/changelog/1/28/19.md +24 -0
- package/changelog/1/29/0.md +58 -0
- package/dist/v1/ColorSafeStringify.min.js +1 -1
- package/dist/v1/TinyAdvancedRaffle.min.js +1 -1
- package/dist/v1/TinyAfterScrollWatcher.min.js +1 -1
- package/dist/v1/TinyAnalogClock.min.js +1 -1
- package/dist/v1/TinyArrayComparator.min.js +1 -1
- package/dist/v1/TinyArrayPaginator.min.js +1 -1
- package/dist/v1/TinyBasicsEs.min.js +1 -1
- package/dist/v1/TinyBrowserMonitor.min.js +1 -0
- package/dist/v1/TinyClassManager.min.js +1 -1
- package/dist/v1/TinyClipboard.min.js +1 -1
- package/dist/v1/TinyCloner.min.js +1 -0
- package/dist/v1/TinyColorConverter.min.js +1 -1
- package/dist/v1/TinyColorValidator.min.js +1 -1
- package/dist/v1/TinyCookieConsent.min.js +1 -1
- package/dist/v1/TinyDayNightCycle.min.js +1 -1
- package/dist/v1/TinyDebugger.min.js +1 -1
- package/dist/v1/TinyDomReadyManager.min.js +1 -1
- package/dist/v1/TinyDragDropDetector.min.js +1 -1
- package/dist/v1/TinyDragger.min.js +1 -1
- package/dist/v1/TinyElementObserver.min.js +1 -1
- package/dist/v1/TinyEssentials.min.js +1 -1
- package/dist/v1/TinyGamepad.min.js +1 -1
- package/dist/v1/TinyHtml.min.js +1 -1
- package/dist/v1/TinyHtmlTagRegexBuilder.min.js +1 -0
- package/dist/v1/TinyHttpResponseRegistry.min.js +1 -0
- package/dist/v1/TinyI18.min.js +1 -1
- package/dist/v1/TinyIframeEvents.min.js +1 -1
- package/dist/v1/TinyInventory.min.js +1 -1
- package/dist/v1/TinyInventoryTrader.min.js +1 -1
- package/dist/v1/TinyLevelUp.min.js +1 -1
- package/dist/v1/TinyLoadingScreen.min.js +1 -1
- package/dist/v1/TinyLocalStorage.min.js +1 -1
- package/dist/v1/TinyMaInSys.min.js +1 -1
- package/dist/v1/TinyMapCache.min.js +1 -0
- package/dist/v1/TinyMediaPlayer.min.js +1 -1
- package/dist/v1/TinyNeedBar.min.js +1 -1
- package/dist/v1/TinyNewWinEvents.min.js +1 -1
- package/dist/v1/TinyNotificationAdapter.min.js +1 -0
- package/dist/v1/TinyNotifications.min.js +1 -1
- package/dist/v1/TinyNotifyCenter.min.js +1 -1
- package/dist/v1/TinyOPFSFileSystem.min.js +1 -0
- package/dist/v1/TinyPasswordValidator.min.js +1 -0
- package/dist/v1/TinyPluginPackage.min.js +1 -0
- package/dist/v1/TinyPromiseQueue.min.js +1 -1
- package/dist/v1/TinyPushManager.min.js +1 -0
- package/dist/v1/TinyPushPayload.min.js +1 -0
- package/dist/v1/TinyPushRouter.min.js +1 -0
- package/dist/v1/TinyRadioFm.min.js +1 -1
- package/dist/v1/TinyRateLimiter.min.js +1 -1
- package/dist/v1/TinyRegexEs.min.js +1 -0
- package/dist/v1/TinyRouter.min.js +1 -0
- package/dist/v1/TinyServiceWorker.min.js +1 -0
- package/dist/v1/TinyServiceWorkerEngine.min.js +1 -0
- package/dist/v1/TinySetMapPackage.min.js +1 -0
- package/dist/v1/TinySimpleDice.min.js +1 -1
- package/dist/v1/TinySmartScroller.min.js +1 -1
- package/dist/v1/TinyStorageBucketFileSystem.min.js +1 -0
- package/dist/v1/TinyTextDiffer.min.js +1 -1
- package/dist/v1/TinyTextRangeEditor.min.js +1 -1
- package/dist/v1/TinyTextarea.min.js +1 -1
- package/dist/v1/TinyThrottledApi.min.js +1 -0
- package/dist/v1/TinyTimeout.min.js +1 -1
- package/dist/v1/TinyToastNotify.min.js +1 -1
- package/dist/v1/TinyUploadClicker.min.js +1 -1
- package/dist/v1/TinyUriParser.min.js +1 -0
- package/dist/v1/TinyVersion.min.js +1 -0
- package/dist/v1/TinyWebWorker.min.js +1 -0
- package/dist/v1/TinyWebWorkerEngine.min.js +1 -0
- package/dist/v1/UltraRandomMsgGen.min.js +1 -1
- package/dist/v1/basics/array.cjs +2 -2
- package/dist/v1/basics/array.d.mts +2 -0
- package/dist/v1/basics/array.d.mts.map +1 -1
- package/dist/v1/basics/array.mjs +2 -1
- package/dist/v1/basics/browserDetector.cjs +37 -12
- package/dist/v1/basics/browserDetector.d.mts +8 -0
- package/dist/v1/basics/browserDetector.d.mts.map +1 -1
- package/dist/v1/basics/browserDetector.mjs +32 -13
- package/dist/v1/basics/crypto.cjs +23 -0
- package/dist/v1/basics/crypto.d.mts +10 -0
- package/dist/v1/basics/crypto.d.mts.map +1 -0
- package/dist/v1/basics/crypto.mjs +18 -0
- package/dist/v1/basics/html.cjs +0 -3
- package/dist/v1/basics/html.d.mts.map +1 -1
- package/dist/v1/basics/html.mjs +0 -2
- package/dist/v1/basics/index.cjs +8 -1
- package/dist/v1/basics/index.d.mts +6 -5
- package/dist/v1/basics/index.d.mts.map +1 -1
- package/dist/v1/basics/index.mjs +6 -5
- package/dist/v1/basics/objChecker.cjs +88 -0
- package/dist/v1/basics/objChecker.d.mts +26 -0
- package/dist/v1/basics/objChecker.d.mts.map +1 -1
- package/dist/v1/basics/objChecker.mjs +74 -0
- package/dist/v1/basics/objFilter.cjs +234 -93
- package/dist/v1/basics/objFilter.d.mts +96 -22
- package/dist/v1/basics/objFilter.d.mts.map +1 -1
- package/dist/v1/basics/objFilter.mjs +216 -92
- package/dist/v1/basics/promiseUtils.cjs +48 -12
- package/dist/v1/basics/promiseUtils.d.mts +45 -12
- package/dist/v1/basics/promiseUtils.d.mts.map +1 -1
- package/dist/v1/basics/promiseUtils.mjs +47 -12
- package/dist/v1/basics/text.cjs +0 -12
- package/dist/v1/basics/text.d.mts +0 -10
- package/dist/v1/basics/text.d.mts.map +1 -1
- package/dist/v1/basics/text.mjs +0 -10
- package/dist/v1/index.cjs +88 -3
- package/dist/v1/index.d.mts +31 -6
- package/dist/v1/index.d.mts.map +1 -1
- package/dist/v1/index.mjs +32 -7
- package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
- package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
- package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
- package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
- package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
- package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
- package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
- package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
- package/dist/v1/libs/fs/constants.cjs +74 -0
- package/dist/v1/libs/fs/constants.d.mts +22 -0
- package/dist/v1/libs/fs/constants.d.mts.map +1 -0
- package/dist/v1/libs/fs/constants.mjs +53 -0
- package/dist/v1/libs/fs/encoding.cjs +118 -0
- package/dist/v1/libs/fs/encoding.d.mts +50 -0
- package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
- package/dist/v1/libs/fs/encoding.mjs +102 -0
- package/dist/v1/libs/fs/error.cjs +188 -0
- package/dist/v1/libs/fs/error.d.mts +105 -0
- package/dist/v1/libs/fs/error.d.mts.map +1 -0
- package/dist/v1/libs/fs/error.mjs +158 -0
- package/dist/v1/libs/fs/handle.cjs +121 -0
- package/dist/v1/libs/fs/handle.d.mts +56 -0
- package/dist/v1/libs/fs/handle.d.mts.map +1 -0
- package/dist/v1/libs/fs/handle.mjs +100 -0
- package/dist/v1/libs/fs/index.cjs +700 -0
- package/dist/v1/libs/fs/index.d.mts +377 -0
- package/dist/v1/libs/fs/index.d.mts.map +1 -0
- package/dist/v1/libs/fs/index.mjs +630 -0
- package/dist/v1/libs/fs/path.cjs +234 -0
- package/dist/v1/libs/fs/path.d.mts +176 -0
- package/dist/v1/libs/fs/path.d.mts.map +1 -0
- package/dist/v1/libs/fs/path.mjs +197 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
- package/dist/v1/libs/fs/stats.cjs +245 -0
- package/dist/v1/libs/fs/stats.d.mts +226 -0
- package/dist/v1/libs/fs/stats.d.mts.map +1 -0
- package/dist/v1/libs/fs/stats.mjs +197 -0
- package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
- package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
- package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
- package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
- package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
- package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
- package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
- package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
- package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
- package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
- package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
- package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
- package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
- package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
- package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
- package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
- package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
- package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
- package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
- package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
- package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
- package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
- package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
- package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
- package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
- package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
- package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
- package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
- package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
- package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
- package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
- package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
- package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
- package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
- package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
- package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
- package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
- package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
- package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
- package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
- package/dist/v1/libs/router/TinyRouter.cjs +661 -0
- package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
- package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
- package/dist/v1/libs/router/TinyRouter.mjs +572 -0
- package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
- package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
- package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
- package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
- package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
- package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
- package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
- package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
- package/dist/v1/libs/sw/browser/utils.cjs +28 -0
- package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
- package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/utils.mjs +21 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
- package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
- package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
- package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
- package/dist/v1/libs/sw/utils.cjs +57 -0
- package/dist/v1/libs/sw/utils.d.mts +173 -0
- package/dist/v1/libs/sw/utils.d.mts.map +1 -0
- package/dist/v1/libs/sw/utils.mjs +50 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
- package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
- package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
- package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
- package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
- package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
- package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
- package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
- package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
- package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
- package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
- package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
- package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
- package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
- package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
- package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
- package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
- package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
- package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
- package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
- package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
- package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
- package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
- package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
- package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
- package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
- package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
- package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
- package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
- package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
- package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
- package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
- package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
- package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
- package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
- package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
- package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
- package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
- package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
- package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
- package/dist/v1/regexp/Email.cjs +185 -0
- package/dist/v1/regexp/Email.d.mts +73 -0
- package/dist/v1/regexp/Email.d.mts.map +1 -0
- package/dist/v1/regexp/Email.mjs +153 -0
- package/dist/v1/regexp/Glob.cjs +293 -0
- package/dist/v1/regexp/Glob.d.mts +45 -0
- package/dist/v1/regexp/Glob.d.mts.map +1 -0
- package/dist/v1/regexp/Glob.mjs +260 -0
- package/dist/v1/regexp/Ipv4.cjs +57 -0
- package/dist/v1/regexp/Ipv4.d.mts +29 -0
- package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
- package/dist/v1/regexp/Ipv4.mjs +45 -0
- package/dist/v1/regexp/Ipv6.cjs +67 -0
- package/dist/v1/regexp/Ipv6.d.mts +29 -0
- package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
- package/dist/v1/regexp/Ipv6.mjs +54 -0
- package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
- package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
- package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
- package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
- package/dist/v1/regexp/UrlDetector.cjs +125 -0
- package/dist/v1/regexp/UrlDetector.d.mts +67 -0
- package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
- package/dist/v1/regexp/UrlDetector.mjs +102 -0
- package/dist/v1/regexp/Username/index.cjs +233 -0
- package/dist/v1/regexp/Username/index.d.mts +77 -0
- package/dist/v1/regexp/Username/index.d.mts.map +1 -0
- package/dist/v1/regexp/Username/index.mjs +199 -0
- package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
- package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
- package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
- package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
- package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
- package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
- package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
- package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
- package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
- package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
- package/dist/v1/regexp/Username/templates/index.cjs +11 -0
- package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
- package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/index.mjs +4 -0
- package/dist/v1/regexp/index.cjs +41 -0
- package/dist/v1/regexp/index.d.mts +9 -0
- package/dist/v1/regexp/index.d.mts.map +1 -0
- package/dist/v1/regexp/index.mjs +8 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +30 -4
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +5 -2
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -1
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +29 -5
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
- package/docs/info/RegExp.md +74 -0
- package/docs/v1/Exports.md +101 -0
- package/docs/v1/README.md +113 -15
- package/docs/v1/basics/asyncReplace.md +2 -0
- package/docs/v1/basics/browserDetector.md +28 -11
- package/docs/v1/basics/crypto.md +85 -0
- package/docs/v1/basics/deprecated/html.md +2 -0
- package/docs/v1/basics/deprecated/objFilter.md +2 -0
- package/docs/v1/basics/html.md +2 -0
- package/docs/v1/basics/objChecker.md +55 -0
- package/docs/v1/basics/objFilter.md +57 -86
- package/docs/v1/basics/promiseUtils.md +12 -3
- package/docs/v1/basics/text.md +0 -1
- package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
- package/docs/v1/libs/fs/TinyFS.md +752 -0
- package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
- package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
- package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
- package/docs/v1/libs/plugin/TinyVersion.md +145 -0
- package/docs/v1/libs/router/TinyRouter.md +216 -0
- package/docs/v1/libs/storage/TinyMapCache.md +219 -0
- package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
- package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
- package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
- package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
- package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
- package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
- package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
- package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
- package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
- package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
- package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
- package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
- package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
- package/docs/v1/libs/text/TinyI18.md +80 -56
- package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
- package/docs/v1/libs/tools/TinyDebugger.md +117 -1
- package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
- package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
- package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
- package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
- package/docs/v1/libs/tools/TinySiteMap.md +134 -0
- package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
- package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
- package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
- package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
- package/docs/v1/libs/tools/TinyUriParser.md +128 -0
- package/docs/v1/libs/utils/TinyCloner.md +126 -0
- package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
- package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
- package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
- package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
- package/docs/v1/regexp/Email.md +127 -0
- package/docs/v1/regexp/Glob.md +155 -0
- package/docs/v1/regexp/IPv4.md +103 -0
- package/docs/v1/regexp/IPv6.md +122 -0
- package/docs/v1/regexp/SegmentExtractor.md +120 -0
- package/docs/v1/regexp/UrlDetector.md +117 -0
- package/docs/v1/regexp/Username/Base.md +131 -0
- package/docs/v1/regexp/Username/Discord.md +267 -0
- package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
- package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +569 -0
- package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +19 -7
- package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
- package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
- package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
- package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
- package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
- package/package.json +303 -13
- package/types/EventEmitter.d.ts +48 -0
- package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# 🧩 GlobBypassPlugin
|
|
2
|
+
|
|
3
|
+
A `TinyServiceWorkerEngine` plugin that skips router validation for requests whose pathname matches a set of glob patterns.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📖 Table of Contents
|
|
8
|
+
|
|
9
|
+
- [What is this?](#-what-is-this)
|
|
10
|
+
- [Why would I use it?](#-why-would-i-use-it)
|
|
11
|
+
- [Quick Start](#-quick-start)
|
|
12
|
+
- [How It Works](#-how-it-works)
|
|
13
|
+
- [Daily Recipes](#-daily-recipes)
|
|
14
|
+
- [Security Notes](#-security-notes)
|
|
15
|
+
- [FAQ](#-faq)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 🤔 What is this?
|
|
20
|
+
|
|
21
|
+
`GlobBypassPlugin` is a plugin for **`TinyServiceWorkerEngine`**.
|
|
22
|
+
|
|
23
|
+
A service worker engine usually intercepts every `fetch` event and runs a
|
|
24
|
+
**router validation** pipeline before letting the request continue. That is
|
|
25
|
+
great for your application routes, but it is annoying for static assets,
|
|
26
|
+
generated files, or anything that should simply pass through untouched.
|
|
27
|
+
|
|
28
|
+
This plugin lets you declare **glob patterns**. When an intercepted request
|
|
29
|
+
matches one of those patterns, the plugin marks the response as:
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
response.continueCheck = false; // stop the validation pipeline
|
|
33
|
+
response.needValidation = false; // do not require validation
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
In other words: **the request is short-circuited and allowed through.**
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 🎯 Why would I use it?
|
|
41
|
+
|
|
42
|
+
| Scenario | Without this plugin | With this plugin |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| Dev server serving `*.css` | Router validates every asset | CSS bypasses the router |
|
|
45
|
+
| Source maps in development | 404 noise in the console | Ignored via `exclude` |
|
|
46
|
+
| Third-party CDN requests | Validated and rejected | Skipped with `sameOriginOnly` |
|
|
47
|
+
| Production safety | Bypass rules leak to prod | Blocked with `devOnly: true` |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 🚀 Quick Start
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
import TinyServiceWorkerEngine from 'tiny-essentials/libs/sw/service/TinyServiceWorkerEngine';
|
|
55
|
+
import GlobBypassPlugin from 'tiny-essentials/libs/sw/service/plugins/GlobBypassPlugin';
|
|
56
|
+
|
|
57
|
+
const engine = new TinyServiceWorkerEngine();
|
|
58
|
+
|
|
59
|
+
// Register the plugin on the engine.
|
|
60
|
+
engine.installPlugin(GlobBypassPlugin, {
|
|
61
|
+
patterns: ['**/*.css', '**/*.js', '**/*.{png,jpg,svg}'],
|
|
62
|
+
exclude: [],
|
|
63
|
+
sameOriginOnly: true,
|
|
64
|
+
devOnly: false,
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
That is the whole setup. Every request whose pathname matches `**/*.css`,
|
|
69
|
+
`**/*.js`, or one of the image extensions now bypasses router validation.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## ⚙️ Options Reference
|
|
74
|
+
|
|
75
|
+
The second argument of the plugin is the options object.
|
|
76
|
+
|
|
77
|
+
| Option | Type | Required | Default | Description |
|
|
78
|
+
| --- | --- | --- | --- | --- |
|
|
79
|
+
| `patterns` | `string[]` | ✅ **Yes** | — | Glob patterns that trigger the bypass. |
|
|
80
|
+
| `exclude` | `string[]` | ❌ No | `[]` | Glob patterns that cancel the bypass. |
|
|
81
|
+
| `sameOriginOnly` | `boolean` | ❌ No | `true` | When `true`, only same-origin requests are evaluated. |
|
|
82
|
+
| `devOnly` | `boolean` | ❌ No | `false` | When `true`, the bypass is only registered. |
|
|
83
|
+
|
|
84
|
+
### `patterns` — required
|
|
85
|
+
|
|
86
|
+
An array of glob strings. Each entry is compiled once with `compileGlobRegExp()`
|
|
87
|
+
and registered on the engine.
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
{ patterns: ['**/*.css', '**/*.map'] }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### `exclude` — optional
|
|
94
|
+
|
|
95
|
+
An array of glob strings. Exclusion patterns are compiled **once**, before the
|
|
96
|
+
request loop, and tested against `fetchObj.url.pathname`.
|
|
97
|
+
|
|
98
|
+
```js
|
|
99
|
+
{ patterns: ['**/*.js'], exclude: ['**/no.js', '**/nope.js'] }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### `sameOriginOnly` — optional, default `true`
|
|
103
|
+
|
|
104
|
+
When `true`, cross-origin requests are ignored and fall back to the normal
|
|
105
|
+
router validation.
|
|
106
|
+
|
|
107
|
+
```js
|
|
108
|
+
{ patterns: ['**/*.css'], sameOriginOnly: false } // also bypass CDN requests
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### `devOnly` — optional, default `false`
|
|
112
|
+
|
|
113
|
+
When `true`, the plugin registers nothing. Use it to keep development shortcuts out of production.
|
|
114
|
+
|
|
115
|
+
```js
|
|
116
|
+
{ patterns: ['**/*.map'], devOnly: true }
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 🔍 How It Works
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
fetch event
|
|
125
|
+
│
|
|
126
|
+
▼
|
|
127
|
+
┌──────────────────────────┐
|
|
128
|
+
│ Does the pathname match │
|
|
129
|
+
│ a `patterns` entry? │──No──▶ normal router validation
|
|
130
|
+
└───────────┬──────────────┘
|
|
131
|
+
│ Yes
|
|
132
|
+
▼
|
|
133
|
+
┌──────────────────────────┐
|
|
134
|
+
│ sameOriginOnly is true │
|
|
135
|
+
│ AND request is cross- │──Yes─▶ normal router validation
|
|
136
|
+
│ origin? │
|
|
137
|
+
└───────────┬──────────────┘
|
|
138
|
+
│ No
|
|
139
|
+
▼
|
|
140
|
+
┌──────────────────────────┐
|
|
141
|
+
│ Does the pathname match │
|
|
142
|
+
│ an `exclude` entry? │──Yes─▶ normal router validation
|
|
143
|
+
└───────────┬──────────────┘
|
|
144
|
+
│ No
|
|
145
|
+
▼
|
|
146
|
+
┌──────────────────────────┐
|
|
147
|
+
│ continueCheck = false │
|
|
148
|
+
│ needValidation = false │
|
|
149
|
+
│ code = 200 │
|
|
150
|
+
└──────────────────────────┘
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Step by step:**
|
|
154
|
+
|
|
155
|
+
1. The plugin validates the engine instance and every option.
|
|
156
|
+
2. If `devOnly` is `true` and the environment is not a dev build, it stops here.
|
|
157
|
+
3. All `exclude` patterns are compiled into `RegExp` objects **once** (performance).
|
|
158
|
+
4. For each entry in `patterns`, the plugin calls
|
|
159
|
+
`engine.addFetchRegExpListener(regex.source, callback)`.
|
|
160
|
+
5. Inside the callback, the origin and exclusion checks run per request.
|
|
161
|
+
6. If nothing stopped the request, the response is short-circuited.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 🍳 Daily Recipes
|
|
166
|
+
|
|
167
|
+
### 1. Bypass a single file
|
|
168
|
+
|
|
169
|
+
```js
|
|
170
|
+
{ patterns: ['**/sw.js'] }
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 2. Bypass by file extension
|
|
174
|
+
|
|
175
|
+
```js
|
|
176
|
+
{ patterns: ['**/*.{css,scss,less}'] }
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### 3. Bypass everything except the service worker
|
|
180
|
+
|
|
181
|
+
```js
|
|
182
|
+
{ patterns: ['**'], exclude: ['**/sw.js'] }
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 4. Development-only bypass
|
|
186
|
+
|
|
187
|
+
```js
|
|
188
|
+
{ patterns: ['**/*.map'], devOnly: true }
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 5. Include cross-origin requests
|
|
192
|
+
|
|
193
|
+
```js
|
|
194
|
+
{ patterns: ['**/api/**'], sameOriginOnly: false }
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 6. Multiple independent rules
|
|
198
|
+
|
|
199
|
+
Register the plugin more than once with different option sets:
|
|
200
|
+
|
|
201
|
+
```js
|
|
202
|
+
engine.use(GlobBypassPlugin, { patterns: ['**/*.css'] });
|
|
203
|
+
engine.use(GlobBypassPlugin, { patterns: ['**/*.map'], devOnly: true });
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 🔐 Security Notes
|
|
209
|
+
|
|
210
|
+
- **`sameOriginOnly` defaults to `true` on purpose.** Setting it to `false`
|
|
211
|
+
means cross-origin requests can also skip validation. Only do this when you
|
|
212
|
+
fully control the target origins.
|
|
213
|
+
- **`devOnly` is your safety net.** Any bypass that exists only to make
|
|
214
|
+
development easier should use `devOnly: true`.
|
|
215
|
+
- **`exclude` is evaluated per request, not per pattern.** A typo in an
|
|
216
|
+
exclusion pattern fails silently: the request is bypassed instead of blocked.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## ❓ FAQ
|
|
221
|
+
|
|
222
|
+
**Does this plugin download anything?**
|
|
223
|
+
No. It only registers listeners on the engine.
|
|
224
|
+
|
|
225
|
+
**Can I register it twice?**
|
|
226
|
+
Yes. Each call creates an independent rule set.
|
|
227
|
+
|
|
228
|
+
**What happens if `patterns` is an empty array?**
|
|
229
|
+
Nothing is registered. No error is thrown.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# 🚀 GlobCachePlugin Documentation
|
|
2
|
+
|
|
3
|
+
Welcome to the official documentation for the **GlobCachePlugin**. This plugin is designed for the `TinyServiceWorkerEngine` ecosystem. It provides an easy and efficient way to manage runtime caching by using **glob patterns** (like `**/*.js`) instead of writing complex Regular Expressions manually.
|
|
4
|
+
|
|
5
|
+
## 📝 Overview
|
|
6
|
+
|
|
7
|
+
The `GlobCachePlugin` intercepts network requests that match your specified patterns. It checks if a valid response is already stored in the `CacheStorage`.
|
|
8
|
+
- If a match is found in the cache, the plugin serves the cached response immediately.
|
|
9
|
+
- If no match is found, it fetches the resource from the network and automatically saves it to the cache for future use.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## ✨ Key Features
|
|
14
|
+
|
|
15
|
+
* 🔍 **Glob Pattern Matching**: Use simple patterns to include or exclude specific files.
|
|
16
|
+
* 🛡️ **Exclusion Rules**: Easily prevent specific files (like `sw.js` or API calls) from being cached.
|
|
17
|
+
* 🌐 **Origin Control**: Option to restrict caching strictly to the same origin to improve security.
|
|
18
|
+
* ⚡ **Automated Caching**: Automatically handles `cache.put()` for successful `GET` requests (Status 200).
|
|
19
|
+
* 🛠️ **Non-Blocking**: If a caching error occurs, the plugin logs the error but allows the engine to continue operating to prevent site breakage.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 📦 Configuration (Options)
|
|
24
|
+
|
|
25
|
+
When initializing the plugin, you must provide a configuration object. Below is the detailed breakdown of the `GlobCacheOptions` type.
|
|
26
|
+
|
|
27
|
+
| Property | Type | Required | Default | Description |
|
|
28
|
+
| :--- | :--- | :---: | :---: | :--- |
|
|
29
|
+
| `patterns` | `string[]` | **Yes** | N/A | An array of glob patterns to include (e.g., `['**/*.png']`). |
|
|
30
|
+
| `cacheName` | `string` | **Yes** | N/A | The unique name for the `CacheStorage` bucket. |
|
|
31
|
+
| `exclude` | `string[]` | No | `[]` | An array of glob patterns to ignore (e.g., `['**/api/**']`). |
|
|
32
|
+
| `sameOriginOnly` | `boolean` | No | `true` | If `true`, only requests from the same origin will be cached. |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 🚀 Daily Usage Guide
|
|
37
|
+
|
|
38
|
+
### 1. Basic Implementation
|
|
39
|
+
To use the plugin, pass your `TinyServiceWorkerEngine` instance and the configuration object into the plugin function.
|
|
40
|
+
|
|
41
|
+
```javascript
|
|
42
|
+
import GlobCachePlugin from 'tiny-essentials/libs/sw/service/plugins/GlobCachePlugin';
|
|
43
|
+
|
|
44
|
+
// Example configuration
|
|
45
|
+
const cacheOptions = {
|
|
46
|
+
patterns: ['**/*.{js,css,png,jpg}'], // Cache scripts, styles, and images
|
|
47
|
+
cacheName: 'static-assets-v1',
|
|
48
|
+
exclude: ['**/vendor/**'], // Do not cache anything in the vendor folder
|
|
49
|
+
sameOriginOnly: true // Only cache files from our own domain
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// Registering the plugin within your engine setup
|
|
53
|
+
engineInstance.installPlugin(GlobCachePlugin, cacheOptions);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 2. Advanced Filtering Example
|
|
57
|
+
If you want to cache everything except for specific configuration files and ensure you are only caching assets from your own domain:
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
import GlobCachePlugin from 'tiny-essentials/libs/sw/service/plugins/GlobCachePlugin';
|
|
61
|
+
|
|
62
|
+
const advancedOptions = {
|
|
63
|
+
patterns: ['**/*'],
|
|
64
|
+
exclude: ['**/config.json', '**/auth/**'],
|
|
65
|
+
cacheName: 'app-cache',
|
|
66
|
+
sameOriginOnly: true
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
engineInstance.installPlugin(GlobCachePlugin, advancedOptions);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## ⚠️ Technical Constraints & Logic
|
|
75
|
+
|
|
76
|
+
To ensure the stability of your application, please keep the following technical behaviors in mind:
|
|
77
|
+
|
|
78
|
+
1. **Method Restriction**: The plugin only caches `GET` requests. It will not attempt to cache `POST`, `PUT`, or `DELETE` requests.
|
|
79
|
+
2. **Status Requirement**: Only responses with a `status === 200` are stored in the cache.
|
|
80
|
+
3. **Response Cloning**: The plugin uses `.clone()` when saving to the cache. This is necessary because a response body can only be read once.
|
|
81
|
+
4. **Error Handling**: If `caches.open` or `cache.match` fails, an error is logged to the console: `[GlobCachePlugin] Error during cache operation...`. The request will then proceed to the network normally.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 🛠 Troubleshooting
|
|
86
|
+
|
|
87
|
+
| Issue | Possible Cause | Solution |
|
|
88
|
+
| :--- | :--- | :--- |
|
|
89
|
+
| **Files not caching** | Patterns might be incorrect. | Verify your glob syntax (e.g., use `**/*` for recursive matching). |
|
|
90
|
+
| **TypeError on startup** | Missing `cacheName` or `patterns`. | Ensure all required properties are present in your options object. |
|
|
91
|
+
| **CORS Errors** | `sameOriginOnly` is `true`. | If you need to cache external assets (like Google Fonts), set `sameOriginOnly: false`. |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# 📡 TinyPingPwa
|
|
2
|
+
|
|
3
|
+
A lightweight utility to verify that the `TinyServiceWorkerEngine` is communicating correctly.
|
|
4
|
+
|
|
5
|
+
### 🚀 Quick Usage
|
|
6
|
+
|
|
7
|
+
1. **Register the plugin:**
|
|
8
|
+
```javascript
|
|
9
|
+
import TinyPingPwa from 'tiny-essentials/libs/sw/service/plugins/Ping';
|
|
10
|
+
engineInstance.installPlugin(TinyPingPwa);
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
2. **Send a test message:**
|
|
14
|
+
```javascript
|
|
15
|
+
import TinyServiceWorker from 'tiny-essentials/libs/sw/browser/TinyServiceWorker';
|
|
16
|
+
|
|
17
|
+
const swManager = new TinyServiceWorker({
|
|
18
|
+
id: 'web-manager',
|
|
19
|
+
swUrl: '/sw.js',
|
|
20
|
+
version: '1.0.0',
|
|
21
|
+
debugMode: import.meta.env.DEV,
|
|
22
|
+
useLogColors: true,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
swManager.on('pong', ({ data }) => console.log(data.msg));
|
|
26
|
+
|
|
27
|
+
swManager.register({ type: import.meta.env.DEV ? 'module' : 'classic' }).then(() => {
|
|
28
|
+
swManager.emit('ping');
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### ✅ Expected Result
|
|
33
|
+
|
|
34
|
+
When a `'ping'` is sent, the plugin will respond with:
|
|
35
|
+
* **Type:** `'pong'`
|
|
36
|
+
* **Data:** `{ msg: 'mio! :3' }`
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# 🚀 TabManager Plugin Documentation
|
|
2
|
+
|
|
3
|
+
The **TabManager Plugin** is a robust synchronization system designed for Progressive Web Apps (PWAs). It allows your application to maintain a "Single Source of Truth" regarding all open browser tabs. By leveraging a **Service Worker** as a central coordinator, it enables real-time communication, data persistence via **IndexedDB**, and advanced control over tab lifecycles.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🏗️ Architecture Overview
|
|
8
|
+
|
|
9
|
+
The system operates using a **Client-Server model** where the "Server" is the Service Worker.
|
|
10
|
+
|
|
11
|
+
1. **The Brain (Service Worker Side):** 🧠
|
|
12
|
+
* Located in: `tiny-essentials/libs/sw/service/plugins/TabManager`
|
|
13
|
+
* **Responsibility:** Maintains the master registry of all tabs, persists data to `IndexedDB`, handles "ghost" tab reconciliation, and broadcasts updates to all connected clients.
|
|
14
|
+
2. **The Controller (Client/Main Thread Side):** 🎮
|
|
15
|
+
* Located in: `tiny-essentials/libs/sw/browser/plugins/TabManager`
|
|
16
|
+
* **Responsibility:** Automatically reports the tab's status (URL, Title, Focus) to the SW, listens for lifecycle events (closing, navigating), and provides a clean API for the developer to interact with other tabs.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 🛠️ Getting Started
|
|
21
|
+
|
|
22
|
+
### 1. Installation (Service Worker)
|
|
23
|
+
To enable the TabManager, you must install the plugin into your `TinyServiceWorkerEngine`.
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
import TinyTabManagerPlugin from 'tiny-essentials/libs/sw/service/plugins/TabManager';
|
|
27
|
+
|
|
28
|
+
// Inside your Service Worker initialization
|
|
29
|
+
swManager.installPlugin(TinyTabManagerPlugin);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Initialization (Main Thread)
|
|
33
|
+
In your web application (the client side), you need to connect to the Service Worker using the `TinySwTabsLayer`.
|
|
34
|
+
|
|
35
|
+
```javascript
|
|
36
|
+
import TinyTabManagerPlugin from 'tiny-essentials/libs/sw/browser/plugins/TabManager';
|
|
37
|
+
|
|
38
|
+
// Assuming 'sw' is your TinyServiceWorker instance
|
|
39
|
+
const tabManager = swManager.installPlugin(TinyTabManagerPlugin);
|
|
40
|
+
|
|
41
|
+
// Now you can use the tabManager instance to control tabs!
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## ⚙️ Technical Deep-Dive (For Developers)
|
|
47
|
+
|
|
48
|
+
### 🛡️ Permission System
|
|
49
|
+
To ensure user privacy and control, the plugin implements a granular permission system. When a tab registers itself, it can opt-out of certain management actions. These permissions are stored per `clientId`.
|
|
50
|
+
|
|
51
|
+
* **`allowFocusTracking`**: If `false`, the Service Worker will not update the `isFocused` status for this tab.
|
|
52
|
+
* **`allowTabClosing`**: If `false`, remote commands to close this tab (via `tab:close_single` or `tab:close_multiple`) will be rejected with a "Permission denied" reason.
|
|
53
|
+
|
|
54
|
+
### 🔄 Ghost Tab Reconciliation
|
|
55
|
+
One of the biggest challenges in PWA development is when a user closes a tab or the browser crashes, preventing the `unregister` message from being sent.
|
|
56
|
+
|
|
57
|
+
**How this plugin solves it:**
|
|
58
|
+
The Service Worker performs a **Reconciliation** every time a new tab registers or an unregistration occurs. It uses `sw.clients.matchAll()` to compare the "Master Registry" in `IndexedDB` against the *actual* active browser clients. If a tab exists in the registry but is no longer a valid browser client, it is automatically purged.
|
|
59
|
+
|
|
60
|
+
### 📦 Persistence Layer
|
|
61
|
+
The plugin uses **IndexedDB** (`TinySwTabsDB`) to ensure that the tab registry survives page reloads and browser restarts. This ensures that even if the Service Worker is woken up after a period of inactivity, it still knows which tabs were previously active.
|
|
62
|
+
|
|
63
|
+
### 🚦 Concurrency Management
|
|
64
|
+
To prevent race conditions (e.g., two tabs trying to update the registry at the exact same millisecond), the Service Worker uses a `TinyPromiseQueue`. All database operations are queued to ensure data integrity.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# 🚀 Vite File Detector Plugin
|
|
2
|
+
|
|
3
|
+
A specialized plugin for the `TinyServiceWorkerEngine` designed to identify and bypass Vite-specific network requests. This ensures that during development, Vite's internal processes (like Hot Module Replacement) are not interrupted by the Service Worker.
|
|
4
|
+
|
|
5
|
+
## 📝 Overview
|
|
6
|
+
|
|
7
|
+
When developing with **Vite**, the development server uses specific URL patterns to handle module loading and Hot Module Replacement (HMR). If a Service Worker attempts to intercept and validate these requests, it can break the development experience.
|
|
8
|
+
|
|
9
|
+
The `ViteFileDetectorPlugin` solves this by listening to all fetch events and telling the engine to "bypass" any URL that matches Vite's internal patterns.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 🛠 Configuration
|
|
14
|
+
|
|
15
|
+
When you install the plugin, you can pass an optional configuration object. If no options are provided, it uses the `DEFAULT_OPTIONS`.
|
|
16
|
+
|
|
17
|
+
### `ViteFileDetectorOptions`
|
|
18
|
+
|
|
19
|
+
| Property | Type | Description | Default Value |
|
|
20
|
+
| :--- | :--- | :--- | :--- |
|
|
21
|
+
| `paths` | `(string \| RegExp)[]` | An array of strings or Regular Expressions. Any URL matching these patterns will be bypassed. | `['/@vite', '/@react', '/node_modules']` |
|
|
22
|
+
| `srcPath` | `string` | The base path for your source directory. | `'/src'` |
|
|
23
|
+
| `manifestPath` | `string` | The path to your application's manifest file. | `'/manifest.json'` |
|
|
24
|
+
| `maxCachedUrls` | `number` | Maximum amount of detected URLs kept in the persistent cache. When the limit is reached, the oldest entries are evicted before the new one is written. Use `Infinity` to keep every URL forever. | `1000` |
|
|
25
|
+
|
|
26
|
+
> **Note:** `srcPath` and `manifestPath` are appended to `paths` internally. The final matching list is always `[...paths, srcPath, manifestPath]`.
|
|
27
|
+
|
|
28
|
+
### Validation
|
|
29
|
+
|
|
30
|
+
The configuration is validated while the plugin is installed. Invalid values throw immediately instead of failing silently during a fetch event.
|
|
31
|
+
|
|
32
|
+
| Thrown Error | Condition |
|
|
33
|
+
| :--- | :--- |
|
|
34
|
+
| `TypeError` | The plugin was installed without a valid `TinyServiceWorkerEngine` instance. |
|
|
35
|
+
| `TypeError` | `paths` is not an array. |
|
|
36
|
+
| `TypeError` | An item inside `paths` (or `srcPath` / `manifestPath`) is neither a `string` nor a `RegExp`. |
|
|
37
|
+
| `TypeError` | `maxCachedUrls` is not a number. |
|
|
38
|
+
| `RangeError` | `maxCachedUrls` is not a positive integer and is not `Infinity`. |
|
|
39
|
+
|
|
40
|
+
### 🗃️ Persistent Cache
|
|
41
|
+
|
|
42
|
+
Every detected URL is stored in a `TinySetMapDatabase` set named `logged-urls`. This keeps the "File detected" log at one entry per URL, even after the Service Worker restarts.
|
|
43
|
+
|
|
44
|
+
* **Deduplication:** a URL that is already cached is skipped and produces no new log.
|
|
45
|
+
* **Eviction:** before a new URL is written, the oldest entries are removed until the cache has room for it, so the cache never holds more than `maxCachedUrls` entries.
|
|
46
|
+
* **Serialized writes:** all cache mutations run through an internal promise queue. This prevents two detections that resolve in the same tick from reading the same `size` and pushing the cache above `maxCachedUrls`.
|
|
47
|
+
* **Isolation:** the whole detector, including the cache, only runs in development mode (`import.meta.env.DEV`).
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 🚀 Daily Usage
|
|
52
|
+
|
|
53
|
+
### 1. Installation
|
|
54
|
+
|
|
55
|
+
To use the plugin, you must have an active instance of `TinyServiceWorkerEngine`. You install the plugin using the engine's installation method.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
import TinyServiceWorkerEngine from 'tiny-essentials/libs/sw/service/TinyServiceWorkerEngine';
|
|
59
|
+
import ViteFileDetectorPlugin from 'tiny-essentials/libs/sw/service/plugins/ViteFileDetectorPlugin';
|
|
60
|
+
|
|
61
|
+
// 1. Initialize your engine
|
|
62
|
+
const engine = new TinyServiceWorkerEngine();
|
|
63
|
+
|
|
64
|
+
// 2. Install the Vite Detector Plugin
|
|
65
|
+
// You can pass custom paths if your project structure is non-standard
|
|
66
|
+
engine.installPlugin(ViteFileDetectorPlugin, {
|
|
67
|
+
paths: ['/@vite', '/@my-custom-tool'],
|
|
68
|
+
srcPath: '/app/src',
|
|
69
|
+
manifestPath: '/public/manifest.json',
|
|
70
|
+
maxCachedUrls: 500
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 2. Typical Workflow
|
|
75
|
+
|
|
76
|
+
1. **Development Mode:** The plugin only activates if `import.meta.env.DEV` is true. This means it will **not** add overhead to your production build.
|
|
77
|
+
2. **Request Interception:** When the browser requests a file (e.g., `/@vite/client`), the plugin checks the URL against your `paths`.
|
|
78
|
+
3. **Bypass Execution:** If a match is found, the plugin instructs the engine to:
|
|
79
|
+
* Stop further checks (`continueCheck = false`).
|
|
80
|
+
* Skip validation (`needValidation = false`).
|
|
81
|
+
* Return a successful status (`code = 200`).
|
|
82
|
+
4. **Cache Lookup:** The URL is compared against the persistent cache. If it was already detected before, the workflow stops here.
|
|
83
|
+
5. **Cache Write:** The oldest entries are evicted when the limit is reached, the URL is stored, and the message `File detected: <url>` is logged with the `warn` level. Failures inside this step are logged with the `error` level and never break the response.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## ⚠️ Important Notes
|
|
88
|
+
|
|
89
|
+
* **Environment Specific:** This plugin is strictly for **Development environments**. It uses `import.meta.env.DEV` to ensure production performance is not affected.
|
|
90
|
+
* **Path Matching:** It is recommended to use specific paths to avoid accidentally bypassing important application files.
|
|
91
|
+
* **Cache Size:** `maxCachedUrls` only controls how many URLs are remembered for logging. A low value means the same URL can be logged again after it is evicted. Use `Infinity` if the log must never repeat.
|
|
92
|
+
* **Log Levels:** Successful detections use the `warn` level, while cache failures use the `error` level. Filter by these levels if the console becomes noisy.
|