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,466 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var objFilter = require('../../basics/objFilter.cjs');
|
|
4
|
+
|
|
5
|
+
const registry = objFilter.getObjTypeRegistry();
|
|
6
|
+
const order = objFilter.getObjTypeOrder();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Represents a plugin used by the TinyCloner to identify and clone specific data types.
|
|
10
|
+
*
|
|
11
|
+
* @template {any} Value
|
|
12
|
+
* @typedef {Object} CloningPlugin
|
|
13
|
+
* @property {string} id - The function id.
|
|
14
|
+
* @property {(value: Value) => boolean} canHandle - A function that accepts an item and returns true if the plugin is responsible for that type.
|
|
15
|
+
* @property {(value: Value, isDeep: boolean, cloner: TinyCloner|typeof TinyCloner) => Value} clone - A function that accepts the item and the cloner instance, returning the cloned version.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {Object} TinyClonerOptions
|
|
20
|
+
* @property {boolean} [isolationMode=false] - If true, the instance will be initialized with a copy of the default plugins and will ignore global defaults during the cloning process.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A class that performs deep cloning using a plugin-based architecture with advanced management capabilities.
|
|
25
|
+
*/
|
|
26
|
+
class TinyCloner {
|
|
27
|
+
/** @type {boolean} */
|
|
28
|
+
#isolationMode = false;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Indicates whether the instance is operating in isolation mode.
|
|
32
|
+
*
|
|
33
|
+
* If `true`, the instance is initialized with a snapshot of the current default plugins
|
|
34
|
+
* and will strictly use only its own plugins during the cloning process, ignoring
|
|
35
|
+
* any future changes to the global defaults.
|
|
36
|
+
*
|
|
37
|
+
* If `false`, the instance will use its own plugins and will fall back to the
|
|
38
|
+
* global default plugins if no match is found in the instance.
|
|
39
|
+
*
|
|
40
|
+
* @returns {boolean} True if the instance is isolated, false if it uses global fallbacks.
|
|
41
|
+
*/
|
|
42
|
+
get isolationMode() {
|
|
43
|
+
return this.#isolationMode;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** @type {boolean} */
|
|
47
|
+
static #defaultIsDeep = true;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Gets the global default value for the isDeep parameter.
|
|
51
|
+
* @returns {boolean}
|
|
52
|
+
*/
|
|
53
|
+
static get defaultIsDeep() {
|
|
54
|
+
return TinyCloner.#defaultIsDeep;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Sets the global default value for the isDeep parameter.
|
|
59
|
+
* @param {boolean} value - The new default value.
|
|
60
|
+
* @throws {TypeError} If the value is not a boolean.
|
|
61
|
+
*/
|
|
62
|
+
static set defaultIsDeep(value) {
|
|
63
|
+
if (typeof value !== 'boolean') {
|
|
64
|
+
throw new TypeError('The defaultIsDeep property must be a boolean.');
|
|
65
|
+
}
|
|
66
|
+
TinyCloner.#defaultIsDeep = value;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Creates an instance of TinyCloner.
|
|
71
|
+
*
|
|
72
|
+
* @param {TinyClonerOptions} [options={ isolationMode: false }] - Configuration options for the cloner instance.
|
|
73
|
+
*/
|
|
74
|
+
constructor(options = { isolationMode: false }) {
|
|
75
|
+
if (typeof options !== 'object' || options === null) {
|
|
76
|
+
throw new TypeError('Options must be a non-null object.');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (
|
|
80
|
+
typeof options.isolationMode !== 'undefined' &&
|
|
81
|
+
typeof options.isolationMode !== 'boolean'
|
|
82
|
+
) {
|
|
83
|
+
throw new TypeError('The property "isolationMode" must be a boolean.');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
this.#isolationMode = !!options.isolationMode;
|
|
87
|
+
|
|
88
|
+
if (this.#isolationMode) {
|
|
89
|
+
// Initialize instance with a copy of default plugins
|
|
90
|
+
this.#plugins = TinyCloner.#defaultPlugins.map((p) => ({ ...p }));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Creates a default plugin specifically designed to handle plain JavaScript objects.
|
|
96
|
+
* @param {string} id - The function id.
|
|
97
|
+
* @returns {CloningPlugin<Object.<string, any>>} A plugin object configured for object cloning.
|
|
98
|
+
*/
|
|
99
|
+
static _createObjectPlugin(id) {
|
|
100
|
+
if (typeof id !== 'string') throw new TypeError('Id must be a string.');
|
|
101
|
+
return {
|
|
102
|
+
id,
|
|
103
|
+
canHandle: (item) => item !== null && typeof item === 'object',
|
|
104
|
+
clone: (item, isDeep, cloner) => {
|
|
105
|
+
/** @type {Record<string, any>} */
|
|
106
|
+
const result = {};
|
|
107
|
+
for (const key in item) {
|
|
108
|
+
if (Object.prototype.hasOwnProperty.call(item, key)) {
|
|
109
|
+
result[key] = isDeep ? cloner.clone(item[key], isDeep) : item[key];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @type {CloningPlugin<any>[]}
|
|
119
|
+
*/
|
|
120
|
+
static #defaultPlugins = [];
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Validates that a plugin object adheres to the required CloningPlugin interface.
|
|
124
|
+
*
|
|
125
|
+
* @template {any} T
|
|
126
|
+
* @param {CloningPlugin<T>} plugin - The plugin object to validate.
|
|
127
|
+
* @throws {TypeError} If the plugin does not implement the required 'canHandle' and 'clone' methods.
|
|
128
|
+
*/
|
|
129
|
+
static validatePlugin(plugin) {
|
|
130
|
+
if (typeof plugin?.canHandle !== 'function' || typeof plugin?.clone !== 'function') {
|
|
131
|
+
throw new TypeError(
|
|
132
|
+
'Each plugin must implement the required interface: canHandle(item) and clone(item, cloner).',
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
if (typeof plugin?.id !== 'string')
|
|
136
|
+
throw new TypeError(
|
|
137
|
+
'Each plugin must implement the required interface: the plugin id string.',
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// --- Static Management (Global Defaults) ---
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @returns {CloningPlugin<any>[]} A deep copy of the current default plugins array.
|
|
145
|
+
*/
|
|
146
|
+
static get plugins() {
|
|
147
|
+
return TinyCloner.#defaultPlugins.map((plugin) => ({ ...plugin }));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @returns {number} The total number of default plugins registered.
|
|
152
|
+
*/
|
|
153
|
+
static get size() {
|
|
154
|
+
return TinyCloner.#defaultPlugins.length;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* @returns {string[]} An array containing the unique IDs of all default plugins.
|
|
159
|
+
*/
|
|
160
|
+
static get ids() {
|
|
161
|
+
return TinyCloner.#defaultPlugins.map((p) => p.id);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* @param {CloningPlugin<any>[]} newPlugins - An array of plugins to replace the current ones.
|
|
166
|
+
* @throws {TypeError} If the input is not an array or if plugins do not implement the required interface.
|
|
167
|
+
*/
|
|
168
|
+
static set plugins(newPlugins) {
|
|
169
|
+
if (!Array.isArray(newPlugins)) {
|
|
170
|
+
throw new TypeError('The defaultPlugins property must be an array.');
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Deep validation of the plugin structure to ensure runtime safety
|
|
174
|
+
TinyCloner.#defaultPlugins = newPlugins.map((plugin) => {
|
|
175
|
+
TinyCloner.validatePlugin(plugin);
|
|
176
|
+
return { ...plugin };
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Adds a new plugin to the default plugins registry at a specified position.
|
|
182
|
+
*
|
|
183
|
+
* @param {CloningPlugin<any>} plugin - The plugin to add.
|
|
184
|
+
* @param {'start' | 'end' | 'index'} [position='start'] - The position where the plugin should be inserted.
|
|
185
|
+
* @param {number} [index=0] - The specific index to use if position is set to 'index'.
|
|
186
|
+
* @throws {TypeError} If the plugin is invalid, the position is unrecognized, or index is not a valid integer.
|
|
187
|
+
*/
|
|
188
|
+
static addPlugin(plugin, position = 'start', index = 0) {
|
|
189
|
+
TinyCloner.validatePlugin(plugin);
|
|
190
|
+
if (TinyCloner.hasPlugin(plugin.id))
|
|
191
|
+
throw new TypeError(
|
|
192
|
+
`A plugin with the ID "${plugin.id}" already exists in the global registry.`,
|
|
193
|
+
);
|
|
194
|
+
const pluginCopy = { ...plugin };
|
|
195
|
+
|
|
196
|
+
if (position === 'start') {
|
|
197
|
+
TinyCloner.#defaultPlugins.unshift(pluginCopy);
|
|
198
|
+
} else if (position === 'end') {
|
|
199
|
+
TinyCloner.#defaultPlugins.push(pluginCopy);
|
|
200
|
+
} else if (position === 'index') {
|
|
201
|
+
if (!Number.isInteger(index) || index < 0) {
|
|
202
|
+
throw new TypeError('When position is "index", the index must be a non-negative integer.');
|
|
203
|
+
}
|
|
204
|
+
TinyCloner.#defaultPlugins.splice(index, 0, pluginCopy);
|
|
205
|
+
} else {
|
|
206
|
+
throw new TypeError('Position must be "start", "end", or "index".');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Checks if a default plugin with the specified ID exists.
|
|
212
|
+
*
|
|
213
|
+
* @param {string} id - The ID of the plugin to search for.
|
|
214
|
+
* @returns {boolean} True if the plugin exists, false otherwise.
|
|
215
|
+
* @throws {TypeError} If the id is not a string.
|
|
216
|
+
*/
|
|
217
|
+
static hasPlugin(id) {
|
|
218
|
+
if (typeof id !== 'string') throw new TypeError('The ID must be a string.');
|
|
219
|
+
return TinyCloner.#defaultPlugins.some((p) => p.id === id);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Removes a default plugin from the registry by its ID.
|
|
224
|
+
*
|
|
225
|
+
* @param {string} id - The ID of the plugin to remove.
|
|
226
|
+
* @returns {boolean} True if a plugin was removed, false if the plugin was not found.
|
|
227
|
+
* @throws {TypeError} If the id is not a string.
|
|
228
|
+
*/
|
|
229
|
+
static removePlugin(id) {
|
|
230
|
+
if (typeof id !== 'string') throw new TypeError('The ID must be a string.');
|
|
231
|
+
const index = TinyCloner.#defaultPlugins.findIndex((p) => p.id === id);
|
|
232
|
+
if (index !== -1) {
|
|
233
|
+
TinyCloner.#defaultPlugins.splice(index, 1);
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Removes default plugins that satisfy the provided predicate.
|
|
241
|
+
* @param {(plugin: CloningPlugin<any>) => boolean} predicate - A function that returns true for plugins to be removed.
|
|
242
|
+
*/
|
|
243
|
+
static filterPlugins(predicate) {
|
|
244
|
+
if (typeof predicate !== 'function') throw new TypeError('Predicate must be a function.');
|
|
245
|
+
TinyCloner.#defaultPlugins = TinyCloner.#defaultPlugins.filter((p) => !predicate({ ...p }));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Updates a default plugin at a specific index.
|
|
250
|
+
* @param {number} index - The index of the plugin to update.
|
|
251
|
+
* @param {CloningPlugin<any>} plugin - The new plugin configuration.
|
|
252
|
+
* @throws {RangeError} If the index is out of bounds.
|
|
253
|
+
*/
|
|
254
|
+
static updatePlugin(index, plugin) {
|
|
255
|
+
if (index < 0 || index >= TinyCloner.#defaultPlugins.length) {
|
|
256
|
+
throw new RangeError('Index out of bounds.');
|
|
257
|
+
}
|
|
258
|
+
TinyCloner.validatePlugin(plugin);
|
|
259
|
+
TinyCloner.#defaultPlugins[index] = { ...plugin };
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Reorders the default plugins array.
|
|
264
|
+
* @param {((a: CloningPlugin<any>, b: CloningPlugin<any>) => number)} [compareFn] - The function to make the new order of plugins.
|
|
265
|
+
*/
|
|
266
|
+
static reorderPlugins(compareFn) {
|
|
267
|
+
TinyCloner.#defaultPlugins = TinyCloner.#defaultPlugins.sort(
|
|
268
|
+
compareFn ? (a, b) => compareFn({ ...a }, { ...b }) : undefined,
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// --- Instance Management ---
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* @type {CloningPlugin<any>[]}
|
|
276
|
+
*/
|
|
277
|
+
#plugins = [];
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* @returns {number} The total number of plugins registered in this specific instance.
|
|
281
|
+
*/
|
|
282
|
+
get size() {
|
|
283
|
+
return this.#plugins.length;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* @returns {string[]} An array containing the unique IDs of all plugins in this instance.
|
|
288
|
+
*/
|
|
289
|
+
get ids() {
|
|
290
|
+
return this.#plugins.map((p) => p.id);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* @returns {CloningPlugin<any>[]} A deep copy of the instance's plugins.
|
|
295
|
+
*/
|
|
296
|
+
get plugins() {
|
|
297
|
+
return this.#plugins.map((plugin) => ({ ...plugin }));
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @param {CloningPlugin<any>[]} newPlugins - An array of plugins to replace the current ones.
|
|
302
|
+
* @throws {TypeError} If the input is not an array or if plugins do not implement the required interface.
|
|
303
|
+
*/
|
|
304
|
+
set plugins(newPlugins) {
|
|
305
|
+
if (!Array.isArray(newPlugins)) {
|
|
306
|
+
throw new TypeError('The plugins property must be an array.');
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Deep validation of the plugin structure to ensure runtime safety
|
|
310
|
+
this.#plugins = newPlugins.map((plugin) => {
|
|
311
|
+
TinyCloner.validatePlugin(plugin);
|
|
312
|
+
return { ...plugin };
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Adds a new plugin to the instance at a specified position.
|
|
318
|
+
*
|
|
319
|
+
* @param {CloningPlugin<any>} plugin - The plugin to add.
|
|
320
|
+
* @param {'start' | 'end' | 'index'} [position='start'] - The position where the plugin should be inserted.
|
|
321
|
+
* @param {number} [index=0] - The specific index to use if position is set to 'index'.
|
|
322
|
+
* @throws {TypeError} If the plugin is invalid, the position is unrecognized, or index is not a valid integer.
|
|
323
|
+
*/
|
|
324
|
+
addPlugin(plugin, position = 'start', index = 0) {
|
|
325
|
+
TinyCloner.validatePlugin(plugin);
|
|
326
|
+
if (this.hasPlugin(plugin.id))
|
|
327
|
+
throw new TypeError(`A plugin with the ID "${plugin.id}" already exists in this instance.`);
|
|
328
|
+
const pluginCopy = { ...plugin };
|
|
329
|
+
|
|
330
|
+
if (position === 'start') {
|
|
331
|
+
this.#plugins.unshift(pluginCopy);
|
|
332
|
+
} else if (position === 'end') {
|
|
333
|
+
this.#plugins.push(pluginCopy);
|
|
334
|
+
} else if (position === 'index') {
|
|
335
|
+
if (!Number.isInteger(index) || index < 0) {
|
|
336
|
+
throw new TypeError('When position is "index", the index must be a non-negative integer.');
|
|
337
|
+
}
|
|
338
|
+
this.#plugins.splice(index, 0, pluginCopy);
|
|
339
|
+
} else {
|
|
340
|
+
throw new TypeError('Position must be "start", "end", or "index".');
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Checks if a plugin with the specified ID exists in this instance.
|
|
346
|
+
*
|
|
347
|
+
* @param {string} id - The ID of the plugin to search for.
|
|
348
|
+
* @returns {boolean} True if the plugin exists, false otherwise.
|
|
349
|
+
* @throws {TypeError} If the id is not a string.
|
|
350
|
+
*/
|
|
351
|
+
hasPlugin(id) {
|
|
352
|
+
if (typeof id !== 'string') throw new TypeError('The ID must be a string.');
|
|
353
|
+
return this.#plugins.some((p) => p.id === id);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* Removes a plugin from this instance by its ID.
|
|
358
|
+
*
|
|
359
|
+
* @param {string} id - The ID of the plugin to remove.
|
|
360
|
+
* @returns {boolean} True if a plugin was removed, false if the plugin was not found.
|
|
361
|
+
* @throws {TypeError} If the id is not a string.
|
|
362
|
+
*/
|
|
363
|
+
removePlugin(id) {
|
|
364
|
+
if (typeof id !== 'string') throw new TypeError('The ID must be a string.');
|
|
365
|
+
const index = this.#plugins.findIndex((p) => p.id === id);
|
|
366
|
+
if (index !== -1) {
|
|
367
|
+
this.#plugins.splice(index, 1);
|
|
368
|
+
return true;
|
|
369
|
+
}
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Removes instance plugins that satisfy the provided predicate.
|
|
375
|
+
* @param {(plugin: CloningPlugin<any>) => boolean} predicate - A function that returns true for plugins to be removed.
|
|
376
|
+
*/
|
|
377
|
+
filterPlugins(predicate) {
|
|
378
|
+
if (typeof predicate !== 'function') throw new TypeError('Predicate must be a function.');
|
|
379
|
+
this.#plugins = this.#plugins.filter((p) => !predicate({ ...p }));
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Updates an instance plugin at a specific index.
|
|
384
|
+
* @param {number} index - The index of the plugin to update.
|
|
385
|
+
* @param {CloningPlugin<any>} plugin - The new plugin configuration.
|
|
386
|
+
* @throws {RangeError} If the index is out of bounds.
|
|
387
|
+
*/
|
|
388
|
+
updatePlugin(index, plugin) {
|
|
389
|
+
if (index < 0 || index >= this.#plugins.length) {
|
|
390
|
+
throw new RangeError('Index out of bounds.');
|
|
391
|
+
}
|
|
392
|
+
TinyCloner.validatePlugin(plugin);
|
|
393
|
+
this.#plugins[index] = { ...plugin };
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Reorders the instance's plugins array.
|
|
398
|
+
* @param {((a: CloningPlugin<any>, b: CloningPlugin<any>) => number)} [compareFn] - The function to make the new order of plugins.
|
|
399
|
+
*/
|
|
400
|
+
reorderPlugins(compareFn) {
|
|
401
|
+
this.#plugins = this.#plugins.sort(
|
|
402
|
+
compareFn ? (a, b) => compareFn({ ...a }, { ...b }) : undefined,
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Performs the cloning operation on the provided item.
|
|
408
|
+
*
|
|
409
|
+
* @template {any} Value
|
|
410
|
+
* @param {Value} item - The item to be cloned.
|
|
411
|
+
* @param {boolean} [isDeep=true] - Whether to perform a deep clone (true) or a shallow clone (false).
|
|
412
|
+
* @returns {Value} The cloned version of the input item.
|
|
413
|
+
*/
|
|
414
|
+
static clone(item, isDeep = TinyCloner.#defaultIsDeep) {
|
|
415
|
+
for (const plugin of TinyCloner.#defaultPlugins) {
|
|
416
|
+
if (plugin.canHandle(item)) {
|
|
417
|
+
return plugin.clone(item, isDeep, TinyCloner);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// Fallback for primitives and null
|
|
422
|
+
return item;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Performs the cloning operation on the provided item.
|
|
427
|
+
*
|
|
428
|
+
* @template {any} Value
|
|
429
|
+
* @param {Value} item - The item to be cloned.
|
|
430
|
+
* @param {boolean} [isDeep=true] - Whether to perform a deep clone (true) or a shallow clone (false).
|
|
431
|
+
* @returns {Value} The cloned version of the input item.
|
|
432
|
+
*/
|
|
433
|
+
clone(item, isDeep = TinyCloner.#defaultIsDeep) {
|
|
434
|
+
// 1. Check instance plugins first
|
|
435
|
+
for (const plugin of this.#plugins) {
|
|
436
|
+
if (plugin.canHandle(item)) {
|
|
437
|
+
return plugin.clone(item, isDeep, this);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// 2. If isolationMode is false, check global defaults
|
|
442
|
+
if (!this.#isolationMode) {
|
|
443
|
+
for (const plugin of TinyCloner.#defaultPlugins) {
|
|
444
|
+
if (plugin.canHandle(item)) {
|
|
445
|
+
return plugin.clone(item, isDeep, this);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// Fallback for primitives and null
|
|
451
|
+
return item;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Initializing default plugins
|
|
456
|
+
TinyCloner.plugins = order
|
|
457
|
+
.filter((typeName) => registry[typeName]) // Ensures that the type exists in the record
|
|
458
|
+
.map((typeName) => ({
|
|
459
|
+
id: typeName,
|
|
460
|
+
canHandle: registry[typeName].validator,
|
|
461
|
+
/** @type {(val: any, isDeep: boolean, cloner: TinyCloner|typeof TinyCloner) => any} */
|
|
462
|
+
// @ts-ignore
|
|
463
|
+
clone: registry[typeName].cloner,
|
|
464
|
+
}));
|
|
465
|
+
|
|
466
|
+
module.exports = TinyCloner;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
export type CloningPlugin<Value extends any> = {
|
|
2
|
+
/**
|
|
3
|
+
* - The function id.
|
|
4
|
+
*/
|
|
5
|
+
id: string;
|
|
6
|
+
/**
|
|
7
|
+
* - A function that accepts an item and returns true if the plugin is responsible for that type.
|
|
8
|
+
*/
|
|
9
|
+
canHandle: (value: Value) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* - A function that accepts the item and the cloner instance, returning the cloned version.
|
|
12
|
+
*/
|
|
13
|
+
clone: (value: Value, isDeep: boolean, cloner: TinyCloner | typeof TinyCloner) => Value;
|
|
14
|
+
};
|
|
15
|
+
export type TinyClonerOptions = {
|
|
16
|
+
/**
|
|
17
|
+
* - If true, the instance will be initialized with a copy of the default plugins and will ignore global defaults during the cloning process.
|
|
18
|
+
*/
|
|
19
|
+
isolationMode?: boolean;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Represents a plugin used by the TinyCloner to identify and clone specific data types.
|
|
23
|
+
*
|
|
24
|
+
* @template {any} Value
|
|
25
|
+
* @typedef {Object} CloningPlugin
|
|
26
|
+
* @property {string} id - The function id.
|
|
27
|
+
* @property {(value: Value) => boolean} canHandle - A function that accepts an item and returns true if the plugin is responsible for that type.
|
|
28
|
+
* @property {(value: Value, isDeep: boolean, cloner: TinyCloner|typeof TinyCloner) => Value} clone - A function that accepts the item and the cloner instance, returning the cloned version.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* @typedef {Object} TinyClonerOptions
|
|
32
|
+
* @property {boolean} [isolationMode=false] - If true, the instance will be initialized with a copy of the default plugins and will ignore global defaults during the cloning process.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* A class that performs deep cloning using a plugin-based architecture with advanced management capabilities.
|
|
36
|
+
*/
|
|
37
|
+
declare class TinyCloner {
|
|
38
|
+
#private;
|
|
39
|
+
/**
|
|
40
|
+
* Indicates whether the instance is operating in isolation mode.
|
|
41
|
+
*
|
|
42
|
+
* If `true`, the instance is initialized with a snapshot of the current default plugins
|
|
43
|
+
* and will strictly use only its own plugins during the cloning process, ignoring
|
|
44
|
+
* any future changes to the global defaults.
|
|
45
|
+
*
|
|
46
|
+
* If `false`, the instance will use its own plugins and will fall back to the
|
|
47
|
+
* global default plugins if no match is found in the instance.
|
|
48
|
+
*
|
|
49
|
+
* @returns {boolean} True if the instance is isolated, false if it uses global fallbacks.
|
|
50
|
+
*/
|
|
51
|
+
get isolationMode(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Gets the global default value for the isDeep parameter.
|
|
54
|
+
* @returns {boolean}
|
|
55
|
+
*/
|
|
56
|
+
static get defaultIsDeep(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Sets the global default value for the isDeep parameter.
|
|
59
|
+
* @param {boolean} value - The new default value.
|
|
60
|
+
* @throws {TypeError} If the value is not a boolean.
|
|
61
|
+
*/
|
|
62
|
+
static set defaultIsDeep(value: boolean);
|
|
63
|
+
/**
|
|
64
|
+
* Creates an instance of TinyCloner.
|
|
65
|
+
*
|
|
66
|
+
* @param {TinyClonerOptions} [options={ isolationMode: false }] - Configuration options for the cloner instance.
|
|
67
|
+
*/
|
|
68
|
+
constructor(options?: TinyClonerOptions);
|
|
69
|
+
/**
|
|
70
|
+
* Creates a default plugin specifically designed to handle plain JavaScript objects.
|
|
71
|
+
* @param {string} id - The function id.
|
|
72
|
+
* @returns {CloningPlugin<Object.<string, any>>} A plugin object configured for object cloning.
|
|
73
|
+
*/
|
|
74
|
+
static _createObjectPlugin(id: string): CloningPlugin<Record<string, any>>;
|
|
75
|
+
/**
|
|
76
|
+
* Validates that a plugin object adheres to the required CloningPlugin interface.
|
|
77
|
+
*
|
|
78
|
+
* @template {any} T
|
|
79
|
+
* @param {CloningPlugin<T>} plugin - The plugin object to validate.
|
|
80
|
+
* @throws {TypeError} If the plugin does not implement the required 'canHandle' and 'clone' methods.
|
|
81
|
+
*/
|
|
82
|
+
static validatePlugin<T extends any>(plugin: CloningPlugin<T>): void;
|
|
83
|
+
/**
|
|
84
|
+
* @returns {CloningPlugin<any>[]} A deep copy of the current default plugins array.
|
|
85
|
+
*/
|
|
86
|
+
static get plugins(): CloningPlugin<any>[];
|
|
87
|
+
/**
|
|
88
|
+
* @returns {number} The total number of default plugins registered.
|
|
89
|
+
*/
|
|
90
|
+
static get size(): number;
|
|
91
|
+
/**
|
|
92
|
+
* @returns {string[]} An array containing the unique IDs of all default plugins.
|
|
93
|
+
*/
|
|
94
|
+
static get ids(): string[];
|
|
95
|
+
/**
|
|
96
|
+
* @param {CloningPlugin<any>[]} newPlugins - An array of plugins to replace the current ones.
|
|
97
|
+
* @throws {TypeError} If the input is not an array or if plugins do not implement the required interface.
|
|
98
|
+
*/
|
|
99
|
+
static set plugins(newPlugins: CloningPlugin<any>[]);
|
|
100
|
+
/**
|
|
101
|
+
* Adds a new plugin to the default plugins registry at a specified position.
|
|
102
|
+
*
|
|
103
|
+
* @param {CloningPlugin<any>} plugin - The plugin to add.
|
|
104
|
+
* @param {'start' | 'end' | 'index'} [position='start'] - The position where the plugin should be inserted.
|
|
105
|
+
* @param {number} [index=0] - The specific index to use if position is set to 'index'.
|
|
106
|
+
* @throws {TypeError} If the plugin is invalid, the position is unrecognized, or index is not a valid integer.
|
|
107
|
+
*/
|
|
108
|
+
static addPlugin(plugin: CloningPlugin<any>, position?: 'start' | 'end' | 'index', index?: number): void;
|
|
109
|
+
/**
|
|
110
|
+
* Checks if a default plugin with the specified ID exists.
|
|
111
|
+
*
|
|
112
|
+
* @param {string} id - The ID of the plugin to search for.
|
|
113
|
+
* @returns {boolean} True if the plugin exists, false otherwise.
|
|
114
|
+
* @throws {TypeError} If the id is not a string.
|
|
115
|
+
*/
|
|
116
|
+
static hasPlugin(id: string): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Removes a default plugin from the registry by its ID.
|
|
119
|
+
*
|
|
120
|
+
* @param {string} id - The ID of the plugin to remove.
|
|
121
|
+
* @returns {boolean} True if a plugin was removed, false if the plugin was not found.
|
|
122
|
+
* @throws {TypeError} If the id is not a string.
|
|
123
|
+
*/
|
|
124
|
+
static removePlugin(id: string): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Removes default plugins that satisfy the provided predicate.
|
|
127
|
+
* @param {(plugin: CloningPlugin<any>) => boolean} predicate - A function that returns true for plugins to be removed.
|
|
128
|
+
*/
|
|
129
|
+
static filterPlugins(predicate: (plugin: CloningPlugin<any>) => boolean): void;
|
|
130
|
+
/**
|
|
131
|
+
* Updates a default plugin at a specific index.
|
|
132
|
+
* @param {number} index - The index of the plugin to update.
|
|
133
|
+
* @param {CloningPlugin<any>} plugin - The new plugin configuration.
|
|
134
|
+
* @throws {RangeError} If the index is out of bounds.
|
|
135
|
+
*/
|
|
136
|
+
static updatePlugin(index: number, plugin: CloningPlugin<any>): void;
|
|
137
|
+
/**
|
|
138
|
+
* Reorders the default plugins array.
|
|
139
|
+
* @param {((a: CloningPlugin<any>, b: CloningPlugin<any>) => number)} [compareFn] - The function to make the new order of plugins.
|
|
140
|
+
*/
|
|
141
|
+
static reorderPlugins(compareFn?: ((a: CloningPlugin<any>, b: CloningPlugin<any>) => number)): void;
|
|
142
|
+
/**
|
|
143
|
+
* @returns {number} The total number of plugins registered in this specific instance.
|
|
144
|
+
*/
|
|
145
|
+
get size(): number;
|
|
146
|
+
/**
|
|
147
|
+
* @returns {string[]} An array containing the unique IDs of all plugins in this instance.
|
|
148
|
+
*/
|
|
149
|
+
get ids(): string[];
|
|
150
|
+
/**
|
|
151
|
+
* @returns {CloningPlugin<any>[]} A deep copy of the instance's plugins.
|
|
152
|
+
*/
|
|
153
|
+
get plugins(): CloningPlugin<any>[];
|
|
154
|
+
/**
|
|
155
|
+
* @param {CloningPlugin<any>[]} newPlugins - An array of plugins to replace the current ones.
|
|
156
|
+
* @throws {TypeError} If the input is not an array or if plugins do not implement the required interface.
|
|
157
|
+
*/
|
|
158
|
+
set plugins(newPlugins: CloningPlugin<any>[]);
|
|
159
|
+
/**
|
|
160
|
+
* Adds a new plugin to the instance at a specified position.
|
|
161
|
+
*
|
|
162
|
+
* @param {CloningPlugin<any>} plugin - The plugin to add.
|
|
163
|
+
* @param {'start' | 'end' | 'index'} [position='start'] - The position where the plugin should be inserted.
|
|
164
|
+
* @param {number} [index=0] - The specific index to use if position is set to 'index'.
|
|
165
|
+
* @throws {TypeError} If the plugin is invalid, the position is unrecognized, or index is not a valid integer.
|
|
166
|
+
*/
|
|
167
|
+
addPlugin(plugin: CloningPlugin<any>, position?: 'start' | 'end' | 'index', index?: number): void;
|
|
168
|
+
/**
|
|
169
|
+
* Checks if a plugin with the specified ID exists in this instance.
|
|
170
|
+
*
|
|
171
|
+
* @param {string} id - The ID of the plugin to search for.
|
|
172
|
+
* @returns {boolean} True if the plugin exists, false otherwise.
|
|
173
|
+
* @throws {TypeError} If the id is not a string.
|
|
174
|
+
*/
|
|
175
|
+
hasPlugin(id: string): boolean;
|
|
176
|
+
/**
|
|
177
|
+
* Removes a plugin from this instance by its ID.
|
|
178
|
+
*
|
|
179
|
+
* @param {string} id - The ID of the plugin to remove.
|
|
180
|
+
* @returns {boolean} True if a plugin was removed, false if the plugin was not found.
|
|
181
|
+
* @throws {TypeError} If the id is not a string.
|
|
182
|
+
*/
|
|
183
|
+
removePlugin(id: string): boolean;
|
|
184
|
+
/**
|
|
185
|
+
* Removes instance plugins that satisfy the provided predicate.
|
|
186
|
+
* @param {(plugin: CloningPlugin<any>) => boolean} predicate - A function that returns true for plugins to be removed.
|
|
187
|
+
*/
|
|
188
|
+
filterPlugins(predicate: (plugin: CloningPlugin<any>) => boolean): void;
|
|
189
|
+
/**
|
|
190
|
+
* Updates an instance plugin at a specific index.
|
|
191
|
+
* @param {number} index - The index of the plugin to update.
|
|
192
|
+
* @param {CloningPlugin<any>} plugin - The new plugin configuration.
|
|
193
|
+
* @throws {RangeError} If the index is out of bounds.
|
|
194
|
+
*/
|
|
195
|
+
updatePlugin(index: number, plugin: CloningPlugin<any>): void;
|
|
196
|
+
/**
|
|
197
|
+
* Reorders the instance's plugins array.
|
|
198
|
+
* @param {((a: CloningPlugin<any>, b: CloningPlugin<any>) => number)} [compareFn] - The function to make the new order of plugins.
|
|
199
|
+
*/
|
|
200
|
+
reorderPlugins(compareFn?: ((a: CloningPlugin<any>, b: CloningPlugin<any>) => number)): void;
|
|
201
|
+
/**
|
|
202
|
+
* Performs the cloning operation on the provided item.
|
|
203
|
+
*
|
|
204
|
+
* @template {any} Value
|
|
205
|
+
* @param {Value} item - The item to be cloned.
|
|
206
|
+
* @param {boolean} [isDeep=true] - Whether to perform a deep clone (true) or a shallow clone (false).
|
|
207
|
+
* @returns {Value} The cloned version of the input item.
|
|
208
|
+
*/
|
|
209
|
+
static clone<Value extends any>(item: Value, isDeep?: boolean): Value;
|
|
210
|
+
/**
|
|
211
|
+
* Performs the cloning operation on the provided item.
|
|
212
|
+
*
|
|
213
|
+
* @template {any} Value
|
|
214
|
+
* @param {Value} item - The item to be cloned.
|
|
215
|
+
* @param {boolean} [isDeep=true] - Whether to perform a deep clone (true) or a shallow clone (false).
|
|
216
|
+
* @returns {Value} The cloned version of the input item.
|
|
217
|
+
*/
|
|
218
|
+
clone<Value extends any>(item: Value, isDeep?: boolean): Value;
|
|
219
|
+
}
|
|
220
|
+
export default TinyCloner;
|
|
221
|
+
//# sourceMappingURL=TinyCloner.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TinyCloner.d.mts","sourceRoot":"","sources":["../../../../src/v1/libs/utils/TinyCloner.mjs"],"names":[],"mappings":"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"}
|