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,233 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Transformation applied to the extracted usernames.
|
|
5
|
+
* @typedef {'lowercase' | 'uppercase' | ((username: string) => string) | null} UsernameTransform
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Configuration options for constructing username regular expressions.
|
|
10
|
+
* @typedef {Object} UsernameRegexOptions
|
|
11
|
+
* @property {string} [validValues='[a-zA-Z0-9_]'] The allowed characters for the username part.
|
|
12
|
+
* @property {[number, number]} [length=[3, 20]] The [min, max] length of the username part.
|
|
13
|
+
* @property {string} [start] A regex pattern defining the required characters at the start of the username.
|
|
14
|
+
* @property {string} [end] A regex pattern defining the required characters at the end of the username.
|
|
15
|
+
* @property {string} [prefix] An optional prefix like '@' or '#'.
|
|
16
|
+
* @property {string} [domain] A literal domain string (e.g., '@matrix.org'). Will be escaped automatically.
|
|
17
|
+
* @property {string} [domainPattern] A regex pattern for a domain (e.g., '@[a-z0-9.-]+\\.[a-z]{2,}').
|
|
18
|
+
* @property {UsernameTransform} [transform] Optional transformation applied to the extracted usernames.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {UsernameRegexOptions | UsernameRegexOptions[]} UsernameOptionsInput
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Escapes special regex characters to be used in a literal string.
|
|
27
|
+
* @param {string} string The string to be escaped.
|
|
28
|
+
* @returns {string} The escaped string.
|
|
29
|
+
*/
|
|
30
|
+
const escapeRegExp = (string) => String(string).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Applies the requested transformation to a matched string.
|
|
34
|
+
* @param {string} username The matched username string.
|
|
35
|
+
* @param {UsernameTransform} [transform] The transformation rule to apply.
|
|
36
|
+
* @returns {string} The transformed username string.
|
|
37
|
+
*/
|
|
38
|
+
const applyTransform = (username, transform) => {
|
|
39
|
+
// Validation for the new transform property deeply inspecting its value
|
|
40
|
+
if (transform !== undefined && transform !== null) {
|
|
41
|
+
if (typeof transform !== 'function' && transform !== 'lowercase' && transform !== 'uppercase') {
|
|
42
|
+
throw new TypeError(
|
|
43
|
+
'The "transform" property must be a function, "lowercase", or "uppercase".',
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (typeof transform === 'function') return transform(username);
|
|
49
|
+
if (transform === 'lowercase') return username.toLowerCase();
|
|
50
|
+
if (transform === 'uppercase') return username.toUpperCase();
|
|
51
|
+
return username;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Generates the domain portion of a regular expression.
|
|
56
|
+
* @param {UsernameRegexOptions} [options] The options containing domain or domainPattern.
|
|
57
|
+
* @returns {string} The regex-ready domain portion as a string.
|
|
58
|
+
*/
|
|
59
|
+
function getDomainPart({ domain, domainPattern, end } = {}) {
|
|
60
|
+
if (end !== undefined && typeof end !== 'string') {
|
|
61
|
+
throw new TypeError('The "end" property must be a string.');
|
|
62
|
+
}
|
|
63
|
+
if (domain !== undefined && typeof domain !== 'string') {
|
|
64
|
+
throw new TypeError('The "domain" property must be a string.');
|
|
65
|
+
}
|
|
66
|
+
if (domainPattern !== undefined && typeof domainPattern !== 'string') {
|
|
67
|
+
throw new TypeError('The "domainPattern" property must be a string.');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Priority: domainPattern (regex) > domain (literal)
|
|
71
|
+
if (domainPattern) {
|
|
72
|
+
return `(?:${domainPattern})${end ?? ''}`;
|
|
73
|
+
} else if (domain) {
|
|
74
|
+
return `(?:${escapeRegExp(domain)})${end ?? ''}`;
|
|
75
|
+
}
|
|
76
|
+
return end ?? '';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Generates the prefix portion of a regular expression.
|
|
81
|
+
* @param {UsernameRegexOptions} [options] The options containing the prefix.
|
|
82
|
+
* @returns {string} The escaped prefix string.
|
|
83
|
+
*/
|
|
84
|
+
function getPrefix({ prefix, start } = {}) {
|
|
85
|
+
if (start !== undefined && typeof start !== 'string') {
|
|
86
|
+
throw new TypeError('The "start" property must be a string.');
|
|
87
|
+
}
|
|
88
|
+
if (prefix !== undefined && typeof prefix !== 'string') {
|
|
89
|
+
throw new TypeError('The "prefix" property must be a string.');
|
|
90
|
+
}
|
|
91
|
+
return `${start ?? ''}${prefix ? escapeRegExp(prefix) : ''}`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Builds the core part of a username regular expression based on character rules and length.
|
|
96
|
+
* @param {UsernameRegexOptions} [options] The options for the core pattern.
|
|
97
|
+
* @returns {string} The regex string for the core username part.
|
|
98
|
+
*/
|
|
99
|
+
const usernameStringRegexBuilder = ({
|
|
100
|
+
validValues = '[a-zA-Z0-9_]',
|
|
101
|
+
length = [3, 20],
|
|
102
|
+
} = {}) => {
|
|
103
|
+
if (validValues !== undefined && typeof validValues !== 'string') {
|
|
104
|
+
throw new TypeError('The "validValues" property must be a string.');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (length !== undefined) {
|
|
108
|
+
if (!Array.isArray(length) || typeof length[0] !== 'number' || typeof length[1] !== 'number') {
|
|
109
|
+
throw new TypeError('The "length" property must be an array of two numbers.');
|
|
110
|
+
}
|
|
111
|
+
if (length[0] > length[1]) {
|
|
112
|
+
throw new RangeError(
|
|
113
|
+
'The minimum length (length[0]) cannot be greater than the maximum length (length[1]).',
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
if (length[0] < 0) {
|
|
117
|
+
throw new RangeError('The length cannot be negative.');
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Enveloping validValues in a non-capturing group to prevent repetition bugs
|
|
122
|
+
return `(?:${validValues}){${String(length[0])},${String(length[1])}}`;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Internal helper to build the pattern for a single configuration object.
|
|
127
|
+
* @param {UsernameRegexOptions} [options]
|
|
128
|
+
* @returns {string}
|
|
129
|
+
*/
|
|
130
|
+
function getSinglePattern(options) {
|
|
131
|
+
const prefix = getPrefix(options);
|
|
132
|
+
const core = usernameStringRegexBuilder(options);
|
|
133
|
+
const domainPart = getDomainPart(options);
|
|
134
|
+
return `${prefix}${core}${domainPart}`;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Validates the UsernameRegexOptions object(s) for correct types and structure.
|
|
139
|
+
* @param {UsernameOptionsInput} [options] The options object or array to validate.
|
|
140
|
+
* @throws {TypeError} If validation fails due to wrong types.
|
|
141
|
+
*/
|
|
142
|
+
const validateUsernameOptions = (options) => {
|
|
143
|
+
if (options === undefined) return;
|
|
144
|
+
const items = Array.isArray(options) ? options : [options];
|
|
145
|
+
|
|
146
|
+
for (const opt of items) {
|
|
147
|
+
if (typeof opt !== 'object' || opt === null || Array.isArray(opt)) {
|
|
148
|
+
throw new TypeError('Options must be a plain object or an array of plain objects.');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Constructs a complete regular expression for matching a username.
|
|
155
|
+
* @param {UsernameOptionsInput} [options] The options for constructing the regex.
|
|
156
|
+
* @returns {RegExp} The constructed regular expression object.
|
|
157
|
+
*/
|
|
158
|
+
function usernameRegex(options) {
|
|
159
|
+
validateUsernameOptions(options);
|
|
160
|
+
|
|
161
|
+
if (Array.isArray(options)) {
|
|
162
|
+
const combinedPattern = options.map(getSinglePattern).join('|');
|
|
163
|
+
return new RegExp(`^(?:${combinedPattern})$`);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return new RegExp(`^${getSinglePattern(options)}$`);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Validates whether a string matches the specified username pattern.
|
|
171
|
+
* @param {string} s The input string to validate.
|
|
172
|
+
* @param {UsernameOptionsInput} [options] The regex construction options.
|
|
173
|
+
* @param {RegExp} [regex] - The regex used to execute the function.
|
|
174
|
+
* @returns {boolean} True if the string is a valid username, false otherwise.
|
|
175
|
+
* @throws {TypeError} If the input is not a string.
|
|
176
|
+
*/
|
|
177
|
+
function isValidUsername(s, options, regex) {
|
|
178
|
+
if (typeof s !== 'string') {
|
|
179
|
+
throw new TypeError('The input must be a string.');
|
|
180
|
+
}
|
|
181
|
+
return (regex ?? usernameRegex(options)).test(s);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Generates a global regular expression to find usernames within a text.
|
|
186
|
+
* @param {UsernameOptionsInput} [options] The options for the regex.
|
|
187
|
+
* @returns {RegExp} The global regular expression for finding usernames.
|
|
188
|
+
*/
|
|
189
|
+
function findUsernameRegex(options) {
|
|
190
|
+
validateUsernameOptions(options);
|
|
191
|
+
const firstOpt = Array.isArray(options) ? options[0] : options;
|
|
192
|
+
const needsLookaround = firstOpt?.prefix || firstOpt?.start;
|
|
193
|
+
const boundaryStart = needsLookaround ? '(?:^|(?<=\\W))' : '\\b';
|
|
194
|
+
const boundaryEnd = needsLookaround ? '(?=\\W|$)' : '\\b';
|
|
195
|
+
|
|
196
|
+
if (Array.isArray(options)) {
|
|
197
|
+
const combinedPattern = options.map(getSinglePattern).join('|');
|
|
198
|
+
return new RegExp(`${boundaryStart}(?:${combinedPattern})${boundaryEnd}`, 'g');
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return new RegExp(`${boundaryStart}${getSinglePattern(options)}${boundaryEnd}`, 'g');
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Extracts usernames from a text and applies optional transformations.
|
|
206
|
+
* @param {string} text The text to search through.
|
|
207
|
+
* @param {UsernameOptionsInput} [options] The options for extraction.
|
|
208
|
+
* @param {RegExp} [regex] - The regex used to execute the function.
|
|
209
|
+
* @returns {string[]} An array of extracted and transformed usernames.
|
|
210
|
+
* @throws {TypeError} If the input text is not a string.
|
|
211
|
+
*/
|
|
212
|
+
function extractUsernames(text, options, regex) {
|
|
213
|
+
if (typeof text !== 'string') {
|
|
214
|
+
throw new TypeError('The input must be a string.');
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const matches = text.match(regex ?? findUsernameRegex(options));
|
|
218
|
+
if (!matches) return [];
|
|
219
|
+
|
|
220
|
+
// If an array is provided, we use the transform from the first element
|
|
221
|
+
// because a single combined regex cannot distinguish which rule matched.
|
|
222
|
+
const transform = Array.isArray(options) ? options[0]?.transform : options?.transform;
|
|
223
|
+
|
|
224
|
+
if (transform) return matches.map((match) => applyTransform(match, transform));
|
|
225
|
+
|
|
226
|
+
return matches;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
exports.extractUsernames = extractUsernames;
|
|
230
|
+
exports.findUsernameRegex = findUsernameRegex;
|
|
231
|
+
exports.isValidUsername = isValidUsername;
|
|
232
|
+
exports.usernameRegex = usernameRegex;
|
|
233
|
+
exports.usernameStringRegexBuilder = usernameStringRegexBuilder;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transformation applied to the extracted usernames.
|
|
3
|
+
* @typedef {'lowercase' | 'uppercase' | ((username: string) => string) | null} UsernameTransform
|
|
4
|
+
*/
|
|
5
|
+
export type UsernameTransform = 'lowercase' | 'uppercase' | ((username: string) => string) | null;
|
|
6
|
+
export type UsernameRegexOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* The allowed characters for the username part.
|
|
9
|
+
*/
|
|
10
|
+
validValues?: string;
|
|
11
|
+
/**
|
|
12
|
+
* The [min, max] length of the username part.
|
|
13
|
+
*/
|
|
14
|
+
length?: [number, number];
|
|
15
|
+
/**
|
|
16
|
+
* A regex pattern defining the required characters at the start of the username.
|
|
17
|
+
*/
|
|
18
|
+
start?: string;
|
|
19
|
+
/**
|
|
20
|
+
* A regex pattern defining the required characters at the end of the username.
|
|
21
|
+
*/
|
|
22
|
+
end?: string;
|
|
23
|
+
/**
|
|
24
|
+
* An optional prefix like '@' or '#'.
|
|
25
|
+
*/
|
|
26
|
+
prefix?: string;
|
|
27
|
+
/**
|
|
28
|
+
* A literal domain string (e.g., '@matrix.org'). Will be escaped automatically.
|
|
29
|
+
*/
|
|
30
|
+
domain?: string;
|
|
31
|
+
/**
|
|
32
|
+
* A regex pattern for a domain (e.g., '@[a-z0-9.-]+\\.[a-z]{2,}').
|
|
33
|
+
*/
|
|
34
|
+
domainPattern?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Optional transformation applied to the extracted usernames.
|
|
37
|
+
*/
|
|
38
|
+
transform?: UsernameTransform;
|
|
39
|
+
};
|
|
40
|
+
export type UsernameOptionsInput = UsernameRegexOptions | UsernameRegexOptions[];
|
|
41
|
+
/**
|
|
42
|
+
* Builds the core part of a username regular expression based on character rules and length.
|
|
43
|
+
* @param {UsernameRegexOptions} [options] The options for the core pattern.
|
|
44
|
+
* @returns {string} The regex string for the core username part.
|
|
45
|
+
*/
|
|
46
|
+
export declare const usernameStringRegexBuilder: ({ validValues, length, }?: UsernameRegexOptions) => string;
|
|
47
|
+
/**
|
|
48
|
+
* Constructs a complete regular expression for matching a username.
|
|
49
|
+
* @param {UsernameOptionsInput} [options] The options for constructing the regex.
|
|
50
|
+
* @returns {RegExp} The constructed regular expression object.
|
|
51
|
+
*/
|
|
52
|
+
export declare function usernameRegex(options?: UsernameOptionsInput): RegExp;
|
|
53
|
+
/**
|
|
54
|
+
* Validates whether a string matches the specified username pattern.
|
|
55
|
+
* @param {string} s The input string to validate.
|
|
56
|
+
* @param {UsernameOptionsInput} [options] The regex construction options.
|
|
57
|
+
* @param {RegExp} [regex] - The regex used to execute the function.
|
|
58
|
+
* @returns {boolean} True if the string is a valid username, false otherwise.
|
|
59
|
+
* @throws {TypeError} If the input is not a string.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isValidUsername(s: string, options?: UsernameOptionsInput, regex?: RegExp): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Generates a global regular expression to find usernames within a text.
|
|
64
|
+
* @param {UsernameOptionsInput} [options] The options for the regex.
|
|
65
|
+
* @returns {RegExp} The global regular expression for finding usernames.
|
|
66
|
+
*/
|
|
67
|
+
export declare function findUsernameRegex(options?: UsernameOptionsInput): RegExp;
|
|
68
|
+
/**
|
|
69
|
+
* Extracts usernames from a text and applies optional transformations.
|
|
70
|
+
* @param {string} text The text to search through.
|
|
71
|
+
* @param {UsernameOptionsInput} [options] The options for extraction.
|
|
72
|
+
* @param {RegExp} [regex] - The regex used to execute the function.
|
|
73
|
+
* @returns {string[]} An array of extracted and transformed usernames.
|
|
74
|
+
* @throws {TypeError} If the input text is not a string.
|
|
75
|
+
*/
|
|
76
|
+
export declare function extractUsernames(text: string, options?: UsernameOptionsInput, regex?: RegExp): string[];
|
|
77
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/v1/regexp/Username/index.mjs"],"names":[],"mappings":"AAAA;;;GAGG;AADA,YAA6E,iBAAiB,GAApF,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,CAAmB;AAK9F,YAAkB,oBAAoB,GACtC;;;;IAAoB,WAAW,AAA/B,CACA,EADW,MAAM,CACjB;;;;IAA8B,MAAM,AAApC,CACA,EADW,CAAC,MAAM,EAAE,MAAM,CAAC,CAC3B;;;;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;;;;IAAoB,GAAG,AAAvB,CACA,EADW,MAAM,CACjB;;;;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;;;;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAA+B,SAAS,AAAxC,CACF,EADa,iBAAiB,CAC9B;CAAA,CAAA;AAGE,YAAyD,oBAAoB,GAAnE,oBAAoB,GAAG,oBAAoB,EAAE,CAAsB;AAwEhF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,8BAH5B,oBAAoB,KAClB,MA0BZ,CAAC;AA8BF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,AAHlC,CACA,EADQ,oBAG0B,GAFxB,MAAM,CAWlB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EANtB,MAMsB,EAAE,OAAO,AALvC,CACA,EADQ,oBAK+B,EAAE,KAAK,AAJ9C,CACA,EADQ,MAIsC,GAHpC,OAAO,CAQnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,AAHtC,CACA,EADQ,oBAG8B,GAF5B,MAAM,CAelB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAN1B,MAM0B,EAAE,OAAO,AAL3C,CACA,EADQ,oBAKmC,EAAE,KAAK,AAJlD,CACA,EADQ,MAI0C,GAHxC,MAAM,EAAE,CAkBpB"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transformation applied to the extracted usernames.
|
|
3
|
+
* @typedef {'lowercase' | 'uppercase' | ((username: string) => string) | null} UsernameTransform
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Configuration options for constructing username regular expressions.
|
|
7
|
+
* @typedef {Object} UsernameRegexOptions
|
|
8
|
+
* @property {string} [validValues='[a-zA-Z0-9_]'] The allowed characters for the username part.
|
|
9
|
+
* @property {[number, number]} [length=[3, 20]] The [min, max] length of the username part.
|
|
10
|
+
* @property {string} [start] A regex pattern defining the required characters at the start of the username.
|
|
11
|
+
* @property {string} [end] A regex pattern defining the required characters at the end of the username.
|
|
12
|
+
* @property {string} [prefix] An optional prefix like '@' or '#'.
|
|
13
|
+
* @property {string} [domain] A literal domain string (e.g., '@matrix.org'). Will be escaped automatically.
|
|
14
|
+
* @property {string} [domainPattern] A regex pattern for a domain (e.g., '@[a-z0-9.-]+\\.[a-z]{2,}').
|
|
15
|
+
* @property {UsernameTransform} [transform] Optional transformation applied to the extracted usernames.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {UsernameRegexOptions | UsernameRegexOptions[]} UsernameOptionsInput
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Escapes special regex characters to be used in a literal string.
|
|
22
|
+
* @param {string} string The string to be escaped.
|
|
23
|
+
* @returns {string} The escaped string.
|
|
24
|
+
*/
|
|
25
|
+
const escapeRegExp = (string) => String(string).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
26
|
+
/**
|
|
27
|
+
* Applies the requested transformation to a matched string.
|
|
28
|
+
* @param {string} username The matched username string.
|
|
29
|
+
* @param {UsernameTransform} [transform] The transformation rule to apply.
|
|
30
|
+
* @returns {string} The transformed username string.
|
|
31
|
+
*/
|
|
32
|
+
const applyTransform = (username, transform) => {
|
|
33
|
+
// Validation for the new transform property deeply inspecting its value
|
|
34
|
+
if (transform !== undefined && transform !== null) {
|
|
35
|
+
if (typeof transform !== 'function' && transform !== 'lowercase' && transform !== 'uppercase') {
|
|
36
|
+
throw new TypeError('The "transform" property must be a function, "lowercase", or "uppercase".');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (typeof transform === 'function')
|
|
40
|
+
return transform(username);
|
|
41
|
+
if (transform === 'lowercase')
|
|
42
|
+
return username.toLowerCase();
|
|
43
|
+
if (transform === 'uppercase')
|
|
44
|
+
return username.toUpperCase();
|
|
45
|
+
return username;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Generates the domain portion of a regular expression.
|
|
49
|
+
* @param {UsernameRegexOptions} [options] The options containing domain or domainPattern.
|
|
50
|
+
* @returns {string} The regex-ready domain portion as a string.
|
|
51
|
+
*/
|
|
52
|
+
function getDomainPart({ domain, domainPattern, end } = {}) {
|
|
53
|
+
if (end !== undefined && typeof end !== 'string') {
|
|
54
|
+
throw new TypeError('The "end" property must be a string.');
|
|
55
|
+
}
|
|
56
|
+
if (domain !== undefined && typeof domain !== 'string') {
|
|
57
|
+
throw new TypeError('The "domain" property must be a string.');
|
|
58
|
+
}
|
|
59
|
+
if (domainPattern !== undefined && typeof domainPattern !== 'string') {
|
|
60
|
+
throw new TypeError('The "domainPattern" property must be a string.');
|
|
61
|
+
}
|
|
62
|
+
// Priority: domainPattern (regex) > domain (literal)
|
|
63
|
+
if (domainPattern) {
|
|
64
|
+
return `(?:${domainPattern})${end ?? ''}`;
|
|
65
|
+
}
|
|
66
|
+
else if (domain) {
|
|
67
|
+
return `(?:${escapeRegExp(domain)})${end ?? ''}`;
|
|
68
|
+
}
|
|
69
|
+
return end ?? '';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generates the prefix portion of a regular expression.
|
|
73
|
+
* @param {UsernameRegexOptions} [options] The options containing the prefix.
|
|
74
|
+
* @returns {string} The escaped prefix string.
|
|
75
|
+
*/
|
|
76
|
+
function getPrefix({ prefix, start } = {}) {
|
|
77
|
+
if (start !== undefined && typeof start !== 'string') {
|
|
78
|
+
throw new TypeError('The "start" property must be a string.');
|
|
79
|
+
}
|
|
80
|
+
if (prefix !== undefined && typeof prefix !== 'string') {
|
|
81
|
+
throw new TypeError('The "prefix" property must be a string.');
|
|
82
|
+
}
|
|
83
|
+
return `${start ?? ''}${prefix ? escapeRegExp(prefix) : ''}`;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Builds the core part of a username regular expression based on character rules and length.
|
|
87
|
+
* @param {UsernameRegexOptions} [options] The options for the core pattern.
|
|
88
|
+
* @returns {string} The regex string for the core username part.
|
|
89
|
+
*/
|
|
90
|
+
export const usernameStringRegexBuilder = ({ validValues = '[a-zA-Z0-9_]', length = [3, 20], } = {}) => {
|
|
91
|
+
if (validValues !== undefined && typeof validValues !== 'string') {
|
|
92
|
+
throw new TypeError('The "validValues" property must be a string.');
|
|
93
|
+
}
|
|
94
|
+
if (length !== undefined) {
|
|
95
|
+
if (!Array.isArray(length) || typeof length[0] !== 'number' || typeof length[1] !== 'number') {
|
|
96
|
+
throw new TypeError('The "length" property must be an array of two numbers.');
|
|
97
|
+
}
|
|
98
|
+
if (length[0] > length[1]) {
|
|
99
|
+
throw new RangeError('The minimum length (length[0]) cannot be greater than the maximum length (length[1]).');
|
|
100
|
+
}
|
|
101
|
+
if (length[0] < 0) {
|
|
102
|
+
throw new RangeError('The length cannot be negative.');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Enveloping validValues in a non-capturing group to prevent repetition bugs
|
|
106
|
+
return `(?:${validValues}){${String(length[0])},${String(length[1])}}`;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Internal helper to build the pattern for a single configuration object.
|
|
110
|
+
* @param {UsernameRegexOptions} [options]
|
|
111
|
+
* @returns {string}
|
|
112
|
+
*/
|
|
113
|
+
function getSinglePattern(options) {
|
|
114
|
+
const prefix = getPrefix(options);
|
|
115
|
+
const core = usernameStringRegexBuilder(options);
|
|
116
|
+
const domainPart = getDomainPart(options);
|
|
117
|
+
return `${prefix}${core}${domainPart}`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Validates the UsernameRegexOptions object(s) for correct types and structure.
|
|
121
|
+
* @param {UsernameOptionsInput} [options] The options object or array to validate.
|
|
122
|
+
* @throws {TypeError} If validation fails due to wrong types.
|
|
123
|
+
*/
|
|
124
|
+
const validateUsernameOptions = (options) => {
|
|
125
|
+
if (options === undefined)
|
|
126
|
+
return;
|
|
127
|
+
const items = Array.isArray(options) ? options : [options];
|
|
128
|
+
for (const opt of items) {
|
|
129
|
+
if (typeof opt !== 'object' || opt === null || Array.isArray(opt)) {
|
|
130
|
+
throw new TypeError('Options must be a plain object or an array of plain objects.');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Constructs a complete regular expression for matching a username.
|
|
136
|
+
* @param {UsernameOptionsInput} [options] The options for constructing the regex.
|
|
137
|
+
* @returns {RegExp} The constructed regular expression object.
|
|
138
|
+
*/
|
|
139
|
+
export function usernameRegex(options) {
|
|
140
|
+
validateUsernameOptions(options);
|
|
141
|
+
if (Array.isArray(options)) {
|
|
142
|
+
const combinedPattern = options.map(getSinglePattern).join('|');
|
|
143
|
+
return new RegExp(`^(?:${combinedPattern})$`);
|
|
144
|
+
}
|
|
145
|
+
return new RegExp(`^${getSinglePattern(options)}$`);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Validates whether a string matches the specified username pattern.
|
|
149
|
+
* @param {string} s The input string to validate.
|
|
150
|
+
* @param {UsernameOptionsInput} [options] The regex construction options.
|
|
151
|
+
* @param {RegExp} [regex] - The regex used to execute the function.
|
|
152
|
+
* @returns {boolean} True if the string is a valid username, false otherwise.
|
|
153
|
+
* @throws {TypeError} If the input is not a string.
|
|
154
|
+
*/
|
|
155
|
+
export function isValidUsername(s, options, regex) {
|
|
156
|
+
if (typeof s !== 'string') {
|
|
157
|
+
throw new TypeError('The input must be a string.');
|
|
158
|
+
}
|
|
159
|
+
return (regex ?? usernameRegex(options)).test(s);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Generates a global regular expression to find usernames within a text.
|
|
163
|
+
* @param {UsernameOptionsInput} [options] The options for the regex.
|
|
164
|
+
* @returns {RegExp} The global regular expression for finding usernames.
|
|
165
|
+
*/
|
|
166
|
+
export function findUsernameRegex(options) {
|
|
167
|
+
validateUsernameOptions(options);
|
|
168
|
+
const firstOpt = Array.isArray(options) ? options[0] : options;
|
|
169
|
+
const needsLookaround = firstOpt?.prefix || firstOpt?.start;
|
|
170
|
+
const boundaryStart = needsLookaround ? '(?:^|(?<=\\W))' : '\\b';
|
|
171
|
+
const boundaryEnd = needsLookaround ? '(?=\\W|$)' : '\\b';
|
|
172
|
+
if (Array.isArray(options)) {
|
|
173
|
+
const combinedPattern = options.map(getSinglePattern).join('|');
|
|
174
|
+
return new RegExp(`${boundaryStart}(?:${combinedPattern})${boundaryEnd}`, 'g');
|
|
175
|
+
}
|
|
176
|
+
return new RegExp(`${boundaryStart}${getSinglePattern(options)}${boundaryEnd}`, 'g');
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Extracts usernames from a text and applies optional transformations.
|
|
180
|
+
* @param {string} text The text to search through.
|
|
181
|
+
* @param {UsernameOptionsInput} [options] The options for extraction.
|
|
182
|
+
* @param {RegExp} [regex] - The regex used to execute the function.
|
|
183
|
+
* @returns {string[]} An array of extracted and transformed usernames.
|
|
184
|
+
* @throws {TypeError} If the input text is not a string.
|
|
185
|
+
*/
|
|
186
|
+
export function extractUsernames(text, options, regex) {
|
|
187
|
+
if (typeof text !== 'string') {
|
|
188
|
+
throw new TypeError('The input must be a string.');
|
|
189
|
+
}
|
|
190
|
+
const matches = text.match(regex ?? findUsernameRegex(options));
|
|
191
|
+
if (!matches)
|
|
192
|
+
return [];
|
|
193
|
+
// If an array is provided, we use the transform from the first element
|
|
194
|
+
// because a single combined regex cannot distinguish which rule matched.
|
|
195
|
+
const transform = Array.isArray(options) ? options[0]?.transform : options?.transform;
|
|
196
|
+
if (transform)
|
|
197
|
+
return matches.map((match) => applyTransform(match, transform));
|
|
198
|
+
return matches;
|
|
199
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the type for transformations applied to extracted usernames.
|
|
3
|
+
* @typedef {import('./index.mjs').UsernameTransform} UsernameTransform
|
|
4
|
+
*/
|
|
5
|
+
export type UsernameTransform = import('./index.mjs').UsernameTransform;
|
|
6
|
+
export type UsernameRegexTemplate = {
|
|
7
|
+
/**
|
|
8
|
+
* A collection of recommended regex strings for use in secondary utilities.
|
|
9
|
+
*/
|
|
10
|
+
pure?: string[];
|
|
11
|
+
/**
|
|
12
|
+
* The allowed characters for the username part.
|
|
13
|
+
*/
|
|
14
|
+
validValues: string;
|
|
15
|
+
/**
|
|
16
|
+
* The [min, max] length of the username part.
|
|
17
|
+
*/
|
|
18
|
+
length?: [number, number];
|
|
19
|
+
/**
|
|
20
|
+
* A regex pattern defining the required characters at the start of the username.
|
|
21
|
+
*/
|
|
22
|
+
start?: string;
|
|
23
|
+
/**
|
|
24
|
+
* A regex pattern defining the required characters at the end of the username.
|
|
25
|
+
*/
|
|
26
|
+
end?: string;
|
|
27
|
+
/**
|
|
28
|
+
* An prefix like '@' or '#'.
|
|
29
|
+
*/
|
|
30
|
+
prefix?: string;
|
|
31
|
+
/**
|
|
32
|
+
* A regex pattern for a domain.
|
|
33
|
+
*/
|
|
34
|
+
domainPattern?: string;
|
|
35
|
+
/**
|
|
36
|
+
* A literal domain string (e.g., '@matrix.org'). Will be escaped automatically.
|
|
37
|
+
*/
|
|
38
|
+
domain?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Optional transformation applied to the extracted usernames.
|
|
41
|
+
*/
|
|
42
|
+
transform?: UsernameTransform;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Configuration options for constructing username regular expressions.
|
|
46
|
+
* @typedef {Object} UsernameRegexTemplate
|
|
47
|
+
* @property {string[]} [pure] A collection of recommended regex strings for use in secondary utilities.
|
|
48
|
+
* @property {string} validValues The allowed characters for the username part.
|
|
49
|
+
* @property {[number, number]} [length] The [min, max] length of the username part.
|
|
50
|
+
* @property {string} [start] A regex pattern defining the required characters at the start of the username.
|
|
51
|
+
* @property {string} [end] A regex pattern defining the required characters at the end of the username.
|
|
52
|
+
* @property {string} [prefix] An prefix like '@' or '#'.
|
|
53
|
+
* @property {string} [domainPattern] A regex pattern for a domain.
|
|
54
|
+
* @property {string} [domain] A literal domain string (e.g., '@matrix.org'). Will be escaped automatically.
|
|
55
|
+
* @property {UsernameTransform} [transform] Optional transformation applied to the extracted usernames.
|
|
56
|
+
*/
|
|
57
|
+
//# sourceMappingURL=jsDoc.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsDoc.d.mts","sourceRoot":"","sources":["../../../../src/v1/regexp/Username/jsDoc.mjs"],"names":[],"mappings":"AAAA;;;GAGG;AADA,YAAmD,iBAAiB,GAA1D,OAAO,aAAa,EAAE,iBAAiB,CAAmB;AAKpE,YAAkB,qBAAqB,GACvC;;;;IAAsB,IAAI,AAA1B,CACA,EADW,MAAM,EAAE,CACnB;;;;IAAmB,WAAW,EAAnB,MAAM,CACjB;;;;IAA8B,MAAM,AAApC,CACA,EADW,CAAC,MAAM,EAAE,MAAM,CAAC,CAC3B;;;;IAAoB,KAAK,AAAzB,CACA,EADW,MAAM,CACjB;;;;IAAoB,GAAG,AAAvB,CACA,EADW,MAAM,CACjB;;;;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;;;;IAAoB,aAAa,AAAjC,CACA,EADW,MAAM,CACjB;;;;IAAoB,MAAM,AAA1B,CACA,EADW,MAAM,CACjB;;;;IAA+B,SAAS,AAAxC,CACF,EADa,iBAAiB,CAC9B;CAAA,CAAA;AAZD;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the type for transformations applied to extracted usernames.
|
|
3
|
+
* @typedef {import('./index.mjs').UsernameTransform} UsernameTransform
|
|
4
|
+
*/
|
|
5
|
+
export {};
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for constructing username regular expressions.
|
|
8
|
+
* @typedef {Object} UsernameRegexTemplate
|
|
9
|
+
* @property {string[]} [pure] A collection of recommended regex strings for use in secondary utilities.
|
|
10
|
+
* @property {string} validValues The allowed characters for the username part.
|
|
11
|
+
* @property {[number, number]} [length] The [min, max] length of the username part.
|
|
12
|
+
* @property {string} [start] A regex pattern defining the required characters at the start of the username.
|
|
13
|
+
* @property {string} [end] A regex pattern defining the required characters at the end of the username.
|
|
14
|
+
* @property {string} [prefix] An prefix like '@' or '#'.
|
|
15
|
+
* @property {string} [domainPattern] A regex pattern for a domain.
|
|
16
|
+
* @property {string} [domain] A literal domain string (e.g., '@matrix.org'). Will be escaped automatically.
|
|
17
|
+
* @property {UsernameTransform} [transform] Optional transformation applied to the extracted usernames.
|
|
18
|
+
*/
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @typedef {import('../jsDoc.mjs').UsernameRegexTemplate} UsernameRegexTemplate
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Bluesky / AT Protocol
|
|
9
|
+
*/
|
|
10
|
+
const BlueSkyRegex = Object.freeze({
|
|
11
|
+
/**
|
|
12
|
+
* User Identifier (Handle)
|
|
13
|
+
* Format: @user.bsky.social (or custom domains)
|
|
14
|
+
* @type {UsernameRegexTemplate}
|
|
15
|
+
*/
|
|
16
|
+
handle: {
|
|
17
|
+
prefix: '@',
|
|
18
|
+
validValues: '[a-zA-Z0-9-]',
|
|
19
|
+
length: [1, 63],
|
|
20
|
+
domainPattern: '(?:\\.[a-zA-Z0-9-]+)+',
|
|
21
|
+
},
|
|
22
|
+
/**
|
|
23
|
+
* Decentralized Identifier (DID) - The actual identity in the database
|
|
24
|
+
* Format: did:plc:1234567890abcdefghi or did:web:domain.com
|
|
25
|
+
* @type {UsernameRegexTemplate}
|
|
26
|
+
*/
|
|
27
|
+
did: {
|
|
28
|
+
prefix: 'did:',
|
|
29
|
+
validValues: '[a-z]', // Captures the method (e.g., "plc" or "web")
|
|
30
|
+
length: [3, 4],
|
|
31
|
+
domainPattern: ':[a-zA-Z0-9.-]+', // Captures the rest of the unique identifier
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* AT URI (Points to specific records such as posts, profiles, feeds)
|
|
35
|
+
* Format: at://did:plc:1234567890abcdefghi/app.bsky.feed.post/3jklmn56pqr2
|
|
36
|
+
* @type {UsernameRegexTemplate}
|
|
37
|
+
*/
|
|
38
|
+
atUri: {
|
|
39
|
+
prefix: 'at://',
|
|
40
|
+
validValues: '[a-zA-Z0-9.:-]', // Captures the authority (can be the DID or a Handle)
|
|
41
|
+
length: [1, 253],
|
|
42
|
+
domainPattern: '\\/[a-zA-Z0-9.-]+\\/[a-zA-Z0-9.-]+', // Captures the collection and the record ID (rkey)
|
|
43
|
+
},
|
|
44
|
+
/**
|
|
45
|
+
* Standard Hashtags
|
|
46
|
+
* Format: #hashtag
|
|
47
|
+
* @type {UsernameRegexTemplate}
|
|
48
|
+
*/
|
|
49
|
+
hashtag: {
|
|
50
|
+
prefix: '#',
|
|
51
|
+
validValues: '[a-zA-Z0-9_]',
|
|
52
|
+
length: [1, 64],
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
module.exports = BlueSkyRegex;
|