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,379 @@
|
|
|
1
|
+
import TinyUriParser from '../TinyUriParser.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Matrix Protocol (matrix.org)
|
|
4
|
+
* Official Documentation: https://spec.matrix.org/latest/appendices/#identifier-grammar
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Defines the valid types for Matrix resource identifiers.
|
|
8
|
+
* @typedef {'roomId' | 'room' | 'user'} IdTypes
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Represents the data structure for parsed Matrix Content (MXC) URIs.
|
|
12
|
+
* @typedef {Object} MXCData
|
|
13
|
+
* @property {'mxc'} dataType - The category of the data.
|
|
14
|
+
* @property {string} server - The Matrix server domain (e.g., 'matrix.org').
|
|
15
|
+
* @property {string} dataId - The unique identifier for the data.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Represents the data structure for parsed Matrix scheme URIs.
|
|
19
|
+
* @typedef {Object} MatrixSchemeData
|
|
20
|
+
* @property {'matrix_scheme'} dataType - The category of the data.
|
|
21
|
+
* @property {IdTypes | 'event'} type - The type of the matrix resource.
|
|
22
|
+
* @property {null|IdTypes} subType - The sub type of the matrix resource.
|
|
23
|
+
* @property {string} resourceId - The primary identifier (room ID or user ID).
|
|
24
|
+
* @property {string} [eventId] - The specific event ID (only if type is 'event').
|
|
25
|
+
* @property {string|null} server - The matrix server domain.
|
|
26
|
+
* @property {Record<string, string>} params - Key-value pairs of query parameters (e.g., { via: 'server.com' }).
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Represents the data structure for parsed Matrix Web URLs.
|
|
30
|
+
* @typedef {Object} MatrixWebData
|
|
31
|
+
* @property {'matrix_web_url'} dataType - The category of the data.
|
|
32
|
+
* @property {string} decodedFragment - The decoded string from the URL fragment.
|
|
33
|
+
* @property {MatrixSchemeData | MXCData} parsed - The result of the parsed resource.
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Regular expression used to match and extract components from an MXC (Matrix Content) URI.
|
|
37
|
+
* @type {RegExp}
|
|
38
|
+
*/
|
|
39
|
+
const parseMxcRegex = /^mxc:\/\/([^/]+)\/(.+)$/;
|
|
40
|
+
/**
|
|
41
|
+
* Regex handles: matrix:<type>/<resource>[/e/<event>][<query>]
|
|
42
|
+
*
|
|
43
|
+
* Types supported: r (room), u (user), roomid (room), e (event)
|
|
44
|
+
* @type {RegExp}
|
|
45
|
+
*/
|
|
46
|
+
const matrixSchemeRegex = /^matrix:(?<prefix>r|u|roomid|e)\/(?<resource>[^?/\s]+)(?:\/e\/(?<event>[^?/\s]+))?(?<query>\?.*)?$/;
|
|
47
|
+
/**
|
|
48
|
+
* Reconstructs a Matrix ID shorthand from MatrixSchemeData.
|
|
49
|
+
*
|
|
50
|
+
* This function reconstructs the shorthand and includes any provided query parameters.
|
|
51
|
+
*
|
|
52
|
+
* @param {MatrixSchemeData} parsed - The parsed Matrix scheme data object.
|
|
53
|
+
* @returns {string} The Matrix ID shorthand (e.g., '#room:server.com', '@user:server.com', '$eventid').
|
|
54
|
+
* @throws {TypeError} If the provided data is invalid or the type is unsupported.
|
|
55
|
+
*/
|
|
56
|
+
const reconstructMatrixShorthand = (parsed) => {
|
|
57
|
+
// Validate the input object using the existing validation logic
|
|
58
|
+
validateMatrixSchemeData(parsed);
|
|
59
|
+
const typeToPrefix = {
|
|
60
|
+
room: '#',
|
|
61
|
+
roomId: '!',
|
|
62
|
+
user: '@',
|
|
63
|
+
event: '$',
|
|
64
|
+
};
|
|
65
|
+
const prefix = typeToPrefix[parsed.type];
|
|
66
|
+
if (!prefix) {
|
|
67
|
+
throw new TypeError(`reconstructMatrixShorthand: Unsupported type "${parsed.type}".`);
|
|
68
|
+
}
|
|
69
|
+
// Start with the resource ID (e.g., the room ID or user ID)
|
|
70
|
+
let resource = parsed.resourceId;
|
|
71
|
+
// If a server is present, append it to the resource (e.g., 'room_id:matrix.org')
|
|
72
|
+
if (parsed.server) {
|
|
73
|
+
resource += `:${parsed.server}`;
|
|
74
|
+
}
|
|
75
|
+
let result = `${prefix}${resource}`;
|
|
76
|
+
// Append query parameters if the params object is not empty
|
|
77
|
+
if (parsed.params && Object.keys(parsed.params).length > 0) {
|
|
78
|
+
const query = new URLSearchParams(parsed.params).toString();
|
|
79
|
+
result += `?${query}`;
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Reconstructs an MXC URI from parsed data.
|
|
85
|
+
* @param {MXCData} parsed
|
|
86
|
+
* @returns {string}
|
|
87
|
+
*/
|
|
88
|
+
const reconstructMxc = (parsed) => {
|
|
89
|
+
const { server, dataId } = parsed;
|
|
90
|
+
return `mxc://${server}/${dataId}`;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Reconstructs a Matrix Scheme URI from parsed data.
|
|
94
|
+
* @param {MatrixSchemeData} parsed
|
|
95
|
+
* @returns {string}
|
|
96
|
+
*/
|
|
97
|
+
const reconstructMatrixScheme = (parsed) => {
|
|
98
|
+
const { type, subType, resourceId, eventId, server, params } = parsed;
|
|
99
|
+
const typeToPrefix = { room: 'r', user: 'u', roomId: 'roomid', event: 'e' };
|
|
100
|
+
const subTypeToPrefix = { room: 'r', user: 'u', roomId: 'roomid' };
|
|
101
|
+
// Determine the prefix based on the type or the subType if it's an event
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
let prefix = typeToPrefix[type];
|
|
104
|
+
if (type === 'event' && subType) {
|
|
105
|
+
// @ts-ignore
|
|
106
|
+
prefix = subTypeToPrefix[subType];
|
|
107
|
+
}
|
|
108
|
+
let resource = resourceId;
|
|
109
|
+
if (server) {
|
|
110
|
+
resource += `:${server}`;
|
|
111
|
+
}
|
|
112
|
+
let result = `matrix:${prefix}/${resource}`;
|
|
113
|
+
if (type === 'event' && eventId) {
|
|
114
|
+
let eventPart = eventId;
|
|
115
|
+
// if (server) eventPart += `:${server}`;
|
|
116
|
+
result += `/e/${eventPart}`;
|
|
117
|
+
}
|
|
118
|
+
if (params && Object.keys(params).length > 0) {
|
|
119
|
+
const query = new URLSearchParams(params).toString();
|
|
120
|
+
result += `?${query}`;
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Rebuilds the `matrix.to` fragment for a parsed Matrix scheme resource.
|
|
126
|
+
* @param {MatrixSchemeData} parsed - The parsed Matrix scheme data.
|
|
127
|
+
* @returns {string} The `matrix.to` fragment (e.g., `#room:server.com`).
|
|
128
|
+
* @throws {TypeError} If the resource type is unsupported.
|
|
129
|
+
*/
|
|
130
|
+
const buildMatrixToFragment = (parsed) => {
|
|
131
|
+
const baseType = parsed.type === 'event' ? parsed.subType : parsed.type;
|
|
132
|
+
const prefixMap = { room: '#', roomId: '!', user: '@' };
|
|
133
|
+
// @ts-ignore
|
|
134
|
+
const prefix = prefixMap[baseType];
|
|
135
|
+
if (!prefix) {
|
|
136
|
+
throw new TypeError(`MatrixWebData: unsupported resource type "${baseType}".`);
|
|
137
|
+
}
|
|
138
|
+
let fragment = `${prefix}${parsed.resourceId}`;
|
|
139
|
+
if (parsed.server) {
|
|
140
|
+
fragment += `:${parsed.server}`;
|
|
141
|
+
}
|
|
142
|
+
if (parsed.type === 'event' && parsed.eventId) {
|
|
143
|
+
fragment += `/${parsed.eventId.startsWith('$') ? parsed.eventId : `$${parsed.eventId}`}`;
|
|
144
|
+
}
|
|
145
|
+
return fragment;
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Reconstructs a Matrix Web URL from parsed data.
|
|
149
|
+
*
|
|
150
|
+
* The URL is rebuilt from the structured `parsed` payload, so the object does
|
|
151
|
+
* not need to keep a redundant copy of the original string in memory.
|
|
152
|
+
*
|
|
153
|
+
* @param {MatrixWebData} data - The parsed web URL data.
|
|
154
|
+
* @returns {string} The reconstructed Matrix Web URL.
|
|
155
|
+
* @throws {TypeError} If the data is malformed.
|
|
156
|
+
*/
|
|
157
|
+
const reconstructMatrixWebUrl = (data) => {
|
|
158
|
+
if (data === null || typeof data !== 'object') {
|
|
159
|
+
throw new TypeError('MatrixWebData: data must be an object.');
|
|
160
|
+
}
|
|
161
|
+
const { parsed } = data;
|
|
162
|
+
if (parsed === null || typeof parsed !== 'object') {
|
|
163
|
+
throw new TypeError('MatrixWebData: parsed must be an object.');
|
|
164
|
+
}
|
|
165
|
+
if (parsed.dataType === 'mxc') {
|
|
166
|
+
return `https://matrix.to/#/${reconstructMxc(parsed)}`;
|
|
167
|
+
}
|
|
168
|
+
const query = parsed.params && Object.keys(parsed.params).length > 0
|
|
169
|
+
? `?${new URLSearchParams(parsed.params)}`
|
|
170
|
+
: '';
|
|
171
|
+
return `https://matrix.to/#/${buildMatrixToFragment(parsed)}${query}`;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Parses MXC (Matrix Content) URIs.
|
|
175
|
+
*
|
|
176
|
+
* @param {string} uri - The raw MXC URI string.
|
|
177
|
+
* @returns {MXCData} The parsed MXC data object.
|
|
178
|
+
* @throws {Error} If the URI does not match the expected MXC format.
|
|
179
|
+
*/
|
|
180
|
+
const parseMxc = (uri) => {
|
|
181
|
+
const match = uri.match(parseMxcRegex);
|
|
182
|
+
if (!match) {
|
|
183
|
+
throw new Error(`Invalid MXC URI format: ${uri}`);
|
|
184
|
+
}
|
|
185
|
+
const [_, server, dataId] = match;
|
|
186
|
+
/** @type {MXCData} */
|
|
187
|
+
const data = { server, dataId, dataType: 'mxc' };
|
|
188
|
+
validateMXCData(data);
|
|
189
|
+
return data;
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Parses Matrix Scheme URIs (e.g., matrix:r/..., matrix:u/..., matrix:e/..., etc).
|
|
193
|
+
*
|
|
194
|
+
* @param {string} uri - The Matrix scheme URI string.
|
|
195
|
+
* @returns {MatrixSchemeData} The parsed Matrix scheme data object.
|
|
196
|
+
* @throws {Error} If the URI does not match the expected Matrix scheme format.
|
|
197
|
+
*/
|
|
198
|
+
const parseMatrixScheme = (uri) => {
|
|
199
|
+
const match = uri.match(matrixSchemeRegex);
|
|
200
|
+
if (!match) {
|
|
201
|
+
throw new Error(`Invalid Matrix Scheme URI: ${uri}`);
|
|
202
|
+
}
|
|
203
|
+
const { prefix, resource, event, query } = match.groups ?? {};
|
|
204
|
+
const prefixType = prefix === 'r' ? '#' : prefix === 'e' ? '$' : prefix === 'roomid' ? '!' : '@';
|
|
205
|
+
/** @param {string} p */
|
|
206
|
+
const genType = (p) => p === 'r' ? 'room' : p === 'e' ? 'event' : p === 'roomid' ? 'roomId' : 'user';
|
|
207
|
+
// Capture the original type (room, user, etc.) before checking if it is an event
|
|
208
|
+
const baseType = genType(prefix);
|
|
209
|
+
/** @type {MatrixSchemeData} */
|
|
210
|
+
const data = {
|
|
211
|
+
dataType: 'matrix_scheme',
|
|
212
|
+
subType: null,
|
|
213
|
+
type: baseType,
|
|
214
|
+
resourceId: resource,
|
|
215
|
+
server: null,
|
|
216
|
+
params: {},
|
|
217
|
+
};
|
|
218
|
+
// Transforms the query string into a key/value object
|
|
219
|
+
if (query) {
|
|
220
|
+
const searchParams = new URLSearchParams(query);
|
|
221
|
+
data.params = Object.fromEntries(searchParams.entries());
|
|
222
|
+
}
|
|
223
|
+
// Always remove the identifier symbol if it is present, regardless of the server
|
|
224
|
+
let actualResource = resource;
|
|
225
|
+
if (actualResource.startsWith(prefixType)) {
|
|
226
|
+
actualResource = actualResource.substring(1);
|
|
227
|
+
}
|
|
228
|
+
// Handles the extraction of resourceId, server and all types
|
|
229
|
+
const lastColonIndex = actualResource.lastIndexOf(':');
|
|
230
|
+
if (lastColonIndex !== -1) {
|
|
231
|
+
data.server = actualResource.substring(lastColonIndex + 1);
|
|
232
|
+
data.resourceId = actualResource.substring(0, lastColonIndex);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
data.resourceId = actualResource;
|
|
236
|
+
}
|
|
237
|
+
if (prefix === 'e') {
|
|
238
|
+
// Since the resourceId has already been cleaned in the block above, simply reference it
|
|
239
|
+
data.eventId = data.resourceId;
|
|
240
|
+
data.type = 'event';
|
|
241
|
+
data.subType = null;
|
|
242
|
+
}
|
|
243
|
+
// If the URI contains a nested event (matrix:r/room/e/event)
|
|
244
|
+
if (event) {
|
|
245
|
+
let actualEvent = event;
|
|
246
|
+
if (actualEvent.startsWith('$')) {
|
|
247
|
+
actualEvent = actualEvent.substring(1);
|
|
248
|
+
}
|
|
249
|
+
// Ensures that the nested eventId is also cleaned, in case it has an associated server
|
|
250
|
+
const eventColonIndex = actualEvent.lastIndexOf(':');
|
|
251
|
+
if (eventColonIndex !== -1) {
|
|
252
|
+
data.eventId = actualEvent.substring(0, eventColonIndex);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
data.eventId = actualEvent;
|
|
256
|
+
}
|
|
257
|
+
data.type = 'event';
|
|
258
|
+
data.subType = baseType !== 'event' ? baseType : null;
|
|
259
|
+
}
|
|
260
|
+
validateMatrixSchemeData(data);
|
|
261
|
+
return data;
|
|
262
|
+
};
|
|
263
|
+
/**
|
|
264
|
+
* Parses Matrix Web URLs by decoding the URL fragment.
|
|
265
|
+
*
|
|
266
|
+
* @param {string} url - The full web URL (e.g., https://matrix.to/#/...).
|
|
267
|
+
* @returns {MatrixWebData} The parsed web URL data object.
|
|
268
|
+
* @throws {Error} If the URL is invalid or the fragment cannot be parsed.
|
|
269
|
+
*/
|
|
270
|
+
const parseWebUrl = (url) => {
|
|
271
|
+
const urlObj = new URL(url);
|
|
272
|
+
const fragment = urlObj.hash.substring(2); // Remove '#/'
|
|
273
|
+
const decodedFragment = decodeURIComponent(fragment);
|
|
274
|
+
// Split into parts to support events contained within the matrix.to URL
|
|
275
|
+
// Ex: !room:server.com/$event_id -> mainPart: "!room:server.com", eventPart: "$event_id"
|
|
276
|
+
const parts = decodedFragment.split('/');
|
|
277
|
+
const mainPart = parts[0];
|
|
278
|
+
const eventPart = parts.length > 1 ? parts[1] : null;
|
|
279
|
+
let parsedResource;
|
|
280
|
+
if (mainPart.startsWith('#') || mainPart.startsWith('!')) {
|
|
281
|
+
const isId = mainPart.startsWith('!');
|
|
282
|
+
const type = !isId ? 'r' : 'roomid';
|
|
283
|
+
// Always construct by removing the initial symbol (!) or (#)
|
|
284
|
+
let normalizedResource = `matrix:${type}/${mainPart.substring(1)}`;
|
|
285
|
+
if (eventPart) {
|
|
286
|
+
// Remove the '$' if it exists to properly construct the scheme route
|
|
287
|
+
const safeEventPart = eventPart.startsWith('$') ? eventPart.substring(1) : eventPart;
|
|
288
|
+
normalizedResource += `/e/${safeEventPart}`;
|
|
289
|
+
}
|
|
290
|
+
parsedResource = parseMatrixScheme(normalizedResource);
|
|
291
|
+
}
|
|
292
|
+
else if (mainPart.startsWith('@')) {
|
|
293
|
+
// It's a user
|
|
294
|
+
const normalizedResource = `matrix:u/${mainPart.substring(1)}`;
|
|
295
|
+
parsedResource = parseMatrixScheme(normalizedResource);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
// Fallback: treat decoded fragment as a direct matrix scheme
|
|
299
|
+
parsedResource = parseMatrixScheme(`matrix:${decodedFragment}`);
|
|
300
|
+
}
|
|
301
|
+
return {
|
|
302
|
+
dataType: 'matrix_web_url',
|
|
303
|
+
decodedFragment,
|
|
304
|
+
parsed: parsedResource,
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* Validates the MXC data object for required properties and correct types.
|
|
309
|
+
*
|
|
310
|
+
* @param {MXCData} data - The MXC data object to validate.
|
|
311
|
+
* @throws {TypeError} If any property is missing or of an invalid type.
|
|
312
|
+
*/
|
|
313
|
+
const validateMXCData = (data) => {
|
|
314
|
+
if (typeof data.server !== 'string' || data.server.length === 0) {
|
|
315
|
+
throw new TypeError('MXCData: server must be a non-empty string.');
|
|
316
|
+
}
|
|
317
|
+
if (typeof data.dataId !== 'string' || data.dataId.length === 0) {
|
|
318
|
+
throw new TypeError('MXCData: dataId must be a non-empty string.');
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Validates the Matrix Scheme data object for required properties and correct types.
|
|
323
|
+
*
|
|
324
|
+
* @param {MatrixSchemeData} data - The Matrix scheme data object to validate.
|
|
325
|
+
* @throws {TypeError} If any property is missing or of an invalid type.
|
|
326
|
+
*/
|
|
327
|
+
const validateMatrixSchemeData = (data) => {
|
|
328
|
+
const validTypes = ['roomId', 'room', 'user', 'event'];
|
|
329
|
+
if (!validTypes.includes(data.type)) {
|
|
330
|
+
throw new TypeError(`MatrixSchemeData: Invalid type "${data.type}".`);
|
|
331
|
+
}
|
|
332
|
+
if (typeof data.resourceId !== 'string' || data.resourceId.length === 0) {
|
|
333
|
+
throw new TypeError('MatrixSchemeData: resourceId must be a non-empty string.');
|
|
334
|
+
}
|
|
335
|
+
if (data.server !== null && (typeof data.server !== 'string' || data.server.length === 0)) {
|
|
336
|
+
throw new TypeError('MatrixSchemeData: server must be a non-empty string.');
|
|
337
|
+
}
|
|
338
|
+
if (data.type === 'event' && (typeof data.eventId !== 'string' || data.eventId.length === 0)) {
|
|
339
|
+
throw new TypeError('MatrixSchemeData: eventId must be a non-empty string when type is "event".');
|
|
340
|
+
}
|
|
341
|
+
if (data.params && typeof data.params !== 'object') {
|
|
342
|
+
throw new TypeError('MatrixSchemeData: params must be an object.');
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
/**
|
|
346
|
+
* A parser pair for MXC (Matrix Content) URIs, consisting of a predicate to check for the 'mxc://' prefix and a callback to parse the URI.
|
|
347
|
+
*/
|
|
348
|
+
export const MatrixMcxParser = TinyUriParser.buildParserPair('mxc', (uriString) => uriString.startsWith('mxc://'), parseMxc, reconstructMxc);
|
|
349
|
+
/**
|
|
350
|
+
* A parser pair for Matrix scheme URIs, consisting of a predicate to check for the 'matrix:' prefix and a callback to parse the URI.
|
|
351
|
+
*/
|
|
352
|
+
export const MatrixSchemeParser = TinyUriParser.buildParserPair('matrix_scheme', (uriString) => uriString.startsWith('matrix:'), parseMatrixScheme, reconstructMatrixScheme);
|
|
353
|
+
/**
|
|
354
|
+
* Handle Matrix ID shorthands (#room, !event, $event, @user)
|
|
355
|
+
*/
|
|
356
|
+
export const MatrixShortHandParser = TinyUriParser.buildParserPair('matrix_shorthand', (uriString) => uriString.startsWith('#') ||
|
|
357
|
+
uriString.startsWith('!') ||
|
|
358
|
+
uriString.startsWith('$') ||
|
|
359
|
+
uriString.startsWith('@'), (uriString) => {
|
|
360
|
+
const prefixMap = { '#': 'r/', '!': 'roomid/', $: 'e/', '@': 'u/' };
|
|
361
|
+
// @ts-ignore
|
|
362
|
+
const prefix = prefixMap[uriString[0]];
|
|
363
|
+
if (!prefix)
|
|
364
|
+
throw new Error(`Unable to determine the protocol for the provided URI: ${uriString}`);
|
|
365
|
+
return parseMatrixScheme(`matrix:${prefix}${uriString.substring(1)}`);
|
|
366
|
+
}, reconstructMatrixShorthand);
|
|
367
|
+
/**
|
|
368
|
+
* Check for Web URLs (e.g., https://matrix.to/#/...)
|
|
369
|
+
*/
|
|
370
|
+
export const MatrixWebUrlParser = TinyUriParser.buildParserPair('matrix_web_url', (uriString) => uriString.includes('://') && uriString.includes('#/'), parseWebUrl, reconstructMatrixWebUrl);
|
|
371
|
+
/**
|
|
372
|
+
* An array of Matrix Protocol parser pairs, where each pair contains a matching predicate and a parsing callback.
|
|
373
|
+
*/
|
|
374
|
+
export const MatrixProtocolParsers = Object.freeze([
|
|
375
|
+
MatrixMcxParser,
|
|
376
|
+
MatrixSchemeParser,
|
|
377
|
+
MatrixShortHandParser,
|
|
378
|
+
MatrixWebUrlParser,
|
|
379
|
+
]);
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tools = require('../utils/tools.cjs');
|
|
4
|
+
var objChecker = require('../../basics/objChecker.cjs');
|
|
5
|
+
|
|
6
|
+
const checkDestroy = tools.createCheckDestroyed('TinyUriParser');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A generic template for parsed URI results.
|
|
10
|
+
* @typedef {Record<any, any>} ParsedData
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A generic template for parsed URI results.
|
|
15
|
+
* @template {string} Type
|
|
16
|
+
* @template {ParsedData} Data
|
|
17
|
+
* @typedef {Object} ParsedUri
|
|
18
|
+
* @property {Type} type - The category of the URI.
|
|
19
|
+
* @property {Data} data - The parsed content.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A function type used to validate whether a provided URI string matches a specific pattern or protocol.
|
|
24
|
+
* @typedef {(uri: string) => boolean} ParseChecker
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A function type that accepts a URI string and returns a structured `ParsedUri` object.
|
|
29
|
+
* @template {string} Type
|
|
30
|
+
* @template {ParsedData} Data
|
|
31
|
+
* @typedef {(uri: string) => ParsedUri<Type, Data>} ParserCallback
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @template {string} Type
|
|
36
|
+
* @template {ParsedData} Data
|
|
37
|
+
* @typedef {(parsed: Data) => string} StringifyCallback
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A tuple representing a single parsing unit, consisting of a validation function,
|
|
42
|
+
* its corresponding parsing function, and an reconstruction function.
|
|
43
|
+
* @template {string} Type
|
|
44
|
+
* @template {ParsedData} Data
|
|
45
|
+
* @typedef {readonly [Type, ParseChecker, ParserCallback<Type, Data>, StringifyCallback<Type, Data>]} ParserPair
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* A utility class designed to parse various Matrix-related URI formats into structured objects.
|
|
50
|
+
* @template {ParserPair<any, any>} Parser
|
|
51
|
+
*/
|
|
52
|
+
class TinyUriParser {
|
|
53
|
+
/**
|
|
54
|
+
* Creates a frozen, immutable tuple containing the type, validation condition, parsing function, and stringification function for a specific URI type.
|
|
55
|
+
* @template {string} Type
|
|
56
|
+
* @template {ParsedData} Data
|
|
57
|
+
* @param {Type} type - The unique string identifier representing the URI category.
|
|
58
|
+
* @param {ParseChecker} conditions - A validation function that returns `true` if the URI matches the specific pattern.
|
|
59
|
+
* @param {(uri: string) => Data} parser - A function that extracts and returns the parsed data from the URI string.
|
|
60
|
+
* @param {StringifyCallback<Type, Data>} stringify - A function used to convert the parsed data back into a URI string.
|
|
61
|
+
* @returns {ParserPair<Type, Data>} An immutable tuple containing the type, validation checker, parser, and stringifier.
|
|
62
|
+
*/
|
|
63
|
+
static buildParserPair(type, conditions, parser, stringify) {
|
|
64
|
+
return Object.freeze([
|
|
65
|
+
type,
|
|
66
|
+
conditions,
|
|
67
|
+
(uriString) => ({
|
|
68
|
+
type: type,
|
|
69
|
+
data: parser(uriString),
|
|
70
|
+
}),
|
|
71
|
+
stringify,
|
|
72
|
+
]);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Whether this instance has been destroyed.
|
|
77
|
+
* @type {boolean}
|
|
78
|
+
*/
|
|
79
|
+
#isDestroyed = false;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Indicates whether this instance has been destroyed.
|
|
83
|
+
* @type {boolean}
|
|
84
|
+
*/
|
|
85
|
+
get isDestroyed() {
|
|
86
|
+
return this.#isDestroyed;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* A collection of parser pairs used to iterate through and match URI strings.
|
|
91
|
+
* @type {Set<Parser>}
|
|
92
|
+
*/
|
|
93
|
+
#parsers;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Returns an array containing shallow copies of the registered parser pairs to prevent direct mutation of the internal set.
|
|
97
|
+
* @type {Parser[]}
|
|
98
|
+
*/
|
|
99
|
+
get parsers() {
|
|
100
|
+
checkDestroy(this.#isDestroyed);
|
|
101
|
+
/** @type {Parser[]} */
|
|
102
|
+
return Array.from(this.#parsers).map((parserPair) => [...parserPair]);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Returns the total number of registered parser pairs.
|
|
107
|
+
* @type {number}
|
|
108
|
+
*/
|
|
109
|
+
get size() {
|
|
110
|
+
checkDestroy(this.#isDestroyed);
|
|
111
|
+
return this.#parsers.size;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Initializes the TinyUriParser instance with a collection of parser pairs.
|
|
116
|
+
* @param {...Parser} parsers
|
|
117
|
+
* @throws {TypeError} If any provided parser is not a valid ParserPair.
|
|
118
|
+
*/
|
|
119
|
+
constructor(...parsers) {
|
|
120
|
+
for (const [index, parser] of parsers.entries()) {
|
|
121
|
+
// 1. Check if the argument is an array (the base of a tuple/ParserPair)
|
|
122
|
+
if (!Array.isArray(parser)) {
|
|
123
|
+
throw new TypeError(`Parser at index ${index} must be an array representing a ParserPair.`);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// 2. Check if the array has exactly four elements [Type, ParseChecker, ParserCallback, StringifyCallback]
|
|
127
|
+
if (parser.length !== 4) {
|
|
128
|
+
throw new TypeError(`Parser at index ${index} must contain exactly 4 elements.`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// 3. Validate that the first element is a string (Type)
|
|
132
|
+
if (typeof parser[0] !== 'string') {
|
|
133
|
+
throw new TypeError(
|
|
134
|
+
`The first element of the parser at index ${index} must be a string (Type).`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// 4. Validate that the second element is a function (ParseChecker)
|
|
139
|
+
if (typeof parser[1] !== 'function') {
|
|
140
|
+
throw new TypeError(
|
|
141
|
+
`The second element of the parser at index ${index} must be a function (ParseChecker).`,
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// 5. Validate that the third element is a function (ParserCallback)
|
|
146
|
+
if (typeof parser[2] !== 'function') {
|
|
147
|
+
throw new TypeError(
|
|
148
|
+
`The third element of the parser at index ${index} must be a function (ParserCallback).`,
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// 6. Validate that the fourth element is a function (StringifyCallback)
|
|
153
|
+
if (typeof parser[3] !== 'function') {
|
|
154
|
+
throw new TypeError(
|
|
155
|
+
`The fourth element of the parser at index ${index} must be a function (StringifyCallback).`,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
this.#parsers = new Set(parsers);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Main entry point for parsing.
|
|
165
|
+
* @param {string} uriString - The raw URI string to parse.
|
|
166
|
+
* @returns {ReturnType<Parser[2]>} The parsed object.
|
|
167
|
+
* @throws {TypeError | RangeError | Error} If the input is invalid or parsing fails.
|
|
168
|
+
*/
|
|
169
|
+
parse(uriString) {
|
|
170
|
+
checkDestroy(this.#isDestroyed);
|
|
171
|
+
if (typeof uriString !== 'string') {
|
|
172
|
+
throw new TypeError('The input must be a string.');
|
|
173
|
+
}
|
|
174
|
+
for (const parser of this.#parsers) {
|
|
175
|
+
// @ts-ignore
|
|
176
|
+
if (parser[1](uriString)) return parser[2](uriString);
|
|
177
|
+
}
|
|
178
|
+
throw new Error(`Unable to determine the protocol for the provided URI: ${uriString}`);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Reconstructs the original URI string from a parsed object.
|
|
183
|
+
* @param {ReturnType<Parser[2]>} parsedObject - The object returned by the parse method.
|
|
184
|
+
* @returns {string} The reconstructed URI string.
|
|
185
|
+
* @throws {TypeError | Error} If the object is invalid or no reconstructor is found.
|
|
186
|
+
*/
|
|
187
|
+
stringify(parsedObject) {
|
|
188
|
+
checkDestroy(this.#isDestroyed);
|
|
189
|
+
if (!objChecker.isJsonObject(parsedObject) || typeof parsedObject.type !== 'string') {
|
|
190
|
+
throw new TypeError('The input must be a valid ParsedUri object with a "type" property.');
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
for (const parser of this.#parsers) {
|
|
194
|
+
const [type, , , reconstructor] = parser;
|
|
195
|
+
if (type === parsedObject.type && typeof reconstructor === 'function') {
|
|
196
|
+
const result = reconstructor(parsedObject.data);
|
|
197
|
+
if (typeof result === 'string') {
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
throw new Error(`No reconstructor found for the parsed type: ${parsedObject.type}`);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Cleans up internal parsers and marks the instance as destroyed to prevent memory leaks.
|
|
208
|
+
* @returns {void}
|
|
209
|
+
*/
|
|
210
|
+
destroy() {
|
|
211
|
+
if (this.#isDestroyed) return;
|
|
212
|
+
this.#parsers.clear();
|
|
213
|
+
this.#isDestroyed = true;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
module.exports = TinyUriParser;
|