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
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { existsSync } from 'fs';
|
|
3
|
-
import { join as pathJoin } from 'path';
|
|
4
|
-
import { createCheckDestroyed } from '../utils/tools.mjs';
|
|
1
|
+
import { createCheckDestroyed } from '../../utils/tools.mjs';
|
|
5
2
|
const checkDestroy = createCheckDestroyed('TinyI18');
|
|
6
3
|
/**
|
|
7
4
|
* Supported operating modes for TinyI18.
|
|
@@ -12,66 +9,67 @@ const checkDestroy = createCheckDestroyed('TinyI18');
|
|
|
12
9
|
/**
|
|
13
10
|
* Dictionary of translation keys mapped to values.
|
|
14
11
|
*
|
|
15
|
-
* @typedef {Record<string, any>} Dict
|
|
12
|
+
* @typedef {Record<string, any>} Dict - A collection of key-value pairs for translations.
|
|
16
13
|
*/
|
|
17
14
|
/**
|
|
18
15
|
* Represents a translation entry as it appears in JSON files.
|
|
19
16
|
*
|
|
20
|
-
* @typedef {
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
*
|
|
17
|
+
* @typedef {Object} FileValueBase
|
|
18
|
+
* @property {string} $pattern - Regex string (will be compiled into RegExp).
|
|
19
|
+
* @property {string} $fn - Helper function name associated with this entry.
|
|
20
|
+
* @property {string} [key] - Additional key-value pairs for interpolation or extra metadata.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Represents a translation entry as it appears in JSON files, extending
|
|
24
|
+
* the base pattern/function fields with arbitrary string key-value pairs.
|
|
27
25
|
*
|
|
28
|
-
*
|
|
29
|
-
|
|
30
|
-
* `[key]` - Additional key-value pairs for interpolation or extra metadata.
|
|
26
|
+
* @typedef {FileValueBase & { [key: string]: string }} FileValue
|
|
31
27
|
*/
|
|
32
28
|
/**
|
|
33
29
|
* Represents a valid locale code string.
|
|
34
30
|
* Example: "en", "pt-BR", "fr".
|
|
35
31
|
*
|
|
36
|
-
* @typedef {string} LocaleCode
|
|
32
|
+
* @typedef {string} LocaleCode - A string representing a valid locale identifier.
|
|
37
33
|
*/
|
|
38
34
|
/**
|
|
39
|
-
* Value types stored per locale
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* - { $pattern: RegExp, value: string | { $fn: string, args?: any } | Function }
|
|
43
|
-
* - { $fn: string, args?: any } // in file mode; resolved to a registered function
|
|
35
|
+
* Value types stored per locale.
|
|
36
|
+
*
|
|
37
|
+
* @typedef {string|{ $fn: string; args?: any }} TranslationValue - The type of a value used in a translation entry.
|
|
44
38
|
*/
|
|
45
39
|
/**
|
|
46
|
-
*
|
|
40
|
+
* A resolved translation value.
|
|
47
41
|
*
|
|
48
|
-
* @typedef {
|
|
49
|
-
* @property {RegExp} $pattern - Compiled regular expression used for matching.
|
|
50
|
-
* @property {any} value - Translation value or resolver function associated with the pattern.
|
|
51
|
-
* @property {any} elseValue - Translation value or resolver function associated with the pattern.
|
|
42
|
+
* @typedef {string|null} TranslateResult - A resolved translation value, typically a string or null.
|
|
52
43
|
*/
|
|
53
44
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* @
|
|
57
|
-
* @property {
|
|
45
|
+
* Represents a single regex-based translation entry.
|
|
46
|
+
*
|
|
47
|
+
* @typedef {Object} PatternEntry - A representation of a translation entry that matches via a regular expression.
|
|
48
|
+
* @property {RegExp} $pattern - Compiled regular expression used for matching.
|
|
49
|
+
* @property {TranslationValue} value - Translation value or resolver function associated with the pattern.
|
|
50
|
+
* @property {TranslationValue} elseValue - Translation value or resolver function associated with the pattern.
|
|
58
51
|
*/
|
|
59
52
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* @
|
|
63
|
-
* @property {
|
|
64
|
-
* @property {
|
|
65
|
-
* @property {
|
|
53
|
+
* Configuration options for the TinyI18 instance.
|
|
54
|
+
*
|
|
55
|
+
* @typedef {Object} TinyI18Options - Configuration options for the TinyI18 constructor.
|
|
56
|
+
* @property {ModeTypes} mode - The operating mode of the instance.
|
|
57
|
+
* @property {LocaleCode} defaultLocale - The fallback locale used when a key is missing.
|
|
58
|
+
* @property {string} [basePath] - Required in file mode. Directory containing <locale>.json files.
|
|
59
|
+
* @property {Dict} [localResources] - Optional initial map { locale: dict } for local mode.
|
|
60
|
+
* @property {boolean} [strict=true] - If true, throws on missing keys or invalid data; else returns fallback.
|
|
61
|
+
* @property {boolean} [acceptNullResults=false] - If true, returns null instead of the key for missing translations.
|
|
66
62
|
*/
|
|
67
63
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
64
|
+
* Options used to customize the translation resolution process.
|
|
65
|
+
*
|
|
66
|
+
* @typedef {Object} ResolveOptions - Options to control the translation resolution process.
|
|
67
|
+
* @property {LocaleCode} [locale] - Force resolution using a specific locale first.
|
|
70
68
|
*/
|
|
71
69
|
/**
|
|
72
|
-
*
|
|
70
|
+
* Statistics for a specific locale.
|
|
73
71
|
*
|
|
74
|
-
* @typedef {Object} StatLocale
|
|
72
|
+
* @typedef {Object} StatLocale - Information about the contents and status of a specific locale.
|
|
75
73
|
* @property {string} locale - The locale code (e.g., "en", "pt-BR").
|
|
76
74
|
* @property {number} strings - Total number of static string entries in this locale.
|
|
77
75
|
* @property {number} patterns - Total number of regex-based pattern entries in this locale.
|
|
@@ -82,12 +80,12 @@ const checkDestroy = createCheckDestroyed('TinyI18');
|
|
|
82
80
|
* Read-only view of registered helpers, exposed to function-based entries.
|
|
83
81
|
*
|
|
84
82
|
* Provides safe access to:
|
|
85
|
-
* -
|
|
86
|
-
* -
|
|
83
|
+
* - Check if a helper exists by name.
|
|
84
|
+
* - Call a helper by name, passing arguments.
|
|
87
85
|
*
|
|
88
86
|
* @template {any} T
|
|
89
87
|
* @template {any} R
|
|
90
|
-
* @typedef {Object} HelpersReadonly
|
|
88
|
+
* @typedef {Object} HelpersReadonly - A read-only interface for interacting with registered helpers.
|
|
91
89
|
* @property {(name: string) => boolean} [has] - Check if a helper with given name is registered.
|
|
92
90
|
* @property {(name: string, arg: T, extras?: HelpersReadonly<T, R>) => R} [call] -
|
|
93
91
|
* Invoke a helper by name with an argument and optional extras.
|
|
@@ -98,9 +96,11 @@ const checkDestroy = createCheckDestroyed('TinyI18');
|
|
|
98
96
|
* - Receives user-supplied parameters and a read-only facade for calling other helpers.
|
|
99
97
|
* - Must return a string (e.g. processed, interpolated, or formatted output).
|
|
100
98
|
*
|
|
99
|
+
* @template {any} T
|
|
100
|
+
* @template {any} R
|
|
101
101
|
* @callback HelperCallback
|
|
102
102
|
* @param {Dict} params - Key-value parameters passed from the translation entry.
|
|
103
|
-
* @param {HelpersReadonly<
|
|
103
|
+
* @param {HelpersReadonly<T, R>} helpers - Read-only access to other registered helpers.
|
|
104
104
|
* @returns {string} Processed string result.
|
|
105
105
|
*/
|
|
106
106
|
/**
|
|
@@ -115,16 +115,87 @@ const checkDestroy = createCheckDestroyed('TinyI18');
|
|
|
115
115
|
* - Safe: no dynamic code eval from files; functions in file mode are referenced by name ("$fn").
|
|
116
116
|
*/
|
|
117
117
|
class TinyI18 {
|
|
118
|
+
/**
|
|
119
|
+
* Cached path join function used to resolve locale file paths.
|
|
120
|
+
* @type {((...paths: string[]) => string)|null}
|
|
121
|
+
*/
|
|
122
|
+
static #join = null;
|
|
123
|
+
/**
|
|
124
|
+
* Cached file existence check function.
|
|
125
|
+
* @type {((path: string) => boolean)|null|false}
|
|
126
|
+
*/
|
|
127
|
+
static #existsSync = null;
|
|
128
|
+
/**
|
|
129
|
+
* Cached asynchronous file read function.
|
|
130
|
+
* @type {((path: string, options: BufferEncoding) => Promise<string>)|null}
|
|
131
|
+
*/
|
|
132
|
+
static #readFile = null;
|
|
133
|
+
/**
|
|
134
|
+
* Cached asynchronous file write function.
|
|
135
|
+
* @type {((path: string, data: string, options: BufferEncoding) => Promise<any>)|null}
|
|
136
|
+
*/
|
|
137
|
+
static #writeFile = null;
|
|
138
|
+
/**
|
|
139
|
+
* Sets the path join function used to resolve locale file paths.
|
|
140
|
+
* Throws if a non-function value is provided or if the function has already been set.
|
|
141
|
+
* @param {(...paths: string[]) => string} value - The path join function to cache.
|
|
142
|
+
*/
|
|
143
|
+
static set _join(value) {
|
|
144
|
+
if (typeof value !== 'function')
|
|
145
|
+
throw new TypeError('TinyI18: "_join" must be a function');
|
|
146
|
+
if (TinyI18.#join !== null)
|
|
147
|
+
throw new Error('TinyI18: "_join" has already been set');
|
|
148
|
+
TinyI18.#join = value;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Sets the file existence check function.
|
|
152
|
+
* Throws if a non-function value is provided or if the function has already been set.
|
|
153
|
+
* @param {((path: string) => boolean)|false} value - The existence check function, or false to disable.
|
|
154
|
+
*/
|
|
155
|
+
static set _existsSync(value) {
|
|
156
|
+
if (typeof value !== 'function' && value !== false)
|
|
157
|
+
throw new TypeError('TinyI18: "_existsSync" must be a function or false');
|
|
158
|
+
if (TinyI18.#existsSync !== null)
|
|
159
|
+
throw new Error('TinyI18: "_existsSync" has already been set');
|
|
160
|
+
TinyI18.#existsSync = value;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Sets the asynchronous file read function.
|
|
164
|
+
* Throws if a non-function value is provided or if the function has already been set.
|
|
165
|
+
* @param {(path: string, options: BufferEncoding) => Promise<string>} value - The file read function to cache.
|
|
166
|
+
*/
|
|
167
|
+
static set _readFile(value) {
|
|
168
|
+
if (typeof value !== 'function')
|
|
169
|
+
throw new TypeError('TinyI18: "_readFile" must be a function');
|
|
170
|
+
if (TinyI18.#readFile !== null)
|
|
171
|
+
throw new Error('TinyI18: "_readFile" has already been set');
|
|
172
|
+
TinyI18.#readFile = value;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Sets the asynchronous file write function.
|
|
176
|
+
* Throws if a non-function value is provided or if the function has already been set.
|
|
177
|
+
* @param {(path: string, data: string, options: BufferEncoding) => Promise<void>} value - The file write function to cache.
|
|
178
|
+
*/
|
|
179
|
+
static set _writeFile(value) {
|
|
180
|
+
if (typeof value !== 'function')
|
|
181
|
+
throw new TypeError('TinyI18: "_writeFile" must be a function');
|
|
182
|
+
if (TinyI18.#writeFile !== null)
|
|
183
|
+
throw new Error('TinyI18: "_writeFile" has already been set');
|
|
184
|
+
TinyI18.#writeFile = value;
|
|
185
|
+
}
|
|
118
186
|
/**
|
|
119
187
|
* Merges multiple JSON locale files into a single file for TinyI18 usage.
|
|
120
|
-
*
|
|
188
|
+
*
|
|
189
|
+
* @param {Object} options - Configuration for the merge operation.
|
|
121
190
|
* @param {string[]} options.files - List of JSON file paths to merge.
|
|
122
191
|
* @param {string} options.output - Path where the merged JSON file will be written.
|
|
123
|
-
* @param {number} [options.spaces=0] - Number of spaces to use for indentation in the output file
|
|
192
|
+
* @param {number} [options.spaces=0] - Number of spaces to use for indentation in the output file.
|
|
124
193
|
* @throws {TypeError} If arguments are invalid.
|
|
125
194
|
* @throws {Error} If file reading or writing fails.
|
|
126
195
|
*/
|
|
127
196
|
static async mergeLocaleFiles({ files, output, spaces = 0 }) {
|
|
197
|
+
if (TinyI18.#existsSync === null || TinyI18.#readFile === null || TinyI18.#writeFile === null)
|
|
198
|
+
throw new Error('TinyI18: "mergeLocaleFiles" requires "_existsSync", "_readFile", and "_writeFile" to be set');
|
|
128
199
|
if (typeof spaces !== 'number' || Number.isNaN(spaces) || spaces < 0)
|
|
129
200
|
throw new TypeError('mergeLocaleFiles: "spaces" must be a non-negative number');
|
|
130
201
|
if (!Array.isArray(files) || files.length === 0)
|
|
@@ -135,9 +206,9 @@ class TinyI18 {
|
|
|
135
206
|
for (const filePath of files) {
|
|
136
207
|
if (typeof filePath !== 'string' || !filePath)
|
|
137
208
|
throw new TypeError('mergeLocaleFiles: each file path must be a non-empty string');
|
|
138
|
-
if (!existsSync(filePath))
|
|
209
|
+
if (TinyI18.#existsSync !== false && !TinyI18.#existsSync(filePath))
|
|
139
210
|
throw new Error(`mergeLocaleFiles: file "${filePath}" does not exist`);
|
|
140
|
-
const raw = await readFile(filePath, 'utf-8');
|
|
211
|
+
const raw = await TinyI18.#readFile(filePath, 'utf-8');
|
|
141
212
|
let json;
|
|
142
213
|
try {
|
|
143
214
|
json = JSON.parse(raw);
|
|
@@ -148,10 +219,10 @@ class TinyI18 {
|
|
|
148
219
|
// Deep merge (locale-based)
|
|
149
220
|
Object.assign(merged, json);
|
|
150
221
|
}
|
|
151
|
-
await writeFile(output, JSON.stringify(merged, null, spaces), 'utf-8');
|
|
222
|
+
await TinyI18.#writeFile(output, JSON.stringify(merged, null, spaces), 'utf-8');
|
|
152
223
|
}
|
|
153
224
|
/**
|
|
154
|
-
*
|
|
225
|
+
* Indicates whether the instance has been destroyed.
|
|
155
226
|
* @type {boolean}
|
|
156
227
|
*/
|
|
157
228
|
#destroyed = false;
|
|
@@ -163,28 +234,29 @@ class TinyI18 {
|
|
|
163
234
|
get destroyed() {
|
|
164
235
|
return this.#destroyed;
|
|
165
236
|
}
|
|
166
|
-
/** @type {ModeTypes} */
|
|
237
|
+
/** @type {ModeTypes} - The current operating mode of the instance. */
|
|
167
238
|
#mode;
|
|
168
|
-
/** @type {LocaleCode} */
|
|
239
|
+
/** @type {LocaleCode} - The default fallback locale. */
|
|
169
240
|
#defaultLocale;
|
|
170
|
-
/** @type {LocaleCode|null} */
|
|
241
|
+
/** @type {LocaleCode|null} - The currently active locale. */
|
|
171
242
|
#currentLocale = null;
|
|
172
|
-
/** @type {boolean} */
|
|
243
|
+
/** @type {boolean} - Whether to throw errors on missing keys or invalid data. */
|
|
173
244
|
#strict;
|
|
174
|
-
/** @type {
|
|
245
|
+
/** @type {boolean} - Whether to return null instead of the key for missing translations. */
|
|
246
|
+
#acceptNullResults = false;
|
|
247
|
+
/** @type {string|null} - The base directory for file-mode operations. */
|
|
175
248
|
#basePath = null;
|
|
176
|
-
/** @type {Map<LocaleCode, Dict>} */
|
|
177
|
-
#stringTables = new Map();
|
|
178
|
-
/** @type {Map<LocaleCode, PatternEntry[]>} */
|
|
179
|
-
#patternTables = new Map();
|
|
180
|
-
|
|
181
|
-
/** @type {Map<string, HelperCallback>} */
|
|
249
|
+
/** @type {Map<LocaleCode, Dict>} - Internal storage for string translations per locale. */
|
|
250
|
+
#stringTables = new Map();
|
|
251
|
+
/** @type {Map<LocaleCode, PatternEntry[]>} - Internal storage for regex pattern entries per locale. */
|
|
252
|
+
#patternTables = new Map();
|
|
253
|
+
/** @type {Map<string, HelperCallback<any, any>>} - Registry of available helper functions. */
|
|
182
254
|
#helpers = new Map();
|
|
183
|
-
/** @type {Map<string, RegExp>} */
|
|
255
|
+
/** @type {Map<string, RegExp>} - Cache for compiled regular expression objects. */
|
|
184
256
|
#regexCache = new Map();
|
|
185
257
|
/**
|
|
186
258
|
* Gets the currently selected locale, or null if only default is active.
|
|
187
|
-
* @returns {LocaleCode|null}
|
|
259
|
+
* @returns {LocaleCode|null} The currently active locale code, or null.
|
|
188
260
|
*/
|
|
189
261
|
get currentLocale() {
|
|
190
262
|
checkDestroy(this.#destroyed);
|
|
@@ -219,6 +291,14 @@ class TinyI18 {
|
|
|
219
291
|
checkDestroy(this.#destroyed);
|
|
220
292
|
return this.#strict;
|
|
221
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Whether null results are accepted when a translation is missing.
|
|
296
|
+
* @type {boolean}
|
|
297
|
+
*/
|
|
298
|
+
get acceptNullResults() {
|
|
299
|
+
checkDestroy(this.#destroyed);
|
|
300
|
+
return this.#acceptNullResults;
|
|
301
|
+
}
|
|
222
302
|
/**
|
|
223
303
|
* Base directory path used in `"file"` mode to locate locale JSON files.
|
|
224
304
|
* - In `"local"` mode this will always be `null`.
|
|
@@ -231,7 +311,7 @@ class TinyI18 {
|
|
|
231
311
|
}
|
|
232
312
|
/**
|
|
233
313
|
* Returns basic stats for debugging/memory insights.
|
|
234
|
-
* @returns {StatLocale[]}
|
|
314
|
+
* @returns {StatLocale[]} Array of statistics for each registered locale.
|
|
235
315
|
*/
|
|
236
316
|
get stats() {
|
|
237
317
|
checkDestroy(this.#destroyed);
|
|
@@ -243,7 +323,7 @@ class TinyI18 {
|
|
|
243
323
|
/**
|
|
244
324
|
* Deep-cloned view of string tables (Map → Object).
|
|
245
325
|
* Preserves strings, $fn objects, and functions.
|
|
246
|
-
* @returns {Record<string, Dict>}
|
|
326
|
+
* @returns {Record<string, Dict>} A deep clone of the string tables.
|
|
247
327
|
*/
|
|
248
328
|
get stringTables() {
|
|
249
329
|
checkDestroy(this.#destroyed);
|
|
@@ -257,7 +337,7 @@ class TinyI18 {
|
|
|
257
337
|
/**
|
|
258
338
|
* Deep-cloned view of pattern tables (Map → Object).
|
|
259
339
|
* Recreates RegExp objects to avoid mutation.
|
|
260
|
-
* @returns {Record<string, PatternEntry[]>}
|
|
340
|
+
* @returns {Record<string, PatternEntry[]>} A deep clone of the pattern tables.
|
|
261
341
|
*/
|
|
262
342
|
get patternTables() {
|
|
263
343
|
checkDestroy(this.#destroyed);
|
|
@@ -275,11 +355,11 @@ class TinyI18 {
|
|
|
275
355
|
/**
|
|
276
356
|
* Deep-cloned view of helpers (Map → Object).
|
|
277
357
|
* Functions are referenced (cannot deep clone functions).
|
|
278
|
-
* @returns {Record<string, HelperCallback
|
|
358
|
+
* @returns {Record<string, HelperCallback<any, any>>} A copy of the helpers registry.
|
|
279
359
|
*/
|
|
280
360
|
get helpers() {
|
|
281
361
|
checkDestroy(this.#destroyed);
|
|
282
|
-
/** @type {Record<string, HelperCallback
|
|
362
|
+
/** @type {Record<string, HelperCallback<any, any>>} */
|
|
283
363
|
const obj = {};
|
|
284
364
|
for (const [name, fn] of this.#helpers.entries()) {
|
|
285
365
|
obj[name] = fn;
|
|
@@ -289,7 +369,7 @@ class TinyI18 {
|
|
|
289
369
|
/**
|
|
290
370
|
* Deep-cloned view of regex cache (Map → Object).
|
|
291
371
|
* Recreates RegExp objects to avoid mutation.
|
|
292
|
-
* @returns {Record<string, RegExp>}
|
|
372
|
+
* @returns {Record<string, RegExp>} A copy of the regex cache.
|
|
293
373
|
*/
|
|
294
374
|
get regexCache() {
|
|
295
375
|
checkDestroy(this.#destroyed);
|
|
@@ -307,8 +387,8 @@ class TinyI18 {
|
|
|
307
387
|
* - Objects/arrays are recursively cloned
|
|
308
388
|
* - Functions are returned as-is
|
|
309
389
|
* - RegExp are cloned
|
|
310
|
-
* @param {any} value
|
|
311
|
-
* @returns {any}
|
|
390
|
+
* @param {any} value - The value to clone.
|
|
391
|
+
* @returns {any} The deep-cloned value.
|
|
312
392
|
*/
|
|
313
393
|
#deepClone(value) {
|
|
314
394
|
if (value == null ||
|
|
@@ -398,9 +478,11 @@ class TinyI18 {
|
|
|
398
478
|
* - function (params, helpers) => any
|
|
399
479
|
* - { $fn: string, args?: any } // file mode placeholder resolved via helpers
|
|
400
480
|
*
|
|
401
|
-
* @
|
|
402
|
-
* @
|
|
403
|
-
* @
|
|
481
|
+
* @template {any} T
|
|
482
|
+
* @template {any} R
|
|
483
|
+
* @param {string | HelperCallback<T, R> | { $fn: string; args?: any }} value - The raw translation value.
|
|
484
|
+
* @param {Dict} [params] - Data used for interpolation or helper arguments.
|
|
485
|
+
* @returns {string} The processed translation string.
|
|
404
486
|
*/
|
|
405
487
|
#materialize(value, params) {
|
|
406
488
|
if (value === null || value === undefined) {
|
|
@@ -563,18 +645,20 @@ class TinyI18 {
|
|
|
563
645
|
* - `$pattern` entries are compiled to RegExp and stored in the pattern table.
|
|
564
646
|
* - `$fn` references are preserved for later resolution via helpers.
|
|
565
647
|
*
|
|
566
|
-
* @param {LocaleCode} locale - Locale identifier (e.g
|
|
567
|
-
* @returns {Promise<void>}
|
|
648
|
+
* @param {LocaleCode} locale - Locale identifier (e.g., "en", "pt-BR").
|
|
649
|
+
* @returns {Promise<void>} A promise that resolves when the locale file has been loaded and ingested.
|
|
568
650
|
*/
|
|
569
651
|
async #loadLocaleFromFile(locale) {
|
|
652
|
+
if (TinyI18.#join === null || TinyI18.#readFile === null)
|
|
653
|
+
throw new Error('TinyI18: "file" mode requires "_join" and "_readFile" to be set');
|
|
570
654
|
if (typeof locale !== 'string' || !locale)
|
|
571
655
|
throw new TypeError('#loadLocaleFromFile: "locale" must be a non-empty string');
|
|
572
656
|
if (typeof this.#basePath !== 'string' || !this.#basePath)
|
|
573
657
|
throw new TypeError('#loadLocaleFromFile: "this.#basePath" must be a non-empty string');
|
|
574
|
-
const file =
|
|
658
|
+
const file = TinyI18.#join(this.#basePath, `${locale}.json`);
|
|
575
659
|
let json;
|
|
576
660
|
try {
|
|
577
|
-
const raw = await readFile(file, 'utf8');
|
|
661
|
+
const raw = await TinyI18.#readFile(file, 'utf8');
|
|
578
662
|
json = JSON.parse(raw);
|
|
579
663
|
}
|
|
580
664
|
catch (err) {
|
|
@@ -596,7 +680,7 @@ class TinyI18 {
|
|
|
596
680
|
const patterns = [...(this.#patternTables.get(locale) ?? [])];
|
|
597
681
|
/**
|
|
598
682
|
* @param {string} prefix
|
|
599
|
-
* @param {FileValue|
|
|
683
|
+
* @param {FileValue|TranslateResult} node
|
|
600
684
|
*/
|
|
601
685
|
const walk = (prefix, node) => {
|
|
602
686
|
if (node == null)
|
|
@@ -639,7 +723,7 @@ class TinyI18 {
|
|
|
639
723
|
* In strict mode, throws on invalid regex; otherwise returns a never-matching regex.
|
|
640
724
|
*
|
|
641
725
|
* @param {string} src - Regex source pattern (no flags allowed).
|
|
642
|
-
* @returns {RegExp}
|
|
726
|
+
* @returns {RegExp} The compiled regular expression, or a never-matching regex in non-strict mode.
|
|
643
727
|
*/
|
|
644
728
|
#safeRegExp(src) {
|
|
645
729
|
if (typeof src !== 'string' || !src)
|
|
@@ -666,8 +750,8 @@ class TinyI18 {
|
|
|
666
750
|
* - string → returned as-is
|
|
667
751
|
* - { $fn: string, args?: any } → preserved for helper resolution
|
|
668
752
|
*
|
|
669
|
-
* @param {string|FileValue} v
|
|
670
|
-
* @returns {
|
|
753
|
+
* @param {string|FileValue} v - The value to normalize.
|
|
754
|
+
* @returns {TranslationValue} The normalized translation value.
|
|
671
755
|
*/
|
|
672
756
|
#coerceFileValue(v) {
|
|
673
757
|
// Strings pass through; objects with $fn kept as-is; everything else ignored gracefully
|
|
@@ -697,13 +781,15 @@ class TinyI18 {
|
|
|
697
781
|
if (!options || typeof options !== 'object') {
|
|
698
782
|
throw new TypeError('TinyI18: options must be an object');
|
|
699
783
|
}
|
|
700
|
-
const { mode, defaultLocale, basePath, localResources, strict = true } = options;
|
|
784
|
+
const { mode, defaultLocale, basePath, localResources, strict = true, acceptNullResults = false, } = options;
|
|
701
785
|
if (mode !== 'local' && mode !== 'file')
|
|
702
786
|
throw new TypeError('TinyI18: "mode" must be "local" or "file"');
|
|
703
787
|
if (typeof defaultLocale !== 'string' || !defaultLocale)
|
|
704
788
|
throw new TypeError('TinyI18: "defaultLocale" must be a non-empty string');
|
|
705
789
|
if (typeof strict !== 'boolean')
|
|
706
790
|
throw new TypeError('TinyI18: "strict" must be a boolean');
|
|
791
|
+
if (typeof acceptNullResults !== 'boolean')
|
|
792
|
+
throw new TypeError('TinyI18: "acceptNullResults" must be a boolean');
|
|
707
793
|
if (mode === 'file') {
|
|
708
794
|
if (typeof basePath !== 'string' || !basePath)
|
|
709
795
|
throw new TypeError('TinyI18: "basePath" is required in file mode');
|
|
@@ -712,6 +798,7 @@ class TinyI18 {
|
|
|
712
798
|
this.#mode = mode;
|
|
713
799
|
this.#defaultLocale = defaultLocale;
|
|
714
800
|
this.#strict = strict;
|
|
801
|
+
this.#acceptNullResults = acceptNullResults;
|
|
715
802
|
if (mode === 'local' && localResources && typeof localResources === 'object') {
|
|
716
803
|
for (const [loc, data] of Object.entries(localResources)) {
|
|
717
804
|
this.#ingestLocale(loc, data);
|
|
@@ -737,8 +824,10 @@ class TinyI18 {
|
|
|
737
824
|
}
|
|
738
825
|
/**
|
|
739
826
|
* Registers a helper function available to function-based entries and $fn references.
|
|
740
|
-
* @
|
|
741
|
-
* @
|
|
827
|
+
* @template {any} T
|
|
828
|
+
* @template {any} R
|
|
829
|
+
* @param {string} name - The unique name of the helper.
|
|
830
|
+
* @param {HelperCallback<T, R>} fn - The callback function to register.
|
|
742
831
|
*/
|
|
743
832
|
registerHelper(name, fn) {
|
|
744
833
|
checkDestroy(this.#destroyed);
|
|
@@ -759,13 +848,13 @@ class TinyI18 {
|
|
|
759
848
|
unregisterHelper(name) {
|
|
760
849
|
checkDestroy(this.#destroyed);
|
|
761
850
|
if (typeof name !== 'string' || !name)
|
|
762
|
-
throw new TypeError('unregisterHelper: "name" must be non-empty string');
|
|
851
|
+
throw new TypeError('unregisterHelper: "name" must be a non-empty string');
|
|
763
852
|
return this.#helpers.delete(name);
|
|
764
853
|
}
|
|
765
854
|
/**
|
|
766
855
|
* Loads or updates a locale data in-memory (local mode only).
|
|
767
|
-
* @param {LocaleCode} locale
|
|
768
|
-
* @param {Dict} data
|
|
856
|
+
* @param {LocaleCode} locale - The locale to load.
|
|
857
|
+
* @param {Dict} data - The dictionary data for the locale.
|
|
769
858
|
*/
|
|
770
859
|
loadLocaleLocal(locale, data) {
|
|
771
860
|
checkDestroy(this.#destroyed);
|
|
@@ -776,7 +865,8 @@ class TinyI18 {
|
|
|
776
865
|
/**
|
|
777
866
|
* Sets the current selected locale. In file mode, loads it from disk.
|
|
778
867
|
* Keeps only the default and the selected locale in memory (unloads previous selected).
|
|
779
|
-
* @param {LocaleCode|null} locale - null
|
|
868
|
+
* @param {LocaleCode|null} locale - The locale to set, or null to use only the default.
|
|
869
|
+
* @returns {Promise<void>} A promise that resolves when the locale has been set and loaded.
|
|
780
870
|
*/
|
|
781
871
|
async setLocale(locale) {
|
|
782
872
|
checkDestroy(this.#destroyed);
|
|
@@ -808,17 +898,17 @@ class TinyI18 {
|
|
|
808
898
|
* @param {string} key - Translation key (dot.notation).
|
|
809
899
|
* @param {Dict} [params] - Parameters for string interpolation or helper functions.
|
|
810
900
|
* @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
|
|
811
|
-
* @returns {
|
|
901
|
+
* @returns {TranslateResult} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
|
|
812
902
|
*/
|
|
813
903
|
t(key, params = undefined, options = undefined) {
|
|
814
904
|
return this.get(key, params, options);
|
|
815
905
|
}
|
|
816
906
|
/**
|
|
817
907
|
* Alias of t()
|
|
818
|
-
* @param {string} key
|
|
819
|
-
* @param {Dict} [params]
|
|
820
|
-
* @param {ResolveOptions} [options]
|
|
821
|
-
* @returns {any
|
|
908
|
+
* @param {string} key - Translation key (dot.notation).
|
|
909
|
+
* @param {Dict} [params] - Parameters for string interpolation or helper functions.
|
|
910
|
+
* @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
|
|
911
|
+
* @returns {TranslateResult} - Usually string, but may be HTMLElement, DocumentFragment, or any return type from a helper.
|
|
822
912
|
*/
|
|
823
913
|
get(key, params = undefined, options = undefined) {
|
|
824
914
|
checkDestroy(this.#destroyed);
|
|
@@ -830,6 +920,8 @@ class TinyI18 {
|
|
|
830
920
|
if (resolved === undefined) {
|
|
831
921
|
if (this.#strict)
|
|
832
922
|
throw new Error(`TinyI18: missing translation for key "${key}"`);
|
|
923
|
+
if (this.#acceptNullResults)
|
|
924
|
+
return null;
|
|
833
925
|
return key; // graceful fallback to key
|
|
834
926
|
}
|
|
835
927
|
return this.#materialize(resolved, params);
|
|
@@ -841,16 +933,16 @@ class TinyI18 {
|
|
|
841
933
|
*
|
|
842
934
|
* @param {string} key - Input string to test against regex patterns.
|
|
843
935
|
* @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
|
|
844
|
-
* @returns {
|
|
936
|
+
* @returns {TranslateResult} - Translation value (string or custom return type).
|
|
845
937
|
*/
|
|
846
938
|
p(key, options) {
|
|
847
939
|
return this.resolveByPattern(key, options);
|
|
848
940
|
}
|
|
849
941
|
/**
|
|
850
942
|
* Alias of p()
|
|
851
|
-
* @param {string} key
|
|
852
|
-
* @param {ResolveOptions} [options]
|
|
853
|
-
* @returns {
|
|
943
|
+
* @param {string} key - Input string to test against regex patterns.
|
|
944
|
+
* @param {ResolveOptions} [options] - Override resolution options (e.g., force locale).
|
|
945
|
+
* @returns {TranslateResult} - Translation value (string or custom return type).
|
|
854
946
|
*/
|
|
855
947
|
resolveByPattern(key, options) {
|
|
856
948
|
checkDestroy(this.#destroyed);
|
|
@@ -862,6 +954,8 @@ class TinyI18 {
|
|
|
862
954
|
if (resolved === undefined) {
|
|
863
955
|
if (this.#strict)
|
|
864
956
|
throw new Error(`TinyI18: missing translation for key "${key}"`);
|
|
957
|
+
if (this.#acceptNullResults)
|
|
958
|
+
return null;
|
|
865
959
|
return key; // graceful fallback to key
|
|
866
960
|
}
|
|
867
961
|
return resolved;
|
|
@@ -883,8 +977,8 @@ class TinyI18 {
|
|
|
883
977
|
}
|
|
884
978
|
/**
|
|
885
979
|
* Returns stats for a specific locale.
|
|
886
|
-
* @param {LocaleCode} locale
|
|
887
|
-
* @returns {StatLocale}
|
|
980
|
+
* @param {LocaleCode} locale - The locale code to query.
|
|
981
|
+
* @returns {StatLocale} An object containing the locale's current statistics.
|
|
888
982
|
* @throws {Error} If the locale is not registered.
|
|
889
983
|
*/
|
|
890
984
|
getStatsForLocale(locale) {
|
|
@@ -908,7 +1002,7 @@ class TinyI18 {
|
|
|
908
1002
|
* to free up memory. Once destroyed, the instance cannot be reused.
|
|
909
1003
|
*
|
|
910
1004
|
* @throws {Error} If the instance has already been destroyed.
|
|
911
|
-
* @returns {void}
|
|
1005
|
+
* @returns {void} This method does not return a value.
|
|
912
1006
|
*/
|
|
913
1007
|
destroy() {
|
|
914
1008
|
if (this.#destroyed)
|