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,478 @@
|
|
|
1
|
+
# 🗃️ TinySetMapDatabase
|
|
2
|
+
|
|
3
|
+
> Persistent `Set` and `Map` collections backed by **IndexedDB** — with a tiny, promise-based API.
|
|
4
|
+
|
|
5
|
+
`TinySetMapDatabase` gives you two familiar data structures (`Set` and `Map`) that survive page reloads, service-worker restarts, and browser sessions. You get the ergonomics of the standard collections, plus a migration system that keeps your schema under control.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📖 Table of Contents
|
|
10
|
+
|
|
11
|
+
1. [✨ Why TinySetMapDatabase?](#-why-tinysetmapdatabase)
|
|
12
|
+
2. [📦 Requirements](#-requirements)
|
|
13
|
+
3. [🚀 Quick Start](#-quick-start)
|
|
14
|
+
4. [🧠 Core Concepts](#-core-concepts)
|
|
15
|
+
5. [🏗️ API Reference](#️-api-reference)
|
|
16
|
+
- [`TinySetMapDatabase`](#tinysetmapdatabase)
|
|
17
|
+
- [`TinySetDb`](#tinysetdb)
|
|
18
|
+
- [`TinyMapDb](#tinymapdb)
|
|
19
|
+
- [`TinyTableDb` (base class)](#tinytabledb-base-class)
|
|
20
|
+
6. [🧩 Migrations](#-migrations)
|
|
21
|
+
7. [✅ Validators](#-validators)
|
|
22
|
+
8. [🍳 Recipes](#-recipes)
|
|
23
|
+
9. [🛠️ Service Worker Notes](#️-service-worker-notes)
|
|
24
|
+
10. [🐛 Error Reference](#-error-reference)
|
|
25
|
+
11. [❓ FAQ](#-faq)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## ✨ Why TinySetMapDatabase?
|
|
30
|
+
|
|
31
|
+
- 🔒 **Persistent** — Data lives in IndexedDB, so it survives reloads and restarts.
|
|
32
|
+
- 🧩 **Familiar API** — `add`, `get`, `set`, `delete`, `has`, `forEach`, `for await...of`.
|
|
33
|
+
- ⚡ **Synchronous reads, async writes** — An in-memory cache makes reads instant.
|
|
34
|
+
- 🧱 **Schema migrations built in** — Version your database with a plain array.
|
|
35
|
+
- 🧵 **Serialized writes** — Every write goes through a queue, so you never corrupt your store.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 📦 Requirements
|
|
40
|
+
|
|
41
|
+
- A runtime with **IndexedDB** (browsers, Web Workers, Service Workers).
|
|
42
|
+
- **ES2022+** (private class fields, `??=`, async generators).
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 🚀 Quick Start
|
|
47
|
+
|
|
48
|
+
```js
|
|
49
|
+
import { TinySetMapDatabase } from 'tiny-essentials/libs/storage/TinySetMapDatabase';
|
|
50
|
+
|
|
51
|
+
// 1. Describe your schema as a list of migrations.
|
|
52
|
+
const migrations = [
|
|
53
|
+
{
|
|
54
|
+
create: [
|
|
55
|
+
'visited-pages', // shorthand: a Set of strings
|
|
56
|
+
{ name: 'settings', type: 'map' }, // a Map of string -> any
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
// 2. Open the database.
|
|
62
|
+
const db = new TinySetMapDatabase('my-app', migrations);
|
|
63
|
+
|
|
64
|
+
// 3. Wait until every table is hydrated.
|
|
65
|
+
await db.ready;
|
|
66
|
+
|
|
67
|
+
// 4. Use your tables.
|
|
68
|
+
const pages = db.tableSet('visited-pages');
|
|
69
|
+
await pages.add('/home');
|
|
70
|
+
await pages.add('/about');
|
|
71
|
+
|
|
72
|
+
const settings = db.tableMap('settings');
|
|
73
|
+
await settings.set('theme', 'dark');
|
|
74
|
+
|
|
75
|
+
console.log(await pages.toArray()); // ['/home', '/about']
|
|
76
|
+
console.log(await settings.get('theme')); // 'dark'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 🧠 Core Concepts
|
|
82
|
+
|
|
83
|
+
| Concept | What it means |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| **Table** | A single IndexedDB object store. It is either a `Set` or a `Map`. |
|
|
86
|
+
| **Migration** | One entry in the migrations array. Its position defines its version (1-based). |
|
|
87
|
+
| **Hydration** | The one-time process of loading every persisted record into memory. |
|
|
88
|
+
| **Cache** | An in-memory `Set` or `Map` that mirrors the store for fast reads. |
|
|
89
|
+
| **Write queue** | A `TinyPromiseQueue` that serializes all writes to the object store. |
|
|
90
|
+
| **Action queue** | A `TinyPromiseQueue` that serializes all cache mutations. |
|
|
91
|
+
|
|
92
|
+
> 💡 **Rule of thumb:** reads hit the cache, writes go through the queue and reach IndexedDB.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 🏗️ API Reference
|
|
97
|
+
|
|
98
|
+
### `TinySetMapDatabase`
|
|
99
|
+
|
|
100
|
+
The entry point. It owns the IndexedDB connection and every table.
|
|
101
|
+
|
|
102
|
+
#### `new TinySetMapDatabase(name, migrations)`
|
|
103
|
+
|
|
104
|
+
| Parameter | Type | Description |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| `name` | `string` | Name of the IndexedDB database. |
|
|
107
|
+
| `migrations` | `TinyDatabaseMigration[]` | Ordered schema history. Length = database version. |
|
|
108
|
+
|
|
109
|
+
**Throws**
|
|
110
|
+
|
|
111
|
+
- `TypeError` — if `name` is not a non-empty string.
|
|
112
|
+
- `TypeError` — if `migrations` is not a non-empty array.
|
|
113
|
+
- `TypeError` — if a migration is invalid.
|
|
114
|
+
- `Error` — if a table is created twice without being dropped in between.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
#### `db.name` → `string`
|
|
119
|
+
|
|
120
|
+
The database name.
|
|
121
|
+
|
|
122
|
+
#### `db.version` → `number`
|
|
123
|
+
|
|
124
|
+
The current schema version (equal to `migrations.length`).
|
|
125
|
+
|
|
126
|
+
#### `db.tableNames` → `string[]`
|
|
127
|
+
|
|
128
|
+
Every table name declared by the migrations.
|
|
129
|
+
|
|
130
|
+
#### `db.ready` → `Promise<void>`
|
|
131
|
+
|
|
132
|
+
Resolves once the connection is open **and** every table is hydrated.
|
|
133
|
+
|
|
134
|
+
```js
|
|
135
|
+
await db.ready;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
#### `db.tableSet(name)` → `TinySetDb`
|
|
139
|
+
|
|
140
|
+
Returns a `Set`-like table.
|
|
141
|
+
|
|
142
|
+
- **Throws** `TypeError` if `name` is not a non-empty string.
|
|
143
|
+
- **Throws** `RangeError` if the table was not declared.
|
|
144
|
+
- **Throws** `Error` if the table is not a Set.
|
|
145
|
+
|
|
146
|
+
#### `db.tableMap(name)` → `TinyMapDb`
|
|
147
|
+
|
|
148
|
+
Returns a `Map`-like table.
|
|
149
|
+
|
|
150
|
+
- **Throws** `TypeError` if `name` is not a non-empty string.
|
|
151
|
+
- **Throws** `RangeError` if the table was not declared.
|
|
152
|
+
- **Throws** `Error` if the table is not a Map.
|
|
153
|
+
|
|
154
|
+
#### `db.has(name)` → `boolean`
|
|
155
|
+
|
|
156
|
+
Returns `true` when the table exists.
|
|
157
|
+
|
|
158
|
+
#### `await db.close()`
|
|
159
|
+
|
|
160
|
+
Closes the underlying IndexedDB connection.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### `TinySetDb`
|
|
165
|
+
|
|
166
|
+
A persistent `Set<Value>`. Every value must be a non-empty string (an `IDBValidKey`).
|
|
167
|
+
|
|
168
|
+
#### `new TinySetDb({ storeName, openDatabase, validate? })`
|
|
169
|
+
|
|
170
|
+
| Option | Type | Description |
|
|
171
|
+
| --- | --- | --- |
|
|
172
|
+
| `storeName` | `string` | Name of the object store. |
|
|
173
|
+
| `openDatabase` | `() => Promise<IDBDatabase>` | Resolves with the shared connection. |
|
|
174
|
+
| `validate` | `(value) => boolean \| null` | Optional predicate. Return `false` to reject. |
|
|
175
|
+
|
|
176
|
+
#### `set.size` → `number`
|
|
177
|
+
|
|
178
|
+
Number of values in the in-memory cache.
|
|
179
|
+
|
|
180
|
+
#### `await set.has(value)` → `boolean`
|
|
181
|
+
|
|
182
|
+
Checks whether `value` is stored.
|
|
183
|
+
|
|
184
|
+
#### `await set.add(value)` → `boolean`
|
|
185
|
+
|
|
186
|
+
Adds a value. Returns `true` when it was added, `false` when it already existed.
|
|
187
|
+
|
|
188
|
+
#### `await set.delete(value)` → `boolean`
|
|
189
|
+
|
|
190
|
+
Removes a value. Returns `true` when it existed.
|
|
191
|
+
|
|
192
|
+
#### `await set.clear()` → `void`
|
|
193
|
+
|
|
194
|
+
Removes every value from both the cache and the store.
|
|
195
|
+
|
|
196
|
+
#### `await set.toArray()` → `Value[]`
|
|
197
|
+
|
|
198
|
+
Returns a snapshot array.
|
|
199
|
+
|
|
200
|
+
#### `await set.toJSON()` → `Value[]`
|
|
201
|
+
|
|
202
|
+
Serialization hook used by `JSON.stringify`.
|
|
203
|
+
|
|
204
|
+
#### `set.values()` / `set.keys()` → `AsyncGenerator<Value>`
|
|
205
|
+
|
|
206
|
+
Iterates over every value.
|
|
207
|
+
|
|
208
|
+
#### `set.entries()` → `AsyncGenerator<[Value, Value]>`
|
|
209
|
+
|
|
210
|
+
Iterates over `[value, value]` pairs (mirrors `Set.prototype.entries`).
|
|
211
|
+
|
|
212
|
+
#### `set[Symbol.asyncIterator]()`
|
|
213
|
+
|
|
214
|
+
Alias for `values()`, so you can use `for await...of`.
|
|
215
|
+
|
|
216
|
+
#### `await set.forEach(callbackFn, thisArg?)`
|
|
217
|
+
|
|
218
|
+
Runs `callbackFn(value, value, set)` for every value.
|
|
219
|
+
|
|
220
|
+
#### Set algebra
|
|
221
|
+
|
|
222
|
+
All of these return a **new native `Set`** and accept a `TinySetDb`, a native `Set`, or an array.
|
|
223
|
+
|
|
224
|
+
| Method | Description |
|
|
225
|
+
| --- | --- |
|
|
226
|
+
| `union(...sources)` | Values in this set **or** in any source. |
|
|
227
|
+
| `intersection(other)` | Values in both. |
|
|
228
|
+
| `difference(other)` | Values in this set but not in `other`. |
|
|
229
|
+
| `symmetricDifference(other)` | Values in exactly one of the two. |
|
|
230
|
+
| `isSubsetOf(other)` | `true` when every value here exists in `other`. |
|
|
231
|
+
| `isSupersetOf(other)` | `true` when every value of `other` exists here. |
|
|
232
|
+
| `isDisjointFrom(other)` | `true` when they share no values. |
|
|
233
|
+
|
|
234
|
+
```js
|
|
235
|
+
const a = new Set(['apple', 'banana']);
|
|
236
|
+
const b = new Set(['banana', 'cherry']);
|
|
237
|
+
|
|
238
|
+
await set.union(a, b); // Set { 'apple', 'banana', 'cherry' }
|
|
239
|
+
await set.intersection(a); // Set { 'banana' }
|
|
240
|
+
await set.difference(a); // Set { 'cherry' }
|
|
241
|
+
await set.symmetricDifference(a); // Set { 'apple', 'cherry' }
|
|
242
|
+
await set.isSubsetOf(a); // false
|
|
243
|
+
await set.isDisjointFrom(a); // false
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### `TinyMapDb`
|
|
249
|
+
|
|
250
|
+
A persistent `Map<Key, Value>`. Keys must be non-empty strings.
|
|
251
|
+
|
|
252
|
+
#### `new TinyMapDb({ storeName, openDatabase, validate? })`
|
|
253
|
+
|
|
254
|
+
Same options as `TinySetDb`, but `validate` receives `(key, value)`.
|
|
255
|
+
|
|
256
|
+
#### `map.size` → `number`
|
|
257
|
+
|
|
258
|
+
Number of entries in the in-memory cache.
|
|
259
|
+
|
|
260
|
+
#### `await map.has(key)` → `boolean`
|
|
261
|
+
|
|
262
|
+
#### `await map.get(key)` → `Value | undefined`
|
|
263
|
+
|
|
264
|
+
#### `await map.set(key, value)` → `this`
|
|
265
|
+
|
|
266
|
+
Binds a value to a key. Returns the map, so you can chain.
|
|
267
|
+
|
|
268
|
+
#### `await map.delete(key)` → `boolean`
|
|
269
|
+
|
|
270
|
+
#### `await map.clear()` → `void`
|
|
271
|
+
|
|
272
|
+
#### `await map.toArray()` → `Array<[Key, Value]>`
|
|
273
|
+
|
|
274
|
+
#### `await map.toJSON()` → `Array<[Key, Value]>`
|
|
275
|
+
|
|
276
|
+
#### `map.keys()` / `map.values()` / `map.entries()`
|
|
277
|
+
|
|
278
|
+
Async generators.
|
|
279
|
+
|
|
280
|
+
#### `map[Symbol.asyncIterator]()`
|
|
281
|
+
|
|
282
|
+
Alias for `entries()`.
|
|
283
|
+
|
|
284
|
+
#### `await map.forEach(callbackFn, thisArg?)`
|
|
285
|
+
|
|
286
|
+
Runs `callbackFn(value, key, map)` for every entry.
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### `TinyTableDb` (base class)
|
|
291
|
+
|
|
292
|
+
You normally do **not** instantiate this class directly. It is the shared plumbing for `TinySetDb` and `TinyMapDb`.
|
|
293
|
+
|
|
294
|
+
If you want to build your own table type, extend it and implement `_load(records)`.
|
|
295
|
+
|
|
296
|
+
| Member | Description |
|
|
297
|
+
| --- | --- |
|
|
298
|
+
| `get storeName()` | Name of the object store. |
|
|
299
|
+
| `get isReady()` | `true` after hydration. |
|
|
300
|
+
| `hydrate()` | Loads the cache once. Safe to call many times. |
|
|
301
|
+
| `_action(operation)` | Runs an operation with exclusive access to the cache. |
|
|
302
|
+
| `_write(operation)` | Runs an operation with exclusive access to the store. |
|
|
303
|
+
| `_persist(record)` | Persists a single record. |
|
|
304
|
+
| `_remove(key)` | Deletes a single record. |
|
|
305
|
+
| `_clear()` | Deletes every record. |
|
|
306
|
+
| `_load(records)` | **Abstract.** Must be implemented by subclasses. |
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 🧩 Migrations
|
|
311
|
+
|
|
312
|
+
A migration is a plain object:
|
|
313
|
+
|
|
314
|
+
```ts
|
|
315
|
+
type TinyDatabaseMigration = {
|
|
316
|
+
create?: (string | {
|
|
317
|
+
name: string;
|
|
318
|
+
type: 'set' | 'map';
|
|
319
|
+
validate?: (key: any, value?: any) => boolean;
|
|
320
|
+
})[];
|
|
321
|
+
delete?: string[];
|
|
322
|
+
};
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
- The **version** of a migration is its **1-based index** in the array.
|
|
326
|
+
- The **database version** is `migrations.length`.
|
|
327
|
+
- To change a table's key path, `delete` it and `create` it again in the same migration.
|
|
328
|
+
|
|
329
|
+
### Example: adding a table in v2
|
|
330
|
+
|
|
331
|
+
```js
|
|
332
|
+
const migrations = [
|
|
333
|
+
// v1
|
|
334
|
+
{ create: ['visited-pages'] },
|
|
335
|
+
|
|
336
|
+
// v2 — add a settings map
|
|
337
|
+
{
|
|
338
|
+
create: [{ name: 'settings', type: 'map' }],
|
|
339
|
+
},
|
|
340
|
+
|
|
341
|
+
// v3 — drop a table and recreate it as a map
|
|
342
|
+
{
|
|
343
|
+
delete: ['visited-pages'],
|
|
344
|
+
create: [{ name: 'visited-pages', type: 'map' }],
|
|
345
|
+
},
|
|
346
|
+
];
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
> ⚠️ **Never reorder or remove migrations.** Their position *is* the version number. Appending is the only safe operation.
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## ✅ Validators
|
|
354
|
+
|
|
355
|
+
A validator is a predicate that runs **before** a write reaches the store. Return a falsy value to reject the write with a `TypeError`.
|
|
356
|
+
|
|
357
|
+
```js
|
|
358
|
+
const migrations = [
|
|
359
|
+
{
|
|
360
|
+
create: [
|
|
361
|
+
{
|
|
362
|
+
name: 'emails',
|
|
363
|
+
type: 'set',
|
|
364
|
+
validate: (value) => value.includes('@'),
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: 'users',
|
|
368
|
+
type: 'map',
|
|
369
|
+
validate: (key, value) => typeof value === 'object' && value !== null,
|
|
370
|
+
},
|
|
371
|
+
],
|
|
372
|
+
},
|
|
373
|
+
];
|
|
374
|
+
|
|
375
|
+
const db = new TinySetMapDatabase('app', migrations);
|
|
376
|
+
const emails = db.tableSet('emails');
|
|
377
|
+
|
|
378
|
+
await emails.add('not-an-email'); // ❌ TypeError
|
|
379
|
+
await emails.add('me@example.com'); // ✅
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
> 💡 The validator that wins is the one from the **latest migration that creates the table**.
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## 🍳 Recipes
|
|
387
|
+
|
|
388
|
+
### 🔁 Iterate over a set
|
|
389
|
+
|
|
390
|
+
```js
|
|
391
|
+
for await (const page of db.tableSet('visited-pages')) {
|
|
392
|
+
console.log(page);
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### 📦 Serialize a table
|
|
397
|
+
|
|
398
|
+
```js
|
|
399
|
+
const json = JSON.stringify(await db.tableMap('settings'));
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### 🧹 Wipe a table
|
|
403
|
+
|
|
404
|
+
```js
|
|
405
|
+
await db.tableSet('visited-pages').clear();
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### 🔍 Check before writing
|
|
409
|
+
|
|
410
|
+
```js
|
|
411
|
+
const pages = db.tableSet('visited-pages');
|
|
412
|
+
if (!(await pages.has('/home'))) {
|
|
413
|
+
await pages.add('/home');
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### 🧮 Set algebra across tables
|
|
418
|
+
|
|
419
|
+
```js
|
|
420
|
+
const a = db.tableSet('a');
|
|
421
|
+
const b = db.tableSet('b');
|
|
422
|
+
|
|
423
|
+
const common = await a.intersection(b);
|
|
424
|
+
console.log(`Shared values: ${[...common].join(', ')}`);
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## 🛠️ Service Worker Notes
|
|
430
|
+
|
|
431
|
+
`TinySetMapDatabase` is designed to be created **once** per service worker lifetime:
|
|
432
|
+
|
|
433
|
+
```js
|
|
434
|
+
let database;
|
|
435
|
+
|
|
436
|
+
self.addEventListener('install', () => {
|
|
437
|
+
database = new TinySetMapDatabase('my-app', migrations);
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
self.addEventListener('activate', (event) => {
|
|
441
|
+
event.waitUntil(database.ready);
|
|
442
|
+
});
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
- The connection is opened lazily and reused.
|
|
446
|
+
- `onversionchange` closes the connection automatically, so a new tab can upgrade the schema.
|
|
447
|
+
- Every write is queued, so concurrent `add`/`set` calls are safe.
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## 🐛 Error Reference
|
|
452
|
+
|
|
453
|
+
| Error | When it happens |
|
|
454
|
+
| --- | --- |
|
|
455
|
+
| `TypeError` | A string argument is empty, a validator rejects a value, or an option has the wrong type. |
|
|
456
|
+
| `RangeError` | You asked for a table that was never declared. |
|
|
457
|
+
| `ReferenceError` | `indexedDB` is not available in the current environment. |
|
|
458
|
+
| `Error` | A table is created twice, or a table has the wrong type. |
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
## ❓ FAQ
|
|
463
|
+
|
|
464
|
+
**Does it work outside the browser?**
|
|
465
|
+
Only where `indexedDB` exists. In Node.js, provide a shim such as `fake-indexeddb`.
|
|
466
|
+
|
|
467
|
+
**Are reads async?**
|
|
468
|
+
Yes, all public methods return a `Promise`. The cache makes them fast, not synchronous.
|
|
469
|
+
|
|
470
|
+
**Can I use non-string keys?**
|
|
471
|
+
No. Keys must be non-empty strings, because they are used as the object store key path.
|
|
472
|
+
|
|
473
|
+
**What happens if I forget to `await db.ready`?**
|
|
474
|
+
Every method calls `hydrate()` internally, so it is safe — but awaiting `db.ready` once at startup avoids a small delay on the first call.
|
|
475
|
+
|
|
476
|
+
**Can I have two databases with the same name?**
|
|
477
|
+
Yes, but they will share the same IndexedDB database. Use different names for isolation.
|
|
478
|
+
|