tiny-essentials 1.28.7 → 1.28.8

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.
Files changed (52) hide show
  1. package/changelog/1/28/8.md +17 -0
  2. package/dist/v1/TinyBasicsEs.min.js +1 -1
  3. package/dist/v1/TinyDebugger.min.js +1 -0
  4. package/dist/v1/TinyEssentials.min.js +1 -1
  5. package/dist/v1/TinyMediaPlayer.min.js +1 -1
  6. package/dist/v1/TinyRadioFm.min.js +1 -1
  7. package/dist/v1/TinyUploadClicker.min.js +1 -1
  8. package/dist/v1/basics/browserDetector.cjs +228 -0
  9. package/dist/v1/basics/browserDetector.d.mts +66 -0
  10. package/dist/v1/basics/browserDetector.mjs +207 -0
  11. package/dist/v1/basics/index.cjs +6 -0
  12. package/dist/v1/basics/index.d.mts +2 -1
  13. package/dist/v1/basics/index.mjs +2 -1
  14. package/dist/v1/build/TinyDebugger.cjs +7 -0
  15. package/dist/v1/build/TinyDebugger.d.mts +3 -0
  16. package/dist/v1/build/TinyDebugger.mjs +2 -0
  17. package/dist/v1/index.cjs +8 -0
  18. package/dist/v1/index.d.mts +3 -1
  19. package/dist/v1/index.mjs +4 -2
  20. package/dist/v1/libs/TinyDebugger.cjs +380 -0
  21. package/dist/v1/libs/TinyDebugger.d.mts +132 -0
  22. package/dist/v1/libs/TinyDebugger.mjs +351 -0
  23. package/dist/v1/libs/TinyMediaPlayer/HtmlAudio.cjs +39 -3
  24. package/dist/v1/libs/TinyMediaPlayer/HtmlAudio.d.mts +10 -0
  25. package/dist/v1/libs/TinyMediaPlayer/HtmlAudio.mjs +35 -3
  26. package/dist/v1/libs/TinyMediaPlayer/HtmlVideo.cjs +39 -3
  27. package/dist/v1/libs/TinyMediaPlayer/HtmlVideo.d.mts +10 -0
  28. package/dist/v1/libs/TinyMediaPlayer/HtmlVideo.mjs +35 -3
  29. package/dist/v1/libs/TinyMediaPlayer/Mock.cjs +333 -0
  30. package/dist/v1/libs/TinyMediaPlayer/Mock.d.mts +154 -0
  31. package/dist/v1/libs/TinyMediaPlayer/Mock.mjs +296 -0
  32. package/dist/v1/libs/TinyMediaPlayer/SoundCloud.cjs +30 -0
  33. package/dist/v1/libs/TinyMediaPlayer/SoundCloud.d.mts +10 -0
  34. package/dist/v1/libs/TinyMediaPlayer/SoundCloud.mjs +26 -0
  35. package/dist/v1/libs/TinyMediaPlayer/Youtube.cjs +39 -3
  36. package/dist/v1/libs/TinyMediaPlayer/Youtube.d.mts +10 -0
  37. package/dist/v1/libs/TinyMediaPlayer/Youtube.mjs +32 -3
  38. package/dist/v1/libs/TinyMediaPlayer/index.cjs +18 -0
  39. package/dist/v1/libs/TinyMediaPlayer/index.d.mts +10 -0
  40. package/dist/v1/libs/TinyMediaPlayer/index.mjs +16 -0
  41. package/dist/v1/libs/TinyMediaPlayer.cjs +156 -31
  42. package/dist/v1/libs/TinyMediaPlayer.d.mts +43 -7
  43. package/dist/v1/libs/TinyMediaPlayer.mjs +148 -31
  44. package/dist/v1/libs/TinyPromiseQueue.cjs +6 -4
  45. package/dist/v1/libs/TinyPromiseQueue.d.mts +8 -6
  46. package/dist/v1/libs/TinyPromiseQueue.mjs +6 -4
  47. package/dist/v1/libs/TinyRadioFm.cjs +271 -138
  48. package/dist/v1/libs/TinyRadioFm.d.mts +67 -3
  49. package/dist/v1/libs/TinyRadioFm.mjs +239 -123
  50. package/docs/v1/libs/TinyMediaPlayer.md +25 -21
  51. package/docs/v1/libs/TinyRadioFm.md +25 -3
  52. package/package.json +9 -1
@@ -0,0 +1,228 @@
1
+ 'use strict';
2
+
3
+ // Credits: https://code-boxx.com/detect-browser-with-javascript/
4
+
5
+ /**
6
+ * @typedef {'chrome'|'firefox'|'ie'|'edge'|'safari'|'opera'|'yandex'|'other'} BrowserDetected
7
+ */
8
+
9
+ /**
10
+ * @typedef {Object} DuckTypingResult
11
+ * @property {boolean} isOpera - True if Opera is detected.
12
+ * @property {boolean} isFirefox - True if Firefox is detected.
13
+ * @property {boolean} isSafari - True if Safari is detected.
14
+ * @property {boolean} isIE - True if Internet Explorer is detected.
15
+ * @property {boolean} isEdge - True if Edge is detected.
16
+ * @property {boolean} isChrome - True if Chrome is detected.
17
+ * @property {boolean} isBlink - True if the Blink engine is detected.
18
+ */
19
+
20
+ const VALID_BROWSERS = ['chrome', 'firefox', 'ie', 'edge', 'safari', 'opera', 'yandex', 'other'];
21
+
22
+ /**
23
+ * Detects the browser name by parsing the `navigator.userAgent` string.
24
+ *
25
+ * @returns {BrowserDetected} The detected browser name.
26
+ */
27
+ function isBrowserAgent() {
28
+ const ua = navigator.userAgent;
29
+
30
+ // CHROME
31
+ if (ua.indexOf('Chrome') !== -1) {
32
+ return 'chrome';
33
+ }
34
+ // FIREFOX
35
+ else if (ua.indexOf('Firefox') !== -1) {
36
+ return 'firefox';
37
+ }
38
+ // INTERNET EXPLORER
39
+ else if (ua.indexOf('MSIE') !== -1) {
40
+ return 'ie';
41
+ }
42
+ // EDGE
43
+ else if (ua.indexOf('Edge') !== -1) {
44
+ return 'edge';
45
+ }
46
+ // SAFARI
47
+ else if (ua.indexOf('Safari') !== -1) {
48
+ return 'safari';
49
+ }
50
+ // OPERA
51
+ else if (ua.indexOf('Opera') !== -1) {
52
+ return 'opera';
53
+ }
54
+ // YANDEX BROWSER
55
+ else if (ua.indexOf('YaBrowser') !== -1) {
56
+ return 'yandex';
57
+ }
58
+ // OTHERS
59
+ return 'other';
60
+ }
61
+
62
+ /**
63
+ * Determines the browser's CSS rendering engine prefix by inspecting computed styles.
64
+ *
65
+ * @returns {'gecko'|'webkit'|'trident'|'other'} The detected CSS engine prefix.
66
+ */
67
+ function getBrowserCssPrefix() {
68
+ const prefix = (Array.prototype.slice
69
+ .call(window.getComputedStyle(document.documentElement, ''))
70
+ .join('')
71
+ .match(/-(moz|webkit|ms)-/) ?? ['', ''])[1];
72
+
73
+ // Firefox (Gecko engine)
74
+ if (prefix === 'moz') {
75
+ return 'gecko';
76
+ }
77
+
78
+ // Webkit engines (Chrome, Safari, Opera, Edge)
79
+ if (prefix === 'webkit') {
80
+ return 'webkit';
81
+ }
82
+
83
+ // Internet Explorer & Legacy Edge (Trident engine)
84
+ if (prefix === 'ms') {
85
+ return 'trident';
86
+ }
87
+
88
+ return 'other';
89
+ }
90
+
91
+ /**
92
+ * Performs feature detection (duck typing) to identify the browser based on specific API availability.
93
+ *
94
+ * @returns {DuckTypingResult} An object containing boolean flags for various browser features.
95
+ */
96
+ function getDuckTyping() {
97
+ // OPERA 8.0+
98
+ const isOpera =
99
+ // @ts-ignore
100
+ (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
101
+
102
+ // FIREFOX 1.0+
103
+ // @ts-ignore
104
+ const isFirefox = typeof InstallTrigger !== 'undefined';
105
+
106
+ // SAFARI 3.0+
107
+ const isSafari =
108
+ // @ts-ignore
109
+ /constructor/i.test(window.HTMLElement) ||
110
+ (function (p) {
111
+ return p.toString() === '[object SafariRemoteNotification]';
112
+ // @ts-ignore
113
+ })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
114
+
115
+ // INTERNET EXPLORER 6-11
116
+ // @ts-ignore
117
+ const isIE = /*@cc_on!@*/ !!document.documentMode;
118
+
119
+ // EDGE 20+
120
+ // @ts-ignore
121
+ const isEdge = !isIE && !!window.StyleMedia;
122
+
123
+ // CHROME 1+
124
+ // @ts-ignore
125
+ const isChrome = !!window.chrome;
126
+
127
+ // BLINK ENGINE DETECTION
128
+ const isBlink = (isChrome || isOpera) && !!window.CSS;
129
+
130
+ return { isOpera, isFirefox, isSafari, isIE, isEdge, isChrome, isBlink };
131
+ }
132
+
133
+ /**
134
+ * Aggregates detection results from multiple methods to provide a count of "pings" per browser.
135
+ *
136
+ * @param {BrowserDetected[]} [disable=[]] An array of browser names to exclude from the count.
137
+ * @returns {Object<BrowserDetected, number>} An object where keys are browser names and values are their detection counts.
138
+ * @throws {TypeError} If the `disable` argument is not an array or contains invalid browser names.
139
+ */
140
+ function getBrowserPings(disable = []) {
141
+ // Argument Validation
142
+ if (!Array.isArray(disable)) {
143
+ throw new TypeError('The "disable" argument must be an array.');
144
+ }
145
+
146
+ for (const browser of disable) {
147
+ if (!VALID_BROWSERS.includes(browser)) {
148
+ throw new TypeError(`Invalid browser name provided in disable array: ${browser}`);
149
+ }
150
+ }
151
+
152
+ const browsers = {
153
+ chrome: 0,
154
+ firefox: 0,
155
+ ie: 0,
156
+ edge: 0,
157
+ safari: 0,
158
+ opera: 0,
159
+ yandex: 0,
160
+ other: 0,
161
+ };
162
+
163
+ // 1. Count by User Agent
164
+ browsers[isBrowserAgent()]++;
165
+
166
+ // 2. Count by CSS Prefix
167
+ const browserCssPrefix = getBrowserCssPrefix();
168
+ if (browserCssPrefix === 'gecko') {
169
+ if (disable.indexOf('firefox') < 0) browsers.firefox++;
170
+ } else if (browserCssPrefix === 'webkit') {
171
+ if (disable.indexOf('chrome') < 0) browsers.chrome++;
172
+ if (disable.indexOf('safari') < 0) browsers.safari++;
173
+ if (disable.indexOf('opera') < 0) browsers.opera++;
174
+ if (disable.indexOf('edge') < 0) browsers.edge++;
175
+ } else if (browserCssPrefix === 'trident') {
176
+ if (disable.indexOf('ie') < 0) browsers.ie++;
177
+ } else {
178
+ if (disable.indexOf('other') < 0) browsers.other++;
179
+ }
180
+
181
+ // 3. Count by Duck Typing
182
+ const duckTyping = getDuckTyping();
183
+
184
+ if (duckTyping.isOpera) {
185
+ if (disable.indexOf('opera') < 0) browsers.opera++;
186
+ }
187
+ if (duckTyping.isFirefox) {
188
+ if (disable.indexOf('firefox') < 0) browsers.firefox++;
189
+ }
190
+ if (duckTyping.isSafari) {
191
+ if (disable.indexOf('safari') < 0) browsers.safari++;
192
+ }
193
+ if (duckTyping.isIE) {
194
+ if (disable.indexOf('ie') < 0) browsers.ie++;
195
+ }
196
+ if (duckTyping.isEdge) {
197
+ if (disable.indexOf('edge') < 0) browsers.edge++;
198
+ }
199
+ if (duckTyping.isChrome) {
200
+ if (disable.indexOf('chrome') < 0) browsers.chrome++;
201
+ }
202
+
203
+ return browsers;
204
+ }
205
+
206
+ /**
207
+ * Determines the most likely browser by identifying the one with the highest number of detection "pings".
208
+ *
209
+ * @param {BrowserDetected[]} [disable=[]] An array of browser names to exclude from the count.
210
+ * @returns {BrowserDetected} The name of the browser with the maximum count.
211
+ * @throws {TypeError} If the `disable` argument is not an array or contains invalid browser names.
212
+ */
213
+ function browserIs(disable = []) {
214
+ const pings = getBrowserPings(disable);
215
+
216
+ // Returns the key with the maximum value in the pings object
217
+ // @ts-ignore
218
+ return Object.keys(pings).reduce((highest, current) =>
219
+ // @ts-ignore
220
+ pings[current] > pings[highest] ? current : highest,
221
+ );
222
+ }
223
+
224
+ exports.browserIs = browserIs;
225
+ exports.getBrowserCssPrefix = getBrowserCssPrefix;
226
+ exports.getBrowserPings = getBrowserPings;
227
+ exports.getDuckTyping = getDuckTyping;
228
+ exports.isBrowserAgent = isBrowserAgent;
@@ -0,0 +1,66 @@
1
+ export type BrowserDetected = 'chrome' | 'firefox' | 'ie' | 'edge' | 'safari' | 'opera' | 'yandex' | 'other';
2
+ export type DuckTypingResult = {
3
+ /**
4
+ * - True if Opera is detected.
5
+ */
6
+ isOpera: boolean;
7
+ /**
8
+ * - True if Firefox is detected.
9
+ */
10
+ isFirefox: boolean;
11
+ /**
12
+ * - True if Safari is detected.
13
+ */
14
+ isSafari: boolean;
15
+ /**
16
+ * - True if Internet Explorer is detected.
17
+ */
18
+ isIE: boolean;
19
+ /**
20
+ * - True if Edge is detected.
21
+ */
22
+ isEdge: boolean;
23
+ /**
24
+ * - True if Chrome is detected.
25
+ */
26
+ isChrome: boolean;
27
+ /**
28
+ * - True if the Blink engine is detected.
29
+ */
30
+ isBlink: boolean;
31
+ };
32
+ /**
33
+ * Detects the browser name by parsing the `navigator.userAgent` string.
34
+ *
35
+ * @returns {BrowserDetected} The detected browser name.
36
+ */
37
+ export declare function isBrowserAgent(): BrowserDetected;
38
+ /**
39
+ * Determines the browser's CSS rendering engine prefix by inspecting computed styles.
40
+ *
41
+ * @returns {'gecko'|'webkit'|'trident'|'other'} The detected CSS engine prefix.
42
+ */
43
+ export declare function getBrowserCssPrefix(): 'gecko' | 'webkit' | 'trident' | 'other';
44
+ /**
45
+ * Performs feature detection (duck typing) to identify the browser based on specific API availability.
46
+ *
47
+ * @returns {DuckTypingResult} An object containing boolean flags for various browser features.
48
+ */
49
+ export declare function getDuckTyping(): DuckTypingResult;
50
+ /**
51
+ * Aggregates detection results from multiple methods to provide a count of "pings" per browser.
52
+ *
53
+ * @param {BrowserDetected[]} [disable=[]] An array of browser names to exclude from the count.
54
+ * @returns {Object<BrowserDetected, number>} An object where keys are browser names and values are their detection counts.
55
+ * @throws {TypeError} If the `disable` argument is not an array or contains invalid browser names.
56
+ */
57
+ export declare function getBrowserPings(disable?: BrowserDetected[]): any;
58
+ /**
59
+ * Determines the most likely browser by identifying the one with the highest number of detection "pings".
60
+ *
61
+ * @param {BrowserDetected[]} [disable=[]] An array of browser names to exclude from the count.
62
+ * @returns {BrowserDetected} The name of the browser with the maximum count.
63
+ * @throws {TypeError} If the `disable` argument is not an array or contains invalid browser names.
64
+ */
65
+ export declare function browserIs(disable?: BrowserDetected[]): BrowserDetected;
66
+ //# sourceMappingURL=browserDetector.d.mts.map
@@ -0,0 +1,207 @@
1
+ // Credits: https://code-boxx.com/detect-browser-with-javascript/
2
+ /**
3
+ * @typedef {'chrome'|'firefox'|'ie'|'edge'|'safari'|'opera'|'yandex'|'other'} BrowserDetected
4
+ */
5
+ /**
6
+ * @typedef {Object} DuckTypingResult
7
+ * @property {boolean} isOpera - True if Opera is detected.
8
+ * @property {boolean} isFirefox - True if Firefox is detected.
9
+ * @property {boolean} isSafari - True if Safari is detected.
10
+ * @property {boolean} isIE - True if Internet Explorer is detected.
11
+ * @property {boolean} isEdge - True if Edge is detected.
12
+ * @property {boolean} isChrome - True if Chrome is detected.
13
+ * @property {boolean} isBlink - True if the Blink engine is detected.
14
+ */
15
+ const VALID_BROWSERS = ['chrome', 'firefox', 'ie', 'edge', 'safari', 'opera', 'yandex', 'other'];
16
+ /**
17
+ * Detects the browser name by parsing the `navigator.userAgent` string.
18
+ *
19
+ * @returns {BrowserDetected} The detected browser name.
20
+ */
21
+ export function isBrowserAgent() {
22
+ const ua = navigator.userAgent;
23
+ // CHROME
24
+ if (ua.indexOf('Chrome') !== -1) {
25
+ return 'chrome';
26
+ }
27
+ // FIREFOX
28
+ else if (ua.indexOf('Firefox') !== -1) {
29
+ return 'firefox';
30
+ }
31
+ // INTERNET EXPLORER
32
+ else if (ua.indexOf('MSIE') !== -1) {
33
+ return 'ie';
34
+ }
35
+ // EDGE
36
+ else if (ua.indexOf('Edge') !== -1) {
37
+ return 'edge';
38
+ }
39
+ // SAFARI
40
+ else if (ua.indexOf('Safari') !== -1) {
41
+ return 'safari';
42
+ }
43
+ // OPERA
44
+ else if (ua.indexOf('Opera') !== -1) {
45
+ return 'opera';
46
+ }
47
+ // YANDEX BROWSER
48
+ else if (ua.indexOf('YaBrowser') !== -1) {
49
+ return 'yandex';
50
+ }
51
+ // OTHERS
52
+ return 'other';
53
+ }
54
+ /**
55
+ * Determines the browser's CSS rendering engine prefix by inspecting computed styles.
56
+ *
57
+ * @returns {'gecko'|'webkit'|'trident'|'other'} The detected CSS engine prefix.
58
+ */
59
+ export function getBrowserCssPrefix() {
60
+ const prefix = (Array.prototype.slice
61
+ .call(window.getComputedStyle(document.documentElement, ''))
62
+ .join('')
63
+ .match(/-(moz|webkit|ms)-/) ?? ['', ''])[1];
64
+ // Firefox (Gecko engine)
65
+ if (prefix === 'moz') {
66
+ return 'gecko';
67
+ }
68
+ // Webkit engines (Chrome, Safari, Opera, Edge)
69
+ if (prefix === 'webkit') {
70
+ return 'webkit';
71
+ }
72
+ // Internet Explorer & Legacy Edge (Trident engine)
73
+ if (prefix === 'ms') {
74
+ return 'trident';
75
+ }
76
+ return 'other';
77
+ }
78
+ /**
79
+ * Performs feature detection (duck typing) to identify the browser based on specific API availability.
80
+ *
81
+ * @returns {DuckTypingResult} An object containing boolean flags for various browser features.
82
+ */
83
+ export function getDuckTyping() {
84
+ // OPERA 8.0+
85
+ const isOpera =
86
+ // @ts-ignore
87
+ (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
88
+ // FIREFOX 1.0+
89
+ // @ts-ignore
90
+ const isFirefox = typeof InstallTrigger !== 'undefined';
91
+ // SAFARI 3.0+
92
+ const isSafari =
93
+ // @ts-ignore
94
+ /constructor/i.test(window.HTMLElement) ||
95
+ (function (p) {
96
+ return p.toString() === '[object SafariRemoteNotification]';
97
+ // @ts-ignore
98
+ })(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));
99
+ // INTERNET EXPLORER 6-11
100
+ // @ts-ignore
101
+ const isIE = /*@cc_on!@*/ false || !!document.documentMode;
102
+ // EDGE 20+
103
+ // @ts-ignore
104
+ const isEdge = !isIE && !!window.StyleMedia;
105
+ // CHROME 1+
106
+ // @ts-ignore
107
+ const isChrome = !!window.chrome;
108
+ // BLINK ENGINE DETECTION
109
+ const isBlink = (isChrome || isOpera) && !!window.CSS;
110
+ return { isOpera, isFirefox, isSafari, isIE, isEdge, isChrome, isBlink };
111
+ }
112
+ /**
113
+ * Aggregates detection results from multiple methods to provide a count of "pings" per browser.
114
+ *
115
+ * @param {BrowserDetected[]} [disable=[]] An array of browser names to exclude from the count.
116
+ * @returns {Object<BrowserDetected, number>} An object where keys are browser names and values are their detection counts.
117
+ * @throws {TypeError} If the `disable` argument is not an array or contains invalid browser names.
118
+ */
119
+ export function getBrowserPings(disable = []) {
120
+ // Argument Validation
121
+ if (!Array.isArray(disable)) {
122
+ throw new TypeError('The "disable" argument must be an array.');
123
+ }
124
+ for (const browser of disable) {
125
+ if (!VALID_BROWSERS.includes(browser)) {
126
+ throw new TypeError(`Invalid browser name provided in disable array: ${browser}`);
127
+ }
128
+ }
129
+ const browsers = {
130
+ chrome: 0,
131
+ firefox: 0,
132
+ ie: 0,
133
+ edge: 0,
134
+ safari: 0,
135
+ opera: 0,
136
+ yandex: 0,
137
+ other: 0,
138
+ };
139
+ // 1. Count by User Agent
140
+ browsers[isBrowserAgent()]++;
141
+ // 2. Count by CSS Prefix
142
+ const browserCssPrefix = getBrowserCssPrefix();
143
+ if (browserCssPrefix === 'gecko') {
144
+ if (disable.indexOf('firefox') < 0)
145
+ browsers.firefox++;
146
+ }
147
+ else if (browserCssPrefix === 'webkit') {
148
+ if (disable.indexOf('chrome') < 0)
149
+ browsers.chrome++;
150
+ if (disable.indexOf('safari') < 0)
151
+ browsers.safari++;
152
+ if (disable.indexOf('opera') < 0)
153
+ browsers.opera++;
154
+ if (disable.indexOf('edge') < 0)
155
+ browsers.edge++;
156
+ }
157
+ else if (browserCssPrefix === 'trident') {
158
+ if (disable.indexOf('ie') < 0)
159
+ browsers.ie++;
160
+ }
161
+ else {
162
+ if (disable.indexOf('other') < 0)
163
+ browsers.other++;
164
+ }
165
+ // 3. Count by Duck Typing
166
+ const duckTyping = getDuckTyping();
167
+ if (duckTyping.isOpera) {
168
+ if (disable.indexOf('opera') < 0)
169
+ browsers.opera++;
170
+ }
171
+ if (duckTyping.isFirefox) {
172
+ if (disable.indexOf('firefox') < 0)
173
+ browsers.firefox++;
174
+ }
175
+ if (duckTyping.isSafari) {
176
+ if (disable.indexOf('safari') < 0)
177
+ browsers.safari++;
178
+ }
179
+ if (duckTyping.isIE) {
180
+ if (disable.indexOf('ie') < 0)
181
+ browsers.ie++;
182
+ }
183
+ if (duckTyping.isEdge) {
184
+ if (disable.indexOf('edge') < 0)
185
+ browsers.edge++;
186
+ }
187
+ if (duckTyping.isChrome) {
188
+ if (disable.indexOf('chrome') < 0)
189
+ browsers.chrome++;
190
+ }
191
+ return browsers;
192
+ }
193
+ /**
194
+ * Determines the most likely browser by identifying the one with the highest number of detection "pings".
195
+ *
196
+ * @param {BrowserDetected[]} [disable=[]] An array of browser names to exclude from the count.
197
+ * @returns {BrowserDetected} The name of the browser with the maximum count.
198
+ * @throws {TypeError} If the `disable` argument is not an array or contains invalid browser names.
199
+ */
200
+ export function browserIs(disable = []) {
201
+ const pings = getBrowserPings(disable);
202
+ // Returns the key with the maximum value in the pings object
203
+ // @ts-ignore
204
+ return Object.keys(pings).reduce((highest, current) =>
205
+ // @ts-ignore
206
+ pings[current] > pings[highest] ? current : highest);
207
+ }
@@ -11,6 +11,7 @@ var text = require('./text.cjs');
11
11
  var collision = require('./collision.cjs');
12
12
  var mediaContent = require('./mediaContent.cjs');
13
13
  var promiseUtils = require('./promiseUtils.cjs');
14
+ var browserDetector = require('./browserDetector.cjs');
14
15
 
15
16
 
16
17
 
@@ -85,3 +86,8 @@ exports.valMediaContentMetadata = mediaContent.valMediaContentMetadata;
85
86
  exports.valMediaContentMetadataPartial = mediaContent.valMediaContentMetadataPartial;
86
87
  exports.createSingletonTask = promiseUtils.createSingletonTask;
87
88
  exports.waitForTrue = promiseUtils.waitForTrue;
89
+ exports.browserIs = browserDetector.browserIs;
90
+ exports.getBrowserCssPrefix = browserDetector.getBrowserCssPrefix;
91
+ exports.getBrowserPings = browserDetector.getBrowserPings;
92
+ exports.getDuckTyping = browserDetector.getDuckTyping;
93
+ exports.isBrowserAgent = browserDetector.isBrowserAgent;
@@ -9,5 +9,6 @@ import { addAiMarkerShortcut, diffStrings, diffObjList, safeTextTrim, toTitleCas
9
9
  import { areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails } from './collision.mjs';
10
10
  import { extractMediaId3Tags, parseMediaMetadata, valMediaContentMetadata, valMediaContentMetadataPartial } from './mediaContent.mjs';
11
11
  import { createSingletonTask, waitForTrue } from './promiseUtils.mjs';
12
- export { isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, diffStrings, diffObjList, diffArrayList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, isObjType, objTypeName, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };
12
+ import { browserIs, getBrowserCssPrefix, getBrowserPings, getDuckTyping, isBrowserAgent } from './browserDetector.mjs';
13
+ export { getBrowserPings, isBrowserAgent, getBrowserCssPrefix, getDuckTyping, browserIs, isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, diffStrings, diffObjList, diffArrayList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, isObjType, objTypeName, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };
13
14
  //# sourceMappingURL=index.d.mts.map
@@ -9,4 +9,5 @@ import { addAiMarkerShortcut, diffStrings, diffObjList, safeTextTrim, toTitleCas
9
9
  import { areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, } from './collision.mjs';
10
10
  import { extractMediaId3Tags, parseMediaMetadata, valMediaContentMetadata, valMediaContentMetadataPartial, } from './mediaContent.mjs';
11
11
  import { createSingletonTask, waitForTrue } from './promiseUtils.mjs';
12
- export { isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, diffStrings, diffObjList, diffArrayList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, isObjType, objTypeName, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };
12
+ import { browserIs, getBrowserCssPrefix, getBrowserPings, getDuckTyping, isBrowserAgent, } from './browserDetector.mjs';
13
+ export { getBrowserPings, isBrowserAgent, getBrowserCssPrefix, getDuckTyping, browserIs, isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, diffStrings, diffObjList, diffArrayList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, isObjType, objTypeName, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var TinyDebugger = require('../libs/TinyDebugger.cjs');
4
+
5
+
6
+
7
+ exports.TinyDebugger = TinyDebugger;
@@ -0,0 +1,3 @@
1
+ import TinyDebugger from '../libs/TinyDebugger.mjs';
2
+ export { TinyDebugger };
3
+ //# sourceMappingURL=TinyDebugger.d.mts.map
@@ -0,0 +1,2 @@
1
+ import TinyDebugger from '../libs/TinyDebugger.mjs';
2
+ export { TinyDebugger };
package/dist/v1/index.cjs CHANGED
@@ -56,6 +56,8 @@ var TinyRadioFm = require('./libs/TinyRadioFm.cjs');
56
56
  var TinyMediaPlayer = require('./libs/TinyMediaPlayer.cjs');
57
57
  var utils = require('./libs/utils.cjs');
58
58
  var promiseUtils = require('./basics/promiseUtils.cjs');
59
+ var TinyDebugger = require('./libs/TinyDebugger.cjs');
60
+ var browserDetector = require('./basics/browserDetector.cjs');
59
61
 
60
62
 
61
63
 
@@ -205,3 +207,9 @@ exports.TinyMediaPlayer = TinyMediaPlayer;
205
207
  exports.createCheckDestroyed = utils.createCheckDestroyed;
206
208
  exports.createSingletonTask = promiseUtils.createSingletonTask;
207
209
  exports.waitForTrue = promiseUtils.waitForTrue;
210
+ exports.TinyDebugger = TinyDebugger;
211
+ exports.browserIs = browserDetector.browserIs;
212
+ exports.getBrowserCssPrefix = browserDetector.getBrowserCssPrefix;
213
+ exports.getBrowserPings = browserDetector.getBrowserPings;
214
+ exports.getDuckTyping = browserDetector.getDuckTyping;
215
+ exports.isBrowserAgent = browserDetector.isBrowserAgent;
@@ -54,5 +54,7 @@ import TinyRadioFm from './libs/TinyRadioFm.mjs';
54
54
  import TinyMediaPlayer from './libs/TinyMediaPlayer.mjs';
55
55
  import { createCheckDestroyed } from './libs/utils.mjs';
56
56
  import { createSingletonTask, waitForTrue } from './basics/promiseUtils.mjs';
57
- export { TinyMediaPlayer, TinyRadioFm, TinyClassManager, FuzzySet, MamdaniInferenceSystem, TinyArrayComparator, TinyTextDiffer, TinyAnalogClock, TinyColorValidator, TinyLoadingScreen, TinyElementObserver, TinySimpleDice, TinyNeedBar, TinyI18, TinyCookieConsent, TinyInventory, TinyInventoryTrader, TinyArrayPaginator, TinyAdvancedRaffle, TinyDayNightCycle, TinyGamepad, TinyTextarea, TinyNewWinEvents, TinyIframeEvents, TinyLocalStorage, TinyTimeout, TinyColorConverter, TinyClipboard, TinyTextRangeEditor, TinySmartScroller, UltraRandomMsgGen, TinyAfterScrollWatcher, TinyHtml, TinyNotifications, TinyDomReadyManager, TinyDragger, TinyDragDropDetector, TinyToastNotify, TinyNotifyCenter, TinyRateLimiter, ColorSafeStringify, TinyPromiseQueue, TinyLevelUp, isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, createCheckDestroyed, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, defuzzifyCentroid, trapezoid, diffArrayList, diffStrings, diffObjList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, isDirEmptyAsync, fileSizeAsync, dirSizeAsync, listFilesAsync, listDirsAsync, getLatestBackupPath, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, readJsonFile, writeJsonFile, ensureDirectory, clearDirectoryAsync, clearDirectory, fileExists, dirExists, isDirEmpty, ensureCopyFile, tryDeleteFile, writeTextFile, listFiles, listDirs, fileSize, dirSize, backupFile, restoreLatestBackup, renameFileBatch, renameFileRegex, renameFileAddPrefixSuffix, renameFileNormalizeCase, renameFilePadNumbers, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, checkObj, objTypeName, isObjType, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };
57
+ import TinyDebugger from './libs/TinyDebugger.mjs';
58
+ import { browserIs, getBrowserCssPrefix, getBrowserPings, getDuckTyping, isBrowserAgent } from './basics/browserDetector.mjs';
59
+ export { TinyDebugger, TinyMediaPlayer, TinyRadioFm, TinyClassManager, FuzzySet, MamdaniInferenceSystem, TinyArrayComparator, TinyTextDiffer, TinyAnalogClock, TinyColorValidator, TinyLoadingScreen, TinyElementObserver, TinySimpleDice, TinyNeedBar, TinyI18, TinyCookieConsent, TinyInventory, TinyInventoryTrader, TinyArrayPaginator, TinyAdvancedRaffle, TinyDayNightCycle, TinyGamepad, TinyTextarea, TinyNewWinEvents, TinyIframeEvents, TinyLocalStorage, TinyTimeout, TinyColorConverter, TinyClipboard, TinyTextRangeEditor, TinySmartScroller, UltraRandomMsgGen, TinyAfterScrollWatcher, TinyHtml, TinyNotifications, TinyDomReadyManager, TinyDragger, TinyDragDropDetector, TinyToastNotify, TinyNotifyCenter, TinyRateLimiter, ColorSafeStringify, TinyPromiseQueue, TinyLevelUp, getBrowserPings, isBrowserAgent, getBrowserCssPrefix, getDuckTyping, browserIs, isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, createCheckDestroyed, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, defuzzifyCentroid, trapezoid, diffArrayList, diffStrings, diffObjList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, isDirEmptyAsync, fileSizeAsync, dirSizeAsync, listFilesAsync, listDirsAsync, getLatestBackupPath, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, readJsonFile, writeJsonFile, ensureDirectory, clearDirectoryAsync, clearDirectory, fileExists, dirExists, isDirEmpty, ensureCopyFile, tryDeleteFile, writeTextFile, listFiles, listDirs, fileSize, dirSize, backupFile, restoreLatestBackup, renameFileBatch, renameFileRegex, renameFileAddPrefixSuffix, renameFileNormalizeCase, renameFilePadNumbers, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, checkObj, objTypeName, isObjType, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };
58
60
  //# sourceMappingURL=index.d.mts.map
package/dist/v1/index.mjs CHANGED
@@ -54,7 +54,9 @@ import TinyRadioFm from './libs/TinyRadioFm.mjs';
54
54
  import TinyMediaPlayer from './libs/TinyMediaPlayer.mjs';
55
55
  import { createCheckDestroyed } from './libs/utils.mjs';
56
56
  import { createSingletonTask, waitForTrue } from './basics/promiseUtils.mjs';
57
+ import TinyDebugger from './libs/TinyDebugger.mjs';
58
+ import { browserIs, getBrowserCssPrefix, getBrowserPings, getDuckTyping, isBrowserAgent, } from './basics/browserDetector.mjs';
57
59
  // import TinyHtmlElems from './libs/TinyHtml/index.mjs';
58
- export { TinyMediaPlayer, TinyRadioFm, TinyClassManager, FuzzySet, MamdaniInferenceSystem, TinyArrayComparator, TinyTextDiffer, TinyAnalogClock,
60
+ export { TinyDebugger, TinyMediaPlayer, TinyRadioFm, TinyClassManager, FuzzySet, MamdaniInferenceSystem, TinyArrayComparator, TinyTextDiffer, TinyAnalogClock,
59
61
  // TinyHtmlElems,
60
- TinyColorValidator, TinyLoadingScreen, TinyElementObserver, TinySimpleDice, TinyNeedBar, TinyI18, TinyCookieConsent, TinyInventory, TinyInventoryTrader, TinyArrayPaginator, TinyAdvancedRaffle, TinyDayNightCycle, TinyGamepad, TinyTextarea, TinyNewWinEvents, TinyIframeEvents, TinyLocalStorage, TinyTimeout, TinyColorConverter, TinyClipboard, TinyTextRangeEditor, TinySmartScroller, UltraRandomMsgGen, TinyAfterScrollWatcher, TinyHtml, TinyNotifications, TinyDomReadyManager, TinyDragger, TinyDragDropDetector, TinyToastNotify, TinyNotifyCenter, TinyRateLimiter, ColorSafeStringify, TinyPromiseQueue, TinyLevelUp, isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, createCheckDestroyed, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, defuzzifyCentroid, trapezoid, diffArrayList, diffStrings, diffObjList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, isDirEmptyAsync, fileSizeAsync, dirSizeAsync, listFilesAsync, listDirsAsync, getLatestBackupPath, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, readJsonFile, writeJsonFile, ensureDirectory, clearDirectoryAsync, clearDirectory, fileExists, dirExists, isDirEmpty, ensureCopyFile, tryDeleteFile, writeTextFile, listFiles, listDirs, fileSize, dirSize, backupFile, restoreLatestBackup, renameFileBatch, renameFileRegex, renameFileAddPrefixSuffix, renameFileNormalizeCase, renameFilePadNumbers, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, checkObj, objTypeName, isObjType, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };
62
+ TinyColorValidator, TinyLoadingScreen, TinyElementObserver, TinySimpleDice, TinyNeedBar, TinyI18, TinyCookieConsent, TinyInventory, TinyInventoryTrader, TinyArrayPaginator, TinyAdvancedRaffle, TinyDayNightCycle, TinyGamepad, TinyTextarea, TinyNewWinEvents, TinyIframeEvents, TinyLocalStorage, TinyTimeout, TinyColorConverter, TinyClipboard, TinyTextRangeEditor, TinySmartScroller, UltraRandomMsgGen, TinyAfterScrollWatcher, TinyHtml, TinyNotifications, TinyDomReadyManager, TinyDragger, TinyDragDropDetector, TinyToastNotify, TinyNotifyCenter, TinyRateLimiter, ColorSafeStringify, TinyPromiseQueue, TinyLevelUp, getBrowserPings, isBrowserAgent, getBrowserCssPrefix, getDuckTyping, browserIs, isValidObj, createSingletonTask, waitForTrue, multiplyArrayBlocks, createCheckDestroyed, valMediaContentMetadata, valMediaContentMetadataPartial, parseMediaMetadata, extractMediaId3Tags, defuzzifyCentroid, trapezoid, diffArrayList, diffStrings, diffObjList, breakdownDuration, calculateMarketcap, compareMarketcap, getPercentage, areElsCollTop, areElsCollBottom, areElsCollLeft, areElsCollRight, areElsCollPerfTop, areElsCollPerfBottom, areElsCollPerfLeft, areElsCollPerfRight, areElsColliding, areElsPerfColliding, getElsColliding, getElsPerfColliding, getElsCollOverlap, getElsCollOverlapPos, getRectCenter, getElsRelativeCenterOffset, getElsCollDirDepth, getElsCollDetails, safeTextTrim, installWindowHiddenScript, genFibonacciSeq, isDirEmptyAsync, fileSizeAsync, dirSizeAsync, listFilesAsync, listDirsAsync, getLatestBackupPath, fetchJson, fetchText, readJsonBlob, readFileBlob, readBase64Blob, saveJsonFile, readJsonFile, writeJsonFile, ensureDirectory, clearDirectoryAsync, clearDirectory, fileExists, dirExists, isDirEmpty, ensureCopyFile, tryDeleteFile, writeTextFile, listFiles, listDirs, fileSize, dirSize, backupFile, restoreLatestBackup, renameFileBatch, renameFileRegex, renameFileAddPrefixSuffix, renameFileNormalizeCase, renameFilePadNumbers, documentIsFullScreen, isScreenFilled, requestFullScreen, exitFullScreen, isFullScreenMode, onFullScreenChange, offFullScreenChange, isJsonObject, arraySortPositions, formatBytes, addAiMarkerShortcut, extendObjType, reorderObjTypeOrder, cloneObjTypeOrder, countObj, checkObj, objTypeName, isObjType, objType, ruleOfThree, getSimplePerc, asyncReplace, getAge, formatCustomTimer, formatDayTimer, formatTimer, getTimeDuration, shuffleArray, toTitleCase, toTitleCaseLowerFirst, };