tiny-essentials 1.28.18 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/changelog/1/28/19.md +24 -0
- package/changelog/1/29/0.md +58 -0
- package/dist/v1/ColorSafeStringify.min.js +1 -1
- package/dist/v1/TinyAdvancedRaffle.min.js +1 -1
- package/dist/v1/TinyAfterScrollWatcher.min.js +1 -1
- package/dist/v1/TinyAnalogClock.min.js +1 -1
- package/dist/v1/TinyArrayComparator.min.js +1 -1
- package/dist/v1/TinyArrayPaginator.min.js +1 -1
- package/dist/v1/TinyBasicsEs.min.js +1 -1
- package/dist/v1/TinyBrowserMonitor.min.js +1 -0
- package/dist/v1/TinyClassManager.min.js +1 -1
- package/dist/v1/TinyClipboard.min.js +1 -1
- package/dist/v1/TinyCloner.min.js +1 -0
- package/dist/v1/TinyColorConverter.min.js +1 -1
- package/dist/v1/TinyColorValidator.min.js +1 -1
- package/dist/v1/TinyCookieConsent.min.js +1 -1
- package/dist/v1/TinyDayNightCycle.min.js +1 -1
- package/dist/v1/TinyDebugger.min.js +1 -1
- package/dist/v1/TinyDomReadyManager.min.js +1 -1
- package/dist/v1/TinyDragDropDetector.min.js +1 -1
- package/dist/v1/TinyDragger.min.js +1 -1
- package/dist/v1/TinyElementObserver.min.js +1 -1
- package/dist/v1/TinyEssentials.min.js +1 -1
- package/dist/v1/TinyGamepad.min.js +1 -1
- package/dist/v1/TinyHtml.min.js +1 -1
- package/dist/v1/TinyHtmlTagRegexBuilder.min.js +1 -0
- package/dist/v1/TinyHttpResponseRegistry.min.js +1 -0
- package/dist/v1/TinyI18.min.js +1 -1
- package/dist/v1/TinyIframeEvents.min.js +1 -1
- package/dist/v1/TinyInventory.min.js +1 -1
- package/dist/v1/TinyInventoryTrader.min.js +1 -1
- package/dist/v1/TinyLevelUp.min.js +1 -1
- package/dist/v1/TinyLoadingScreen.min.js +1 -1
- package/dist/v1/TinyLocalStorage.min.js +1 -1
- package/dist/v1/TinyMaInSys.min.js +1 -1
- package/dist/v1/TinyMapCache.min.js +1 -0
- package/dist/v1/TinyMediaPlayer.min.js +1 -1
- package/dist/v1/TinyNeedBar.min.js +1 -1
- package/dist/v1/TinyNewWinEvents.min.js +1 -1
- package/dist/v1/TinyNotificationAdapter.min.js +1 -0
- package/dist/v1/TinyNotifications.min.js +1 -1
- package/dist/v1/TinyNotifyCenter.min.js +1 -1
- package/dist/v1/TinyOPFSFileSystem.min.js +1 -0
- package/dist/v1/TinyPasswordValidator.min.js +1 -0
- package/dist/v1/TinyPluginPackage.min.js +1 -0
- package/dist/v1/TinyPromiseQueue.min.js +1 -1
- package/dist/v1/TinyPushManager.min.js +1 -0
- package/dist/v1/TinyPushPayload.min.js +1 -0
- package/dist/v1/TinyPushRouter.min.js +1 -0
- package/dist/v1/TinyRadioFm.min.js +1 -1
- package/dist/v1/TinyRateLimiter.min.js +1 -1
- package/dist/v1/TinyRegexEs.min.js +1 -0
- package/dist/v1/TinyRouter.min.js +1 -0
- package/dist/v1/TinyServiceWorker.min.js +1 -0
- package/dist/v1/TinyServiceWorkerEngine.min.js +1 -0
- package/dist/v1/TinySetMapPackage.min.js +1 -0
- package/dist/v1/TinySimpleDice.min.js +1 -1
- package/dist/v1/TinySmartScroller.min.js +1 -1
- package/dist/v1/TinyStorageBucketFileSystem.min.js +1 -0
- package/dist/v1/TinyTextDiffer.min.js +1 -1
- package/dist/v1/TinyTextRangeEditor.min.js +1 -1
- package/dist/v1/TinyTextarea.min.js +1 -1
- package/dist/v1/TinyThrottledApi.min.js +1 -0
- package/dist/v1/TinyTimeout.min.js +1 -1
- package/dist/v1/TinyToastNotify.min.js +1 -1
- package/dist/v1/TinyUploadClicker.min.js +1 -1
- package/dist/v1/TinyUriParser.min.js +1 -0
- package/dist/v1/TinyVersion.min.js +1 -0
- package/dist/v1/TinyWebWorker.min.js +1 -0
- package/dist/v1/TinyWebWorkerEngine.min.js +1 -0
- package/dist/v1/UltraRandomMsgGen.min.js +1 -1
- package/dist/v1/basics/array.cjs +2 -2
- package/dist/v1/basics/array.d.mts +2 -0
- package/dist/v1/basics/array.d.mts.map +1 -1
- package/dist/v1/basics/array.mjs +2 -1
- package/dist/v1/basics/browserDetector.cjs +37 -12
- package/dist/v1/basics/browserDetector.d.mts +8 -0
- package/dist/v1/basics/browserDetector.d.mts.map +1 -1
- package/dist/v1/basics/browserDetector.mjs +32 -13
- package/dist/v1/basics/crypto.cjs +23 -0
- package/dist/v1/basics/crypto.d.mts +10 -0
- package/dist/v1/basics/crypto.d.mts.map +1 -0
- package/dist/v1/basics/crypto.mjs +18 -0
- package/dist/v1/basics/html.cjs +0 -3
- package/dist/v1/basics/html.d.mts.map +1 -1
- package/dist/v1/basics/html.mjs +0 -2
- package/dist/v1/basics/index.cjs +8 -1
- package/dist/v1/basics/index.d.mts +6 -5
- package/dist/v1/basics/index.d.mts.map +1 -1
- package/dist/v1/basics/index.mjs +6 -5
- package/dist/v1/basics/objChecker.cjs +88 -0
- package/dist/v1/basics/objChecker.d.mts +26 -0
- package/dist/v1/basics/objChecker.d.mts.map +1 -1
- package/dist/v1/basics/objChecker.mjs +74 -0
- package/dist/v1/basics/objFilter.cjs +234 -93
- package/dist/v1/basics/objFilter.d.mts +96 -22
- package/dist/v1/basics/objFilter.d.mts.map +1 -1
- package/dist/v1/basics/objFilter.mjs +216 -92
- package/dist/v1/basics/promiseUtils.cjs +48 -12
- package/dist/v1/basics/promiseUtils.d.mts +45 -12
- package/dist/v1/basics/promiseUtils.d.mts.map +1 -1
- package/dist/v1/basics/promiseUtils.mjs +47 -12
- package/dist/v1/basics/text.cjs +0 -12
- package/dist/v1/basics/text.d.mts +0 -10
- package/dist/v1/basics/text.d.mts.map +1 -1
- package/dist/v1/basics/text.mjs +0 -10
- package/dist/v1/css/TinyCookieConsent.min.css +1 -0
- package/dist/v1/css/TinyCookieConsent.min.css.map +1 -0
- package/dist/v1/css/TinyDraggerExample.min.css +1 -0
- package/dist/v1/css/TinyDraggerExample.min.css.map +1 -0
- package/dist/v1/css/TinyLoadingScreen.min.css +1 -0
- package/dist/v1/css/TinyLoadingScreen.min.css.map +1 -0
- package/dist/v1/css/TinyNotify.min.css +1 -0
- package/dist/v1/css/TinyNotify.min.css.map +1 -0
- package/dist/v1/css/aiMarker.min.css +1 -0
- package/dist/v1/css/aiMarker.min.css.map +1 -0
- package/dist/v1/index.cjs +88 -3
- package/dist/v1/index.d.mts +31 -6
- package/dist/v1/index.d.mts.map +1 -1
- package/dist/v1/index.mjs +32 -7
- package/dist/v1/jsdoc/EventEmitter.cjs +4 -0
- package/dist/v1/jsdoc/EventEmitter.d.mts +33 -0
- package/dist/v1/jsdoc/EventEmitter.d.mts.map +1 -0
- package/dist/v1/jsdoc/EventEmitter.mjs +18 -0
- package/dist/v1/libs/array/TinyArrayComparator.cjs +240 -25
- package/dist/v1/libs/array/TinyArrayComparator.d.mts +130 -22
- package/dist/v1/libs/array/TinyArrayComparator.d.mts.map +1 -1
- package/dist/v1/libs/array/TinyArrayComparator.mjs +210 -24
- package/dist/v1/libs/fs/constants.cjs +74 -0
- package/dist/v1/libs/fs/constants.d.mts +22 -0
- package/dist/v1/libs/fs/constants.d.mts.map +1 -0
- package/dist/v1/libs/fs/constants.mjs +53 -0
- package/dist/v1/libs/fs/encoding.cjs +118 -0
- package/dist/v1/libs/fs/encoding.d.mts +50 -0
- package/dist/v1/libs/fs/encoding.d.mts.map +1 -0
- package/dist/v1/libs/fs/encoding.mjs +102 -0
- package/dist/v1/libs/fs/error.cjs +188 -0
- package/dist/v1/libs/fs/error.d.mts +105 -0
- package/dist/v1/libs/fs/error.d.mts.map +1 -0
- package/dist/v1/libs/fs/error.mjs +158 -0
- package/dist/v1/libs/fs/handle.cjs +121 -0
- package/dist/v1/libs/fs/handle.d.mts +56 -0
- package/dist/v1/libs/fs/handle.d.mts.map +1 -0
- package/dist/v1/libs/fs/handle.mjs +100 -0
- package/dist/v1/libs/fs/index.cjs +700 -0
- package/dist/v1/libs/fs/index.d.mts +377 -0
- package/dist/v1/libs/fs/index.d.mts.map +1 -0
- package/dist/v1/libs/fs/index.mjs +630 -0
- package/dist/v1/libs/fs/path.cjs +234 -0
- package/dist/v1/libs/fs/path.d.mts +176 -0
- package/dist/v1/libs/fs/path.d.mts.map +1 -0
- package/dist/v1/libs/fs/path.mjs +197 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.cjs +202 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts +121 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.d.mts.map +1 -0
- package/dist/v1/libs/fs/plugins/OPFS/StorageBucket.mjs +172 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.cjs +334 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.d.mts +98 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.d.mts.map +1 -0
- package/dist/v1/libs/fs/plugins/OPFS/index.mjs +300 -0
- package/dist/v1/libs/fs/stats.cjs +245 -0
- package/dist/v1/libs/fs/stats.d.mts +226 -0
- package/dist/v1/libs/fs/stats.d.mts.map +1 -0
- package/dist/v1/libs/fs/stats.mjs +197 -0
- package/dist/v1/libs/html/events/TinyIframeEvents.cjs +10 -1
- package/dist/v1/libs/html/events/TinyIframeEvents.d.mts +9 -2
- package/dist/v1/libs/html/events/TinyIframeEvents.d.mts.map +1 -1
- package/dist/v1/libs/html/events/TinyIframeEvents.mjs +8 -1
- package/dist/v1/libs/html/events/TinyNewWinEvents.cjs +14 -3
- package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts +21 -5
- package/dist/v1/libs/html/events/TinyNewWinEvents.d.mts.map +1 -1
- package/dist/v1/libs/html/events/TinyNewWinEvents.mjs +12 -3
- package/dist/v1/libs/html/scroll/TinySmartScroller.cjs +13 -1
- package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts +29 -2
- package/dist/v1/libs/html/scroll/TinySmartScroller.d.mts.map +1 -1
- package/dist/v1/libs/html/scroll/TinySmartScroller.mjs +11 -1
- package/dist/v1/libs/math/TinyAdvancedRaffle.cjs +13 -1
- package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts +32 -2
- package/dist/v1/libs/math/TinyAdvancedRaffle.d.mts.map +1 -1
- package/dist/v1/libs/math/TinyAdvancedRaffle.mjs +11 -1
- package/dist/v1/libs/math/TinyTimeout.cjs +0 -14
- package/dist/v1/libs/math/TinyTimeout.d.mts +0 -11
- package/dist/v1/libs/math/TinyTimeout.d.mts.map +1 -1
- package/dist/v1/libs/math/TinyTimeout.mjs +0 -13
- package/dist/v1/libs/media/TinyMediaPlayer/index.cjs +25 -1
- package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts +35 -2
- package/dist/v1/libs/media/TinyMediaPlayer/index.d.mts.map +1 -1
- package/dist/v1/libs/media/TinyMediaPlayer/index.mjs +23 -1
- package/dist/v1/libs/media/TinyMediaPlayer.cjs +2 -2
- package/dist/v1/libs/media/TinyMediaPlayer.d.mts +2 -2
- package/dist/v1/libs/media/TinyMediaPlayer.d.mts.map +1 -1
- package/dist/v1/libs/media/TinyMediaPlayer.mjs +2 -2
- package/dist/v1/libs/media/TinyRadioFm.cjs +19 -1
- package/dist/v1/libs/media/TinyRadioFm.d.mts +78 -2
- package/dist/v1/libs/media/TinyRadioFm.d.mts.map +1 -1
- package/dist/v1/libs/media/TinyRadioFm.mjs +17 -1
- package/dist/v1/libs/plugin/TinyPlugin.cjs +1630 -0
- package/dist/v1/libs/plugin/TinyPlugin.d.mts +753 -0
- package/dist/v1/libs/plugin/TinyPlugin.d.mts.map +1 -0
- package/dist/v1/libs/plugin/TinyPlugin.mjs +1376 -0
- package/dist/v1/libs/plugin/TinyVersion.cjs +204 -0
- package/dist/v1/libs/plugin/TinyVersion.d.mts +70 -0
- package/dist/v1/libs/plugin/TinyVersion.d.mts.map +1 -0
- package/dist/v1/libs/plugin/TinyVersion.mjs +179 -0
- package/dist/v1/libs/router/TinyRouter.cjs +661 -0
- package/dist/v1/libs/router/TinyRouter.d.mts +320 -0
- package/dist/v1/libs/router/TinyRouter.d.mts.map +1 -0
- package/dist/v1/libs/router/TinyRouter.mjs +572 -0
- package/dist/v1/libs/storage/TinyLocalStorage.cjs +20 -1
- package/dist/v1/libs/storage/TinyLocalStorage.d.mts +64 -2
- package/dist/v1/libs/storage/TinyLocalStorage.d.mts.map +1 -1
- package/dist/v1/libs/storage/TinyLocalStorage.mjs +18 -1
- package/dist/v1/libs/storage/TinyMapCache.cjs +373 -0
- package/dist/v1/libs/storage/TinyMapCache.d.mts +274 -0
- package/dist/v1/libs/storage/TinyMapCache.d.mts.map +1 -0
- package/dist/v1/libs/storage/TinyMapCache.mjs +333 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.cjs +1167 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.d.mts +603 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.d.mts.map +1 -0
- package/dist/v1/libs/storage/TinySetMapDatabase.mjs +1059 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.cjs +126 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts +132 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/TinyNotificationAdapter.mjs +109 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.cjs +310 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.d.mts +168 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/TinyPushManager.mjs +264 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.cjs +1060 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts +348 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/TinyServiceWorker.mjs +933 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.cjs +315 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts +178 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/plugins/TabManager.mjs +274 -0
- package/dist/v1/libs/sw/browser/utils.cjs +28 -0
- package/dist/v1/libs/sw/browser/utils.d.mts +8 -0
- package/dist/v1/libs/sw/browser/utils.d.mts.map +1 -0
- package/dist/v1/libs/sw/browser/utils.mjs +21 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.cjs +222 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.d.mts +138 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/TinyPushRouter.mjs +201 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.cjs +3016 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts +993 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/TinyServiceWorkerEngine.mjs +2558 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.cjs +88 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts +32 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/GlobBypassPlugin.mjs +69 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.cjs +112 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts +31 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/GlobCachePlugin.mjs +91 -0
- package/dist/v1/libs/sw/service/plugins/Ping.cjs +32 -0
- package/dist/v1/libs/sw/service/plugins/Ping.d.mts +9 -0
- package/dist/v1/libs/sw/service/plugins/Ping.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/Ping.mjs +25 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.cjs +457 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.d.mts +91 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/TabManager.mjs +372 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.cjs +180 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts +28 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/plugins/ViteFileDetector.mjs +148 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.cjs +199 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts +80 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.d.mts.map +1 -0
- package/dist/v1/libs/sw/service/shared/TinyPushPayload.mjs +174 -0
- package/dist/v1/libs/sw/utils.cjs +57 -0
- package/dist/v1/libs/sw/utils.d.mts +173 -0
- package/dist/v1/libs/sw/utils.d.mts.map +1 -0
- package/dist/v1/libs/sw/utils.mjs +50 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.cjs +57 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts +39 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/Browser-NON-DOM.mjs +48 -0
- package/dist/v1/libs/text/TinyI18/Browser.cjs +64 -0
- package/dist/v1/libs/text/TinyI18/Browser.d.mts +47 -0
- package/dist/v1/libs/text/TinyI18/Browser.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/Browser.mjs +57 -0
- package/dist/v1/libs/text/TinyI18/Node.cjs +49 -0
- package/dist/v1/libs/text/TinyI18/Node.d.mts +38 -0
- package/dist/v1/libs/text/TinyI18/Node.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/Node.mjs +43 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.cjs +17 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.d.mts +8 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.d.mts.map +1 -0
- package/dist/v1/libs/text/TinyI18/browser-utils.mjs +13 -0
- package/dist/v1/libs/text/{TinyI18.cjs → TinyI18/index.cjs} +205 -104
- package/dist/v1/libs/text/{TinyI18.d.mts → TinyI18/index.d.mts} +141 -92
- package/dist/v1/libs/text/TinyI18/index.d.mts.map +1 -0
- package/dist/v1/libs/text/{TinyI18.mjs → TinyI18/index.mjs} +195 -101
- package/dist/v1/libs/tools/TinyBrowserMonitor.cjs +1088 -0
- package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts +621 -0
- package/dist/v1/libs/tools/TinyBrowserMonitor.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyBrowserMonitor.mjs +940 -0
- package/dist/v1/libs/tools/TinyDebugger.cjs +180 -19
- package/dist/v1/libs/tools/TinyDebugger.d.mts +220 -24
- package/dist/v1/libs/tools/TinyDebugger.d.mts.map +1 -1
- package/dist/v1/libs/tools/TinyDebugger.mjs +161 -19
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.cjs +256 -0
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts +125 -0
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHtmlTagRegexBuilder.mjs +223 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.cjs +23 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts +17 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser-NON-DOM.mjs +19 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.cjs +23 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts +17 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Browser.mjs +19 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.cjs +390 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts +9 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/EmptyRequestCodes.mjs +387 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.cjs +2 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts +27 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/JsDoc.mjs +12 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/LICENSE +53 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.cjs +405 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts +34 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/MozillaRequestCodes/index.mjs +342 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.cjs +23 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts +17 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/Node.mjs +19 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.cjs +327 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts +9 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/RequestCodes.mjs +324 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.cjs +268 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts +107 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyHttpResponseRegistry/index.mjs +238 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.cjs +491 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.d.mts +246 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyPasswordValidator.mjs +434 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.cjs +48 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts +14 -0
- package/dist/v1/libs/tools/TinyPkgExportValidator.d.mts.map +1 -1
- package/dist/v1/libs/tools/TinyPkgExportValidator.mjs +44 -0
- package/dist/v1/libs/tools/TinySiteMap.cjs +1029 -0
- package/dist/v1/libs/tools/TinySiteMap.d.mts +429 -0
- package/dist/v1/libs/tools/TinySiteMap.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinySiteMap.mjs +910 -0
- package/dist/v1/libs/tools/TinySiteMapStream.cjs +121 -0
- package/dist/v1/libs/tools/TinySiteMapStream.d.mts +51 -0
- package/dist/v1/libs/tools/TinySiteMapStream.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinySiteMapStream.mjs +85 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.cjs +444 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts +217 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyURLSecurityVerifier.mjs +394 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.cjs +613 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts +152 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser/BlueSky.mjs +527 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.cjs +1119 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts +306 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser/Discord.mjs +968 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.cjs +469 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts +80 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser/MatrixProtocol.mjs +379 -0
- package/dist/v1/libs/tools/TinyUriParser.cjs +217 -0
- package/dist/v1/libs/tools/TinyUriParser.d.mts +109 -0
- package/dist/v1/libs/tools/TinyUriParser.d.mts.map +1 -0
- package/dist/v1/libs/tools/TinyUriParser.mjs +183 -0
- package/dist/v1/libs/utils/TinyCloner.cjs +466 -0
- package/dist/v1/libs/utils/TinyCloner.d.mts +221 -0
- package/dist/v1/libs/utils/TinyCloner.d.mts.map +1 -0
- package/dist/v1/libs/utils/TinyCloner.mjs +416 -0
- package/dist/v1/libs/utils/TinyPromiseQueue.cjs +1 -1
- package/dist/v1/libs/utils/TinyPromiseQueue.d.mts +2 -2
- package/dist/v1/libs/utils/TinyPromiseQueue.d.mts.map +1 -1
- package/dist/v1/libs/utils/TinyPromiseQueue.mjs +1 -1
- package/dist/v1/libs/utils/TinyThrottledApi.cjs +333 -0
- package/dist/v1/libs/utils/TinyThrottledApi.d.mts +163 -0
- package/dist/v1/libs/utils/TinyThrottledApi.d.mts.map +1 -0
- package/dist/v1/libs/utils/TinyThrottledApi.mjs +294 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.cjs +342 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts +97 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.d.mts.map +1 -0
- package/dist/v1/libs/worker/browser/TinyWebWorker.mjs +305 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.cjs +346 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts +127 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.d.mts.map +1 -0
- package/dist/v1/libs/worker/engine/TinyWebWorkerEngine.mjs +304 -0
- package/dist/v1/regexp/Email.cjs +185 -0
- package/dist/v1/regexp/Email.d.mts +73 -0
- package/dist/v1/regexp/Email.d.mts.map +1 -0
- package/dist/v1/regexp/Email.mjs +153 -0
- package/dist/v1/regexp/Glob.cjs +293 -0
- package/dist/v1/regexp/Glob.d.mts +45 -0
- package/dist/v1/regexp/Glob.d.mts.map +1 -0
- package/dist/v1/regexp/Glob.mjs +260 -0
- package/dist/v1/regexp/Ipv4.cjs +57 -0
- package/dist/v1/regexp/Ipv4.d.mts +29 -0
- package/dist/v1/regexp/Ipv4.d.mts.map +1 -0
- package/dist/v1/regexp/Ipv4.mjs +45 -0
- package/dist/v1/regexp/Ipv6.cjs +67 -0
- package/dist/v1/regexp/Ipv6.d.mts +29 -0
- package/dist/v1/regexp/Ipv6.d.mts.map +1 -0
- package/dist/v1/regexp/Ipv6.mjs +54 -0
- package/dist/v1/regexp/SegmentExtractor.cjs +145 -0
- package/dist/v1/regexp/SegmentExtractor.d.mts +91 -0
- package/dist/v1/regexp/SegmentExtractor.d.mts.map +1 -0
- package/dist/v1/regexp/SegmentExtractor.mjs +116 -0
- package/dist/v1/regexp/UrlDetector.cjs +125 -0
- package/dist/v1/regexp/UrlDetector.d.mts +67 -0
- package/dist/v1/regexp/UrlDetector.d.mts.map +1 -0
- package/dist/v1/regexp/UrlDetector.mjs +102 -0
- package/dist/v1/regexp/Username/index.cjs +233 -0
- package/dist/v1/regexp/Username/index.d.mts +77 -0
- package/dist/v1/regexp/Username/index.d.mts.map +1 -0
- package/dist/v1/regexp/Username/index.mjs +199 -0
- package/dist/v1/regexp/Username/jsDoc.cjs +2 -0
- package/dist/v1/regexp/Username/jsDoc.d.mts +57 -0
- package/dist/v1/regexp/Username/jsDoc.d.mts.map +1 -0
- package/dist/v1/regexp/Username/jsDoc.mjs +18 -0
- package/dist/v1/regexp/Username/templates/BlueSky.cjs +56 -0
- package/dist/v1/regexp/Username/templates/BlueSky.d.mts +35 -0
- package/dist/v1/regexp/Username/templates/BlueSky.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/BlueSky.mjs +52 -0
- package/dist/v1/regexp/Username/templates/Discord.cjs +505 -0
- package/dist/v1/regexp/Username/templates/Discord.d.mts +209 -0
- package/dist/v1/regexp/Username/templates/Discord.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/Discord.mjs +458 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.cjs +143 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts +70 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/MatrixProtocol.mjs +128 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.cjs +24 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts +17 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/deprecated/Discord.mjs +20 -0
- package/dist/v1/regexp/Username/templates/index.cjs +11 -0
- package/dist/v1/regexp/Username/templates/index.d.mts +5 -0
- package/dist/v1/regexp/Username/templates/index.d.mts.map +1 -0
- package/dist/v1/regexp/Username/templates/index.mjs +4 -0
- package/dist/v1/regexp/index.cjs +41 -0
- package/dist/v1/regexp/index.d.mts +9 -0
- package/dist/v1/regexp/index.d.mts.map +1 -0
- package/dist/v1/regexp/index.mjs +8 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.cjs +64 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts +11 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Browser.mjs +51 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.cjs +66 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts +11 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/FileInput.mjs +51 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.cjs +39 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts +11 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Node.mjs +28 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.cjs +494 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts +142 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.d.mts.map +1 -0
- package/dist/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters/Template.mjs +445 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.cjs +725 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts +293 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.d.mts.map +1 -0
- package/dist/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.mjs +614 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/input/Placeholder-Colors-Fix.scss +64 -0
- package/dist/v1/webTemplates/bootstrap/5.3/scss/spacing/Spacing-Plus.scss +31 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.cjs +135 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts +83 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.d.mts.map +1 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Browser/index.mjs +120 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.cjs +127 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts +95 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.d.mts.map +1 -0
- package/dist/v1/webTemplates/media/MediaValidator/v1/Node/index.mjs +109 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.cjs +83 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts +46 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.d.mts.map +1 -0
- package/dist/v1/webTemplates/multiformats/14.0/IPFSHasher/index.mjs +71 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.cjs +493 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts +67 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.d.mts.map +1 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.mjs +399 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.cjs +35 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts +6 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.d.mts.map +1 -0
- package/dist/v1/webTemplates/vite/7.3/plugins/githubUtils.mjs +29 -0
- package/docs/info/RegExp.md +74 -0
- package/docs/v1/Exports.md +111 -0
- package/docs/v1/README.md +117 -13
- package/docs/v1/basics/asyncReplace.md +2 -0
- package/docs/v1/basics/browserDetector.md +28 -11
- package/docs/v1/basics/crypto.md +85 -0
- package/docs/v1/basics/deprecated/html.md +2 -0
- package/docs/v1/basics/deprecated/objFilter.md +2 -0
- package/docs/v1/basics/html.md +2 -0
- package/docs/v1/basics/objChecker.md +55 -0
- package/docs/v1/basics/objFilter.md +57 -86
- package/docs/v1/basics/promiseUtils.md +12 -3
- package/docs/v1/basics/text.md +0 -1
- package/docs/v1/libs/array/TinyArrayComparator.md +50 -39
- package/docs/v1/libs/fs/TinyFS.md +752 -0
- package/docs/v1/libs/fs/TinyOPFSFileSystem.md +495 -0
- package/docs/v1/libs/fs/TinyStorageBucketFileSystem.md +407 -0
- package/docs/v1/libs/plugin/TinyPlugin.md +441 -0
- package/docs/v1/libs/plugin/TinyVersion.md +145 -0
- package/docs/v1/libs/router/TinyRouter.md +216 -0
- package/docs/v1/libs/storage/TinyMapCache.md +219 -0
- package/docs/v1/libs/storage/TinySetMapDatabase.md +478 -0
- package/docs/v1/libs/sw/browser/TinyNotificationAdapter.md +280 -0
- package/docs/v1/libs/sw/browser/TinyPushManager.md +782 -0
- package/docs/v1/libs/sw/browser/TinyServiceWorker.md +365 -0
- package/docs/v1/libs/sw/browser/plugins/TabManager.md +133 -0
- package/docs/v1/libs/sw/service/TinyPushRouter.md +314 -0
- package/docs/v1/libs/sw/service/TinyServiceWorkerEngine.md +748 -0
- package/docs/v1/libs/sw/service/plugins/GlobBypassPlugin.md +229 -0
- package/docs/v1/libs/sw/service/plugins/GlobCachePlugin.md +91 -0
- package/docs/v1/libs/sw/service/plugins/Ping.md +36 -0
- package/docs/v1/libs/sw/service/plugins/TabManager.md +64 -0
- package/docs/v1/libs/sw/service/plugins/ViteFileDetector.md +92 -0
- package/docs/v1/libs/sw/service/shared/TinyPushPayload.md +316 -0
- package/docs/v1/libs/text/TinyI18.md +80 -56
- package/docs/v1/libs/tools/TinyBrowserMonitor.md +170 -0
- package/docs/v1/libs/tools/TinyDebugger.md +117 -1
- package/docs/v1/libs/tools/TinyHtmlTagRegexBuilder.md +141 -0
- package/docs/v1/libs/tools/TinyHttpResponseRegistry.md +129 -0
- package/docs/v1/libs/tools/TinyPasswordValidator.md +153 -0
- package/docs/v1/libs/tools/TinyPkgExportValidator.md +45 -1
- package/docs/v1/libs/tools/TinySiteMap.md +134 -0
- package/docs/v1/libs/tools/TinySiteMapStream.md +97 -0
- package/docs/v1/libs/tools/TinyURLSecurityVerifier.md +146 -0
- package/docs/v1/libs/tools/TinyUriParser/Discord.md +374 -0
- package/docs/v1/libs/tools/TinyUriParser/MatrixProtocol.md +54 -0
- package/docs/v1/libs/tools/TinyUriParser.md +128 -0
- package/docs/v1/libs/utils/TinyCloner.md +126 -0
- package/docs/v1/libs/utils/TinyPromiseQueue.md +1 -1
- package/docs/v1/libs/utils/TinyThrottledApi.md +219 -0
- package/docs/v1/libs/worker/browser/TinyWebWorker.md +331 -0
- package/docs/v1/libs/worker/engine/TinyWebWorkerEngine.md +137 -0
- package/docs/v1/regexp/Email.md +127 -0
- package/docs/v1/regexp/Glob.md +155 -0
- package/docs/v1/regexp/IPv4.md +103 -0
- package/docs/v1/regexp/IPv6.md +122 -0
- package/docs/v1/regexp/SegmentExtractor.md +120 -0
- package/docs/v1/regexp/UrlDetector.md +117 -0
- package/docs/v1/regexp/Username/Base.md +131 -0
- package/docs/v1/regexp/Username/Discord.md +267 -0
- package/docs/v1/regexp/Username/MatrixProtocol.md +131 -0
- package/docs/v1/webTemplates/ag-psd/31.0/ProcessSolidFilters.md +569 -0
- package/docs/v1/webTemplates/bootstrap/5.3/html/BootstrapDialogs.md +174 -0
- package/docs/v1/webTemplates/media/MediaValidator/v1/Browser.md +123 -0
- package/docs/v1/webTemplates/media/MediaValidator/v1/Node.md +136 -0
- package/docs/v1/webTemplates/multiformats/14.0/IPFSHasher.md +310 -0
- package/docs/v1/webTemplates/vite/7.3/plugins/TinyVitePwaPlugin.md +131 -0
- package/docs/v1/webTemplates/vite/7.3/plugins/githubUtils.md +50 -0
- package/package.json +313 -18
- package/types/EventEmitter.d.ts +48 -0
- package/dist/v1/libs/text/TinyI18.d.mts.map +0 -1
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
# 🪣 TinyFS Storage Bucket Backend
|
|
2
|
+
|
|
3
|
+
> A [`TinyFSCore`](./TinyFS.md) backend that scopes the entire file system to a single
|
|
4
|
+
> [Storage Bucket](https://developer.mozilla.org/en-US/docs/Web/API/Storage_Buckets_API).
|
|
5
|
+
|
|
6
|
+
A storage bucket is an **isolated origin private file system**. This backend reuses every
|
|
7
|
+
primitive implemented by [`TinyOPFSFileSystem`](./TinyOPFSFileSystem.md) and only overrides how the root
|
|
8
|
+
directory handle is resolved. A bucket behaves exactly like the default origin private file
|
|
9
|
+
system — it just lives somewhere else.
|
|
10
|
+
|
|
11
|
+
Use it when you need **multiple, independent file systems** in the same origin: one per
|
|
12
|
+
user account, per workspace, per document, or per test.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 📑 Table of Contents
|
|
17
|
+
|
|
18
|
+
1. [Why This Exists](#-why-this-exists)
|
|
19
|
+
2. [Features](#-features)
|
|
20
|
+
3. [Requirements](#-requirements)
|
|
21
|
+
4. [Project Layout](#-project-layout)
|
|
22
|
+
5. [Quick Start](#-quick-start)
|
|
23
|
+
6. [Core Concepts](#-core-concepts)
|
|
24
|
+
- [Bucket Isolation](#1--bucket-isolation)
|
|
25
|
+
- [Lazy Resolution](#2--lazy-resolution)
|
|
26
|
+
- [Inheritance Chain](#3--inheritance-chain)
|
|
27
|
+
7. [API Reference](#-api-reference)
|
|
28
|
+
- [Constructor](#constructor)
|
|
29
|
+
- [Static Members](#static-members)
|
|
30
|
+
- [Instance Members](#instance-members)
|
|
31
|
+
- [Inherited Members](#inherited-members)
|
|
32
|
+
8. [Compatibility Matrix](#-compatibility-matrix)
|
|
33
|
+
9. [Daily Workflow Recipes](#-daily-workflow-recipes)
|
|
34
|
+
10. [Error Codes](#-error-codes)
|
|
35
|
+
11. [Known Divergences and Gotchas](#-known-divergences-and-gotchas)
|
|
36
|
+
12. [Cheatsheet](#-cheatsheet)
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 🤔 Why This Exists
|
|
41
|
+
|
|
42
|
+
The OPFS root is a single, shared namespace. That is fine until you need two of them:
|
|
43
|
+
|
|
44
|
+
- A **multi-account** app where each account must not see the other's files.
|
|
45
|
+
- A **test suite** where every test needs a clean slate.
|
|
46
|
+
- A **document editor** where each document owns a scratch directory.
|
|
47
|
+
- A **plugin host** where a misbehaving plugin must not read the host's files.
|
|
48
|
+
|
|
49
|
+
You *could* prefix every path with a directory name. Buckets are better: the browser
|
|
50
|
+
enforces the boundary, `listBuckets()` enumerates them, and `deleteBucket()` removes one
|
|
51
|
+
atomically.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## ✨ Features
|
|
56
|
+
|
|
57
|
+
| Feature | Status |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| 🗂️ Multiple isolated file systems per origin | ✅ |
|
|
60
|
+
| 🔒 Browser-enforced isolation | ✅ |
|
|
61
|
+
| 🧬 Inherits every OPFS primitive | ✅ |
|
|
62
|
+
| 📦 Zero runtime dependencies | ✅ |
|
|
63
|
+
| 🎛️ Per-bucket quota and durability | ✅ |
|
|
64
|
+
| ⏳ Per-bucket expiration | ✅ |
|
|
65
|
+
| 🧪 Trivially mockable | ✅ |
|
|
66
|
+
| 🔐 POSIX permissions | 🧠 Emulated in memory |
|
|
67
|
+
| 🕐 Timestamps | 🧠 Emulated in memory |
|
|
68
|
+
| 🌐 Browser support | ⚠️ Chromium 122+ only |
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 📋 Requirements
|
|
73
|
+
|
|
74
|
+
- A **secure context** (`https://` or `localhost`).
|
|
75
|
+
- A browser with the **Storage Buckets API**: Chrome 122+, Edge 122+.
|
|
76
|
+
- The `navigator.storageBuckets` object.
|
|
77
|
+
|
|
78
|
+
> ⚠️ **Firefox and Safari do not implement the Storage Buckets API.** Always check
|
|
79
|
+
> `TinyStorageBucketFileSystem.isSupported` before constructing an instance. See
|
|
80
|
+
> [Recipe 5](#-recipe-5--graceful-fallback).
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 🚀 Quick Start
|
|
85
|
+
|
|
86
|
+
```javascript
|
|
87
|
+
import TinyStorageBucketFileSystem from 'tiny-essentials/libs/fs/plugins/OPFS/StorageBucket';
|
|
88
|
+
|
|
89
|
+
const fs = new TinyStorageBucketFileSystem({
|
|
90
|
+
bucket: { name: 'workspace-42', durability: 'strict' },
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
await fs.mkdir('/projects', { recursive: true });
|
|
94
|
+
await fs.writeFile('/projects/notes.txt', 'hello from a bucket', { encoding: 'utf8' });
|
|
95
|
+
|
|
96
|
+
const text = await fs.readFile('/projects/notes.txt', { encoding: 'utf8' });
|
|
97
|
+
console.log(text); // "hello from a bucket"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The same path in a different bucket is a **different file**:
|
|
101
|
+
|
|
102
|
+
```javascript
|
|
103
|
+
const other = new TinyStorageBucketFileSystem({ bucket: { name: 'workspace-99' } });
|
|
104
|
+
|
|
105
|
+
await other.exists('/projects/notes.txt'); // false
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 🧠 Core Concepts
|
|
111
|
+
|
|
112
|
+
### 1. 🔒 Bucket Isolation
|
|
113
|
+
|
|
114
|
+
A bucket is a completely separate file system. Two instances with different `bucket.name`
|
|
115
|
+
values share nothing:
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
Origin
|
|
119
|
+
├── bucket: "workspace-42"
|
|
120
|
+
│ └── /projects/notes.txt
|
|
121
|
+
└── bucket: "workspace-99"
|
|
122
|
+
└── /projects/notes.txt ← a different file
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The isolation is enforced by the **browser**, not by string prefixing. A path traversal
|
|
126
|
+
attack cannot escape a bucket.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### 2. ⏳ Lazy Resolution
|
|
131
|
+
|
|
132
|
+
The constructor does **not** touch the Storage Buckets API. The bucket is opened on the
|
|
133
|
+
first I/O operation and the resulting handle is cached in a private field.
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
const fs = new TinyStorageBucketFileSystem({ bucket: { name: 'lazy' } });
|
|
137
|
+
// navigator.storageBuckets.open() has NOT been called yet.
|
|
138
|
+
|
|
139
|
+
await fs.readFile('/missing.txt');
|
|
140
|
+
// 1. _resolveRoot() runs.
|
|
141
|
+
// 2. #assertSupported('open') passes.
|
|
142
|
+
// 3. navigator.storageBuckets.open('lazy', {}) is awaited.
|
|
143
|
+
// 4. bucket.getDirectory() is awaited.
|
|
144
|
+
// 5. The handle is cached in #bucketRoot.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Consequence:** a malformed environment does not throw in the constructor. It throws on the
|
|
148
|
+
first `await`.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### 3. 🧬 Inheritance Chain
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
TinyFSCore
|
|
156
|
+
▲
|
|
157
|
+
│ (implements the metadata side table, permissions, encoding)
|
|
158
|
+
│
|
|
159
|
+
TinyOPFSFileSystem
|
|
160
|
+
▲
|
|
161
|
+
│ (implements every hook against the OPFS API)
|
|
162
|
+
│
|
|
163
|
+
TinyStorageBucketFileSystem
|
|
164
|
+
(overrides _resolveRoot only)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
This backend adds **one** override (`_resolveRoot`) and **three** static members. Everything
|
|
168
|
+
else is inherited. Read the [OPFS documentation](./TinyOPFSFileSystem.md) for the full behaviour of every
|
|
169
|
+
file operation.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 📚 API Reference
|
|
174
|
+
|
|
175
|
+
### Constructor
|
|
176
|
+
|
|
177
|
+
```javascript
|
|
178
|
+
new TinyStorageBucketFileSystem(options?)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
| Option | Type | Default | Description |
|
|
182
|
+
| --- | --- | --- | --- |
|
|
183
|
+
| `options.bucket` | `StorageBucketDescriptor` | `{ name: 'tiny-fs' }` | Bucket configuration. |
|
|
184
|
+
| `options.cwd` | `string` | `ROOT_PATH` | Forwarded to `TinyFSCore`. |
|
|
185
|
+
| `options.umask` | `number` | `DEFAULT_UMASK` | Forwarded to `TinyFSCore`. |
|
|
186
|
+
| `options.identity` | `FSIdentity` | `{ uid: 0, gid: 0, groups: [] }` | Forwarded to `TinyFSCore`. |
|
|
187
|
+
|
|
188
|
+
#### `StorageBucketDescriptor`
|
|
189
|
+
|
|
190
|
+
| Property | Type | Description |
|
|
191
|
+
| --- | --- | --- |
|
|
192
|
+
| `name` | `string` | Bucket name. Must be a non-empty string. Defaults to `'tiny-fs'`. |
|
|
193
|
+
| `durability` | `'strict' \| 'relaxed'` | Persistence guarantee requested from the browser. |
|
|
194
|
+
| `persisted` | `boolean` | Whether the bucket should survive eviction. |
|
|
195
|
+
| `quota` | `number` | Maximum number of bytes the bucket may use. Must be a non-negative integer. |
|
|
196
|
+
| `expires` | `number` | Unix timestamp, in milliseconds, after which the bucket may be cleared. Must be a non-negative integer. |
|
|
197
|
+
|
|
198
|
+
```javascript
|
|
199
|
+
const fs = new TinyStorageBucketFileSystem({
|
|
200
|
+
bucket: {
|
|
201
|
+
name: 'reports',
|
|
202
|
+
durability: 'strict',
|
|
203
|
+
persisted: true,
|
|
204
|
+
quota: 50 * 1024 * 1024,
|
|
205
|
+
expires: Date.now() + 7 * 24 * 60 * 60 * 1000,
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Throws:**
|
|
211
|
+
|
|
212
|
+
- `TypeError` when `bucket` is not a plain object, or a member has the wrong type.
|
|
213
|
+
- `RangeError` when `quota` or `expires` is negative.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### Static Members
|
|
218
|
+
|
|
219
|
+
#### `TinyStorageBucketFileSystem.isSupported`
|
|
220
|
+
|
|
221
|
+
```javascript
|
|
222
|
+
TinyStorageBucketFileSystem.isSupported; // boolean
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Returns `true` when `navigator.storageBuckets` is a non-null object.
|
|
226
|
+
|
|
227
|
+
> ⚠️ This checks for the **object**, not its methods. A partial polyfill that defines
|
|
228
|
+
> `navigator.storageBuckets = {}` passes this check and fails later with a `TypeError`.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
#### `await TinyStorageBucketFileSystem.listBuckets()`
|
|
233
|
+
|
|
234
|
+
Lists the names of every storage bucket owned by the origin.
|
|
235
|
+
|
|
236
|
+
| Returns | Description |
|
|
237
|
+
| --- | --- |
|
|
238
|
+
| `Promise<string[]>` | The bucket names. |
|
|
239
|
+
|
|
240
|
+
**Throws:** `Error` with `code: 'ENOSYS'` when the API is unavailable.
|
|
241
|
+
|
|
242
|
+
```javascript
|
|
243
|
+
const names = await TinyStorageBucketFileSystem.listBuckets();
|
|
244
|
+
console.log(names); // ["tiny-fs", "workspace-42"]
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
#### `await TinyStorageBucketFileSystem.deleteBucket(name)`
|
|
250
|
+
|
|
251
|
+
Deletes a storage bucket owned by the origin.
|
|
252
|
+
|
|
253
|
+
| Parameter | Type | Description |
|
|
254
|
+
| --- | --- | --- |
|
|
255
|
+
| `name` | `string` | Name of the bucket to delete. |
|
|
256
|
+
|
|
257
|
+
| Returns | Description |
|
|
258
|
+
| --- | --- |
|
|
259
|
+
| `Promise<boolean>` | `true` when the bucket existed. |
|
|
260
|
+
|
|
261
|
+
**Throws:**
|
|
262
|
+
|
|
263
|
+
- `TypeError` when `name` is not a non-empty string.
|
|
264
|
+
- `Error` with `code: 'ENOSYS'` when the API is unavailable.
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
await TinyStorageBucketFileSystem.deleteBucket('workspace-42');
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
> ⚠️ **The `name` check runs before the support check.** On an unsupported browser,
|
|
271
|
+
> `deleteBucket('')` throws `TypeError`, not `ENOSYS`. See
|
|
272
|
+
> [Gotcha #2](#-known-divergences-and-gotchas).
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
### Instance Members
|
|
277
|
+
|
|
278
|
+
#### `fs.bucketName`
|
|
279
|
+
|
|
280
|
+
```javascript
|
|
281
|
+
fs.bucketName; // string
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
The resolved bucket name. Returns `'tiny-fs'` when no name was provided.
|
|
285
|
+
|
|
286
|
+
> ⚠️ Read-only. There is no setter. To change buckets, construct a new instance.
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### Inherited Members
|
|
291
|
+
|
|
292
|
+
Every method below is inherited from `TinyOPFSFileSystem` and behaves identically:
|
|
293
|
+
|
|
294
|
+
`readFile` · `writeFile` · `appendFile` · `readdir` · `mkdir` · `rm` · `rmdir` · `unlink` ·
|
|
295
|
+
`rename` · `copyFile` · `stat` · `lstat` · `access` · `chmod` · `chown` · `utimes` ·
|
|
296
|
+
`truncate` · `realpath` · `open` · `exists`
|
|
297
|
+
|
|
298
|
+
See the [OPFS documentation](./TinyOPFSFileSystem.md) for the full reference.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## 📊 Compatibility Matrix
|
|
303
|
+
|
|
304
|
+
| `node:fs/promises` method | Status | Notes |
|
|
305
|
+
| --- | --- | --- |
|
|
306
|
+
| `readFile` | ✅ Native | Scoped to the bucket. |
|
|
307
|
+
| `writeFile` | ✅ Native | Scoped to the bucket. |
|
|
308
|
+
| `readdir` | ✅ Native | Sorted by name. |
|
|
309
|
+
| `mkdir` | ✅ Native | |
|
|
310
|
+
| `rm` / `rmdir` / `unlink` | ✅ Native | |
|
|
311
|
+
| `copyFile` | ✅ Native | Buffered in memory. |
|
|
312
|
+
| `stat` / `lstat` | ✅ Native | Directory mtime is not stable. |
|
|
313
|
+
| `rename` | ⚠️ Emulated | Copy + delete, not atomic. |
|
|
314
|
+
| `truncate` | ⚠️ Emulated | Read + write. |
|
|
315
|
+
| `access` | ⚠️ Emulated | Uses the in-memory identity. |
|
|
316
|
+
| `realpath` | ⚠️ Emulated | String normalisation only. |
|
|
317
|
+
| `open` | ⚠️ Emulated | Returns a `FileHandle`. |
|
|
318
|
+
| `chmod` / `chown` / `utimes` | 🧠 In-memory | Lost on reload. |
|
|
319
|
+
| `symlink` / `readlink` | ❌ Unsupported | OPFS has no symlinks. |
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## 🚨 Error Codes
|
|
324
|
+
|
|
325
|
+
| Code | Thrown by | Meaning |
|
|
326
|
+
| --- | --- | --- |
|
|
327
|
+
| `ENOSYS` | `_resolveRoot`, `listBuckets`, `deleteBucket` | The Storage Buckets API is unavailable. |
|
|
328
|
+
| `TypeError` | Constructor, `deleteBucket` | A member has the wrong type. |
|
|
329
|
+
| `RangeError` | Constructor | `quota` or `expires` is negative. |
|
|
330
|
+
|
|
331
|
+
Every other error code is inherited from `TinyOPFSFileSystem`. See the
|
|
332
|
+
[OPFS error reference](./TinyOPFSFileSystem.md#-error-codes).
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## ⚠️ Known Divergences and Gotchas
|
|
337
|
+
|
|
338
|
+
Read this section before you file a bug.
|
|
339
|
+
|
|
340
|
+
### 🔴 Data integrity
|
|
341
|
+
|
|
342
|
+
| # | Location | Behaviour |
|
|
343
|
+
| --- | --- | --- |
|
|
344
|
+
| 1 | `deleteBucket` | **No guard against deleting the bucket in use.** The cached `#bucketRoot` becomes a stale handle. Subsequent reads throw a `DOMException`, not a `FileSystemError`. |
|
|
345
|
+
| 2 | `_resolveRoot` | **The bucket is opened once and cached.** Calling `deleteBucket(name)` and then reusing the instance does **not** recreate the bucket. |
|
|
346
|
+
| 3 | `_resolveRoot` | **The `root` option is silently ignored.** `TinyOPFSFileSystem` accepts `options.root`, but this class overrides `_resolveRoot` without calling `super._resolveRoot()`. Passing both `root` and `bucket` discards `root`. |
|
|
347
|
+
|
|
348
|
+
### 🟡 API surface
|
|
349
|
+
|
|
350
|
+
| # | Location | Behaviour |
|
|
351
|
+
| --- | --- | --- |
|
|
352
|
+
| 4 | `deleteBucket` | **The `name` check runs before the support check.** On an unsupported browser, `deleteBucket('')` throws `TypeError` instead of `ENOSYS`. |
|
|
353
|
+
| 5 | `listBuckets` | **The syscall name is `'keys'`**, not `'listBuckets'`. The error message reads `keys() is not implemented`. |
|
|
354
|
+
| 6 | `isSupported` | **Only checks for the object**, not its methods. A partial polyfill passes and fails later. |
|
|
355
|
+
| 7 | `bucketName` | **Read-only.** No setter. Construct a new instance to change buckets. |
|
|
356
|
+
| 8 | `assertBucketDescriptor` | **Not exported.** It cannot be unit-tested in isolation. |
|
|
357
|
+
|
|
358
|
+
### 🟠 Validation
|
|
359
|
+
|
|
360
|
+
| # | Location | Behaviour |
|
|
361
|
+
| --- | --- | --- |
|
|
362
|
+
| 9 | `assertBucketDescriptor` | **The bucket name is not sanitised.** `'../etc'` and `'a/b'` are accepted. The browser may reject them later. |
|
|
363
|
+
| 10 | `assertBucketDescriptor` | **`quota` and `expires` have no upper bound.** `Number.MAX_SAFE_INTEGER` is accepted. |
|
|
364
|
+
| 11 | `assertBucketDescriptor` | **`expires: 0` is accepted.** A timestamp of `0` is in the past, so the bucket may be cleared immediately. |
|
|
365
|
+
| 12 | `assertBucketDescriptor` | **`undefined` members are forwarded** to `navigator.storageBuckets.open()`. Harmless today, but it relies on the browser ignoring them. |
|
|
366
|
+
|
|
367
|
+
### 🔵 Inherited
|
|
368
|
+
|
|
369
|
+
| # | Location | Behaviour |
|
|
370
|
+
| --- | --- | --- |
|
|
371
|
+
| 13 | Every hook | **All 18 divergences from `TinyOPFSFileSystem` apply.** See the [OPFS documentation](./TinyOPFSFileSystem.md#-known-divergences-and-gotchas). |
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 🧾 Cheatsheet
|
|
376
|
+
|
|
377
|
+
```javascript
|
|
378
|
+
import TinyStorageBucketFileSystem from 'tiny-essentials/libs/fs/plugins/OPFS/StorageBucket';
|
|
379
|
+
|
|
380
|
+
// ─── Support check ────────────────────────────────────────────────────
|
|
381
|
+
if (!TinyStorageBucketFileSystem.isSupported) {
|
|
382
|
+
throw new Error('Storage Buckets are not available');
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// ─── Setup ────────────────────────────────────────────────────────────
|
|
386
|
+
const fs = new TinyStorageBucketFileSystem({
|
|
387
|
+
bucket: {
|
|
388
|
+
name: 'workspace-42',
|
|
389
|
+
durability: 'strict',
|
|
390
|
+
persisted: true,
|
|
391
|
+
quota: 50 * 1024 * 1024,
|
|
392
|
+
expires: Date.now() + 7 * 24 * 60 * 60 * 1000,
|
|
393
|
+
},
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
// ─── Files (inherited from TinyOPFSFileSystem) ────────────────────────
|
|
397
|
+
await fs.mkdir('/projects', { recursive: true });
|
|
398
|
+
await fs.writeFile('/projects/a.txt', 'data', { encoding: 'utf8' });
|
|
399
|
+
const text = await fs.readFile('/projects/a.txt', { encoding: 'utf8' });
|
|
400
|
+
const names = await fs.readdir('/projects');
|
|
401
|
+
await fs.rm('/projects', { recursive: true, force: true });
|
|
402
|
+
|
|
403
|
+
// ─── Bucket management ────────────────────────────────────────────────
|
|
404
|
+
fs.bucketName; // "workspace-42"
|
|
405
|
+
await TinyStorageBucketFileSystem.listBuckets(); // ["workspace-42"]
|
|
406
|
+
await TinyStorageBucketFileSystem.deleteBucket('old'); // true
|
|
407
|
+
```
|