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
|
@@ -0,0 +1,102 @@
|
|
|
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 const bytesToBase64 = (bytes) => {
|
|
11
|
+
let binary = '';
|
|
12
|
+
for (const byte of bytes) {
|
|
13
|
+
binary += String.fromCharCode(byte);
|
|
14
|
+
}
|
|
15
|
+
return btoa(binary);
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Converts a base64 string into a byte array.
|
|
19
|
+
*
|
|
20
|
+
* @param {string} value Source string.
|
|
21
|
+
* @returns {Uint8Array} The decoded bytes.
|
|
22
|
+
*/
|
|
23
|
+
export const base64ToBytes = (value) => {
|
|
24
|
+
const binary = atob(value);
|
|
25
|
+
const bytes = new Uint8Array(binary.length);
|
|
26
|
+
for (let index = 0; index < binary.length; index += 1) {
|
|
27
|
+
bytes[index] = binary.charCodeAt(index);
|
|
28
|
+
}
|
|
29
|
+
return bytes;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Converts a byte array into a lowercase hexadecimal string.
|
|
33
|
+
*
|
|
34
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
35
|
+
* @returns {string} The hexadecimal representation.
|
|
36
|
+
*/
|
|
37
|
+
export const bytesToHex = (bytes) => Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
38
|
+
/**
|
|
39
|
+
* Converts a hexadecimal string into a byte array.
|
|
40
|
+
*
|
|
41
|
+
* @param {string} value Source string.
|
|
42
|
+
* @returns {Uint8Array} The decoded bytes.
|
|
43
|
+
* @throws {TypeError} When the string length is odd.
|
|
44
|
+
*/
|
|
45
|
+
export const hexToBytes = (value) => {
|
|
46
|
+
if (value.length % 2 !== 0) {
|
|
47
|
+
throw new TypeError('The "hex" encoded string must have an even length');
|
|
48
|
+
}
|
|
49
|
+
const bytes = new Uint8Array(value.length / 2);
|
|
50
|
+
for (let index = 0; index < bytes.length; index += 1) {
|
|
51
|
+
bytes[index] = Number.parseInt(value.slice(index * 2, index * 2 + 2), 16);
|
|
52
|
+
}
|
|
53
|
+
return bytes;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Decodes a byte array using the requested encoding.
|
|
57
|
+
*
|
|
58
|
+
* @param {Uint8Array} bytes Source bytes.
|
|
59
|
+
* @param {string | null} encoding Target encoding, or `null` for binary.
|
|
60
|
+
* @returns {string | Uint8Array} The decoded payload.
|
|
61
|
+
*/
|
|
62
|
+
export const decodeBytes = (bytes, encoding) => {
|
|
63
|
+
if (encoding === null) {
|
|
64
|
+
return bytes;
|
|
65
|
+
}
|
|
66
|
+
if (encoding === 'base64') {
|
|
67
|
+
return bytesToBase64(bytes);
|
|
68
|
+
}
|
|
69
|
+
if (encoding === 'hex') {
|
|
70
|
+
return bytesToHex(bytes);
|
|
71
|
+
}
|
|
72
|
+
return new TextDecoder('utf-8').decode(bytes);
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Converts supported input values into a byte array.
|
|
76
|
+
*
|
|
77
|
+
* @param {string | Uint8Array | ArrayBuffer | ArrayBufferView} data Source payload.
|
|
78
|
+
* @param {string | null} encoding Encoding used when `data` is a string.
|
|
79
|
+
* @returns {Uint8Array} The encoded bytes.
|
|
80
|
+
* @throws {TypeError} When the payload type is not supported.
|
|
81
|
+
*/
|
|
82
|
+
export const toUint8Array = (data, encoding) => {
|
|
83
|
+
if (typeof data === 'string') {
|
|
84
|
+
if (encoding === 'base64') {
|
|
85
|
+
return base64ToBytes(data);
|
|
86
|
+
}
|
|
87
|
+
if (encoding === 'hex') {
|
|
88
|
+
return hexToBytes(data);
|
|
89
|
+
}
|
|
90
|
+
return new TextEncoder().encode(data);
|
|
91
|
+
}
|
|
92
|
+
if (data instanceof Uint8Array) {
|
|
93
|
+
return data;
|
|
94
|
+
}
|
|
95
|
+
if (data instanceof ArrayBuffer) {
|
|
96
|
+
return new Uint8Array(data);
|
|
97
|
+
}
|
|
98
|
+
if (ArrayBuffer.isView(data)) {
|
|
99
|
+
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
100
|
+
}
|
|
101
|
+
throw new TypeError('The "data" argument must be a string, an ArrayBuffer or an ArrayBufferView');
|
|
102
|
+
};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var constants = require('./constants.cjs');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file Errno-style error helpers shared by every {@link TinyFSCore} backend.
|
|
7
|
+
*
|
|
8
|
+
* These helpers are intentionally dependency free so they can be imported from
|
|
9
|
+
* the abstract class, from concrete backends and from user code without
|
|
10
|
+
* creating circular imports.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/** @type {string} */
|
|
15
|
+
const NULL_BYTE = '\u0000';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {Object} FileSystemErrorProperties
|
|
19
|
+
* @property {string} code POSIX error code, e.g. `ENOENT`.
|
|
20
|
+
* @property {string} errno Alias of `code`, mirrors Node.js.
|
|
21
|
+
* @property {string} syscall Name of the originating operation.
|
|
22
|
+
* @property {string} path Path the operation was applied to.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @typedef {Error & FileSystemErrorProperties} FileSystemError
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Builds an errno-style error that matches the shape produced by Node.js.
|
|
31
|
+
*
|
|
32
|
+
* @param {string} code POSIX error code, e.g. `ENOENT`.
|
|
33
|
+
* @param {string} syscall Name of the originating operation.
|
|
34
|
+
* @param {string} targetPath Path the operation was applied to.
|
|
35
|
+
* @param {string} [detail] Extra human readable context.
|
|
36
|
+
* @returns {FileSystemError} The formatted error.
|
|
37
|
+
*/
|
|
38
|
+
const createFileSystemError = (code, syscall, targetPath, detail = '') => {
|
|
39
|
+
const suffix = detail.length > 0 ? `, ${detail}` : '';
|
|
40
|
+
/** @type {FileSystemError} */
|
|
41
|
+
const error = /** @type {FileSystemError} */ (
|
|
42
|
+
new Error(`${code}: ${syscall} '${targetPath}'${suffix}`)
|
|
43
|
+
);
|
|
44
|
+
error.code = code;
|
|
45
|
+
error.errno = code;
|
|
46
|
+
error.syscall = syscall;
|
|
47
|
+
error.path = targetPath;
|
|
48
|
+
return error;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Translates a `DOMException` thrown by a Web API into an errno-style error.
|
|
53
|
+
*
|
|
54
|
+
* @param {unknown} error The value caught from a browser call.
|
|
55
|
+
* @param {string} syscall Name of the originating operation.
|
|
56
|
+
* @param {string} targetPath Path the operation was applied to.
|
|
57
|
+
* @param {string} [mismatchCode] Error code used when the entry exists with the wrong type.
|
|
58
|
+
* @returns {FileSystemError | Error} An errno-style error.
|
|
59
|
+
*/
|
|
60
|
+
const toFileSystemError = (error, syscall, targetPath, mismatchCode = 'ENOTDIR') => {
|
|
61
|
+
if (typeof DOMException !== 'undefined' && error instanceof DOMException) {
|
|
62
|
+
switch (error.name) {
|
|
63
|
+
case 'NotFoundError':
|
|
64
|
+
return createFileSystemError('ENOENT', syscall, targetPath);
|
|
65
|
+
case 'TypeMismatchError':
|
|
66
|
+
return createFileSystemError(mismatchCode, syscall, targetPath);
|
|
67
|
+
case 'InvalidModificationError':
|
|
68
|
+
return createFileSystemError('ENOTEMPTY', syscall, targetPath);
|
|
69
|
+
case 'NoModificationAllowedError':
|
|
70
|
+
return createFileSystemError('EBUSY', syscall, targetPath);
|
|
71
|
+
case 'NotAllowedError':
|
|
72
|
+
return createFileSystemError('EACCES', syscall, targetPath);
|
|
73
|
+
default:
|
|
74
|
+
return createFileSystemError('EIO', syscall, targetPath, error.message);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Validates that a value is a usable path string.
|
|
82
|
+
*
|
|
83
|
+
* @param {unknown} value Candidate value.
|
|
84
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
85
|
+
* @returns {string} The validated path.
|
|
86
|
+
* @throws {TypeError} When the value is not a string or contains a null byte.
|
|
87
|
+
* @throws {Error} When the value is empty.
|
|
88
|
+
*/
|
|
89
|
+
const assertPath = (value, argumentName) => {
|
|
90
|
+
if (typeof value !== 'string') {
|
|
91
|
+
const received = value === null ? 'null' : typeof value;
|
|
92
|
+
throw new TypeError(
|
|
93
|
+
`The "${argumentName}" argument must be of type string. Received ${received}`,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
if (value.length === 0) {
|
|
97
|
+
throw createFileSystemError('ENOENT', 'open', value, 'path must not be empty');
|
|
98
|
+
}
|
|
99
|
+
if (value.includes(NULL_BYTE)) {
|
|
100
|
+
throw new TypeError('The "path" argument must not contain null bytes');
|
|
101
|
+
}
|
|
102
|
+
return value;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Validates that a value is a plain options object.
|
|
107
|
+
*
|
|
108
|
+
* @param {unknown} value Candidate value.
|
|
109
|
+
* @param {string} functionName Name used in the thrown message.
|
|
110
|
+
* @returns {Record<string, unknown>} The validated options object.
|
|
111
|
+
* @throws {TypeError} When the value is not a plain object.
|
|
112
|
+
*/
|
|
113
|
+
const assertOptionsObject = (value, functionName) => {
|
|
114
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
115
|
+
const received = value === null ? 'null' : Array.isArray(value) ? 'Array' : typeof value;
|
|
116
|
+
throw new TypeError(
|
|
117
|
+
`The "options" argument must be of type object. Received ${received} in ${functionName}()`,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
return /** @type {Record<string, unknown>} */ (value);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Validates an encoding identifier.
|
|
125
|
+
*
|
|
126
|
+
* @param {unknown} value Candidate encoding.
|
|
127
|
+
* @param {string} functionName Name used in the thrown message.
|
|
128
|
+
* @returns {string | null} The validated encoding, or `null` for binary mode.
|
|
129
|
+
* @throws {TypeError} When the encoding is not supported.
|
|
130
|
+
*/
|
|
131
|
+
const assertEncoding = (value, functionName) => {
|
|
132
|
+
if (value === null || value === undefined) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
if (typeof value !== 'string' || !constants.SUPPORTED_ENCODINGS.includes(value)) {
|
|
136
|
+
throw new TypeError(
|
|
137
|
+
`The "encoding" option must be one of ${constants.SUPPORTED_ENCODINGS.join(', ')}. ` +
|
|
138
|
+
`Received ${String(value)} in ${functionName}()`,
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
return value;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Validates a POSIX permission bitmask.
|
|
146
|
+
*
|
|
147
|
+
* @param {unknown} value Candidate mode.
|
|
148
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
149
|
+
* @returns {number} The validated mode.
|
|
150
|
+
* @throws {TypeError} When the value is not an integer.
|
|
151
|
+
* @throws {RangeError} When the value is outside the 12-bit range.
|
|
152
|
+
*/
|
|
153
|
+
const assertMode = (value, argumentName) => {
|
|
154
|
+
if (typeof value !== 'number' || !Number.isInteger(value)) {
|
|
155
|
+
throw new TypeError(`The "${argumentName}" argument must be an integer`);
|
|
156
|
+
}
|
|
157
|
+
if (value < 0 || value > 0o7777) {
|
|
158
|
+
throw new RangeError(`The "${argumentName}" argument must be between 0o0000 and 0o7777`);
|
|
159
|
+
}
|
|
160
|
+
return value;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Validates a non-negative integer.
|
|
165
|
+
*
|
|
166
|
+
* @param {unknown} value Candidate value.
|
|
167
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
168
|
+
* @returns {number} The validated integer.
|
|
169
|
+
* @throws {TypeError} When the value is not an integer.
|
|
170
|
+
* @throws {RangeError} When the value is negative.
|
|
171
|
+
*/
|
|
172
|
+
const assertInteger = (value, argumentName) => {
|
|
173
|
+
if (typeof value !== 'number' || !Number.isInteger(value)) {
|
|
174
|
+
throw new TypeError(`The "${argumentName}" argument must be an integer`);
|
|
175
|
+
}
|
|
176
|
+
if (value < 0) {
|
|
177
|
+
throw new RangeError(`The "${argumentName}" argument must not be negative`);
|
|
178
|
+
}
|
|
179
|
+
return value;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
exports.assertEncoding = assertEncoding;
|
|
183
|
+
exports.assertInteger = assertInteger;
|
|
184
|
+
exports.assertMode = assertMode;
|
|
185
|
+
exports.assertOptionsObject = assertOptionsObject;
|
|
186
|
+
exports.assertPath = assertPath;
|
|
187
|
+
exports.createFileSystemError = createFileSystemError;
|
|
188
|
+
exports.toFileSystemError = toFileSystemError;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Errno-style error helpers shared by every {@link TinyFSCore} backend.
|
|
3
|
+
*
|
|
4
|
+
* These helpers are intentionally dependency free so they can be imported from
|
|
5
|
+
* the abstract class, from concrete backends and from user code without
|
|
6
|
+
* creating circular imports.
|
|
7
|
+
*/
|
|
8
|
+
export type FileSystemErrorProperties = {
|
|
9
|
+
/**
|
|
10
|
+
* POSIX error code, e.g. `ENOENT`.
|
|
11
|
+
*/
|
|
12
|
+
code: string;
|
|
13
|
+
/**
|
|
14
|
+
* Alias of `code`, mirrors Node.js.
|
|
15
|
+
*/
|
|
16
|
+
errno: string;
|
|
17
|
+
/**
|
|
18
|
+
* Name of the originating operation.
|
|
19
|
+
*/
|
|
20
|
+
syscall: string;
|
|
21
|
+
/**
|
|
22
|
+
* Path the operation was applied to.
|
|
23
|
+
*/
|
|
24
|
+
path: string;
|
|
25
|
+
};
|
|
26
|
+
export type FileSystemError = Error & FileSystemErrorProperties;
|
|
27
|
+
/**
|
|
28
|
+
* @typedef {Object} FileSystemErrorProperties
|
|
29
|
+
* @property {string} code POSIX error code, e.g. `ENOENT`.
|
|
30
|
+
* @property {string} errno Alias of `code`, mirrors Node.js.
|
|
31
|
+
* @property {string} syscall Name of the originating operation.
|
|
32
|
+
* @property {string} path Path the operation was applied to.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* @typedef {Error & FileSystemErrorProperties} FileSystemError
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* Builds an errno-style error that matches the shape produced by Node.js.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} code POSIX error code, e.g. `ENOENT`.
|
|
41
|
+
* @param {string} syscall Name of the originating operation.
|
|
42
|
+
* @param {string} targetPath Path the operation was applied to.
|
|
43
|
+
* @param {string} [detail] Extra human readable context.
|
|
44
|
+
* @returns {FileSystemError} The formatted error.
|
|
45
|
+
*/
|
|
46
|
+
export declare const createFileSystemError: (code: string, syscall: string, targetPath: string, detail?: string) => FileSystemError;
|
|
47
|
+
/**
|
|
48
|
+
* Translates a `DOMException` thrown by a Web API into an errno-style error.
|
|
49
|
+
*
|
|
50
|
+
* @param {unknown} error The value caught from a browser call.
|
|
51
|
+
* @param {string} syscall Name of the originating operation.
|
|
52
|
+
* @param {string} targetPath Path the operation was applied to.
|
|
53
|
+
* @param {string} [mismatchCode] Error code used when the entry exists with the wrong type.
|
|
54
|
+
* @returns {FileSystemError | Error} An errno-style error.
|
|
55
|
+
*/
|
|
56
|
+
export declare const toFileSystemError: (error: unknown, syscall: string, targetPath: string, mismatchCode?: string) => FileSystemError | Error;
|
|
57
|
+
/**
|
|
58
|
+
* Validates that a value is a usable path string.
|
|
59
|
+
*
|
|
60
|
+
* @param {unknown} value Candidate value.
|
|
61
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
62
|
+
* @returns {string} The validated path.
|
|
63
|
+
* @throws {TypeError} When the value is not a string or contains a null byte.
|
|
64
|
+
* @throws {Error} When the value is empty.
|
|
65
|
+
*/
|
|
66
|
+
export declare const assertPath: (value: unknown, argumentName: string) => string;
|
|
67
|
+
/**
|
|
68
|
+
* Validates that a value is a plain options object.
|
|
69
|
+
*
|
|
70
|
+
* @param {unknown} value Candidate value.
|
|
71
|
+
* @param {string} functionName Name used in the thrown message.
|
|
72
|
+
* @returns {Record<string, unknown>} The validated options object.
|
|
73
|
+
* @throws {TypeError} When the value is not a plain object.
|
|
74
|
+
*/
|
|
75
|
+
export declare const assertOptionsObject: (value: unknown, functionName: string) => Record<string, unknown>;
|
|
76
|
+
/**
|
|
77
|
+
* Validates an encoding identifier.
|
|
78
|
+
*
|
|
79
|
+
* @param {unknown} value Candidate encoding.
|
|
80
|
+
* @param {string} functionName Name used in the thrown message.
|
|
81
|
+
* @returns {string | null} The validated encoding, or `null` for binary mode.
|
|
82
|
+
* @throws {TypeError} When the encoding is not supported.
|
|
83
|
+
*/
|
|
84
|
+
export declare const assertEncoding: (value: unknown, functionName: string) => string | null;
|
|
85
|
+
/**
|
|
86
|
+
* Validates a POSIX permission bitmask.
|
|
87
|
+
*
|
|
88
|
+
* @param {unknown} value Candidate mode.
|
|
89
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
90
|
+
* @returns {number} The validated mode.
|
|
91
|
+
* @throws {TypeError} When the value is not an integer.
|
|
92
|
+
* @throws {RangeError} When the value is outside the 12-bit range.
|
|
93
|
+
*/
|
|
94
|
+
export declare const assertMode: (value: unknown, argumentName: string) => number;
|
|
95
|
+
/**
|
|
96
|
+
* Validates a non-negative integer.
|
|
97
|
+
*
|
|
98
|
+
* @param {unknown} value Candidate value.
|
|
99
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
100
|
+
* @returns {number} The validated integer.
|
|
101
|
+
* @throws {TypeError} When the value is not an integer.
|
|
102
|
+
* @throws {RangeError} When the value is negative.
|
|
103
|
+
*/
|
|
104
|
+
export declare const assertInteger: (value: unknown, argumentName: string) => number;
|
|
105
|
+
//# sourceMappingURL=error.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.mts","sourceRoot":"","sources":["../../../../src/v1/libs/fs/error.mjs"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQA,YAAkB,yBAAyB,GAC3C;;;;IAAmB,IAAI,EAAZ,MAAM,CACjB;;;;IAAmB,KAAK,EAAb,MAAM,CACjB;;;;IAAmB,OAAO,EAAf,MAAM,CACjB;;;;IAAmB,IAAI,EAAZ,MAAM,CACnB;CAAA,CAAA;AAGE,YAA6C,eAAe,GAAlD,KAAK,GAAG,yBAAyB,CAAiB;AAT/D;;;;;;GAMG;AAEH;;GAEG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,SANvB,MAAM,WACN,MAAM,cACN,MAAM,WACN,MAAM,KACJ,eAaZ,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,UANnB,OAAO,WACP,MAAM,cACN,MAAM,iBACN,MAAM,KACJ,eAAe,GAAG,KAoB9B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,UANZ,OAAO,gBACP,MAAM,KACJ,MAkBZ,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,UALrB,OAAO,gBACP,MAAM,KACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAWlC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,UALhB,OAAO,gBACP,MAAM,KACJ,MAAM,GAAG,IAcrB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,UANZ,OAAO,gBACP,MAAM,KACJ,MAYZ,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,UANf,OAAO,gBACP,MAAM,KACJ,MAYZ,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Errno-style error helpers shared by every {@link TinyFSCore} backend.
|
|
3
|
+
*
|
|
4
|
+
* These helpers are intentionally dependency free so they can be imported from
|
|
5
|
+
* the abstract class, from concrete backends and from user code without
|
|
6
|
+
* creating circular imports.
|
|
7
|
+
*/
|
|
8
|
+
import { SUPPORTED_ENCODINGS } from './constants.mjs';
|
|
9
|
+
/** @type {string} */
|
|
10
|
+
const NULL_BYTE = '\u0000';
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {Object} FileSystemErrorProperties
|
|
13
|
+
* @property {string} code POSIX error code, e.g. `ENOENT`.
|
|
14
|
+
* @property {string} errno Alias of `code`, mirrors Node.js.
|
|
15
|
+
* @property {string} syscall Name of the originating operation.
|
|
16
|
+
* @property {string} path Path the operation was applied to.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @typedef {Error & FileSystemErrorProperties} FileSystemError
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Builds an errno-style error that matches the shape produced by Node.js.
|
|
23
|
+
*
|
|
24
|
+
* @param {string} code POSIX error code, e.g. `ENOENT`.
|
|
25
|
+
* @param {string} syscall Name of the originating operation.
|
|
26
|
+
* @param {string} targetPath Path the operation was applied to.
|
|
27
|
+
* @param {string} [detail] Extra human readable context.
|
|
28
|
+
* @returns {FileSystemError} The formatted error.
|
|
29
|
+
*/
|
|
30
|
+
export const createFileSystemError = (code, syscall, targetPath, detail = '') => {
|
|
31
|
+
const suffix = detail.length > 0 ? `, ${detail}` : '';
|
|
32
|
+
/** @type {FileSystemError} */
|
|
33
|
+
const error = /** @type {FileSystemError} */ (new Error(`${code}: ${syscall} '${targetPath}'${suffix}`));
|
|
34
|
+
error.code = code;
|
|
35
|
+
error.errno = code;
|
|
36
|
+
error.syscall = syscall;
|
|
37
|
+
error.path = targetPath;
|
|
38
|
+
return error;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Translates a `DOMException` thrown by a Web API into an errno-style error.
|
|
42
|
+
*
|
|
43
|
+
* @param {unknown} error The value caught from a browser call.
|
|
44
|
+
* @param {string} syscall Name of the originating operation.
|
|
45
|
+
* @param {string} targetPath Path the operation was applied to.
|
|
46
|
+
* @param {string} [mismatchCode] Error code used when the entry exists with the wrong type.
|
|
47
|
+
* @returns {FileSystemError | Error} An errno-style error.
|
|
48
|
+
*/
|
|
49
|
+
export const toFileSystemError = (error, syscall, targetPath, mismatchCode = 'ENOTDIR') => {
|
|
50
|
+
if (typeof DOMException !== 'undefined' && error instanceof DOMException) {
|
|
51
|
+
switch (error.name) {
|
|
52
|
+
case 'NotFoundError':
|
|
53
|
+
return createFileSystemError('ENOENT', syscall, targetPath);
|
|
54
|
+
case 'TypeMismatchError':
|
|
55
|
+
return createFileSystemError(mismatchCode, syscall, targetPath);
|
|
56
|
+
case 'InvalidModificationError':
|
|
57
|
+
return createFileSystemError('ENOTEMPTY', syscall, targetPath);
|
|
58
|
+
case 'NoModificationAllowedError':
|
|
59
|
+
return createFileSystemError('EBUSY', syscall, targetPath);
|
|
60
|
+
case 'NotAllowedError':
|
|
61
|
+
return createFileSystemError('EACCES', syscall, targetPath);
|
|
62
|
+
default:
|
|
63
|
+
return createFileSystemError('EIO', syscall, targetPath, error.message);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Validates that a value is a usable path string.
|
|
70
|
+
*
|
|
71
|
+
* @param {unknown} value Candidate value.
|
|
72
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
73
|
+
* @returns {string} The validated path.
|
|
74
|
+
* @throws {TypeError} When the value is not a string or contains a null byte.
|
|
75
|
+
* @throws {Error} When the value is empty.
|
|
76
|
+
*/
|
|
77
|
+
export const assertPath = (value, argumentName) => {
|
|
78
|
+
if (typeof value !== 'string') {
|
|
79
|
+
const received = value === null ? 'null' : typeof value;
|
|
80
|
+
throw new TypeError(`The "${argumentName}" argument must be of type string. Received ${received}`);
|
|
81
|
+
}
|
|
82
|
+
if (value.length === 0) {
|
|
83
|
+
throw createFileSystemError('ENOENT', 'open', value, 'path must not be empty');
|
|
84
|
+
}
|
|
85
|
+
if (value.includes(NULL_BYTE)) {
|
|
86
|
+
throw new TypeError('The "path" argument must not contain null bytes');
|
|
87
|
+
}
|
|
88
|
+
return value;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Validates that a value is a plain options object.
|
|
92
|
+
*
|
|
93
|
+
* @param {unknown} value Candidate value.
|
|
94
|
+
* @param {string} functionName Name used in the thrown message.
|
|
95
|
+
* @returns {Record<string, unknown>} The validated options object.
|
|
96
|
+
* @throws {TypeError} When the value is not a plain object.
|
|
97
|
+
*/
|
|
98
|
+
export const assertOptionsObject = (value, functionName) => {
|
|
99
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
100
|
+
const received = value === null ? 'null' : Array.isArray(value) ? 'Array' : typeof value;
|
|
101
|
+
throw new TypeError(`The "options" argument must be of type object. Received ${received} in ${functionName}()`);
|
|
102
|
+
}
|
|
103
|
+
return /** @type {Record<string, unknown>} */ (value);
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Validates an encoding identifier.
|
|
107
|
+
*
|
|
108
|
+
* @param {unknown} value Candidate encoding.
|
|
109
|
+
* @param {string} functionName Name used in the thrown message.
|
|
110
|
+
* @returns {string | null} The validated encoding, or `null` for binary mode.
|
|
111
|
+
* @throws {TypeError} When the encoding is not supported.
|
|
112
|
+
*/
|
|
113
|
+
export const assertEncoding = (value, functionName) => {
|
|
114
|
+
if (value === null || value === undefined) {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
if (typeof value !== 'string' || !SUPPORTED_ENCODINGS.includes(value)) {
|
|
118
|
+
throw new TypeError(`The "encoding" option must be one of ${SUPPORTED_ENCODINGS.join(', ')}. ` +
|
|
119
|
+
`Received ${String(value)} in ${functionName}()`);
|
|
120
|
+
}
|
|
121
|
+
return value;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Validates a POSIX permission bitmask.
|
|
125
|
+
*
|
|
126
|
+
* @param {unknown} value Candidate mode.
|
|
127
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
128
|
+
* @returns {number} The validated mode.
|
|
129
|
+
* @throws {TypeError} When the value is not an integer.
|
|
130
|
+
* @throws {RangeError} When the value is outside the 12-bit range.
|
|
131
|
+
*/
|
|
132
|
+
export const assertMode = (value, argumentName) => {
|
|
133
|
+
if (typeof value !== 'number' || !Number.isInteger(value)) {
|
|
134
|
+
throw new TypeError(`The "${argumentName}" argument must be an integer`);
|
|
135
|
+
}
|
|
136
|
+
if (value < 0 || value > 0o7777) {
|
|
137
|
+
throw new RangeError(`The "${argumentName}" argument must be between 0o0000 and 0o7777`);
|
|
138
|
+
}
|
|
139
|
+
return value;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Validates a non-negative integer.
|
|
143
|
+
*
|
|
144
|
+
* @param {unknown} value Candidate value.
|
|
145
|
+
* @param {string} argumentName Name used in the thrown message.
|
|
146
|
+
* @returns {number} The validated integer.
|
|
147
|
+
* @throws {TypeError} When the value is not an integer.
|
|
148
|
+
* @throws {RangeError} When the value is negative.
|
|
149
|
+
*/
|
|
150
|
+
export const assertInteger = (value, argumentName) => {
|
|
151
|
+
if (typeof value !== 'number' || !Number.isInteger(value)) {
|
|
152
|
+
throw new TypeError(`The "${argumentName}" argument must be an integer`);
|
|
153
|
+
}
|
|
154
|
+
if (value < 0) {
|
|
155
|
+
throw new RangeError(`The "${argumentName}" argument must not be negative`);
|
|
156
|
+
}
|
|
157
|
+
return value;
|
|
158
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var error = require('./error.cjs');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file Thin facade returned by {@link TinyFSCore#open}.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Handle returned by `open()`, shaped like `node:fs/promises.FileHandle`.
|
|
12
|
+
*
|
|
13
|
+
* The handle is a facade over the originating {@link TinyFSCore} instance.
|
|
14
|
+
* Every method delegates back to the file system, so no file descriptor is
|
|
15
|
+
* actually held open.
|
|
16
|
+
*/
|
|
17
|
+
class FileHandle {
|
|
18
|
+
/** @type {import('./index.mjs').default} */
|
|
19
|
+
#fs;
|
|
20
|
+
|
|
21
|
+
/** @type {string} */
|
|
22
|
+
#path;
|
|
23
|
+
|
|
24
|
+
/** @type {string} */
|
|
25
|
+
#flags;
|
|
26
|
+
|
|
27
|
+
/** @type {boolean} */
|
|
28
|
+
#closed;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {import('./index.mjs').default} fs Originating file system.
|
|
32
|
+
* @param {string} path Absolute path of the opened file.
|
|
33
|
+
* @param {string} flags Access mode the handle was opened with.
|
|
34
|
+
*/
|
|
35
|
+
constructor(fs, path, flags) {
|
|
36
|
+
this.#fs = fs;
|
|
37
|
+
this.#path = path;
|
|
38
|
+
this.#flags = flags;
|
|
39
|
+
this.#closed = false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** @returns {string} Absolute path of the opened file. */
|
|
43
|
+
get path() {
|
|
44
|
+
return this.#path;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** @returns {string} Access mode the handle was opened with. */
|
|
48
|
+
get flags() {
|
|
49
|
+
return this.#flags;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** @returns {boolean} `true` once `close()` has been awaited. */
|
|
53
|
+
get closed() {
|
|
54
|
+
return this.#closed;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @param {import('./index.mjs').TReadFileOptions} [options] Read options.
|
|
59
|
+
* @returns {Promise<string | Uint8Array>} The file contents.
|
|
60
|
+
*/
|
|
61
|
+
async readFile(options) {
|
|
62
|
+
this.#assertOpen();
|
|
63
|
+
return this.#fs.readFile(this.#path, options);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @param {string | Uint8Array | ArrayBuffer} data Payload to persist.
|
|
68
|
+
* @param {import('./index.mjs').TWriteFileOptions} [options] Write options.
|
|
69
|
+
* @returns {Promise<void>} Resolves once the payload is committed.
|
|
70
|
+
*/
|
|
71
|
+
async writeFile(data, options) {
|
|
72
|
+
this.#assertOpen();
|
|
73
|
+
return this.#fs.writeFile(this.#path, data, options);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param {string | Uint8Array | ArrayBuffer} data Payload to append.
|
|
78
|
+
* @param {import('./index.mjs').TWriteFileOptions} [options] Write options.
|
|
79
|
+
* @returns {Promise<void>} Resolves once the payload is committed.
|
|
80
|
+
*/
|
|
81
|
+
async appendFile(data, options) {
|
|
82
|
+
this.#assertOpen();
|
|
83
|
+
return this.#fs.appendFile(this.#path, data, options);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @returns {Promise<import('./stats.mjs').Stats>} A fresh snapshot of the file metadata.
|
|
88
|
+
*/
|
|
89
|
+
async stat() {
|
|
90
|
+
this.#assertOpen();
|
|
91
|
+
return this.#fs.stat(this.#path);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @param {number} [length] Target length in bytes.
|
|
96
|
+
* @returns {Promise<void>} Resolves once the file is truncated.
|
|
97
|
+
*/
|
|
98
|
+
async truncate(length) {
|
|
99
|
+
this.#assertOpen();
|
|
100
|
+
return this.#fs.truncate(this.#path, length);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @returns {Promise<void>} Resolves once the handle is released.
|
|
105
|
+
*/
|
|
106
|
+
async close() {
|
|
107
|
+
this.#closed = true;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @returns {void}
|
|
112
|
+
* @throws {Error} When the handle has already been closed.
|
|
113
|
+
*/
|
|
114
|
+
#assertOpen() {
|
|
115
|
+
if (this.#closed) {
|
|
116
|
+
throw error.createFileSystemError('EBADF', 'read', this.#path, 'file handle is closed');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
exports.FileHandle = FileHandle;
|