@nickyzj2023/utils 1.0.49 → 1.0.51

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 (81) hide show
  1. package/docs/assets/highlight.css +92 -99
  2. package/docs/assets/navigation.js +1 -1
  3. package/docs/assets/search.js +1 -1
  4. package/docs/functions/camelToSnake.html +178 -178
  5. package/docs/functions/capitalize.html +178 -178
  6. package/docs/functions/compactStr.html +182 -182
  7. package/docs/functions/debounce.html +187 -187
  8. package/docs/functions/decapitalize.html +178 -178
  9. package/docs/functions/fetcher.html +189 -189
  10. package/docs/functions/getRealURL.html +175 -175
  11. package/docs/functions/imageUrlToBase64.html +191 -187
  12. package/docs/functions/isFalsy.html +178 -178
  13. package/docs/functions/isNil.html +178 -178
  14. package/docs/functions/isObject.html +178 -178
  15. package/docs/functions/isPrimitive.html +178 -178
  16. package/docs/functions/isTruthy.html +178 -178
  17. package/docs/functions/loopUntil.html +180 -180
  18. package/docs/functions/mapKeys.html +180 -180
  19. package/docs/functions/mapValues.html +182 -182
  20. package/docs/functions/mergeObjects.html +184 -184
  21. package/docs/functions/randomInt.html +178 -178
  22. package/docs/functions/sleep.html +179 -179
  23. package/docs/functions/snakeToCamel.html +178 -178
  24. package/docs/functions/throttle.html +187 -187
  25. package/docs/functions/timeLog.html +178 -178
  26. package/docs/functions/to.html +180 -180
  27. package/docs/functions/withCache.html +185 -185
  28. package/docs/modules.html +174 -174
  29. package/docs/types/BunFetchOptions.html +176 -0
  30. package/docs/types/CamelToSnake.html +174 -174
  31. package/docs/types/Capitalize.html +174 -174
  32. package/docs/types/Decapitalize.html +174 -174
  33. package/docs/types/DeepMapKeys.html +174 -174
  34. package/docs/types/DeepMapValues.html +174 -174
  35. package/docs/types/Falsy.html +174 -174
  36. package/docs/types/ImageCompressionOptions.html +188 -184
  37. package/docs/types/Primitive.html +174 -174
  38. package/docs/types/RequestInit.html +174 -174
  39. package/docs/types/SetTtl.html +174 -174
  40. package/docs/types/SnakeToCamel.html +174 -174
  41. package/package.json +2 -2
  42. package/src/network/fetcher.ts +2 -2
  43. package/src/network/index.ts +1 -1
  44. package/dist/dom/index.d.ts +0 -1
  45. package/dist/dom/timeLog.d.ts +0 -8
  46. package/dist/function/index.d.ts +0 -1
  47. package/dist/function/loopUntil.d.ts +0 -22
  48. package/dist/hoc/index.d.ts +0 -1
  49. package/dist/hoc/withCache.d.ts +0 -42
  50. package/dist/index.d.ts +0 -9
  51. package/dist/index.js +0 -2
  52. package/dist/is/index.d.ts +0 -5
  53. package/dist/is/isFalsy.d.ts +0 -9
  54. package/dist/is/isNil.d.ts +0 -9
  55. package/dist/is/isObject.d.ts +0 -8
  56. package/dist/is/isPrimitive.d.ts +0 -9
  57. package/dist/is/isTruthy.d.ts +0 -8
  58. package/dist/is/types.d.ts +0 -2
  59. package/dist/lru-cache.d.ts +0 -18
  60. package/dist/network/fetcher.d.ts +0 -57
  61. package/dist/network/getRealURL.d.ts +0 -2
  62. package/dist/network/image.d.ts +0 -59
  63. package/dist/network/index.d.ts +0 -4
  64. package/dist/network/to.d.ts +0 -9
  65. package/dist/network.d.ts +0 -68
  66. package/dist/number/index.d.ts +0 -1
  67. package/dist/number/randomInt.d.ts +0 -7
  68. package/dist/object/index.d.ts +0 -3
  69. package/dist/object/mapKeys.d.ts +0 -17
  70. package/dist/object/mapValues.d.ts +0 -21
  71. package/dist/object/mergeObjects.d.ts +0 -12
  72. package/dist/object/types.d.ts +0 -6
  73. package/dist/string/case.d.ts +0 -32
  74. package/dist/string/compact.d.ts +0 -22
  75. package/dist/string/image.d.ts +0 -59
  76. package/dist/string/index.d.ts +0 -2
  77. package/dist/string.d.ts +0 -13
  78. package/dist/time/debounce.d.ts +0 -20
  79. package/dist/time/index.d.ts +0 -3
  80. package/dist/time/sleep.d.ts +0 -7
  81. package/dist/time/throttle.d.ts +0 -20
@@ -1,174 +1,174 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SnakeToCamel | @nickyzj2023/utils</title><meta name="description" content="Documentation for @nickyzj2023/utils"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><style>
2
- @media (prefers-color-scheme: dark) {
3
- :root {
4
- --md-sys-color-primary: #f6be46;
5
- --md-sys-color-on-primary: #412d00;
6
- --md-sys-color-primary-container: #5d4200;
7
- --md-sys-color-on-primary-container: #ffdea3;
8
- --md-sys-color-secondary: #d9c4a0;
9
- --md-sys-color-on-secondary: #3b2f15;
10
- --md-sys-color-secondary-container: #53452a;
11
- --md-sys-color-on-secondary-container: #f6e0bb;
12
- --md-sys-color-tertiary: #b2cfa8;
13
- --md-sys-color-on-tertiary: #1e361a;
14
- --md-sys-color-tertiary-container: #344d2f;
15
- --md-sys-color-on-tertiary-container: #cdebc2;
16
- --md-sys-color-error: #ffb4ab;
17
- --md-sys-color-on-error: #690005;
18
- --md-sys-color-error-container: #93000a;
19
- --md-sys-color-on-error-container: #ffb4ab;
20
- --md-sys-color-background: #1e1b16;
21
- --md-sys-color-on-background: #e9e1d9;
22
- --md-sys-color-surface: #1e1b16;
23
- --md-sys-color-on-surface: #e9e1d9;
24
- --md-sys-color-surface-variant: #4e4639;
25
- --md-sys-color-on-surface-variant: #d1c5b4;
26
- --md-sys-color-outline: #9a8f80;
27
- --md-sys-color-outline-variant: #4e4639;
28
- --md-sys-color-shadow: #000000;
29
- --md-sys-color-scrim: #000000;
30
- --md-sys-color-inverse-surface: #e9e1d9;
31
- --md-sys-color-inverse-on-surface: #34302a;
32
- --md-sys-color-inverse-primary: #7a5900;
33
- --md-sys-color-surface-dim: #16130e;
34
- --md-sys-color-surface-bright: #3d3933;
35
- --md-sys-color-surface-container-lowest: #110e09;
36
- --md-sys-color-surface-container-low: #1e1b16;
37
- --md-sys-color-surface-container: #221f1a;
38
- --md-sys-color-surface-container-high: #2d2924;
39
- --md-sys-color-surface-container-highest: #38342e
40
- }
41
- }
42
- :root[data-theme="dark"] {
43
- --md-sys-color-primary: #f6be46;
44
- --md-sys-color-on-primary: #412d00;
45
- --md-sys-color-primary-container: #5d4200;
46
- --md-sys-color-on-primary-container: #ffdea3;
47
- --md-sys-color-secondary: #d9c4a0;
48
- --md-sys-color-on-secondary: #3b2f15;
49
- --md-sys-color-secondary-container: #53452a;
50
- --md-sys-color-on-secondary-container: #f6e0bb;
51
- --md-sys-color-tertiary: #b2cfa8;
52
- --md-sys-color-on-tertiary: #1e361a;
53
- --md-sys-color-tertiary-container: #344d2f;
54
- --md-sys-color-on-tertiary-container: #cdebc2;
55
- --md-sys-color-error: #ffb4ab;
56
- --md-sys-color-on-error: #690005;
57
- --md-sys-color-error-container: #93000a;
58
- --md-sys-color-on-error-container: #ffb4ab;
59
- --md-sys-color-background: #1e1b16;
60
- --md-sys-color-on-background: #e9e1d9;
61
- --md-sys-color-surface: #1e1b16;
62
- --md-sys-color-on-surface: #e9e1d9;
63
- --md-sys-color-surface-variant: #4e4639;
64
- --md-sys-color-on-surface-variant: #d1c5b4;
65
- --md-sys-color-outline: #9a8f80;
66
- --md-sys-color-outline-variant: #4e4639;
67
- --md-sys-color-shadow: #000000;
68
- --md-sys-color-scrim: #000000;
69
- --md-sys-color-inverse-surface: #e9e1d9;
70
- --md-sys-color-inverse-on-surface: #34302a;
71
- --md-sys-color-inverse-primary: #7a5900;
72
- --md-sys-color-surface-dim: #16130e;
73
- --md-sys-color-surface-bright: #3d3933;
74
- --md-sys-color-surface-container-lowest: #110e09;
75
- --md-sys-color-surface-container-low: #1e1b16;
76
- --md-sys-color-surface-container: #221f1a;
77
- --md-sys-color-surface-container-high: #2d2924;
78
- --md-sys-color-surface-container-highest: #38342e
79
- }
80
-
81
- @media (prefers-color-scheme: light) {
82
- :root {
83
- --md-sys-color-primary: #7a5900;
84
- --md-sys-color-on-primary: #ffffff;
85
- --md-sys-color-primary-container: #ffdea3;
86
- --md-sys-color-on-primary-container: #261900;
87
- --md-sys-color-secondary: #6c5c3f;
88
- --md-sys-color-on-secondary: #ffffff;
89
- --md-sys-color-secondary-container: #f6e0bb;
90
- --md-sys-color-on-secondary-container: #251a04;
91
- --md-sys-color-tertiary: #4b6545;
92
- --md-sys-color-on-tertiary: #ffffff;
93
- --md-sys-color-tertiary-container: #cdebc2;
94
- --md-sys-color-on-tertiary-container: #092007;
95
- --md-sys-color-error: #ba1a1a;
96
- --md-sys-color-on-error: #ffffff;
97
- --md-sys-color-error-container: #ffdad6;
98
- --md-sys-color-on-error-container: #410002;
99
- --md-sys-color-background: #fffbff;
100
- --md-sys-color-on-background: #1e1b16;
101
- --md-sys-color-surface: #fffbff;
102
- --md-sys-color-on-surface: #1e1b16;
103
- --md-sys-color-surface-variant: #ede1cf;
104
- --md-sys-color-on-surface-variant: #4e4639;
105
- --md-sys-color-outline: #7f7667;
106
- --md-sys-color-outline-variant: #d1c5b4;
107
- --md-sys-color-shadow: #000000;
108
- --md-sys-color-scrim: #000000;
109
- --md-sys-color-inverse-surface: #34302a;
110
- --md-sys-color-inverse-on-surface: #f8efe7;
111
- --md-sys-color-inverse-primary: #f6be46;
112
- --md-sys-color-surface-dim: #e1d9d0;
113
- --md-sys-color-surface-bright: #fff8f2;
114
- --md-sys-color-surface-container-lowest: #ffffff;
115
- --md-sys-color-surface-container-low: #fbf2e9;
116
- --md-sys-color-surface-container: #f5ede4;
117
- --md-sys-color-surface-container-high: #efe7de;
118
- --md-sys-color-surface-container-highest: #e9e1d9
119
- }
120
- }
121
- :root[data-theme="light"] {
122
- --md-sys-color-primary: #7a5900;
123
- --md-sys-color-on-primary: #ffffff;
124
- --md-sys-color-primary-container: #ffdea3;
125
- --md-sys-color-on-primary-container: #261900;
126
- --md-sys-color-secondary: #6c5c3f;
127
- --md-sys-color-on-secondary: #ffffff;
128
- --md-sys-color-secondary-container: #f6e0bb;
129
- --md-sys-color-on-secondary-container: #251a04;
130
- --md-sys-color-tertiary: #4b6545;
131
- --md-sys-color-on-tertiary: #ffffff;
132
- --md-sys-color-tertiary-container: #cdebc2;
133
- --md-sys-color-on-tertiary-container: #092007;
134
- --md-sys-color-error: #ba1a1a;
135
- --md-sys-color-on-error: #ffffff;
136
- --md-sys-color-error-container: #ffdad6;
137
- --md-sys-color-on-error-container: #410002;
138
- --md-sys-color-background: #fffbff;
139
- --md-sys-color-on-background: #1e1b16;
140
- --md-sys-color-surface: #fffbff;
141
- --md-sys-color-on-surface: #1e1b16;
142
- --md-sys-color-surface-variant: #ede1cf;
143
- --md-sys-color-on-surface-variant: #4e4639;
144
- --md-sys-color-outline: #7f7667;
145
- --md-sys-color-outline-variant: #d1c5b4;
146
- --md-sys-color-shadow: #000000;
147
- --md-sys-color-scrim: #000000;
148
- --md-sys-color-inverse-surface: #34302a;
149
- --md-sys-color-inverse-on-surface: #f8efe7;
150
- --md-sys-color-inverse-primary: #f6be46;
151
- --md-sys-color-surface-dim: #e1d9d0;
152
- --md-sys-color-surface-bright: #fff8f2;
153
- --md-sys-color-surface-container-lowest: #ffffff;
154
- --md-sys-color-surface-container-low: #fbf2e9;
155
- --md-sys-color-surface-container: #f5ede4;
156
- --md-sys-color-surface-container-high: #efe7de;
157
- --md-sys-color-surface-container-highest: #e9e1d9
158
- }
159
- </style><link rel="stylesheet" href="../assets/material-style.css"/></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@nickyzj2023/utils</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">SnakeToCamel</a></li></ul><h1>Type Alias SnakeToCamel&lt;S&gt;</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">SnakeToCamel</span><span class="tsd-signature-symbol">:</span> <a class="tsd-signature-type tsd-kind-type-parameter" href="#s">S</a> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">Before</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-type">_</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">After</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><br/>    <span class="tsd-signature-symbol">?</span> <span class="tsd-signature-type tsd-kind-type-parameter">After</span> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">First</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">Rest</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><br/>        <span class="tsd-signature-symbol">?</span> <span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type tsd-kind-type-parameter">Before</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type">Uppercase</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type tsd-kind-type-parameter">First</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">${</span><a href="" class="tsd-signature-type tsd-kind-type-alias">SnakeToCamel</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type tsd-kind-type-parameter">Rest</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><br/>        <span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type tsd-kind-type-parameter">Before</span><br/>    <span class="tsd-signature-symbol">:</span> <a class="tsd-signature-type tsd-kind-type-parameter" href="#s">S</a></div><section class="tsd-panel"><h4>Type Parameters</h4><ul class="tsd-type-parameter-list"><li><span id="s"><span class="tsd-kind-type-parameter">S</span> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-type">string</span></span></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/32a07d062657fa3d22bfbf38633535f4c08d553c/src/string.ts#L1">string.ts:1</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
160
- try {
161
- const generateLinkElement = document.querySelector(".tsd-generator a");
162
- const link = document.createElement("a");
163
- Object.assign(link, {
164
- href: "https://github.com/dmnsgn/typedoc-material-theme",
165
- target: "_blank",
166
- rel: "noreferrer",
167
- innerText: "typedoc-material-theme."
168
- });
169
- generateLinkElement.insertAdjacentElement("afterend", link);
170
- generateLinkElement.insertAdjacentText("afterend", " with ");
171
- } catch (error) {
172
-
173
- }
174
- </script></body></html>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>SnakeToCamel | @nickyzj2023/utils</title><meta name="description" content="Documentation for @nickyzj2023/utils"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><style>
2
+ @media (prefers-color-scheme: dark) {
3
+ :root {
4
+ --md-sys-color-primary: #f6be46;
5
+ --md-sys-color-on-primary: #412d00;
6
+ --md-sys-color-primary-container: #5d4200;
7
+ --md-sys-color-on-primary-container: #ffdea3;
8
+ --md-sys-color-secondary: #d9c4a0;
9
+ --md-sys-color-on-secondary: #3b2f15;
10
+ --md-sys-color-secondary-container: #53452a;
11
+ --md-sys-color-on-secondary-container: #f6e0bb;
12
+ --md-sys-color-tertiary: #b2cfa8;
13
+ --md-sys-color-on-tertiary: #1e361a;
14
+ --md-sys-color-tertiary-container: #344d2f;
15
+ --md-sys-color-on-tertiary-container: #cdebc2;
16
+ --md-sys-color-error: #ffb4ab;
17
+ --md-sys-color-on-error: #690005;
18
+ --md-sys-color-error-container: #93000a;
19
+ --md-sys-color-on-error-container: #ffb4ab;
20
+ --md-sys-color-background: #1e1b16;
21
+ --md-sys-color-on-background: #e9e1d9;
22
+ --md-sys-color-surface: #1e1b16;
23
+ --md-sys-color-on-surface: #e9e1d9;
24
+ --md-sys-color-surface-variant: #4e4639;
25
+ --md-sys-color-on-surface-variant: #d1c5b4;
26
+ --md-sys-color-outline: #9a8f80;
27
+ --md-sys-color-outline-variant: #4e4639;
28
+ --md-sys-color-shadow: #000000;
29
+ --md-sys-color-scrim: #000000;
30
+ --md-sys-color-inverse-surface: #e9e1d9;
31
+ --md-sys-color-inverse-on-surface: #34302a;
32
+ --md-sys-color-inverse-primary: #7a5900;
33
+ --md-sys-color-surface-dim: #16130e;
34
+ --md-sys-color-surface-bright: #3d3933;
35
+ --md-sys-color-surface-container-lowest: #110e09;
36
+ --md-sys-color-surface-container-low: #1e1b16;
37
+ --md-sys-color-surface-container: #221f1a;
38
+ --md-sys-color-surface-container-high: #2d2924;
39
+ --md-sys-color-surface-container-highest: #38342e
40
+ }
41
+ }
42
+ :root[data-theme="dark"] {
43
+ --md-sys-color-primary: #f6be46;
44
+ --md-sys-color-on-primary: #412d00;
45
+ --md-sys-color-primary-container: #5d4200;
46
+ --md-sys-color-on-primary-container: #ffdea3;
47
+ --md-sys-color-secondary: #d9c4a0;
48
+ --md-sys-color-on-secondary: #3b2f15;
49
+ --md-sys-color-secondary-container: #53452a;
50
+ --md-sys-color-on-secondary-container: #f6e0bb;
51
+ --md-sys-color-tertiary: #b2cfa8;
52
+ --md-sys-color-on-tertiary: #1e361a;
53
+ --md-sys-color-tertiary-container: #344d2f;
54
+ --md-sys-color-on-tertiary-container: #cdebc2;
55
+ --md-sys-color-error: #ffb4ab;
56
+ --md-sys-color-on-error: #690005;
57
+ --md-sys-color-error-container: #93000a;
58
+ --md-sys-color-on-error-container: #ffb4ab;
59
+ --md-sys-color-background: #1e1b16;
60
+ --md-sys-color-on-background: #e9e1d9;
61
+ --md-sys-color-surface: #1e1b16;
62
+ --md-sys-color-on-surface: #e9e1d9;
63
+ --md-sys-color-surface-variant: #4e4639;
64
+ --md-sys-color-on-surface-variant: #d1c5b4;
65
+ --md-sys-color-outline: #9a8f80;
66
+ --md-sys-color-outline-variant: #4e4639;
67
+ --md-sys-color-shadow: #000000;
68
+ --md-sys-color-scrim: #000000;
69
+ --md-sys-color-inverse-surface: #e9e1d9;
70
+ --md-sys-color-inverse-on-surface: #34302a;
71
+ --md-sys-color-inverse-primary: #7a5900;
72
+ --md-sys-color-surface-dim: #16130e;
73
+ --md-sys-color-surface-bright: #3d3933;
74
+ --md-sys-color-surface-container-lowest: #110e09;
75
+ --md-sys-color-surface-container-low: #1e1b16;
76
+ --md-sys-color-surface-container: #221f1a;
77
+ --md-sys-color-surface-container-high: #2d2924;
78
+ --md-sys-color-surface-container-highest: #38342e
79
+ }
80
+
81
+ @media (prefers-color-scheme: light) {
82
+ :root {
83
+ --md-sys-color-primary: #7a5900;
84
+ --md-sys-color-on-primary: #ffffff;
85
+ --md-sys-color-primary-container: #ffdea3;
86
+ --md-sys-color-on-primary-container: #261900;
87
+ --md-sys-color-secondary: #6c5c3f;
88
+ --md-sys-color-on-secondary: #ffffff;
89
+ --md-sys-color-secondary-container: #f6e0bb;
90
+ --md-sys-color-on-secondary-container: #251a04;
91
+ --md-sys-color-tertiary: #4b6545;
92
+ --md-sys-color-on-tertiary: #ffffff;
93
+ --md-sys-color-tertiary-container: #cdebc2;
94
+ --md-sys-color-on-tertiary-container: #092007;
95
+ --md-sys-color-error: #ba1a1a;
96
+ --md-sys-color-on-error: #ffffff;
97
+ --md-sys-color-error-container: #ffdad6;
98
+ --md-sys-color-on-error-container: #410002;
99
+ --md-sys-color-background: #fffbff;
100
+ --md-sys-color-on-background: #1e1b16;
101
+ --md-sys-color-surface: #fffbff;
102
+ --md-sys-color-on-surface: #1e1b16;
103
+ --md-sys-color-surface-variant: #ede1cf;
104
+ --md-sys-color-on-surface-variant: #4e4639;
105
+ --md-sys-color-outline: #7f7667;
106
+ --md-sys-color-outline-variant: #d1c5b4;
107
+ --md-sys-color-shadow: #000000;
108
+ --md-sys-color-scrim: #000000;
109
+ --md-sys-color-inverse-surface: #34302a;
110
+ --md-sys-color-inverse-on-surface: #f8efe7;
111
+ --md-sys-color-inverse-primary: #f6be46;
112
+ --md-sys-color-surface-dim: #e1d9d0;
113
+ --md-sys-color-surface-bright: #fff8f2;
114
+ --md-sys-color-surface-container-lowest: #ffffff;
115
+ --md-sys-color-surface-container-low: #fbf2e9;
116
+ --md-sys-color-surface-container: #f5ede4;
117
+ --md-sys-color-surface-container-high: #efe7de;
118
+ --md-sys-color-surface-container-highest: #e9e1d9
119
+ }
120
+ }
121
+ :root[data-theme="light"] {
122
+ --md-sys-color-primary: #7a5900;
123
+ --md-sys-color-on-primary: #ffffff;
124
+ --md-sys-color-primary-container: #ffdea3;
125
+ --md-sys-color-on-primary-container: #261900;
126
+ --md-sys-color-secondary: #6c5c3f;
127
+ --md-sys-color-on-secondary: #ffffff;
128
+ --md-sys-color-secondary-container: #f6e0bb;
129
+ --md-sys-color-on-secondary-container: #251a04;
130
+ --md-sys-color-tertiary: #4b6545;
131
+ --md-sys-color-on-tertiary: #ffffff;
132
+ --md-sys-color-tertiary-container: #cdebc2;
133
+ --md-sys-color-on-tertiary-container: #092007;
134
+ --md-sys-color-error: #ba1a1a;
135
+ --md-sys-color-on-error: #ffffff;
136
+ --md-sys-color-error-container: #ffdad6;
137
+ --md-sys-color-on-error-container: #410002;
138
+ --md-sys-color-background: #fffbff;
139
+ --md-sys-color-on-background: #1e1b16;
140
+ --md-sys-color-surface: #fffbff;
141
+ --md-sys-color-on-surface: #1e1b16;
142
+ --md-sys-color-surface-variant: #ede1cf;
143
+ --md-sys-color-on-surface-variant: #4e4639;
144
+ --md-sys-color-outline: #7f7667;
145
+ --md-sys-color-outline-variant: #d1c5b4;
146
+ --md-sys-color-shadow: #000000;
147
+ --md-sys-color-scrim: #000000;
148
+ --md-sys-color-inverse-surface: #34302a;
149
+ --md-sys-color-inverse-on-surface: #f8efe7;
150
+ --md-sys-color-inverse-primary: #f6be46;
151
+ --md-sys-color-surface-dim: #e1d9d0;
152
+ --md-sys-color-surface-bright: #fff8f2;
153
+ --md-sys-color-surface-container-lowest: #ffffff;
154
+ --md-sys-color-surface-container-low: #fbf2e9;
155
+ --md-sys-color-surface-container: #f5ede4;
156
+ --md-sys-color-surface-container-high: #efe7de;
157
+ --md-sys-color-surface-container-highest: #e9e1d9
158
+ }
159
+ </style><link rel="stylesheet" href="../assets/material-style.css"/></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@nickyzj2023/utils</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">SnakeToCamel</a></li></ul><h1>Type Alias SnakeToCamel&lt;S&gt;</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">SnakeToCamel</span><span class="tsd-signature-symbol">:</span> <a class="tsd-signature-type tsd-kind-type-parameter" href="#s">S</a> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">Before</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-type">_</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">After</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><br/>    <span class="tsd-signature-symbol">?</span> <span class="tsd-signature-type tsd-kind-type-parameter">After</span> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">First</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-keyword">infer</span> <span class="tsd-kind-type-parameter">Rest</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><br/>        <span class="tsd-signature-symbol">?</span> <span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type tsd-kind-type-parameter">Before</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type">Uppercase</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type tsd-kind-type-parameter">First</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">${</span><a href="" class="tsd-signature-type tsd-kind-type-alias">SnakeToCamel</a><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type tsd-kind-type-parameter">Rest</span><span class="tsd-signature-symbol">&gt;</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><br/>        <span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type tsd-kind-type-parameter">Before</span><br/>    <span class="tsd-signature-symbol">:</span> <a class="tsd-signature-type tsd-kind-type-parameter" href="#s">S</a></div><section class="tsd-panel"><h4>Type Parameters</h4><ul class="tsd-type-parameter-list"><li><span id="s"><span class="tsd-kind-type-parameter">S</span> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-type">string</span></span></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/c58bf2f4733c1b2b81891e913570fa35e7e2c651/src/string/case.ts#L1">string/case.ts:1</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
160
+ try {
161
+ const generateLinkElement = document.querySelector(".tsd-generator a");
162
+ const link = document.createElement("a");
163
+ Object.assign(link, {
164
+ href: "https://github.com/dmnsgn/typedoc-material-theme",
165
+ target: "_blank",
166
+ rel: "noreferrer",
167
+ innerText: "typedoc-material-theme."
168
+ });
169
+ generateLinkElement.insertAdjacentElement("afterend", link);
170
+ generateLinkElement.insertAdjacentText("afterend", " with ");
171
+ } catch (error) {
172
+
173
+ }
174
+ </script></body></html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nickyzj2023/utils",
3
- "version": "1.0.49",
3
+ "version": "1.0.51",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/Nickyzj628/utils.git"
@@ -19,6 +19,6 @@
19
19
  },
20
20
  "scripts": {
21
21
  "docs": "typedoc src/index.ts --plugin typedoc-material-theme",
22
- "build": "bun build --target=bun --outdir ./dist --minify ./src/index.ts --packages external && tsc"
22
+ "build": "bun build --target=bun --outdir ./dist --minify ./src/index.ts --packages external && tsc && bun run docs"
23
23
  }
24
24
  }
@@ -2,7 +2,7 @@ import { isNil, isObject } from "../is";
2
2
  import { mergeObjects } from "../object";
3
3
 
4
4
  // Bun 特有的 fetch 选项
5
- type BunFetchOptions = {
5
+ export type BunFetchOptions = {
6
6
  /** 代理服务器配置(仅 Bun 支持) */
7
7
  proxy?: string;
8
8
  };
@@ -78,7 +78,7 @@ export const fetcher = (baseURL = "", baseOptions: RequestInit = {}) => {
78
78
  }
79
79
 
80
80
  // 转换 body 为字符串
81
- if (isObject(options.body)) {
81
+ if (isObject(options.body) || Array.isArray(options.body)) {
82
82
  options.body = JSON.stringify(options.body);
83
83
  options.headers = {
84
84
  ...options.headers,
@@ -1,4 +1,4 @@
1
- export { fetcher, type RequestInit } from "./fetcher";
1
+ export { type BunFetchOptions, fetcher, type RequestInit } from "./fetcher";
2
2
  export { getRealURL } from "./getRealURL";
3
3
  export { type ImageCompressionOptions, imageUrlToBase64 } from "./image";
4
4
  export { to } from "./to";
@@ -1 +0,0 @@
1
- export { timeLog } from "./timeLog";
@@ -1,8 +0,0 @@
1
- /**
2
- * 附带时间的 console.log
3
- * @param args
4
- *
5
- * @example
6
- * timeLog("Hello", "World"); // 14:30:00 Hello World
7
- */
8
- export declare const timeLog: (...args: any[]) => void;
@@ -1 +0,0 @@
1
- export { loopUntil } from "./loopUntil";
@@ -1,22 +0,0 @@
1
- /**
2
- * 循环执行函数,直到符合停止条件
3
- *
4
- * @example
5
- * // 循环请求大语言模型,直到其不再调用工具
6
- * loopUntil(
7
- * async () => {
8
- * const completion = await chatCompletions();
9
- * completion.tool_calls?.forEach(chooseAndHandleTool)
10
- * return completion;
11
- * },
12
- * {
13
- * shouldStop: (completion) => !completion.tool_calls,
14
- * },
15
- * ),
16
- */
17
- export declare const loopUntil: <T>(fn: (count: number) => Promise<T>, options?: {
18
- /** 最大循环次数,默认 5 次 */
19
- maxRetries?: number;
20
- /** 停止循环条件,默认立即停止 */
21
- shouldStop?: (result: T) => boolean;
22
- }) => Promise<T>;
@@ -1 +0,0 @@
1
- export { type SetTtl, withCache } from "./withCache";
@@ -1,42 +0,0 @@
1
- export type SetTtl = (seconds: number) => void;
2
- /**
3
- * 创建一个带缓存的高阶函数
4
- *
5
- * @template Args 被包装函数的参数类型数组
6
- * @template Result 被包装函数的返回类型
7
- *
8
- * @param fn 需要被缓存的函数,参数里附带的 setTtl 方法用于根据具体情况改写过期时间
9
- * @param ttlSeconds 以秒为单位的过期时间,-1 表示永不过期,默认 -1,会被回调函数里的 setTtl() 覆盖
10
- *
11
- * @returns 返回包装后的函数,以及缓存相关的额外方法
12
- *
13
- * @example
14
- * // 异步函数示例
15
- * const fetchData = withCache(async function (url: string) {
16
- * const data = await fetch(url).then((res) => res.json());
17
- * this.setTtl(data.expiresIn); // 根据实际情况调整过期时间
18
- * return data;
19
- * });
20
- *
21
- * await fetchData(urlA);
22
- * await fetchData(urlA); // 使用缓存结果
23
- * await fetchData(urlB);
24
- * await fetchData(urlB); // 使用缓存结果
25
- *
26
- * fetchData.clear(); // 清除缓存
27
- * await fetchData(urlA); // 重新请求
28
- * await fetchData(urlB); // 重新请求
29
- *
30
- * // 缓存过期前
31
- * await sleep();
32
- * fetchData.updateTtl(180); // 更新 ttl 并为所有未过期的缓存续期
33
- * await fetchData(urlA); // 使用缓存结果
34
- * await fetchData(urlB); // 使用缓存结果
35
- */
36
- export declare const withCache: <Args extends any[], Result>(fn: (this: {
37
- setTtl: SetTtl;
38
- }, ...args: Args) => Result, ttlSeconds?: number) => {
39
- (...args: Args): Result;
40
- clear(): void;
41
- updateTtl(seconds: number): void;
42
- };
package/dist/index.d.ts DELETED
@@ -1,9 +0,0 @@
1
- export * from "./dom";
2
- export * from "./function";
3
- export * from "./hoc";
4
- export * from "./is";
5
- export * from "./network";
6
- export * from "./number";
7
- export * from "./object";
8
- export * from "./string";
9
- export * from "./time";
package/dist/index.js DELETED
@@ -1,2 +0,0 @@
1
- // @bun
2
- var m=(...x)=>{console.log(`${new Date().toLocaleTimeString()}`,...x)};var R=async(x,z)=>{let{maxRetries:T=5,shouldStop:E=()=>!0}=z??{};for(let P=0;P<T;P++){let C=await x(P);if(E(C))return C}throw Error(`\u8D85\u8FC7\u4E86\u6700\u5927\u5FAA\u73AF\u6B21\u6570\uFF08${T}\uFF09\u4E14\u672A\u6EE1\u8DB3\u505C\u6B62\u6267\u884C\u6761\u4EF6`)};var q=(x,z=-1)=>{let T=new Map,E=(...P)=>{let C=JSON.stringify(P),D=Date.now(),G=T.get(C);if(G&&D<G.expiresAt)return G.value;let M=z===-1?1/0:D+z*1000,J={setTtl:(H)=>{M=D+H*1000}},Y=x.apply(J,P);if(Y instanceof Promise){let H=Y.then((Q)=>{return T.set(C,{value:Q,expiresAt:M}),Q});return T.set(C,{value:H,expiresAt:M}),H}return T.set(C,{value:Y,expiresAt:M}),Y};return E.clear=()=>T.clear(),E.updateTtl=(P)=>{z=P;let C=Date.now(),D=C+P*1000;for(let[G,M]of T.entries())if(M.expiresAt>C)M.expiresAt=D,T.set(G,M)},E};var K=(x)=>{return!x};var _=(x)=>{return x===null||x===void 0};var $=(x)=>{return x?.constructor===Object};var X=(x)=>{return x===null||x===void 0||typeof x!=="object"&&typeof x!=="function"};var O=(x)=>{return!!x};var d=(x,z)=>{if(Array.isArray(x))return x.map((T)=>d(T,z));if($(x))return Object.keys(x).reduce((E,P)=>{let C=z(P),D=x[P];return E[C]=d(D,z),E},{});return x};var I=(x,z,T)=>{let{filter:E}=T??{};if(Array.isArray(x)){let P=x.map((C,D)=>{if($(C))return I(C,z,T);return z(C,D)});if(E)return P.filter((C,D)=>E(C,D));return P}if($(x))return Object.keys(x).reduce((C,D)=>{let G=x[D],M;if($(G)||Array.isArray(G))M=I(G,z,T);else M=z(G,D);if(!E||E(M,D))C[D]=M;return C},{});return x};var Z=(x,z)=>{let T={...x};for(let E of Object.keys(z)){let P=T[E],C=z[E];if(X(P)&&X(C)){T[E]=C;continue}if(Array.isArray(P)&&Array.isArray(C)){T[E]=P.concat(C);continue}if($(P)&&$(C)){T[E]=Z(P,C);continue}T[E]=C}return T};var c=(x="",z={})=>{let T=async(E,P={})=>{let C=new URL(x?`${x}${E}`:E),{params:D,parser:G,...M}=Z(z,P);if($(D))Object.entries(D).forEach(([H,Q])=>{if(_(Q))return;C.searchParams.append(H,Q.toString())});if($(M.body))M.body=JSON.stringify(M.body),M.headers={...M.headers,"Content-Type":"application/json"};let J=await fetch(C,M);if(!J.ok){if(J.headers.get("Content-Type")?.startsWith("application/json"))throw await J.json();throw Error(J.statusText)}return await(G?.(J)??J.json())};return{get:(E,P)=>T(E,{...P,method:"GET"}),post:(E,P,C)=>T(E,{...C,method:"POST",body:P}),put:(E,P,C)=>T(E,{...C,method:"PUT",body:P}),delete:(E,P)=>T(E,{...P,method:"DELETE"})}};var S=async(x)=>{try{return[null,await x]}catch(z){return[z,void 0]}};var A=async(x)=>{let[z,T]=await S(fetch(x,{method:"HEAD",redirect:"manual"}));if(z)return x;return T.headers.get("location")||x};var W=(x)=>{let z=new Uint8Array(x),T="";for(let E=0;E<z.byteLength;E++)T+=String.fromCharCode(z[E]);return btoa(T)},L=async()=>{try{let z=await Function("modulePath","return import(modulePath)")("sharp");return z.default||z}catch{return null}},U=async(x,z,T,E)=>{let P=Buffer.from(z),C=x(P);if(T==="image/jpeg")C=C.jpeg({quality:Math.round(E*100)});else if(T==="image/png"){let G=Math.round((1-E)*9);C=C.png({compressionLevel:G})}let D=await C.toBuffer();return`data:${T};base64,${D.toString("base64")}`},V=async(x,z={})=>{let{quality:T=0.92,compressor:E,fetcher:P=fetch}=z;if(!x.startsWith("http"))throw Error("\u56FE\u7247\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934");let C=await P(x);if(!C.ok)throw Error(`\u83B7\u53D6\u56FE\u7247\u5931\u8D25: ${C.statusText}`);let D=C.headers.get("Content-Type")||"image/jpeg",G=await C.arrayBuffer();if(D!=="image/jpeg"&&D!=="image/png"){let Y=W(G);return`data:${D};base64,${Y}`}if(E)return await E(G,D,T);if(typeof OffscreenCanvas<"u"){let Y=null;try{let H=new Blob([G],{type:D});Y=await createImageBitmap(H);let Q=new OffscreenCanvas(Y.width,Y.height),o=Q.getContext("2d");if(!o)throw Error("\u65E0\u6CD5\u83B7\u53D6 OffscreenCanvas context");o.drawImage(Y,0,0),Y.close(),Y=null;let f=await(await Q.convertToBlob({type:D,quality:T})).arrayBuffer(),F=W(f);return`data:${D};base64,${F}`}catch{Y?.close();let H=W(G);return`data:${D};base64,${H}`}}let M=await L();if(M)try{return await U(M,G,D,T)}catch{let Y=W(G);return`data:${D};base64,${Y}`}let J=W(G);return`data:${D};base64,${J}`};var N=(x,z)=>{return Math.floor(Math.random()*(z-x+1))+x};var h=(x)=>{return x.replace(/_([a-zA-Z])/g,(z,T)=>T.toUpperCase())},n=(x)=>{return x.replace(/([A-Z])/g,(z,T)=>`_${T.toLowerCase()}`)},w=(x)=>{return x.charAt(0).toUpperCase()+x.slice(1)},g=(x)=>{return x.charAt(0).toLowerCase()+x.slice(1)};var B=(x="",z)=>{if(!x)return"";let{maxLength:T=1/0,disableNewLineReplace:E=!1,disableWhitespaceCollapse:P=!1,omission:C="..."}=z??{},D=x;if(!E)D=D.replace(/\r?\n/g,"\\n");else D=D.replace(/\r?\n/g," ");if(!P)D=D.replace(/\s+/g," ");if(D=D.trim(),T>0&&D.length>T)return D.slice(0,T)+C;return D};var k=(x,z=300)=>{let T=null;return(...E)=>{if(T)clearTimeout(T);T=setTimeout(()=>{x(...E)},z)}};var p=async(x=150)=>{return new Promise((z)=>{setTimeout(z,x)})};var r=(x,z=300)=>{let T=null;return function(...E){if(!T)T=setTimeout(()=>{T=null,x.apply(this,E)},z)}};export{q as withCache,S as to,m as timeLog,r as throttle,h as snakeToCamel,p as sleep,N as randomInt,Z as mergeObjects,I as mapValues,d as mapKeys,R as loopUntil,O as isTruthy,X as isPrimitive,$ as isObject,_ as isNil,K as isFalsy,V as imageUrlToBase64,A as getRealURL,c as fetcher,g as decapitalize,k as debounce,B as compactStr,w as capitalize,n as camelToSnake};
@@ -1,5 +0,0 @@
1
- export { type Falsy, isFalsy } from "./isFalsy";
2
- export { isNil } from "./isNil";
3
- export { isObject } from "./isObject";
4
- export { isPrimitive, type Primitive } from "./isPrimitive";
5
- export { isTruthy } from "./isTruthy";
@@ -1,9 +0,0 @@
1
- export type Falsy = false | 0 | -0 | 0n | "" | null | undefined;
2
- /**
3
- * 检测传入的值是否为**假值**(false、0、''、null、undefined、NaN等)
4
- *
5
- * @example
6
- * isFalsy(""); // true
7
- * isFalsy(1); // false
8
- */
9
- export declare const isFalsy: (value: any) => value is Falsy;
@@ -1,9 +0,0 @@
1
- /**
2
- * 检测传入的值是否为**空值**(null、undefined)
3
- *
4
- * @example
5
- * isNil(null); // true
6
- * isNil(undefined); // true
7
- * isNil(1); // false
8
- */
9
- export declare const isNil: (value: any) => value is null | undefined;
@@ -1,8 +0,0 @@
1
- /**
2
- * 检测传入的值是否为**普通对象**
3
- *
4
- * @example
5
- * const obj = { a: 1 };
6
- * isObject(obj); // true
7
- */
8
- export declare const isObject: (value: any) => value is Record<string, any>;
@@ -1,9 +0,0 @@
1
- export type Primitive = number | string | boolean | symbol | bigint | undefined | null;
2
- /**
3
- * 检测传入的值是否为**原始值**(number、string、boolean、symbol、bigint、undefined、null)
4
- *
5
- * @example
6
- * isPrimitive(1); // true
7
- * isPrimitive([]); // false
8
- */
9
- export declare const isPrimitive: (value: any) => value is Primitive;
@@ -1,8 +0,0 @@
1
- /**
2
- * 检测传入的值是否为**真值**
3
- *
4
- * @example
5
- * isTruthy(1); // true
6
- * isTruthy(""); // false
7
- */
8
- export declare const isTruthy: (value: any) => value is any;
@@ -1,2 +0,0 @@
1
- export type Primitive = number | string | boolean | symbol | bigint | undefined | null;
2
- export type Falsy = false | 0 | -0 | 0n | "" | null | undefined;
@@ -1,18 +0,0 @@
1
- /**
2
- * 简易 LRU 缓存
3
- * @example
4
- * const cache = new LRUCache<string, number>(2);
5
- * cache.set("a", 1);
6
- * cache.set("b", 2);
7
- * cache.set("c", 3); // 缓存已满,a 被淘汰
8
- * cache.get("a"); // undefined
9
- */
10
- declare class LRUCache<K, V> {
11
- private cache;
12
- private maxSize;
13
- constructor(maxSize?: number);
14
- get(key: K): V | undefined;
15
- set(key: K, value: V): void;
16
- has(key: K): boolean;
17
- }
18
- export default LRUCache;