tiny-essentials 1.28.19 → 1.29.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/changelog/1/28/19.md +24 -0
- package/changelog/1/29/0.md +58 -0
- package/changelog/1/29/1.md +11 -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 +565 -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 +340 -22
- package/types/EventEmitter.d.ts +48 -0
- package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
|
@@ -1,31 +1,78 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Array comparison utility.
|
|
2
|
+
* @fileoverview Array comparison utility with deep object diffing capabilities.
|
|
3
3
|
* @module TinyArrayComparator
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
* @template
|
|
6
|
+
* @template Item
|
|
7
|
+
* @typedef {Object} HashEntry
|
|
8
|
+
* @property {Item} item - The original item stored in the map.
|
|
9
|
+
* @property {string} hash - The calculated hash representing the item's value.
|
|
10
|
+
*/
|
|
11
|
+
// STRUCTURAL TRANSFORMATION & TYPE DERIVATION:
|
|
12
|
+
// Here we remove 'any' and use 'Partial<Item>' and Mapped Types.
|
|
13
|
+
// VSCode/Intellisense will now know exactly which keys exist within 'added', 'deleted', and 'modified',
|
|
14
|
+
// deriving the types directly from the data structure you pass to the class.
|
|
15
|
+
/**
|
|
16
|
+
* @template Item
|
|
17
|
+
* @typedef {Object} ObjectDiff
|
|
18
|
+
* @property {Partial<Item>} added - Properties added in the new object.
|
|
19
|
+
* @property {Partial<Item>} deleted - Properties removed from the old object.
|
|
20
|
+
* @property {Partial<{ [K in keyof Item]: { oldValue: Item[K], newValue: Item[K] } }>} modified - Properties that changed value.
|
|
21
|
+
* @property {Partial<{ [K in keyof Item]: ObjectDiff<Item[K]> }>} nested - Nested differences for nested objects.
|
|
22
|
+
*/
|
|
23
|
+
// ADVANCED PATTERN MATCHING:
|
|
24
|
+
// We use a discriminated union (status) so the IDE knows that 'oldItem' and 'details'
|
|
25
|
+
// only make sense (or are more relevant) in contexts where the change requires it.
|
|
26
|
+
/**
|
|
27
|
+
* @template Item
|
|
28
|
+
* @typedef {Object} DiffResult
|
|
29
|
+
* @property {Item} item - The item that was affected.
|
|
30
|
+
* @property {Item} [oldItem] - The original item before the change (only for 'edited' status).
|
|
31
|
+
* @property {'added'|'deleted'|'edited'} status - The nature of the change.
|
|
32
|
+
* @property {ObjectDiff<Item>} [details] - Detailed property changes (only if status is 'edited' and deepComparison is enabled).
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* @template Item
|
|
7
36
|
* @typedef {Object} InternalState
|
|
8
37
|
* Holds the internal tracking variables during the comparison process.
|
|
9
|
-
* @property {Map<string,
|
|
10
|
-
* @property {
|
|
38
|
+
* @property {Map<string|number, HashEntry<Item>>} oldItemsMap - A map storing the identity key as the key and the hash entry as the value.
|
|
39
|
+
* @property {Array<DiffResult<Item>>} affectedItems - The final array that collects added, deleted, or edited items.
|
|
11
40
|
*/
|
|
12
41
|
/**
|
|
13
|
-
* The final array that collects added or
|
|
14
|
-
* @template
|
|
15
|
-
* @typedef {Array<
|
|
42
|
+
* The final array that collects added, deleted, or edited items.
|
|
43
|
+
* @template Item
|
|
44
|
+
* @typedef {Array<DiffResult<Item>>} AffectedItems
|
|
45
|
+
*/
|
|
46
|
+
// ZERO-REDUNDANCY RULE:
|
|
47
|
+
// If 'Item' is a known object, 'idKey' will suggest the valid keys of that object (keyof Item).
|
|
48
|
+
// The '(string & {})' is an advanced trick to allow the user to type other strings if the base type is dynamic,
|
|
49
|
+
// without losing autocomplete for the known keys.
|
|
50
|
+
/**
|
|
51
|
+
* Options to configure the comparator.
|
|
52
|
+
* @template Item
|
|
53
|
+
* @typedef {Object} ComparatorOptions
|
|
54
|
+
* @property {keyof Item | (string & {})} [idKey='id'] - The property name used as a unique identifier for objects to detect edits.
|
|
55
|
+
* @property {boolean} [deepComparison=true] - If true, provides detailed property-level diffs for edited objects.
|
|
16
56
|
*/
|
|
17
57
|
/**
|
|
18
|
-
* Compares two arrays efficiently by hashing their items to detect additions and
|
|
58
|
+
* Compares two arrays efficiently by hashing their items to detect additions, deletions, and edits.
|
|
19
59
|
* @template {any} ArrayItem
|
|
20
60
|
*/
|
|
21
61
|
class TinyArrayComparator {
|
|
22
62
|
/**
|
|
23
63
|
* Generates a simple 32-bit integer hash converted to a base36 string.
|
|
24
|
-
* @param {any} item - The item to be hashed
|
|
64
|
+
* @param {any} item - The item to be hashed.
|
|
25
65
|
* @returns {string} The unique hash representing the item's value.
|
|
66
|
+
* @throws {TypeError} Throws a TypeError if the item cannot be stringified due to circular references.
|
|
26
67
|
*/
|
|
27
68
|
static generateHash(item) {
|
|
28
|
-
|
|
69
|
+
let stringified;
|
|
70
|
+
try {
|
|
71
|
+
stringified = typeof item === 'object' && item !== null ? JSON.stringify(item) : String(item);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
throw new TypeError('Failed to stringify item for hashing. Ensure the object does not have circular references.');
|
|
75
|
+
}
|
|
29
76
|
let hash = 0;
|
|
30
77
|
for (let i = 0, len = stringified.length; i < len; i++) {
|
|
31
78
|
const char = stringified.charCodeAt(i);
|
|
@@ -39,6 +86,49 @@ class TinyArrayComparator {
|
|
|
39
86
|
* @type {ArrayItem[]}
|
|
40
87
|
*/
|
|
41
88
|
#oldArray = [];
|
|
89
|
+
/**
|
|
90
|
+
* The key used to track identity of an object (e.g., 'id', 'uuid').
|
|
91
|
+
* @type {string|null}
|
|
92
|
+
*/
|
|
93
|
+
#idKey = null;
|
|
94
|
+
/**
|
|
95
|
+
* Detects whether deep comparison is enabled.
|
|
96
|
+
* @type {boolean}
|
|
97
|
+
*/
|
|
98
|
+
#deepComparison = true;
|
|
99
|
+
/**
|
|
100
|
+
* Gets the current identity key.
|
|
101
|
+
* @returns {string|null}
|
|
102
|
+
*/
|
|
103
|
+
get idKey() {
|
|
104
|
+
return this.#idKey;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Sets the identity key used for object comparison.
|
|
108
|
+
* @param {string|null} value - The property name to use as an identifier.
|
|
109
|
+
* @throws {TypeError} Throws a TypeError if the value is not a string.
|
|
110
|
+
*/
|
|
111
|
+
set idKey(value) {
|
|
112
|
+
if (value !== null && typeof value !== 'string')
|
|
113
|
+
throw new TypeError('The idKey must be a string or null.');
|
|
114
|
+
this.#idKey = value;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Gets whether deep comparison is enabled.
|
|
118
|
+
* @returns {boolean}
|
|
119
|
+
*/
|
|
120
|
+
get deepComparison() {
|
|
121
|
+
return this.#deepComparison;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Sets whether deep comparison is enabled.
|
|
125
|
+
* @param {boolean} value - The configuration value.
|
|
126
|
+
*/
|
|
127
|
+
set deepComparison(value) {
|
|
128
|
+
if (typeof value !== 'boolean')
|
|
129
|
+
throw new TypeError('The deepComparison option must be a boolean.');
|
|
130
|
+
this.#deepComparison = value;
|
|
131
|
+
}
|
|
42
132
|
/**
|
|
43
133
|
* Gets the current base array used for comparisons.
|
|
44
134
|
* @returns {ArrayItem[]} The current initial state of the array.
|
|
@@ -57,16 +147,23 @@ class TinyArrayComparator {
|
|
|
57
147
|
this.#oldArray = oldArray;
|
|
58
148
|
}
|
|
59
149
|
/**
|
|
60
|
-
* Initializes the comparator with an optional base array.
|
|
150
|
+
* Initializes the comparator with an optional base array and options.
|
|
61
151
|
* @param {ArrayItem[]} [oldArray] - The initial state of the array to be stored.
|
|
152
|
+
* @param {ComparatorOptions<ArrayItem>} [options={}] - Configuration options for the comparator.
|
|
62
153
|
*/
|
|
63
|
-
constructor(oldArray) {
|
|
154
|
+
constructor(oldArray, options = {}) {
|
|
64
155
|
if (typeof oldArray !== 'undefined')
|
|
65
156
|
this.oldArray = oldArray;
|
|
157
|
+
if (typeof options.idKey === 'string') {
|
|
158
|
+
this.idKey = options.idKey;
|
|
159
|
+
}
|
|
160
|
+
if (typeof options.deepComparison === 'boolean') {
|
|
161
|
+
this.deepComparison = options.deepComparison;
|
|
162
|
+
}
|
|
66
163
|
}
|
|
67
164
|
/**
|
|
68
165
|
* Proxy to generates a hash converted to a string.
|
|
69
|
-
* @param {ArrayItem} item - The item to be hashed
|
|
166
|
+
* @param {ArrayItem} item - The item to be hashed.
|
|
70
167
|
* @returns {string} The unique hash representing the item's value.
|
|
71
168
|
* @private
|
|
72
169
|
*/
|
|
@@ -74,7 +171,65 @@ class TinyArrayComparator {
|
|
|
74
171
|
return TinyArrayComparator.generateHash(item);
|
|
75
172
|
}
|
|
76
173
|
/**
|
|
77
|
-
*
|
|
174
|
+
* Recursively compares two objects to find differences.
|
|
175
|
+
* @param {Object} oldObj - The original object.
|
|
176
|
+
* @param {Object} newObj - The modified object.
|
|
177
|
+
* @returns {ObjectDiff<ArrayItem>} A structured object containing the differences.
|
|
178
|
+
*/
|
|
179
|
+
#getDeepDiff(oldObj, newObj) {
|
|
180
|
+
/** @type {ObjectDiff<ArrayItem>} */
|
|
181
|
+
const diff = {
|
|
182
|
+
added: {},
|
|
183
|
+
deleted: {},
|
|
184
|
+
modified: {},
|
|
185
|
+
nested: {},
|
|
186
|
+
};
|
|
187
|
+
const allKeys = new Set([...Object.keys(oldObj), ...Object.keys(newObj)]);
|
|
188
|
+
for (const key of allKeys) {
|
|
189
|
+
// @ts-ignore
|
|
190
|
+
const oldVal = oldObj[key];
|
|
191
|
+
// @ts-ignore
|
|
192
|
+
const newVal = newObj[key];
|
|
193
|
+
if (!(key in oldObj)) {
|
|
194
|
+
// Key exists in new object but not in old
|
|
195
|
+
// @ts-ignore
|
|
196
|
+
diff.added[key] = newVal;
|
|
197
|
+
}
|
|
198
|
+
else if (!(key in newObj)) {
|
|
199
|
+
// Key exists in old object but not in new
|
|
200
|
+
// @ts-ignore
|
|
201
|
+
diff.deleted[key] = oldVal;
|
|
202
|
+
}
|
|
203
|
+
else if (typeof oldVal === 'object' &&
|
|
204
|
+
oldVal !== null &&
|
|
205
|
+
typeof newVal === 'object' &&
|
|
206
|
+
newVal !== null &&
|
|
207
|
+
!Array.isArray(oldVal) &&
|
|
208
|
+
!Array.isArray(newObj)) {
|
|
209
|
+
// Both are objects, recurse
|
|
210
|
+
const nestedDiff = this.#getDeepDiff(oldVal, newVal);
|
|
211
|
+
// Only add nested if it actually contains differences
|
|
212
|
+
if (Object.keys(nestedDiff.added).length > 0 ||
|
|
213
|
+
Object.keys(nestedDiff.deleted).length > 0 ||
|
|
214
|
+
Object.keys(nestedDiff.modified).length > 0 ||
|
|
215
|
+
Object.keys(nestedDiff.nested).length > 0) {
|
|
216
|
+
// @ts-ignore
|
|
217
|
+
diff.nested[key] = nestedDiff;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else if (oldVal !== newVal) {
|
|
221
|
+
// Values are different and not objects (or one is an array)
|
|
222
|
+
// @ts-ignore
|
|
223
|
+
diff.modified[key] = {
|
|
224
|
+
oldValue: oldVal,
|
|
225
|
+
newValue: newVal,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return diff;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Compares the stored older array with a newer array and identifies added, deleted, or edited items.
|
|
78
233
|
*
|
|
79
234
|
* @param {ArrayItem[]} newArray - The modified state of the array.
|
|
80
235
|
* @returns {AffectedItems<ArrayItem>} An array containing the affected items and their status.
|
|
@@ -90,24 +245,55 @@ class TinyArrayComparator {
|
|
|
90
245
|
};
|
|
91
246
|
// Step 1: Hash and store all items from the first array
|
|
92
247
|
for (const item of this.#oldArray) {
|
|
93
|
-
const
|
|
94
|
-
|
|
248
|
+
const hash = this._generateHash(item);
|
|
249
|
+
// Identity is determined by the idKey. Otherwise, it relies purely on the hash.
|
|
250
|
+
const identityKey = this.#idKey !== null && item !== null && typeof item === 'object' && this.#idKey in item
|
|
251
|
+
? // @ts-ignore
|
|
252
|
+
item[this.#idKey]
|
|
253
|
+
: hash;
|
|
254
|
+
state.oldItemsMap.set(identityKey, { item, hash });
|
|
95
255
|
}
|
|
96
|
-
// Step 2: Iterate through the second array to find matches or additions
|
|
256
|
+
// Step 2: Iterate through the second array to find matches, edits or additions
|
|
97
257
|
for (const item of newArray) {
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
//
|
|
101
|
-
|
|
258
|
+
const hash = this._generateHash(item);
|
|
259
|
+
const identityKey = this.#idKey !== null && item !== null && typeof item === 'object' && this.#idKey in item
|
|
260
|
+
? // @ts-ignore
|
|
261
|
+
item[this.#idKey]
|
|
262
|
+
: hash;
|
|
263
|
+
const oldData = state.oldItemsMap.get(identityKey);
|
|
264
|
+
if (oldData) {
|
|
265
|
+
if (oldData.hash === hash) {
|
|
266
|
+
// Item exists and the content is identical. Unchanged.
|
|
267
|
+
state.oldItemsMap.delete(identityKey);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
// Item has the same identity but a different hash. It was edited.
|
|
271
|
+
/** @type {DiffResult<ArrayItem>} */
|
|
272
|
+
const diffResult = {
|
|
273
|
+
item: item,
|
|
274
|
+
oldItem: oldData.item,
|
|
275
|
+
status: 'edited',
|
|
276
|
+
};
|
|
277
|
+
// Perform deep comparison if enabled and items are objects
|
|
278
|
+
if (this.#deepComparison &&
|
|
279
|
+
typeof item === 'object' &&
|
|
280
|
+
item !== null &&
|
|
281
|
+
typeof oldData.item === 'object' &&
|
|
282
|
+
oldData.item !== null) {
|
|
283
|
+
diffResult.details = this.#getDeepDiff(oldData.item, item);
|
|
284
|
+
}
|
|
285
|
+
state.affectedItems.push(diffResult);
|
|
286
|
+
state.oldItemsMap.delete(identityKey);
|
|
287
|
+
}
|
|
102
288
|
}
|
|
103
289
|
else {
|
|
104
|
-
// Item was not in the old array
|
|
290
|
+
// Item identity was not found in the old array. It is an addition.
|
|
105
291
|
state.affectedItems.push({ item, status: 'added' });
|
|
106
292
|
}
|
|
107
293
|
}
|
|
108
294
|
// Step 3: Any item left in the oldItemsMap was not present in the new array (deleted)
|
|
109
|
-
for (const
|
|
110
|
-
state.affectedItems.push({ item, status: 'deleted' });
|
|
295
|
+
for (const oldData of state.oldItemsMap.values()) {
|
|
296
|
+
state.affectedItems.push({ item: oldData.item, status: 'deleted' });
|
|
111
297
|
}
|
|
112
298
|
return state.affectedItems;
|
|
113
299
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Numeric constants shared by every {@link TinyFSCore} backend.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
8
|
+
const constants = Object.freeze({
|
|
9
|
+
F_OK: 0,
|
|
10
|
+
R_OK: 4,
|
|
11
|
+
W_OK: 2,
|
|
12
|
+
X_OK: 1,
|
|
13
|
+
COPYFILE_EXCL: 1,
|
|
14
|
+
COPYFILE_FICLONE: 2,
|
|
15
|
+
COPYFILE_FICLONE_FORCE: 4,
|
|
16
|
+
O_RDONLY: 0,
|
|
17
|
+
O_WRONLY: 1,
|
|
18
|
+
O_RDWR: 2,
|
|
19
|
+
O_CREAT: 64,
|
|
20
|
+
O_EXCL: 128,
|
|
21
|
+
O_TRUNC: 512,
|
|
22
|
+
O_APPEND: 1024,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
26
|
+
const PERMISSION = Object.freeze({
|
|
27
|
+
OWNER_READ: 0o400,
|
|
28
|
+
OWNER_WRITE: 0o200,
|
|
29
|
+
OWNER_EXECUTE: 0o100,
|
|
30
|
+
GROUP_READ: 0o040,
|
|
31
|
+
GROUP_WRITE: 0o020,
|
|
32
|
+
GROUP_EXECUTE: 0o010,
|
|
33
|
+
OTHER_READ: 0o004,
|
|
34
|
+
OTHER_WRITE: 0o002,
|
|
35
|
+
OTHER_EXECUTE: 0o001,
|
|
36
|
+
SETUID: 0o4000,
|
|
37
|
+
SETGID: 0o2000,
|
|
38
|
+
STICKY: 0o1000,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
42
|
+
const FILE_TYPE = Object.freeze({
|
|
43
|
+
FILE: 0o100000,
|
|
44
|
+
DIRECTORY: 0o040000,
|
|
45
|
+
SYMBOLIC_LINK: 0o120000,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
/** @type {number} */
|
|
49
|
+
const DEFAULT_FILE_MODE = 0o666;
|
|
50
|
+
|
|
51
|
+
/** @type {number} */
|
|
52
|
+
const DEFAULT_DIRECTORY_MODE = 0o777;
|
|
53
|
+
|
|
54
|
+
/** @type {number} */
|
|
55
|
+
const DEFAULT_UMASK = 0o022;
|
|
56
|
+
|
|
57
|
+
/** @type {string} */
|
|
58
|
+
const ROOT_PATH = '/';
|
|
59
|
+
|
|
60
|
+
/** @type {string} */
|
|
61
|
+
const PATH_SEPARATOR = '/';
|
|
62
|
+
|
|
63
|
+
/** @type {readonly string[]} */
|
|
64
|
+
const SUPPORTED_ENCODINGS = Object.freeze(['utf8', 'utf-8', 'base64', 'hex']);
|
|
65
|
+
|
|
66
|
+
exports.DEFAULT_DIRECTORY_MODE = DEFAULT_DIRECTORY_MODE;
|
|
67
|
+
exports.DEFAULT_FILE_MODE = DEFAULT_FILE_MODE;
|
|
68
|
+
exports.DEFAULT_UMASK = DEFAULT_UMASK;
|
|
69
|
+
exports.FILE_TYPE = FILE_TYPE;
|
|
70
|
+
exports.PATH_SEPARATOR = PATH_SEPARATOR;
|
|
71
|
+
exports.PERMISSION = PERMISSION;
|
|
72
|
+
exports.ROOT_PATH = ROOT_PATH;
|
|
73
|
+
exports.SUPPORTED_ENCODINGS = SUPPORTED_ENCODINGS;
|
|
74
|
+
exports.constants = constants;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Numeric constants shared by every {@link TinyFSCore} backend.
|
|
3
|
+
*/
|
|
4
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
5
|
+
export declare const constants: Readonly<Record<string, number>>;
|
|
6
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
7
|
+
export declare const PERMISSION: Readonly<Record<string, number>>;
|
|
8
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
9
|
+
export declare const FILE_TYPE: Readonly<Record<string, number>>;
|
|
10
|
+
/** @type {number} */
|
|
11
|
+
export declare const DEFAULT_FILE_MODE: number;
|
|
12
|
+
/** @type {number} */
|
|
13
|
+
export declare const DEFAULT_DIRECTORY_MODE: number;
|
|
14
|
+
/** @type {number} */
|
|
15
|
+
export declare const DEFAULT_UMASK: number;
|
|
16
|
+
/** @type {string} */
|
|
17
|
+
export declare const ROOT_PATH: string;
|
|
18
|
+
/** @type {string} */
|
|
19
|
+
export declare const PATH_SEPARATOR: string;
|
|
20
|
+
/** @type {readonly string[]} */
|
|
21
|
+
export declare const SUPPORTED_ENCODINGS: readonly string[];
|
|
22
|
+
//# sourceMappingURL=constants.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../../src/v1/libs/fs/constants.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,SAAS,EADX,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxC,CAAC;AAEH,+CAA+C;AAC/C,eAAO,MAAM,UAAU,EADZ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxC,CAAC;AAEH,+CAA+C;AAC/C,eAAO,MAAM,SAAS,EADX,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKxC,CAAC;AAEH,qBAAqB;AACrB,eAAO,MAAM,iBAAiB,EADnB,MAC2B,CAAC;AAEvC,qBAAqB;AACrB,eAAO,MAAM,sBAAsB,EADxB,MACgC,CAAC;AAE5C,qBAAqB;AACrB,eAAO,MAAM,aAAa,EADf,MACuB,CAAC;AAEnC,qBAAqB;AACrB,eAAO,MAAM,SAAS,EADX,MACiB,CAAC;AAE7B,qBAAqB;AACrB,eAAO,MAAM,cAAc,EADhB,MACsB,CAAC;AAElC,gCAAgC;AAChC,eAAO,MAAM,mBAAmB,EADrB,SAAS,MAAM,EAC0D,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Numeric constants shared by every {@link TinyFSCore} backend.
|
|
3
|
+
*/
|
|
4
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
5
|
+
export const constants = Object.freeze({
|
|
6
|
+
F_OK: 0,
|
|
7
|
+
R_OK: 4,
|
|
8
|
+
W_OK: 2,
|
|
9
|
+
X_OK: 1,
|
|
10
|
+
COPYFILE_EXCL: 1,
|
|
11
|
+
COPYFILE_FICLONE: 2,
|
|
12
|
+
COPYFILE_FICLONE_FORCE: 4,
|
|
13
|
+
O_RDONLY: 0,
|
|
14
|
+
O_WRONLY: 1,
|
|
15
|
+
O_RDWR: 2,
|
|
16
|
+
O_CREAT: 64,
|
|
17
|
+
O_EXCL: 128,
|
|
18
|
+
O_TRUNC: 512,
|
|
19
|
+
O_APPEND: 1024,
|
|
20
|
+
});
|
|
21
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
22
|
+
export const PERMISSION = Object.freeze({
|
|
23
|
+
OWNER_READ: 0o400,
|
|
24
|
+
OWNER_WRITE: 0o200,
|
|
25
|
+
OWNER_EXECUTE: 0o100,
|
|
26
|
+
GROUP_READ: 0o040,
|
|
27
|
+
GROUP_WRITE: 0o020,
|
|
28
|
+
GROUP_EXECUTE: 0o010,
|
|
29
|
+
OTHER_READ: 0o004,
|
|
30
|
+
OTHER_WRITE: 0o002,
|
|
31
|
+
OTHER_EXECUTE: 0o001,
|
|
32
|
+
SETUID: 0o4000,
|
|
33
|
+
SETGID: 0o2000,
|
|
34
|
+
STICKY: 0o1000,
|
|
35
|
+
});
|
|
36
|
+
/** @type {Readonly<Record<string, number>>} */
|
|
37
|
+
export const FILE_TYPE = Object.freeze({
|
|
38
|
+
FILE: 0o100000,
|
|
39
|
+
DIRECTORY: 0o040000,
|
|
40
|
+
SYMBOLIC_LINK: 0o120000,
|
|
41
|
+
});
|
|
42
|
+
/** @type {number} */
|
|
43
|
+
export const DEFAULT_FILE_MODE = 0o666;
|
|
44
|
+
/** @type {number} */
|
|
45
|
+
export const DEFAULT_DIRECTORY_MODE = 0o777;
|
|
46
|
+
/** @type {number} */
|
|
47
|
+
export const DEFAULT_UMASK = 0o022;
|
|
48
|
+
/** @type {string} */
|
|
49
|
+
export const ROOT_PATH = '/';
|
|
50
|
+
/** @type {string} */
|
|
51
|
+
export const PATH_SEPARATOR = '/';
|
|
52
|
+
/** @type {readonly string[]} */
|
|
53
|
+
export const SUPPORTED_ENCODINGS = Object.freeze(['utf8', 'utf-8', 'base64', 'hex']);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Byte/string conversion helpers shared by every {@link TinyFSCore} backend.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Converts a byte array into a base64 string.
|
|
9
|
+
*
|
|
10
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
11
|
+
* @returns {string} The base64 representation.
|
|
12
|
+
*/
|
|
13
|
+
const bytesToBase64 = (bytes) => {
|
|
14
|
+
let binary = '';
|
|
15
|
+
for (const byte of bytes) {
|
|
16
|
+
binary += String.fromCharCode(byte);
|
|
17
|
+
}
|
|
18
|
+
return btoa(binary);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Converts a base64 string into a byte array.
|
|
23
|
+
*
|
|
24
|
+
* @param {string} value Source string.
|
|
25
|
+
* @returns {Uint8Array} The decoded bytes.
|
|
26
|
+
*/
|
|
27
|
+
const base64ToBytes = (value) => {
|
|
28
|
+
const binary = atob(value);
|
|
29
|
+
const bytes = new Uint8Array(binary.length);
|
|
30
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
31
|
+
bytes[index] = binary.charCodeAt(index);
|
|
32
|
+
}
|
|
33
|
+
return bytes;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Converts a byte array into a lowercase hexadecimal string.
|
|
38
|
+
*
|
|
39
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
40
|
+
* @returns {string} The hexadecimal representation.
|
|
41
|
+
*/
|
|
42
|
+
const bytesToHex = (bytes) =>
|
|
43
|
+
Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Converts a hexadecimal string into a byte array.
|
|
47
|
+
*
|
|
48
|
+
* @param {string} value Source string.
|
|
49
|
+
* @returns {Uint8Array} The decoded bytes.
|
|
50
|
+
* @throws {TypeError} When the string length is odd.
|
|
51
|
+
*/
|
|
52
|
+
const hexToBytes = (value) => {
|
|
53
|
+
if (value.length % 2 !== 0) {
|
|
54
|
+
throw new TypeError('The "hex" encoded string must have an even length');
|
|
55
|
+
}
|
|
56
|
+
const bytes = new Uint8Array(value.length / 2);
|
|
57
|
+
for (let index = 0; index < bytes.length; index += 1) {
|
|
58
|
+
bytes[index] = Number.parseInt(value.slice(index * 2, index * 2 + 2), 16);
|
|
59
|
+
}
|
|
60
|
+
return bytes;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Decodes a byte array using the requested encoding.
|
|
65
|
+
*
|
|
66
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
67
|
+
* @param {string | null} encoding Target encoding, or `null` for binary.
|
|
68
|
+
* @returns {string | Uint8Array} The decoded payload.
|
|
69
|
+
*/
|
|
70
|
+
const decodeBytes = (bytes, encoding) => {
|
|
71
|
+
if (encoding === null) {
|
|
72
|
+
return bytes;
|
|
73
|
+
}
|
|
74
|
+
if (encoding === 'base64') {
|
|
75
|
+
return bytesToBase64(bytes);
|
|
76
|
+
}
|
|
77
|
+
if (encoding === 'hex') {
|
|
78
|
+
return bytesToHex(bytes);
|
|
79
|
+
}
|
|
80
|
+
return new TextDecoder('utf-8').decode(bytes);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Converts supported input values into a byte array.
|
|
85
|
+
*
|
|
86
|
+
* @param {string | Uint8Array | ArrayBuffer | ArrayBufferView} data Source payload.
|
|
87
|
+
* @param {string | null} encoding Encoding used when `data` is a string.
|
|
88
|
+
* @returns {Uint8Array} The encoded bytes.
|
|
89
|
+
* @throws {TypeError} When the payload type is not supported.
|
|
90
|
+
*/
|
|
91
|
+
const toUint8Array = (data, encoding) => {
|
|
92
|
+
if (typeof data === 'string') {
|
|
93
|
+
if (encoding === 'base64') {
|
|
94
|
+
return base64ToBytes(data);
|
|
95
|
+
}
|
|
96
|
+
if (encoding === 'hex') {
|
|
97
|
+
return hexToBytes(data);
|
|
98
|
+
}
|
|
99
|
+
return new TextEncoder().encode(data);
|
|
100
|
+
}
|
|
101
|
+
if (data instanceof Uint8Array) {
|
|
102
|
+
return data;
|
|
103
|
+
}
|
|
104
|
+
if (data instanceof ArrayBuffer) {
|
|
105
|
+
return new Uint8Array(data);
|
|
106
|
+
}
|
|
107
|
+
if (ArrayBuffer.isView(data)) {
|
|
108
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
109
|
+
}
|
|
110
|
+
throw new TypeError('The "data" argument must be a string, an ArrayBuffer or an ArrayBufferView');
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
exports.base64ToBytes = base64ToBytes;
|
|
114
|
+
exports.bytesToBase64 = bytesToBase64;
|
|
115
|
+
exports.bytesToHex = bytesToHex;
|
|
116
|
+
exports.decodeBytes = decodeBytes;
|
|
117
|
+
exports.hexToBytes = hexToBytes;
|
|
118
|
+
exports.toUint8Array = toUint8Array;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Byte/string conversion helpers shared by every {@link TinyFSCore} backend.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Converts a byte array into a base64 string.
|
|
6
|
+
*
|
|
7
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
8
|
+
* @returns {string} The base64 representation.
|
|
9
|
+
*/
|
|
10
|
+
export declare const bytesToBase64: (bytes: Uint8Array) => string;
|
|
11
|
+
/**
|
|
12
|
+
* Converts a base64 string into a byte array.
|
|
13
|
+
*
|
|
14
|
+
* @param {string} value Source string.
|
|
15
|
+
* @returns {Uint8Array} The decoded bytes.
|
|
16
|
+
*/
|
|
17
|
+
export declare const base64ToBytes: (value: string) => Uint8Array;
|
|
18
|
+
/**
|
|
19
|
+
* Converts a byte array into a lowercase hexadecimal string.
|
|
20
|
+
*
|
|
21
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
22
|
+
* @returns {string} The hexadecimal representation.
|
|
23
|
+
*/
|
|
24
|
+
export declare const bytesToHex: (bytes: Uint8Array) => string;
|
|
25
|
+
/**
|
|
26
|
+
* Converts a hexadecimal string into a byte array.
|
|
27
|
+
*
|
|
28
|
+
* @param {string} value Source string.
|
|
29
|
+
* @returns {Uint8Array} The decoded bytes.
|
|
30
|
+
* @throws {TypeError} When the string length is odd.
|
|
31
|
+
*/
|
|
32
|
+
export declare const hexToBytes: (value: string) => Uint8Array;
|
|
33
|
+
/**
|
|
34
|
+
* Decodes a byte array using the requested encoding.
|
|
35
|
+
*
|
|
36
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
37
|
+
* @param {string | null} encoding Target encoding, or `null` for binary.
|
|
38
|
+
* @returns {string | Uint8Array} The decoded payload.
|
|
39
|
+
*/
|
|
40
|
+
export declare const decodeBytes: (bytes: Uint8Array, encoding: string | null) => string | Uint8Array;
|
|
41
|
+
/**
|
|
42
|
+
* Converts supported input values into a byte array.
|
|
43
|
+
*
|
|
44
|
+
* @param {string | Uint8Array | ArrayBuffer | ArrayBufferView} data Source payload.
|
|
45
|
+
* @param {string | null} encoding Encoding used when `data` is a string.
|
|
46
|
+
* @returns {Uint8Array} The encoded bytes.
|
|
47
|
+
* @throws {TypeError} When the payload type is not supported.
|
|
48
|
+
*/
|
|
49
|
+
export declare const toUint8Array: (data: string | Uint8Array | ArrayBuffer | ArrayBufferView, encoding: string | null) => Uint8Array;
|
|
50
|
+
//# sourceMappingURL=encoding.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoding.d.mts","sourceRoot":"","sources":["../../../../src/v1/libs/fs/encoding.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAHf,UAAU,KACR,MAQZ,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAHf,MAAM,KACJ,UASZ,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,UAHZ,UAAU,KACR,MAG6D,CAAC;AAE3E;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,UAJZ,MAAM,KACJ,UAYZ,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,UAJb,UAAU,YACV,MAAM,GAAG,IAAI,KACX,MAAM,GAAG,UAarB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,SALd,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,eAAe,YACnD,MAAM,GAAG,IAAI,KACX,UAuBZ,CAAC"}
|