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,168 @@
|
|
|
1
|
+
export type TinyPushEndpoints = {
|
|
2
|
+
/**
|
|
3
|
+
* - `POST` route that persists a subscription.
|
|
4
|
+
*/
|
|
5
|
+
subscribe?: string;
|
|
6
|
+
/**
|
|
7
|
+
* - `DELETE` route that removes a subscription.
|
|
8
|
+
*/
|
|
9
|
+
unsubscribe?: string;
|
|
10
|
+
};
|
|
11
|
+
export type TinyPushManagerOptions = {
|
|
12
|
+
/**
|
|
13
|
+
* - The active registration.
|
|
14
|
+
*/
|
|
15
|
+
registration: ServiceWorkerRegistration;
|
|
16
|
+
/**
|
|
17
|
+
* - Base64 URL-safe VAPID public key.
|
|
18
|
+
*/
|
|
19
|
+
vapidPublicKey: string;
|
|
20
|
+
/**
|
|
21
|
+
* - Backend routes.
|
|
22
|
+
*/
|
|
23
|
+
endpoints?: TinyPushEndpoints;
|
|
24
|
+
/**
|
|
25
|
+
* - Fetch implementation, injectable for tests.
|
|
26
|
+
*/
|
|
27
|
+
fetch?: typeof fetch;
|
|
28
|
+
/**
|
|
29
|
+
* - State observer.
|
|
30
|
+
*/
|
|
31
|
+
onChange?: (state: TinyPushState) => void;
|
|
32
|
+
};
|
|
33
|
+
export type TinyPushState = {
|
|
34
|
+
/**
|
|
35
|
+
* - Current status.
|
|
36
|
+
*/
|
|
37
|
+
status: 'unsupported' | 'unsubscribed' | 'subscribed' | 'denied' | 'pending';
|
|
38
|
+
/**
|
|
39
|
+
* - The active subscription, when any.
|
|
40
|
+
*/
|
|
41
|
+
subscription: PushSubscription | null;
|
|
42
|
+
/**
|
|
43
|
+
* - The last error message, when any.
|
|
44
|
+
*/
|
|
45
|
+
error: string | null;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* @file Owns the lifecycle of a `PushSubscription` in the page context.
|
|
49
|
+
*
|
|
50
|
+
* The manager never talks to the push service directly: it delegates to
|
|
51
|
+
* `PushManager` and to two HTTP endpoints that your backend exposes.
|
|
52
|
+
*/
|
|
53
|
+
/**
|
|
54
|
+
* Describes the optional backend routes used to persist or remove a
|
|
55
|
+
* `PushSubscription`.
|
|
56
|
+
*
|
|
57
|
+
* @typedef {Object} TinyPushEndpoints
|
|
58
|
+
* @property {string} [subscribe] - `POST` route that persists a subscription.
|
|
59
|
+
* @property {string} [unsubscribe] - `DELETE` route that removes a subscription.
|
|
60
|
+
*/
|
|
61
|
+
/**
|
|
62
|
+
* Describes every option accepted by the `TinyPushManager` constructor.
|
|
63
|
+
*
|
|
64
|
+
* @typedef {Object} TinyPushManagerOptions
|
|
65
|
+
* @property {ServiceWorkerRegistration} registration - The active registration.
|
|
66
|
+
* @property {string} vapidPublicKey - Base64 URL-safe VAPID public key.
|
|
67
|
+
* @property {TinyPushEndpoints} [endpoints] - Backend routes.
|
|
68
|
+
* @property {typeof fetch} [fetch] - Fetch implementation, injectable for tests.
|
|
69
|
+
* @property {(state: TinyPushState) => void} [onChange] - State observer.
|
|
70
|
+
*/
|
|
71
|
+
/**
|
|
72
|
+
* Represents an immutable snapshot of the manager state exposed to observers.
|
|
73
|
+
*
|
|
74
|
+
* @typedef {Object} TinyPushState
|
|
75
|
+
* @property {'unsupported'|'unsubscribed'|'subscribed'|'denied'|'pending'} status - Current status.
|
|
76
|
+
* @property {PushSubscription|null} subscription - The active subscription, when any.
|
|
77
|
+
* @property {string|null} error - The last error message, when any.
|
|
78
|
+
*/
|
|
79
|
+
/**
|
|
80
|
+
* Manages the full lifecycle of a browser `PushSubscription` in the page context.
|
|
81
|
+
*
|
|
82
|
+
* The manager is a thin, framework-agnostic wrapper around `PushManager`. It never
|
|
83
|
+
* talks to a push service directly: it delegates subscription creation to the
|
|
84
|
+
* `PushManager` API and persistence to two optional backend routes (`subscribe`
|
|
85
|
+
* and `unsubscribe`). Every state transition is broadcast to the optional
|
|
86
|
+
* `onChange` observer, which makes it easy to bind the manager to any UI layer.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* const manager = new TinyPushManager({
|
|
90
|
+
* registration: await navigator.serviceWorker.ready,
|
|
91
|
+
* vapidPublicKey: 'YOUR_PUBLIC_KEY',
|
|
92
|
+
* endpoints: { subscribe: '/api/push', unsubscribe: '/api/push' },
|
|
93
|
+
* onChange: (state) => console.log(state.status),
|
|
94
|
+
* });
|
|
95
|
+
*
|
|
96
|
+
* await manager.subscribe();
|
|
97
|
+
*
|
|
98
|
+
* @beta
|
|
99
|
+
*/
|
|
100
|
+
declare class TinyPushManager {
|
|
101
|
+
#private;
|
|
102
|
+
static get PUSH_TYPE(): Readonly<{
|
|
103
|
+
NOTIFICATION: "notification";
|
|
104
|
+
DATA: "data";
|
|
105
|
+
SYNC: "sync";
|
|
106
|
+
COMMAND: "command";
|
|
107
|
+
UNKNOWN: "unknown";
|
|
108
|
+
}>;
|
|
109
|
+
/**
|
|
110
|
+
* Reports whether the browser exposes the Push API.
|
|
111
|
+
* @returns {boolean} `true` when the Push API is available.
|
|
112
|
+
*/
|
|
113
|
+
static isSupported(): boolean;
|
|
114
|
+
/** @returns {NotificationPermission} The current permission. */
|
|
115
|
+
static get permission(): NotificationPermission;
|
|
116
|
+
/**
|
|
117
|
+
* Asks the user for the notification permission.
|
|
118
|
+
*
|
|
119
|
+
* @returns {Promise<NotificationPermission>} The resulting permission.
|
|
120
|
+
* @throws {Error} If the Push API is not supported.
|
|
121
|
+
*/
|
|
122
|
+
static requestPermission(): Promise<NotificationPermission>;
|
|
123
|
+
/**
|
|
124
|
+
* Decodes a base64 URL-safe VAPID key. The result is memoized per key.
|
|
125
|
+
*
|
|
126
|
+
* @param {string} base64 - The VAPID public key.
|
|
127
|
+
* @returns {BufferSource} The decoded key.
|
|
128
|
+
* @throws {TypeError} If `base64` is not a non-empty string.
|
|
129
|
+
*/
|
|
130
|
+
static decodeVapidKey(base64: string): BufferSource;
|
|
131
|
+
/**
|
|
132
|
+
* Creates a manager bound to a service worker registration.
|
|
133
|
+
*
|
|
134
|
+
* @param {TinyPushManagerOptions} options - The manager options.
|
|
135
|
+
* @throws {TypeError} If `options` is invalid.
|
|
136
|
+
*/
|
|
137
|
+
constructor(options: TinyPushManagerOptions);
|
|
138
|
+
/** @returns {TinyPushState} A frozen snapshot of the current state. */
|
|
139
|
+
get state(): TinyPushState;
|
|
140
|
+
/**
|
|
141
|
+
* Returns the current subscription, if any.
|
|
142
|
+
*
|
|
143
|
+
* @returns {Promise<PushSubscription|null>} The subscription or `null`.
|
|
144
|
+
*/
|
|
145
|
+
getSubscription(): Promise<PushSubscription | null>;
|
|
146
|
+
/**
|
|
147
|
+
* Subscribes the user and uploads the subscription to the backend.
|
|
148
|
+
*
|
|
149
|
+
* @param {PushSubscriptionOptionsInit} [options] - Extra options merged into `subscribe`.
|
|
150
|
+
* @returns {Promise<PushSubscription>} The active subscription.
|
|
151
|
+
* @throws {Error} If the permission is denied or the browser rejects the subscription.
|
|
152
|
+
*/
|
|
153
|
+
subscribe(options?: PushSubscriptionOptionsInit): Promise<PushSubscription>;
|
|
154
|
+
/**
|
|
155
|
+
* Removes the subscription locally and on the backend.
|
|
156
|
+
*
|
|
157
|
+
* @returns {Promise<boolean>} `true` when a subscription was removed.
|
|
158
|
+
*/
|
|
159
|
+
unsubscribe(): Promise<boolean>;
|
|
160
|
+
/**
|
|
161
|
+
* Re-uploads the current subscription. Call it after a `pushsubscriptionchange`.
|
|
162
|
+
*
|
|
163
|
+
* @returns {Promise<PushSubscription|null>} The refreshed subscription.
|
|
164
|
+
*/
|
|
165
|
+
syncWithServer(): Promise<PushSubscription | null>;
|
|
166
|
+
}
|
|
167
|
+
export default TinyPushManager;
|
|
168
|
+
//# sourceMappingURL=TinyPushManager.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TinyPushManager.d.mts","sourceRoot":"","sources":["../../../../../src/v1/libs/sw/browser/TinyPushManager.mjs"],"names":[],"mappings":"AAcG,YAAkB,iBAAiB,GACnC;;;;IAAoB,SAAS,AAA7B,CACA,EADW,MAAM,CACjB;;;;IAAoB,WAAW,AAA/B,CACF,EADa,MAAM,CACnB;CAAA,CAAA;AAKE,YAAkB,sBAAsB,GACxC;;;;IAAsC,YAAY,EAAvC,yBAAyB,CACpC;;;;IAAmB,cAAc,EAAtB,MAAM,CACjB;;;;IAA+B,SAAS,AAAxC,CACA,EADW,iBAAiB,CAC5B;;;;IAA0B,KAAK,AAA/B,CACA,EADW,OAAO,KAAK,CACvB;;;;IAA4C,QAAQ,AAApD,CACF,EADa,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAC3C;CAAA,CAAA;AAKE,YAAkB,aAAa,GAC/B;;;;IAAyE,MAAM,EAApE,aAAa,GAAC,cAAc,GAAC,YAAY,GAAC,QAAQ,GAAC,SAAS,CACvE;;;;IAAkC,YAAY,EAAnC,gBAAgB,GAAC,IAAI,CAChC;;;;IAAwB,KAAK,EAAlB,MAAM,GAAC,IAAI,CACxB;CAAA,CAAA;AAlCD;;;;;GAKG;AAEH;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AAEH;;;;;;;GAOG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,cAAM,eAAe;;IAEnB,MAAM,KAAK,SAAS;;;;;;OAEnB;IAQD;;;OAGG;IACH,MAAM,CAAC,WAAW,IAFL,OAAO,CASnB;IAED,gEAAgE;IAChE,MAAM,KAAK,UAAU,IADP,sBAAsB,CAGnC;IAED;;;;;OAKG;IACH,OAAa,iBAAiB,IAHjB,OAAO,CAAC,sBAAsB,CAAC,CAQ3C;IAED;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAJjB,MAIiB,GAHf,YAAY,CAoBxB;IAoBD;;;;;OAKG;IACH,YAAY,OAAO,EAHR,sBAGQ,EA4BlB;IAED,uEAAuE;IACvE,IAAI,KAAK,IADK,aAAa,CAG1B;IAED;;;;OAIG;IACG,eAAe,IAFR,OAAO,CAAC,gBAAgB,GAAC,IAAI,CAAC,CAK1C;IAED;;;;;;OAMG;IACG,SAAS,CAAC,OAAO,AAJpB,CACA,EADQ,2BAIiB,GAHf,OAAO,CAAC,gBAAgB,CAAC,CA8BrC;IAED;;;;OAIG;IACG,WAAW,IAFJ,OAAO,CAAC,OAAO,CAAC,CAsB5B;IAED;;;;OAIG;IACG,cAAc,IAFP,OAAO,CAAC,gBAAgB,GAAC,IAAI,CAAC,CAQ1C;CAiCF;eAEc,eAAe"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { PUSH_TYPE } from '../utils.mjs';
|
|
2
|
+
import { requestNotificationPermission } from './utils.mjs';
|
|
3
|
+
/**
|
|
4
|
+
* @file Owns the lifecycle of a `PushSubscription` in the page context.
|
|
5
|
+
*
|
|
6
|
+
* The manager never talks to the push service directly: it delegates to
|
|
7
|
+
* `PushManager` and to two HTTP endpoints that your backend exposes.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Describes the optional backend routes used to persist or remove a
|
|
11
|
+
* `PushSubscription`.
|
|
12
|
+
*
|
|
13
|
+
* @typedef {Object} TinyPushEndpoints
|
|
14
|
+
* @property {string} [subscribe] - `POST` route that persists a subscription.
|
|
15
|
+
* @property {string} [unsubscribe] - `DELETE` route that removes a subscription.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Describes every option accepted by the `TinyPushManager` constructor.
|
|
19
|
+
*
|
|
20
|
+
* @typedef {Object} TinyPushManagerOptions
|
|
21
|
+
* @property {ServiceWorkerRegistration} registration - The active registration.
|
|
22
|
+
* @property {string} vapidPublicKey - Base64 URL-safe VAPID public key.
|
|
23
|
+
* @property {TinyPushEndpoints} [endpoints] - Backend routes.
|
|
24
|
+
* @property {typeof fetch} [fetch] - Fetch implementation, injectable for tests.
|
|
25
|
+
* @property {(state: TinyPushState) => void} [onChange] - State observer.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Represents an immutable snapshot of the manager state exposed to observers.
|
|
29
|
+
*
|
|
30
|
+
* @typedef {Object} TinyPushState
|
|
31
|
+
* @property {'unsupported'|'unsubscribed'|'subscribed'|'denied'|'pending'} status - Current status.
|
|
32
|
+
* @property {PushSubscription|null} subscription - The active subscription, when any.
|
|
33
|
+
* @property {string|null} error - The last error message, when any.
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Manages the full lifecycle of a browser `PushSubscription` in the page context.
|
|
37
|
+
*
|
|
38
|
+
* The manager is a thin, framework-agnostic wrapper around `PushManager`. It never
|
|
39
|
+
* talks to a push service directly: it delegates subscription creation to the
|
|
40
|
+
* `PushManager` API and persistence to two optional backend routes (`subscribe`
|
|
41
|
+
* and `unsubscribe`). Every state transition is broadcast to the optional
|
|
42
|
+
* `onChange` observer, which makes it easy to bind the manager to any UI layer.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* const manager = new TinyPushManager({
|
|
46
|
+
* registration: await navigator.serviceWorker.ready,
|
|
47
|
+
* vapidPublicKey: 'YOUR_PUBLIC_KEY',
|
|
48
|
+
* endpoints: { subscribe: '/api/push', unsubscribe: '/api/push' },
|
|
49
|
+
* onChange: (state) => console.log(state.status),
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* await manager.subscribe();
|
|
53
|
+
*
|
|
54
|
+
* @beta
|
|
55
|
+
*/
|
|
56
|
+
class TinyPushManager {
|
|
57
|
+
static #PUSH_TYPE = PUSH_TYPE;
|
|
58
|
+
static get PUSH_TYPE() {
|
|
59
|
+
return TinyPushManager.#PUSH_TYPE;
|
|
60
|
+
}
|
|
61
|
+
/** @type {BufferSource|null} */
|
|
62
|
+
static #cachedKey = null;
|
|
63
|
+
/** @type {string|null} */
|
|
64
|
+
static #cachedKeySource = null;
|
|
65
|
+
/**
|
|
66
|
+
* Reports whether the browser exposes the Push API.
|
|
67
|
+
* @returns {boolean} `true` when the Push API is available.
|
|
68
|
+
*/
|
|
69
|
+
static isSupported() {
|
|
70
|
+
return (typeof globalThis !== 'undefined' &&
|
|
71
|
+
'serviceWorker' in navigator &&
|
|
72
|
+
'PushManager' in globalThis &&
|
|
73
|
+
'Notification' in globalThis);
|
|
74
|
+
}
|
|
75
|
+
/** @returns {NotificationPermission} The current permission. */
|
|
76
|
+
static get permission() {
|
|
77
|
+
return TinyPushManager.isSupported() ? Notification.permission : 'denied';
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Asks the user for the notification permission.
|
|
81
|
+
*
|
|
82
|
+
* @returns {Promise<NotificationPermission>} The resulting permission.
|
|
83
|
+
* @throws {Error} If the Push API is not supported.
|
|
84
|
+
*/
|
|
85
|
+
static async requestPermission() {
|
|
86
|
+
if (!TinyPushManager.isSupported()) {
|
|
87
|
+
throw new Error('[TinyPushManager] Push API is not supported in this browser.');
|
|
88
|
+
}
|
|
89
|
+
return await requestNotificationPermission();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Decodes a base64 URL-safe VAPID key. The result is memoized per key.
|
|
93
|
+
*
|
|
94
|
+
* @param {string} base64 - The VAPID public key.
|
|
95
|
+
* @returns {BufferSource} The decoded key.
|
|
96
|
+
* @throws {TypeError} If `base64` is not a non-empty string.
|
|
97
|
+
*/
|
|
98
|
+
static decodeVapidKey(base64) {
|
|
99
|
+
if (typeof base64 !== 'string' || base64 === '') {
|
|
100
|
+
throw new TypeError('[TinyPushManager] decodeVapidKey: base64 must be a non-empty string.');
|
|
101
|
+
}
|
|
102
|
+
if (TinyPushManager.#cachedKeySource === base64 && TinyPushManager.#cachedKey) {
|
|
103
|
+
return TinyPushManager.#cachedKey;
|
|
104
|
+
}
|
|
105
|
+
const padding = '='.repeat((4 - (base64.length % 4)) % 4);
|
|
106
|
+
const normalized = (base64 + padding).replace(/-/g, '+').replace(/_/g, '/');
|
|
107
|
+
const raw = atob(normalized);
|
|
108
|
+
const bytes = Uint8Array.from(raw, (char) => char.charCodeAt(0));
|
|
109
|
+
TinyPushManager.#cachedKey = bytes;
|
|
110
|
+
TinyPushManager.#cachedKeySource = base64;
|
|
111
|
+
return bytes;
|
|
112
|
+
}
|
|
113
|
+
/** @type {ServiceWorkerRegistration} The service worker registration that owns the push subscription. */
|
|
114
|
+
#registration;
|
|
115
|
+
/** @type {string} The Base64 URL-safe VAPID public key used to create subscriptions. */
|
|
116
|
+
#vapidPublicKey;
|
|
117
|
+
/** @type {TinyPushEndpoints} The backend routes used to persist and remove subscriptions. */
|
|
118
|
+
#endpoints;
|
|
119
|
+
/** @type {typeof fetch} The fetch implementation used for backend calls. */
|
|
120
|
+
#fetch;
|
|
121
|
+
/** @type {((state: TinyPushState) => void)|null} The observer notified whenever the state changes. */
|
|
122
|
+
#onChange;
|
|
123
|
+
/** @type {TinyPushState} The current internal state of the manager. */
|
|
124
|
+
#state = { status: 'unsubscribed', subscription: null, error: null };
|
|
125
|
+
/**
|
|
126
|
+
* Creates a manager bound to a service worker registration.
|
|
127
|
+
*
|
|
128
|
+
* @param {TinyPushManagerOptions} options - The manager options.
|
|
129
|
+
* @throws {TypeError} If `options` is invalid.
|
|
130
|
+
*/
|
|
131
|
+
constructor(options) {
|
|
132
|
+
if (typeof options !== 'object' || options === null || Array.isArray(options)) {
|
|
133
|
+
throw new TypeError('[TinyPushManager] constructor: options must be a non-null object.');
|
|
134
|
+
}
|
|
135
|
+
const { registration, vapidPublicKey, endpoints = {}, fetch: fetchImpl, onChange } = options;
|
|
136
|
+
if (typeof registration !== 'object' || registration === null) {
|
|
137
|
+
throw new TypeError('[TinyPushManager] constructor: options.registration is required.');
|
|
138
|
+
}
|
|
139
|
+
if (typeof vapidPublicKey !== 'string' || vapidPublicKey === '') {
|
|
140
|
+
throw new TypeError('[TinyPushManager] constructor: options.vapidPublicKey is required.');
|
|
141
|
+
}
|
|
142
|
+
if (endpoints.subscribe !== undefined && typeof endpoints.subscribe !== 'string') {
|
|
143
|
+
throw new TypeError('[TinyPushManager] constructor: endpoints.subscribe must be a string.');
|
|
144
|
+
}
|
|
145
|
+
if (endpoints.unsubscribe !== undefined && typeof endpoints.unsubscribe !== 'string') {
|
|
146
|
+
throw new TypeError('[TinyPushManager] constructor: endpoints.unsubscribe must be a string.');
|
|
147
|
+
}
|
|
148
|
+
if (onChange !== undefined && typeof onChange !== 'function') {
|
|
149
|
+
throw new TypeError('[TinyPushManager] constructor: onChange must be a function.');
|
|
150
|
+
}
|
|
151
|
+
this.#registration = registration;
|
|
152
|
+
this.#vapidPublicKey = vapidPublicKey;
|
|
153
|
+
this.#endpoints = endpoints;
|
|
154
|
+
this.#fetch = fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
155
|
+
this.#onChange = onChange ?? null;
|
|
156
|
+
}
|
|
157
|
+
/** @returns {TinyPushState} A frozen snapshot of the current state. */
|
|
158
|
+
get state() {
|
|
159
|
+
return Object.freeze({ ...this.#state });
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Returns the current subscription, if any.
|
|
163
|
+
*
|
|
164
|
+
* @returns {Promise<PushSubscription|null>} The subscription or `null`.
|
|
165
|
+
*/
|
|
166
|
+
async getSubscription() {
|
|
167
|
+
if (!TinyPushManager.isSupported())
|
|
168
|
+
return null;
|
|
169
|
+
return this.#registration.pushManager.getSubscription();
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Subscribes the user and uploads the subscription to the backend.
|
|
173
|
+
*
|
|
174
|
+
* @param {PushSubscriptionOptionsInit} [options] - Extra options merged into `subscribe`.
|
|
175
|
+
* @returns {Promise<PushSubscription>} The active subscription.
|
|
176
|
+
* @throws {Error} If the permission is denied or the browser rejects the subscription.
|
|
177
|
+
*/
|
|
178
|
+
async subscribe(options = {}) {
|
|
179
|
+
if (!TinyPushManager.isSupported()) {
|
|
180
|
+
throw new Error('[TinyPushManager] Push API is not supported in this browser.');
|
|
181
|
+
}
|
|
182
|
+
this.#setState({ status: 'pending', error: null });
|
|
183
|
+
const permission = await TinyPushManager.requestPermission();
|
|
184
|
+
if (permission !== 'granted') {
|
|
185
|
+
this.#setState({ status: 'denied', subscription: null });
|
|
186
|
+
throw new Error(`[TinyPushManager] Notification permission was not granted: ${permission}.`);
|
|
187
|
+
}
|
|
188
|
+
const existing = await this.getSubscription();
|
|
189
|
+
const subscription = existing ??
|
|
190
|
+
(await this.#registration.pushManager.subscribe({
|
|
191
|
+
...options,
|
|
192
|
+
userVisibleOnly: true,
|
|
193
|
+
applicationServerKey: TinyPushManager.decodeVapidKey(this.#vapidPublicKey),
|
|
194
|
+
}));
|
|
195
|
+
await this.#upload(subscription);
|
|
196
|
+
this.#setState({ status: 'subscribed', subscription, error: null });
|
|
197
|
+
return subscription;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Removes the subscription locally and on the backend.
|
|
201
|
+
*
|
|
202
|
+
* @returns {Promise<boolean>} `true` when a subscription was removed.
|
|
203
|
+
*/
|
|
204
|
+
async unsubscribe() {
|
|
205
|
+
const subscription = await this.getSubscription();
|
|
206
|
+
if (!subscription) {
|
|
207
|
+
this.#setState({ status: 'unsubscribed', subscription: null });
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
if (this.#endpoints.unsubscribe) {
|
|
211
|
+
await this.#fetch(this.#endpoints.unsubscribe, {
|
|
212
|
+
method: 'DELETE',
|
|
213
|
+
headers: { 'Content-Type': 'application/json' },
|
|
214
|
+
body: JSON.stringify({ endpoint: subscription.endpoint }),
|
|
215
|
+
}).catch(() => undefined);
|
|
216
|
+
}
|
|
217
|
+
await subscription.unsubscribe();
|
|
218
|
+
this.#setState({ status: 'unsubscribed', subscription: null, error: null });
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Re-uploads the current subscription. Call it after a `pushsubscriptionchange`.
|
|
223
|
+
*
|
|
224
|
+
* @returns {Promise<PushSubscription|null>} The refreshed subscription.
|
|
225
|
+
*/
|
|
226
|
+
async syncWithServer() {
|
|
227
|
+
const subscription = await this.getSubscription();
|
|
228
|
+
if (!subscription)
|
|
229
|
+
return null;
|
|
230
|
+
await this.#upload(subscription);
|
|
231
|
+
this.#setState({ status: 'subscribed', subscription, error: null });
|
|
232
|
+
return subscription;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Pushes the subscription to the backend.
|
|
236
|
+
*
|
|
237
|
+
* @param {PushSubscription} subscription - The subscription to upload.
|
|
238
|
+
* @returns {Promise<void>} A promise that resolves once the upload finishes.
|
|
239
|
+
* @throws {Error} If the backend responds with a non-2xx status.
|
|
240
|
+
*/
|
|
241
|
+
async #upload(subscription) {
|
|
242
|
+
if (!this.#endpoints.subscribe)
|
|
243
|
+
return;
|
|
244
|
+
const response = await this.#fetch(this.#endpoints.subscribe, {
|
|
245
|
+
method: 'POST',
|
|
246
|
+
headers: { 'Content-Type': 'application/json' },
|
|
247
|
+
body: JSON.stringify(subscription.toJSON()),
|
|
248
|
+
});
|
|
249
|
+
if (!response.ok) {
|
|
250
|
+
throw new Error(`[TinyPushManager] Failed to upload subscription: ${response.status}.`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Updates the internal state and notifies the observer.
|
|
255
|
+
*
|
|
256
|
+
* @param {Partial<TinyPushState>} patch - The fields to merge.
|
|
257
|
+
* @returns {void} Nothing is returned; the state is updated in place.
|
|
258
|
+
*/
|
|
259
|
+
#setState(patch) {
|
|
260
|
+
this.#state = { ...this.#state, ...patch };
|
|
261
|
+
this.#onChange?.(this.state);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
export default TinyPushManager;
|