tiny-essentials 1.28.18 → 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/css/TinyCookieConsent.min.css +1 -0
- package/dist/v1/css/TinyCookieConsent.min.css.map +1 -0
- package/dist/v1/css/TinyDraggerExample.min.css +1 -0
- package/dist/v1/css/TinyDraggerExample.min.css.map +1 -0
- package/dist/v1/css/TinyLoadingScreen.min.css +1 -0
- package/dist/v1/css/TinyLoadingScreen.min.css.map +1 -0
- package/dist/v1/css/TinyNotify.min.css +1 -0
- package/dist/v1/css/TinyNotify.min.css.map +1 -0
- package/dist/v1/css/aiMarker.min.css +1 -0
- package/dist/v1/css/aiMarker.min.css.map +1 -0
- 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 +725 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +293 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +614 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/input/Placeholder-Colors-Fix.scss +64 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/spacing/Spacing-Plus.scss +31 -0
- 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 +111 -0
- package/docs/v1/README.md +117 -13
- 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 +174 -0
- 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 +313 -18
- package/types/EventEmitter.d.ts +48 -0
- package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import { isJsonObject } from './objChecker.mjs';
|
|
3
|
+
/**
|
|
4
|
+
* A flag indicating if the current environment is a web browser.
|
|
5
|
+
* @type {boolean}
|
|
6
|
+
*/
|
|
3
7
|
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
4
8
|
/**
|
|
5
9
|
* An object containing type validation functions and their evaluation order.
|
|
@@ -9,32 +13,76 @@ const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'u
|
|
|
9
13
|
*
|
|
10
14
|
* The `order` array defines the priority in which types should be checked,
|
|
11
15
|
* which can be useful for functions that infer types in a consistent manner.
|
|
12
|
-
*
|
|
13
16
|
*/
|
|
14
17
|
const typeValidator = {
|
|
18
|
+
/**
|
|
19
|
+
* A registry where keys are type names and values are their validation and cloning logic.
|
|
20
|
+
* @type {Record<string, ObjTypeRegistry<any, any>>}
|
|
21
|
+
*/
|
|
15
22
|
items: {},
|
|
16
23
|
/**
|
|
17
|
-
*
|
|
24
|
+
* The sequence in which type validators are checked.
|
|
25
|
+
* The first validator to return true for a value determines the type name.
|
|
18
26
|
* @type {string[]}
|
|
19
|
-
|
|
27
|
+
*/
|
|
20
28
|
order: [],
|
|
21
29
|
};
|
|
22
|
-
/** @typedef {Object.<string, (val: any) => *>} ExtendObjType */
|
|
23
|
-
/** @typedef {Array<[string, (val: any) => *]>} ExtendObjTypeArray */
|
|
24
30
|
/**
|
|
25
|
-
*
|
|
31
|
+
* @typedef {import('../libs/utils/TinyCloner.mjs').default} TinyCloner
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* A function type used to validate a value and return a specific result.
|
|
26
35
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
36
|
+
* @template {any} Value - The type of the value being validated.
|
|
37
|
+
* @template {any} Result - The type of the result returned by the function.
|
|
38
|
+
* @typedef {(val: Value) => Result} ExtendObjTypeFunc
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* A function type used to clone a value, supporting deep cloning operations.
|
|
29
42
|
*
|
|
30
|
-
* @
|
|
43
|
+
* @template {any} Value - The type of the value to be cloned.
|
|
44
|
+
* @typedef {(val: Value, isDeep: boolean, cloner: TinyCloner) => Value} ExtendObjTypeCloner
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* A mapping of type names to their corresponding validation functions.
|
|
48
|
+
*
|
|
49
|
+
* @template {any} Value - The type of the value being mapped.
|
|
50
|
+
* @typedef {Object.<string, ExtendObjTypeFunc<Value, any>>} ExtendObjType
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* A tuple representing a type definition, containing a key, a validator, and an optional cloner.
|
|
54
|
+
*
|
|
55
|
+
* @template {any} Value - The type of the value.
|
|
56
|
+
* @template {any} Result - The type of the result returned by the validator.
|
|
57
|
+
* @typedef {[string, ExtendObjTypeFunc<Value, Result>, ExtendObjTypeCloner<Value>]|[string, ExtendObjTypeFunc<Value, Result>]} ExtendObjTypeValue
|
|
58
|
+
*/
|
|
59
|
+
/**
|
|
60
|
+
* A registry object containing the validator and cloner for a specific type.
|
|
61
|
+
*
|
|
62
|
+
* @template {any} Value - The type of the value being registered.
|
|
63
|
+
* @template {any} Result - The type of the result returned by the validator.
|
|
64
|
+
* @typedef {Object} ObjTypeRegistry
|
|
65
|
+
* @property {ExtendObjTypeFunc<Value, Result>} validator - The function used to validate the type.
|
|
66
|
+
* @property {ExtendObjTypeCloner<Value>} cloner - The function used to create a clone of the value.
|
|
67
|
+
*/
|
|
68
|
+
/**
|
|
69
|
+
* Adds new type checkers to the `typeValidator` registry.
|
|
70
|
+
*
|
|
71
|
+
* Accepts an object of functions, an array of [key, validator] tuples, or an array of [key, validator, cloner] tuples.
|
|
72
|
+
* If an `index` is provided, the new type is inserted at that position.
|
|
73
|
+
* If no index is provided, it is inserted before the 'object' type or at the end of the registry.
|
|
74
|
+
*
|
|
75
|
+
* @template {any} Value
|
|
76
|
+
* @template {any} Result
|
|
77
|
+
* @param {ExtendObjType<Value> | ExtendObjTypeValue<Value, Result>[] | ExtendObjTypeValue<Value, Result>} ni
|
|
31
78
|
* - New type validators to be added.
|
|
32
79
|
* @param {number} [index] - Optional. Position at which to insert each new type. Ignored if the type already exists.
|
|
33
80
|
* @returns {string[]} - A list of successfully added type names.
|
|
81
|
+
* @throws {TypeError} If `ni` is not an object/array, if `index` is not a number, if a key is not a string, or if a validator is not a function.
|
|
34
82
|
*
|
|
35
83
|
* @example
|
|
36
84
|
* extendObjType({
|
|
37
|
-
*
|
|
85
|
+
* htmlElement2: val => typeof HTMLElement !== 'undefined' && val instanceof HTMLElement
|
|
38
86
|
* });
|
|
39
87
|
*
|
|
40
88
|
* @example
|
|
@@ -42,30 +90,67 @@ const typeValidator = {
|
|
|
42
90
|
* ['alpha', val => typeof val === 'string'],
|
|
43
91
|
* ['beta', val => Array.isArray(val)]
|
|
44
92
|
* ]);
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* extendObjType(['gamma', val => typeof val === 'number']);
|
|
45
96
|
*/
|
|
46
|
-
export function extendObjType(
|
|
47
|
-
if (typeof
|
|
48
|
-
throw new TypeError("Argument '
|
|
97
|
+
export function extendObjType(ni, index) {
|
|
98
|
+
if (typeof ni !== 'object' || ni === null) {
|
|
99
|
+
throw new TypeError("Argument 'ni' must be an object or an array.");
|
|
49
100
|
}
|
|
50
101
|
if (typeof index !== 'undefined' && typeof index !== 'number') {
|
|
51
102
|
throw new TypeError("Argument 'index' must be a number.");
|
|
52
103
|
}
|
|
53
104
|
const added = [];
|
|
54
|
-
|
|
105
|
+
// Normalization logic:
|
|
106
|
+
// 1. If ni is an array:
|
|
107
|
+
// - If the first element is also an array, it is an array of tuples (ExtendObjTypeValue[]).
|
|
108
|
+
// - If the first element is not an array, it is a single tuple (ExtendObjTypeValue).
|
|
109
|
+
// - If the array is empty, we use an empty array.
|
|
110
|
+
// 2. If ni is an object:
|
|
111
|
+
// - We use Object.entries to convert it to an array of [key, value] pairs.
|
|
112
|
+
/**
|
|
113
|
+
* @type {[string, ExtendObjTypeFunc<Value, Result>, ExtendObjTypeCloner<Value> | undefined][]}
|
|
114
|
+
*/
|
|
115
|
+
let entries;
|
|
116
|
+
if (Array.isArray(ni)) {
|
|
117
|
+
if (ni.length > 0 && Array.isArray(ni[0])) {
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
entries = ni;
|
|
120
|
+
}
|
|
121
|
+
else if (ni.length > 0) {
|
|
122
|
+
// @ts-ignore
|
|
123
|
+
entries = [ni];
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
entries = [];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// @ts-ignore
|
|
131
|
+
entries = Object.entries(ni);
|
|
132
|
+
}
|
|
55
133
|
for (const entry of entries) {
|
|
56
134
|
if (!Array.isArray(entry) || entry.length < 2) {
|
|
57
|
-
throw new TypeError(
|
|
135
|
+
throw new TypeError('Each item in the input must be a [key, function] pair.');
|
|
136
|
+
}
|
|
137
|
+
const [key, validator, cloner] = entry;
|
|
138
|
+
if (typeof cloner !== 'undefined' && typeof cloner !== 'function') {
|
|
139
|
+
throw new TypeError(`Cloner for key '${key}' must be a function.`);
|
|
58
140
|
}
|
|
59
|
-
|
|
141
|
+
/** @type {ExtendObjTypeCloner<Value>} */
|
|
142
|
+
const effectiveCloner = typeof cloner === 'function' ? cloner : (val) => val;
|
|
60
143
|
if (typeof key !== 'string') {
|
|
61
144
|
throw new TypeError('Validator key must be a string.');
|
|
62
145
|
}
|
|
63
|
-
if (typeof
|
|
146
|
+
if (typeof validator !== 'function') {
|
|
64
147
|
throw new TypeError(`Validator for key '${key}' must be a function.`);
|
|
65
148
|
}
|
|
66
149
|
if (!typeValidator.items.hasOwnProperty(key)) {
|
|
67
|
-
|
|
68
|
-
|
|
150
|
+
typeValidator.items[key] = {
|
|
151
|
+
validator: validator,
|
|
152
|
+
cloner: effectiveCloner,
|
|
153
|
+
};
|
|
69
154
|
let insertAt = typeof index === 'number' ? index : -1; // Default to -1 if index isn't provided
|
|
70
155
|
// Default to before 'object', or to the end
|
|
71
156
|
if (insertAt === -1) {
|
|
@@ -135,10 +220,9 @@ export function cloneObjTypeOrder() {
|
|
|
135
220
|
export const objTypeName = (val) => {
|
|
136
221
|
if (val === null)
|
|
137
222
|
return 'null';
|
|
138
|
-
// @ts-ignore
|
|
139
223
|
for (const name of typeValidator.order) {
|
|
140
|
-
|
|
141
|
-
|
|
224
|
+
if (typeof typeValidator.items[name].validator !== 'function' ||
|
|
225
|
+
typeValidator.items[name].validator(val))
|
|
142
226
|
return name;
|
|
143
227
|
}
|
|
144
228
|
return 'unknown';
|
|
@@ -149,6 +233,7 @@ export const objTypeName = (val) => {
|
|
|
149
233
|
* @param {*} obj - The object to check.
|
|
150
234
|
* @param {string} [type] - Checks whether the object matches this type (e.g., "object", "array", "string").
|
|
151
235
|
* @returns {boolean} - Returns `true` if the type matches.
|
|
236
|
+
* @throws {TypeError} If `type` is not a string.
|
|
152
237
|
*/
|
|
153
238
|
export function isObjType(obj, type) {
|
|
154
239
|
if (typeof type !== 'string')
|
|
@@ -163,6 +248,7 @@ export function isObjType(obj, type) {
|
|
|
163
248
|
* @param {string} [type] - Optional. If provided, checks whether the object matches this type (e.g., "object", "array", "string").
|
|
164
249
|
* @returns {boolean|string|null} - Returns `true` if the type matches, `false` if not,
|
|
165
250
|
* the type string if no type is provided, or `null` if the object is `undefined`.
|
|
251
|
+
* @throws {TypeError} If `type` is provided but is not a string.
|
|
166
252
|
*
|
|
167
253
|
* @example
|
|
168
254
|
* objType([], 'array'); // true
|
|
@@ -182,19 +268,22 @@ export function objType(obj, type) {
|
|
|
182
268
|
return result;
|
|
183
269
|
}
|
|
184
270
|
/**
|
|
185
|
-
*
|
|
271
|
+
* @typedef {Object} CheckResult
|
|
272
|
+
* @property {*} valid - The result of the validator function (often the value itself if truthy).
|
|
273
|
+
* @property {string | null} type - The name of the detected type.
|
|
274
|
+
*/
|
|
275
|
+
/**
|
|
276
|
+
* Evaluates an object against the registered validators and returns the first match.
|
|
186
277
|
*
|
|
187
|
-
* @param {
|
|
188
|
-
* @returns {
|
|
278
|
+
* @param {unknown} obj - The object to check.
|
|
279
|
+
* @returns {CheckResult} An object containing the validation result and the type name.
|
|
189
280
|
*/
|
|
190
281
|
export function checkObj(obj) {
|
|
191
|
-
/** @type {
|
|
282
|
+
/** @type {CheckResult} */
|
|
192
283
|
const data = { valid: null, type: null };
|
|
193
284
|
for (const name of typeValidator.order) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
// @ts-ignore
|
|
197
|
-
const result = typeValidator.items[name](obj);
|
|
285
|
+
if (typeof typeValidator.items[name].validator === 'function') {
|
|
286
|
+
const result = typeValidator.items[name].validator(obj);
|
|
198
287
|
if (result) {
|
|
199
288
|
data.valid = result;
|
|
200
289
|
data.type = name;
|
|
@@ -205,13 +294,19 @@ export function checkObj(obj) {
|
|
|
205
294
|
return data;
|
|
206
295
|
}
|
|
207
296
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
297
|
+
* Returns a shallow clone of the `typeValidator.items` registry.
|
|
298
|
+
*
|
|
299
|
+
* @returns {Record<string, ObjTypeRegistry<any, any>>} A new object containing the registry data.
|
|
210
300
|
*/
|
|
211
|
-
export function
|
|
212
|
-
return Object.fromEntries(Object.entries(typeValidator.items).map(([key,
|
|
301
|
+
export function getObjTypeRegistry() {
|
|
302
|
+
return Object.fromEntries(Object.entries(typeValidator.items).map(([key, data]) => [key, { ...data }]));
|
|
213
303
|
}
|
|
214
|
-
|
|
304
|
+
/**
|
|
305
|
+
* Returns a copy of the current order of type validators.
|
|
306
|
+
* @returns {string[]} A new array containing the type order.
|
|
307
|
+
*/
|
|
308
|
+
export const getObjTypeOrder = () => [...typeValidator.order];
|
|
309
|
+
// --- Type Registration ---
|
|
215
310
|
extendObjType([
|
|
216
311
|
[
|
|
217
312
|
'undefined',
|
|
@@ -233,6 +328,11 @@ extendObjType([
|
|
|
233
328
|
/** @param {unknown} val @returns {val is number} */
|
|
234
329
|
(val) => typeof val === 'number' && !Number.isNaN(val),
|
|
235
330
|
],
|
|
331
|
+
[
|
|
332
|
+
'nannumber',
|
|
333
|
+
/** @param {unknown} val @returns {val is number} */
|
|
334
|
+
(val) => typeof val === 'number' && Number.isNaN(val),
|
|
335
|
+
],
|
|
236
336
|
[
|
|
237
337
|
'bigint',
|
|
238
338
|
/** @param {unknown} val @returns {val is bigint} */
|
|
@@ -253,85 +353,109 @@ extendObjType([
|
|
|
253
353
|
/** @param {unknown} val @returns {val is Function} */
|
|
254
354
|
(val) => typeof val === 'function',
|
|
255
355
|
],
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
356
|
+
]);
|
|
357
|
+
extendObjType([
|
|
358
|
+
'array',
|
|
359
|
+
/** @param {unknown} val @returns {val is unknown[]} */
|
|
360
|
+
(val) => Array.isArray(val),
|
|
361
|
+
/** @type {ExtendObjTypeCloner<unknown[]>} */
|
|
362
|
+
(item, isDeep, cloner) => item.map((element) => (isDeep ? cloner.clone(element, isDeep) : element)),
|
|
263
363
|
]);
|
|
264
364
|
if (isBrowser) {
|
|
265
365
|
extendObjType([
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
],
|
|
366
|
+
'file',
|
|
367
|
+
/** @param {unknown} val @returns {val is File} */
|
|
368
|
+
(val) => typeof File !== 'undefined' && val instanceof File,
|
|
369
|
+
/** @type {ExtendObjTypeCloner<File>} */
|
|
370
|
+
(item) => new File([item], item.name, { type: item.type, lastModified: item.lastModified }),
|
|
271
371
|
]);
|
|
272
372
|
}
|
|
273
373
|
extendObjType([
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
374
|
+
'date',
|
|
375
|
+
/** @param {unknown} val @returns {val is Date} */
|
|
376
|
+
(val) => val instanceof Date,
|
|
377
|
+
/** @type {ExtendObjTypeCloner<Date>} */
|
|
378
|
+
(item) => new Date(item.getTime()),
|
|
379
|
+
]);
|
|
380
|
+
extendObjType([
|
|
381
|
+
'regexp',
|
|
382
|
+
/** @param {unknown} val @returns {val is RegExp} */
|
|
383
|
+
(val) => val instanceof RegExp,
|
|
384
|
+
/** @type {ExtendObjTypeCloner<RegExp>} */
|
|
385
|
+
(item) => new RegExp(item.source, item.flags),
|
|
386
|
+
]);
|
|
387
|
+
extendObjType([
|
|
388
|
+
'map',
|
|
389
|
+
/** @param {unknown} val @returns {val is Map<unknown, unknown>} */
|
|
390
|
+
(val) => val instanceof Map,
|
|
391
|
+
/** @type {ExtendObjTypeCloner<Map<unknown, unknown>>} */
|
|
392
|
+
(item, isDeep, cloner) => {
|
|
393
|
+
const result = new Map();
|
|
394
|
+
for (const [key, value] of item.entries()) {
|
|
395
|
+
result.set(key, isDeep ? cloner.clone(value, isDeep) : value);
|
|
396
|
+
}
|
|
397
|
+
return result;
|
|
398
|
+
},
|
|
399
|
+
]);
|
|
400
|
+
extendObjType([
|
|
401
|
+
'set',
|
|
402
|
+
/** @param {unknown} val @returns {val is Set<unknown>} */
|
|
403
|
+
(val) => val instanceof Set,
|
|
404
|
+
/** @type {ExtendObjTypeCloner<Set<any>>} */
|
|
405
|
+
(item, isDeep, cloner) => {
|
|
406
|
+
const result = new Set();
|
|
407
|
+
for (const value of item) {
|
|
408
|
+
result.add(isDeep ? cloner.clone(value, isDeep) : value);
|
|
409
|
+
}
|
|
410
|
+
return result;
|
|
411
|
+
},
|
|
412
|
+
]);
|
|
413
|
+
extendObjType([
|
|
298
414
|
[
|
|
299
415
|
'weakmap',
|
|
300
|
-
/**
|
|
301
|
-
* @param {unknown} val @returns {val is WeakMap<unknown, unknown>}
|
|
302
|
-
*/
|
|
416
|
+
/** @param {unknown} val @returns {val is WeakMap<unknown, unknown>} */
|
|
303
417
|
(val) => val instanceof WeakMap,
|
|
304
418
|
],
|
|
305
419
|
[
|
|
306
420
|
'weakset',
|
|
307
|
-
/**
|
|
308
|
-
* @param {unknown} val @returns {val is WeakSet<unknown>}
|
|
309
|
-
*/
|
|
421
|
+
/** @param {unknown} val @returns {val is WeakSet<unknown>} */
|
|
310
422
|
(val) => val instanceof WeakSet,
|
|
311
423
|
],
|
|
312
424
|
[
|
|
313
425
|
'promise',
|
|
314
|
-
/**
|
|
315
|
-
* @param {unknown} val @returns {val is Promise<unknown>}
|
|
316
|
-
*/
|
|
426
|
+
/** @param {unknown} val @returns {val is Promise<unknown>} */
|
|
317
427
|
(val) => val instanceof Promise,
|
|
318
428
|
],
|
|
319
429
|
]);
|
|
430
|
+
extendObjType([
|
|
431
|
+
'url',
|
|
432
|
+
/** @param {unknown} val @returns {val is URL} */
|
|
433
|
+
(val) => val instanceof URL,
|
|
434
|
+
/** @type {ExtendObjTypeCloner<URL>} */
|
|
435
|
+
(item) => new URL(item.href),
|
|
436
|
+
]);
|
|
320
437
|
if (isBrowser) {
|
|
321
438
|
extendObjType([
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
439
|
+
'htmlelement',
|
|
440
|
+
/** @param {unknown} val @returns {val is HTMLElement} */
|
|
441
|
+
(val) => typeof HTMLElement !== 'undefined' && val instanceof HTMLElement,
|
|
442
|
+
/** @type {ExtendObjTypeCloner<Node>} */
|
|
443
|
+
(item) => item.cloneNode(true),
|
|
327
444
|
]);
|
|
328
445
|
}
|
|
329
446
|
extendObjType([
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
447
|
+
'object',
|
|
448
|
+
/** @param {unknown} val @returns {val is Record<string | number | symbol, unknown>} */
|
|
449
|
+
(val) => isJsonObject(val),
|
|
450
|
+
/** @type {ExtendObjTypeCloner<Record<string | number | symbol, unknown>>} */
|
|
451
|
+
(item, isDeep, cloner) => {
|
|
452
|
+
/** @type {Record<string | number | symbol, unknown>} */
|
|
453
|
+
const result = {};
|
|
454
|
+
for (const key in item) {
|
|
455
|
+
if (Object.prototype.hasOwnProperty.call(item, key)) {
|
|
456
|
+
result[key] = isDeep ? cloner.clone(item[key], isDeep) : item[key];
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return result;
|
|
460
|
+
},
|
|
337
461
|
]);
|
|
@@ -24,22 +24,34 @@ const waitForTrue = (getValue, checkInterval = 100) => {
|
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* @template {any} T
|
|
29
|
+
* @template {any[]} A
|
|
30
|
+
* @typedef {Object} SingletonTaskResult
|
|
31
|
+
* @property {(...args: A) => Promise<T>} callback - The wrapped function that manages single execution.
|
|
32
|
+
* @property {() => Promise<T> | null} getActivePromise - Returns the promise currently being executed or null if none is active.
|
|
33
|
+
* @property {() => void} resetActivePromise - Forces a reset of the active promise, allowing an immediate new execution.
|
|
34
|
+
* @property {() => boolean} isEnded - Returns true if the last execution (success or failure) has finished.
|
|
35
|
+
* @property {() => boolean} isFailed - Returns true if the last execution resulted in an error.
|
|
36
|
+
* @property {() => boolean} isLoading - Returns true if an execution is currently in progress.
|
|
37
|
+
*/
|
|
38
|
+
|
|
27
39
|
/**
|
|
28
40
|
* Creates a controller object that manages the execution state of an asynchronous function,
|
|
29
|
-
* ensuring it only executes one instance at a time.
|
|
30
|
-
*
|
|
41
|
+
* ensuring it only executes one instance at a time.
|
|
42
|
+
*
|
|
43
|
+
* If a task is already in progress, subsequent calls to the callback will return
|
|
44
|
+
* the exact same promise as the first call, preventing redundant operations.
|
|
31
45
|
*
|
|
32
46
|
* @template {any} T
|
|
33
47
|
* @template {any[]} A
|
|
34
48
|
* @param {(...args: A) => Promise<T>} baseFunction - The asynchronous function to be wrapped.
|
|
35
|
-
* @
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* resetActivePromise: () => void
|
|
39
|
-
* }} An object containing the execution controller.
|
|
49
|
+
* @param {boolean} [autoReset=true] - If true, the controller clears the active promise automatically
|
|
50
|
+
* once the base function resolves or rejects. If false, the lock remains until `resetActivePromise` is called.
|
|
51
|
+
* @returns {SingletonTaskResult<T, A>} An object containing the execution controller and state monitors.
|
|
40
52
|
* @throws {TypeError} If the provided baseFunction is not a function.
|
|
41
53
|
*/
|
|
42
|
-
const createSingletonTask = (baseFunction) => {
|
|
54
|
+
const createSingletonTask = (baseFunction, autoReset = true) => {
|
|
43
55
|
// Validation: Ensure the input is a function before proceeding.
|
|
44
56
|
if (typeof baseFunction !== 'function') {
|
|
45
57
|
throw new TypeError('The argument "baseFunction" must be a function.');
|
|
@@ -51,11 +63,21 @@ const createSingletonTask = (baseFunction) => {
|
|
|
51
63
|
*/
|
|
52
64
|
let activePromise = null;
|
|
53
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Internal state tracking the lifecycle of the task.
|
|
68
|
+
* @type {{ended: boolean, failed: boolean, loading: boolean}}
|
|
69
|
+
*/
|
|
70
|
+
const status = {
|
|
71
|
+
ended: false,
|
|
72
|
+
failed: false,
|
|
73
|
+
loading: false,
|
|
74
|
+
};
|
|
75
|
+
|
|
54
76
|
/**
|
|
55
77
|
* The wrapped function returned to the user.
|
|
56
78
|
*
|
|
57
79
|
* @param {A} args - The arguments to pass to the base function.
|
|
58
|
-
* @returns {Promise<T>} The result of the base function or the existing promise.
|
|
80
|
+
* @returns {Promise<T>} The result of the base function or the existing promise if already running.
|
|
59
81
|
*/
|
|
60
82
|
const callback = async (...args) => {
|
|
61
83
|
// If a request is already in progress, return the existing promise.
|
|
@@ -63,16 +85,23 @@ const createSingletonTask = (baseFunction) => {
|
|
|
63
85
|
return activePromise;
|
|
64
86
|
}
|
|
65
87
|
|
|
88
|
+
status.loading = true;
|
|
66
89
|
// Create the execution wrapper and ASSIGN it to activePromise
|
|
67
90
|
activePromise = (async () => {
|
|
68
91
|
try {
|
|
69
92
|
const result = await baseFunction(...args);
|
|
93
|
+
status.ended = true;
|
|
94
|
+
status.failed = false;
|
|
95
|
+
status.loading = false;
|
|
70
96
|
// Reset after success so the next call can start a new execution
|
|
71
|
-
activePromise = null;
|
|
97
|
+
if (autoReset) activePromise = null;
|
|
72
98
|
return result;
|
|
73
99
|
} catch (error) {
|
|
100
|
+
status.ended = true;
|
|
101
|
+
status.failed = true;
|
|
102
|
+
status.loading = false;
|
|
74
103
|
// Reset on error to allow subsequent retry attempts.
|
|
75
|
-
activePromise = null;
|
|
104
|
+
if (autoReset) activePromise = null;
|
|
76
105
|
throw error;
|
|
77
106
|
}
|
|
78
107
|
})();
|
|
@@ -91,10 +120,17 @@ const createSingletonTask = (baseFunction) => {
|
|
|
91
120
|
* @returns {void}
|
|
92
121
|
*/
|
|
93
122
|
const resetActivePromise = () => {
|
|
123
|
+
status.ended = false;
|
|
124
|
+
status.failed = false;
|
|
125
|
+
status.loading = false;
|
|
94
126
|
activePromise = null;
|
|
95
127
|
};
|
|
96
128
|
|
|
97
|
-
|
|
129
|
+
const isEnded = () => status.ended;
|
|
130
|
+
const isFailed = () => status.failed;
|
|
131
|
+
const isLoading = () => status.loading;
|
|
132
|
+
|
|
133
|
+
return { callback, getActivePromise, resetActivePromise, isEnded, isFailed, isLoading };
|
|
98
134
|
};
|
|
99
135
|
|
|
100
136
|
exports.createSingletonTask = createSingletonTask;
|
|
@@ -8,24 +8,57 @@
|
|
|
8
8
|
* @throws {TypeError} If arguments are invalid.
|
|
9
9
|
*/
|
|
10
10
|
export declare const waitForTrue: (getValue: () => boolean, checkInterval?: number) => Promise<void>;
|
|
11
|
+
export type SingletonTaskResult<T extends any, A extends any[]> = {
|
|
12
|
+
/**
|
|
13
|
+
* - The wrapped function that manages single execution.
|
|
14
|
+
*/
|
|
15
|
+
callback: (...args: A) => Promise<T>;
|
|
16
|
+
/**
|
|
17
|
+
* - Returns the promise currently being executed or null if none is active.
|
|
18
|
+
*/
|
|
19
|
+
getActivePromise: () => Promise<T> | null;
|
|
20
|
+
/**
|
|
21
|
+
* - Forces a reset of the active promise, allowing an immediate new execution.
|
|
22
|
+
*/
|
|
23
|
+
resetActivePromise: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* - Returns true if the last execution (success or failure) has finished.
|
|
26
|
+
*/
|
|
27
|
+
isEnded: () => boolean;
|
|
28
|
+
/**
|
|
29
|
+
* - Returns true if the last execution resulted in an error.
|
|
30
|
+
*/
|
|
31
|
+
isFailed: () => boolean;
|
|
32
|
+
/**
|
|
33
|
+
* - Returns true if an execution is currently in progress.
|
|
34
|
+
*/
|
|
35
|
+
isLoading: () => boolean;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* @template {any} T
|
|
39
|
+
* @template {any[]} A
|
|
40
|
+
* @typedef {Object} SingletonTaskResult
|
|
41
|
+
* @property {(...args: A) => Promise<T>} callback - The wrapped function that manages single execution.
|
|
42
|
+
* @property {() => Promise<T> | null} getActivePromise - Returns the promise currently being executed or null if none is active.
|
|
43
|
+
* @property {() => void} resetActivePromise - Forces a reset of the active promise, allowing an immediate new execution.
|
|
44
|
+
* @property {() => boolean} isEnded - Returns true if the last execution (success or failure) has finished.
|
|
45
|
+
* @property {() => boolean} isFailed - Returns true if the last execution resulted in an error.
|
|
46
|
+
* @property {() => boolean} isLoading - Returns true if an execution is currently in progress.
|
|
47
|
+
*/
|
|
11
48
|
/**
|
|
12
49
|
* Creates a controller object that manages the execution state of an asynchronous function,
|
|
13
|
-
* ensuring it only executes one instance at a time.
|
|
14
|
-
*
|
|
50
|
+
* ensuring it only executes one instance at a time.
|
|
51
|
+
*
|
|
52
|
+
* If a task is already in progress, subsequent calls to the callback will return
|
|
53
|
+
* the exact same promise as the first call, preventing redundant operations.
|
|
15
54
|
*
|
|
16
55
|
* @template {any} T
|
|
17
56
|
* @template {any[]} A
|
|
18
57
|
* @param {(...args: A) => Promise<T>} baseFunction - The asynchronous function to be wrapped.
|
|
19
|
-
* @
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* resetActivePromise: () => void
|
|
23
|
-
* }} An object containing the execution controller.
|
|
58
|
+
* @param {boolean} [autoReset=true] - If true, the controller clears the active promise automatically
|
|
59
|
+
* once the base function resolves or rejects. If false, the lock remains until `resetActivePromise` is called.
|
|
60
|
+
* @returns {SingletonTaskResult<T, A>} An object containing the execution controller and state monitors.
|
|
24
61
|
* @throws {TypeError} If the provided baseFunction is not a function.
|
|
25
62
|
*/
|
|
26
|
-
export declare const createSingletonTask: <T extends any, A extends any[]>(baseFunction: (...args: A) => Promise<T
|
|
27
|
-
callback: (...args: A) => Promise<T>;
|
|
28
|
-
getActivePromise: () => Promise<T> | null;
|
|
29
|
-
resetActivePromise: () => void;
|
|
30
|
-
};
|
|
63
|
+
export declare const createSingletonTask: <T extends any, A extends any[]>(baseFunction: (...args: A) => Promise<T>, autoReset?: boolean) => SingletonTaskResult<T, A>;
|
|
31
64
|
//# sourceMappingURL=promiseUtils.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promiseUtils.d.mts","sourceRoot":"","sources":["../../../src/v1/basics/promiseUtils.mjs"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aALb,MAAM,OAAO,kBACb,MAAM,KACJ,OAAO,CAAC,IAAI,CAgBxB,CAAC;
|
|
1
|
+
{"version":3,"file":"promiseUtils.d.mts","sourceRoot":"","sources":["../../../src/v1/basics/promiseUtils.mjs"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,aALb,MAAM,OAAO,kBACb,MAAM,KACJ,OAAO,CAAC,IAAI,CAgBxB,CAAC;AAKC,YAAkB,mBAAmB,CAFrB,CAAC,SAAN,GAAM,EACC,CAAC,SAAR,GAAG,EAAK,IAEnB;;;;IAAuC,QAAQ,EAApC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CACrC;;;;IAAoC,gBAAgB,EAAzC,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAClC;;;;IAAuB,kBAAkB,EAA9B,MAAM,IAAI,CACrB;;;;IAA0B,OAAO,EAAtB,MAAM,OAAO,CACxB;;;;IAA0B,QAAQ,EAAvB,MAAM,OAAO,CACxB;;;;IAA0B,SAAS,EAAxB,MAAM,OAAO,CAC1B;CAAA,CAAA;AAVD;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,GARb,CAAC,SAAN,GAAM,EACC,CAAC,SAAR,GAAG,EAAK,gBACX,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,cAC1B,OAAO,KAEL,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAmFpC,CAAC"}
|