@planet-matrix/mobius-model 0.5.0 → 0.9.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.
Files changed (379) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +123 -36
  3. package/dist/index.js +715 -4
  4. package/dist/index.js.map +981 -13
  5. package/oxlint.config.ts +6 -0
  6. package/package.json +36 -18
  7. package/src/abort/README.md +92 -0
  8. package/src/abort/abort-manager.ts +278 -0
  9. package/src/abort/abort-signal-listener-manager.ts +81 -0
  10. package/src/abort/index.ts +2 -0
  11. package/src/ai/README.md +1 -0
  12. package/src/ai/ai.ts +107 -0
  13. package/src/ai/chat-completion-ai/aihubmix-chat-completion.ts +78 -0
  14. package/src/ai/chat-completion-ai/chat-completion-ai.ts +270 -0
  15. package/src/ai/chat-completion-ai/chat-completion.ts +189 -0
  16. package/src/ai/chat-completion-ai/index.ts +7 -0
  17. package/src/ai/chat-completion-ai/lingyiwanwu-chat-completion.ts +78 -0
  18. package/src/ai/chat-completion-ai/ohmygpt-chat-completion.ts +78 -0
  19. package/src/ai/chat-completion-ai/openai-next-chat-completion.ts +78 -0
  20. package/src/ai/embedding-ai/embedding-ai.ts +63 -0
  21. package/src/ai/embedding-ai/embedding.ts +50 -0
  22. package/src/ai/embedding-ai/index.ts +4 -0
  23. package/src/ai/embedding-ai/openai-next-embedding.ts +23 -0
  24. package/src/ai/index.ts +4 -0
  25. package/src/aio/README.md +100 -0
  26. package/src/aio/content.ts +141 -0
  27. package/src/aio/index.ts +3 -0
  28. package/src/aio/json.ts +127 -0
  29. package/src/aio/prompt.ts +246 -0
  30. package/src/basic/README.md +72 -116
  31. package/src/basic/error.ts +19 -5
  32. package/src/basic/function.ts +83 -64
  33. package/src/basic/index.ts +1 -0
  34. package/src/basic/is.ts +152 -71
  35. package/src/basic/promise.ts +29 -8
  36. package/src/basic/schedule.ts +111 -0
  37. package/src/basic/stream.ts +135 -25
  38. package/src/basic/string.ts +2 -33
  39. package/src/color/README.md +105 -0
  40. package/src/color/index.ts +3 -0
  41. package/src/color/internal.ts +42 -0
  42. package/src/color/rgb/analyze.ts +236 -0
  43. package/src/color/rgb/construct.ts +130 -0
  44. package/src/color/rgb/convert.ts +227 -0
  45. package/src/color/rgb/derive.ts +303 -0
  46. package/src/color/rgb/index.ts +6 -0
  47. package/src/color/rgb/internal.ts +208 -0
  48. package/src/color/rgb/parse.ts +302 -0
  49. package/src/color/rgb/serialize.ts +144 -0
  50. package/src/color/types.ts +57 -0
  51. package/src/color/xyz/analyze.ts +80 -0
  52. package/src/color/xyz/construct.ts +19 -0
  53. package/src/color/xyz/convert.ts +71 -0
  54. package/src/color/xyz/index.ts +3 -0
  55. package/src/color/xyz/internal.ts +23 -0
  56. package/src/credential/README.md +107 -0
  57. package/src/credential/api-key.ts +158 -0
  58. package/src/credential/bearer.ts +73 -0
  59. package/src/credential/index.ts +4 -0
  60. package/src/credential/json-web-token.ts +96 -0
  61. package/src/credential/password.ts +170 -0
  62. package/src/cron/README.md +86 -0
  63. package/src/cron/cron.ts +87 -0
  64. package/src/cron/index.ts +1 -0
  65. package/src/css/README.md +93 -0
  66. package/src/css/class.ts +559 -0
  67. package/src/css/index.ts +1 -0
  68. package/src/drizzle/README.md +1 -0
  69. package/src/drizzle/drizzle.ts +1 -0
  70. package/src/drizzle/helper.ts +47 -0
  71. package/src/drizzle/index.ts +5 -0
  72. package/src/drizzle/infer.ts +52 -0
  73. package/src/drizzle/kysely.ts +8 -0
  74. package/src/drizzle/pagination.ts +200 -0
  75. package/src/email/README.md +1 -0
  76. package/src/email/index.ts +1 -0
  77. package/src/email/resend.ts +25 -0
  78. package/src/encoding/README.md +66 -79
  79. package/src/encoding/base64.ts +13 -4
  80. package/src/environment/README.md +97 -0
  81. package/src/environment/basic.ts +26 -0
  82. package/src/environment/device.ts +311 -0
  83. package/src/environment/feature.ts +285 -0
  84. package/src/environment/geo.ts +337 -0
  85. package/src/environment/index.ts +7 -0
  86. package/src/environment/runtime.ts +400 -0
  87. package/src/environment/snapshot.ts +60 -0
  88. package/src/environment/variable.ts +239 -0
  89. package/src/event/README.md +90 -0
  90. package/src/event/class-event-proxy.ts +229 -0
  91. package/src/event/common.ts +29 -0
  92. package/src/event/event-manager.ts +203 -0
  93. package/src/event/index.ts +4 -0
  94. package/src/event/instance-event-proxy.ts +187 -0
  95. package/src/event/internal.ts +24 -0
  96. package/src/exception/README.md +96 -0
  97. package/src/exception/browser.ts +219 -0
  98. package/src/exception/index.ts +4 -0
  99. package/src/exception/nodejs.ts +169 -0
  100. package/src/exception/normalize.ts +106 -0
  101. package/src/exception/types.ts +99 -0
  102. package/src/form/README.md +25 -0
  103. package/src/form/index.ts +1 -0
  104. package/src/form/inputor-controller/base.ts +874 -0
  105. package/src/form/inputor-controller/boolean.ts +39 -0
  106. package/src/form/inputor-controller/file.ts +39 -0
  107. package/src/form/inputor-controller/form.ts +181 -0
  108. package/src/form/inputor-controller/helper.ts +117 -0
  109. package/src/form/inputor-controller/index.ts +17 -0
  110. package/src/form/inputor-controller/multi-select.ts +99 -0
  111. package/src/form/inputor-controller/number.ts +116 -0
  112. package/src/form/inputor-controller/select.ts +109 -0
  113. package/src/form/inputor-controller/text.ts +82 -0
  114. package/src/http/READMD.md +1 -0
  115. package/src/http/api/api-core.ts +84 -0
  116. package/src/http/api/api-handler.ts +79 -0
  117. package/src/http/api/api-host.ts +47 -0
  118. package/src/http/api/api-result.ts +56 -0
  119. package/src/http/api/api-schema.ts +154 -0
  120. package/src/http/api/api-server.ts +130 -0
  121. package/src/http/api/api-test.ts +142 -0
  122. package/src/http/api/api-type.ts +37 -0
  123. package/src/http/api/api.ts +81 -0
  124. package/src/http/api/index.ts +11 -0
  125. package/src/http/api-adapter/api-core-node-http.ts +260 -0
  126. package/src/http/api-adapter/api-host-node-http.ts +156 -0
  127. package/src/http/api-adapter/api-result-arktype.ts +297 -0
  128. package/src/http/api-adapter/api-result-zod.ts +286 -0
  129. package/src/http/api-adapter/index.ts +5 -0
  130. package/src/http/bin/gen-api-list/gen-api-list.ts +126 -0
  131. package/src/http/bin/gen-api-list/index.ts +1 -0
  132. package/src/http/bin/gen-api-test/gen-api-test.ts +136 -0
  133. package/src/http/bin/gen-api-test/index.ts +1 -0
  134. package/src/http/bin/gen-api-type/calc-code.ts +25 -0
  135. package/src/http/bin/gen-api-type/gen-api-type.ts +127 -0
  136. package/src/http/bin/gen-api-type/index.ts +2 -0
  137. package/src/http/bin/index.ts +2 -0
  138. package/src/http/index.ts +3 -0
  139. package/src/huawei/README.md +1 -0
  140. package/src/huawei/index.ts +2 -0
  141. package/src/huawei/moderation/index.ts +1 -0
  142. package/src/huawei/moderation/moderation.ts +355 -0
  143. package/src/huawei/obs/esdk-obs-nodejs.d.ts +87 -0
  144. package/src/huawei/obs/index.ts +1 -0
  145. package/src/huawei/obs/obs.ts +42 -0
  146. package/src/identifier/README.md +92 -0
  147. package/src/identifier/id.ts +119 -0
  148. package/src/identifier/index.ts +2 -0
  149. package/src/identifier/uuid.ts +187 -0
  150. package/src/index.ts +33 -1
  151. package/src/json/README.md +92 -0
  152. package/src/json/index.ts +1 -0
  153. package/src/json/repair.ts +18 -0
  154. package/src/log/README.md +79 -0
  155. package/src/log/index.ts +5 -0
  156. package/src/log/log-emitter.ts +72 -0
  157. package/src/log/log-record.ts +10 -0
  158. package/src/log/log-scheduler.ts +74 -0
  159. package/src/log/log-type.ts +8 -0
  160. package/src/log/logger.ts +554 -0
  161. package/src/openai/README.md +1 -0
  162. package/src/openai/index.ts +1 -0
  163. package/src/openai/openai.ts +510 -0
  164. package/src/orchestration/README.md +91 -0
  165. package/src/orchestration/coordination/barrier.ts +214 -0
  166. package/src/orchestration/coordination/count-down-latch.ts +215 -0
  167. package/src/orchestration/coordination/errors.ts +98 -0
  168. package/src/orchestration/coordination/index.ts +16 -0
  169. package/src/orchestration/coordination/internal/wait-constraints.ts +95 -0
  170. package/src/orchestration/coordination/internal/wait-queue.ts +109 -0
  171. package/src/orchestration/coordination/keyed-lock.ts +168 -0
  172. package/src/orchestration/coordination/mutex.ts +257 -0
  173. package/src/orchestration/coordination/permit.ts +127 -0
  174. package/src/orchestration/coordination/read-write-lock.ts +444 -0
  175. package/src/orchestration/coordination/semaphore.ts +280 -0
  176. package/src/orchestration/dispatching/dispatcher.ts +83 -0
  177. package/src/orchestration/dispatching/index.ts +2 -0
  178. package/src/orchestration/dispatching/selector/base-selector.ts +39 -0
  179. package/src/orchestration/dispatching/selector/down-count-selector.ts +119 -0
  180. package/src/orchestration/dispatching/selector/index.ts +2 -0
  181. package/src/orchestration/index.ts +3 -0
  182. package/src/orchestration/scheduling/index.ts +2 -0
  183. package/src/orchestration/scheduling/scheduler.ts +103 -0
  184. package/src/orchestration/scheduling/task.ts +32 -0
  185. package/src/random/README.md +56 -86
  186. package/src/random/base.ts +66 -0
  187. package/src/random/index.ts +5 -1
  188. package/src/random/random-boolean.ts +40 -0
  189. package/src/random/random-integer.ts +60 -0
  190. package/src/random/random-number.ts +72 -0
  191. package/src/random/random-string.ts +66 -0
  192. package/src/reactor/README.md +4 -0
  193. package/src/reactor/reactor-core/primitive.ts +9 -9
  194. package/src/reactor/reactor-core/reactive-system.ts +5 -5
  195. package/src/request/README.md +108 -0
  196. package/src/request/fetch/base.ts +108 -0
  197. package/src/request/fetch/browser.ts +285 -0
  198. package/src/request/fetch/general.ts +20 -0
  199. package/src/request/fetch/index.ts +4 -0
  200. package/src/request/fetch/nodejs.ts +285 -0
  201. package/src/request/index.ts +2 -0
  202. package/src/request/request/base.ts +250 -0
  203. package/src/request/request/general.ts +64 -0
  204. package/src/request/request/index.ts +3 -0
  205. package/src/request/request/resource.ts +68 -0
  206. package/src/result/README.md +4 -0
  207. package/src/result/controller.ts +54 -0
  208. package/src/result/either.ts +193 -0
  209. package/src/result/index.ts +2 -0
  210. package/src/route/README.md +105 -0
  211. package/src/route/adapter/browser.ts +122 -0
  212. package/src/route/adapter/driver.ts +56 -0
  213. package/src/route/adapter/index.ts +2 -0
  214. package/src/route/index.ts +3 -0
  215. package/src/route/router/index.ts +2 -0
  216. package/src/route/router/route.ts +630 -0
  217. package/src/route/router/router.ts +1642 -0
  218. package/src/route/uri/hash.ts +308 -0
  219. package/src/route/uri/index.ts +7 -0
  220. package/src/route/uri/pathname.ts +376 -0
  221. package/src/route/uri/search.ts +413 -0
  222. package/src/singleton/README.md +79 -0
  223. package/src/singleton/factory.ts +55 -0
  224. package/src/singleton/index.ts +2 -0
  225. package/src/singleton/manager.ts +204 -0
  226. package/src/socket/README.md +105 -0
  227. package/src/socket/client/index.ts +2 -0
  228. package/src/socket/client/socket-unit.ts +660 -0
  229. package/src/socket/client/socket.ts +203 -0
  230. package/src/socket/common/index.ts +2 -0
  231. package/src/socket/common/socket-unit-common.ts +23 -0
  232. package/src/socket/common/socket-unit-heartbeat.ts +427 -0
  233. package/src/socket/index.ts +3 -0
  234. package/src/socket/server/index.ts +3 -0
  235. package/src/socket/server/server.ts +183 -0
  236. package/src/socket/server/socket-unit.ts +449 -0
  237. package/src/socket/server/socket.ts +264 -0
  238. package/src/storage/README.md +107 -0
  239. package/src/storage/index.ts +1 -0
  240. package/src/storage/table.ts +449 -0
  241. package/src/timer/README.md +86 -0
  242. package/src/timer/expiration/expiration-manager.ts +594 -0
  243. package/src/timer/expiration/index.ts +3 -0
  244. package/src/timer/expiration/min-heap.ts +208 -0
  245. package/src/timer/expiration/remaining-manager.ts +241 -0
  246. package/src/timer/index.ts +1 -0
  247. package/src/tube/README.md +99 -0
  248. package/src/tube/helper.ts +138 -0
  249. package/src/tube/index.ts +2 -0
  250. package/src/tube/tube.ts +880 -0
  251. package/src/type/README.md +54 -307
  252. package/src/type/class.ts +2 -2
  253. package/src/type/index.ts +14 -14
  254. package/src/type/is.ts +265 -2
  255. package/src/type/object.ts +37 -0
  256. package/src/type/string.ts +7 -2
  257. package/src/type/tuple.ts +6 -6
  258. package/src/type/union.ts +16 -0
  259. package/src/web/README.md +77 -0
  260. package/src/web/capture.ts +35 -0
  261. package/src/web/clipboard.ts +97 -0
  262. package/src/web/dom.ts +117 -0
  263. package/src/web/download.ts +16 -0
  264. package/src/web/event.ts +46 -0
  265. package/src/web/index.ts +10 -0
  266. package/src/web/local-storage.ts +113 -0
  267. package/src/web/location.ts +28 -0
  268. package/src/web/permission.ts +172 -0
  269. package/src/web/script-loader.ts +432 -0
  270. package/src/weixin/README.md +1 -0
  271. package/src/weixin/index.ts +2 -0
  272. package/src/weixin/official-account/authorization.ts +159 -0
  273. package/src/weixin/official-account/index.ts +2 -0
  274. package/src/weixin/official-account/js-api.ts +134 -0
  275. package/src/weixin/open/index.ts +1 -0
  276. package/src/weixin/open/oauth2.ts +133 -0
  277. package/tests/unit/abort/abort-manager.spec.ts +225 -0
  278. package/tests/unit/abort/abort-signal-listener-manager.spec.ts +62 -0
  279. package/tests/unit/ai/ai.spec.ts +85 -0
  280. package/tests/unit/aio/content.spec.ts +105 -0
  281. package/tests/unit/aio/json.spec.ts +147 -0
  282. package/tests/unit/aio/prompt.spec.ts +111 -0
  283. package/tests/unit/basic/array.spec.ts +1 -1
  284. package/tests/unit/basic/error.spec.ts +16 -4
  285. package/tests/unit/basic/schedule.spec.ts +74 -0
  286. package/tests/unit/basic/stream.spec.ts +91 -38
  287. package/tests/unit/basic/string.spec.ts +0 -9
  288. package/tests/unit/color/rgb/analyze.spec.ts +110 -0
  289. package/tests/unit/color/rgb/construct.spec.ts +56 -0
  290. package/tests/unit/color/rgb/convert.spec.ts +60 -0
  291. package/tests/unit/color/rgb/derive.spec.ts +103 -0
  292. package/tests/unit/color/rgb/parse.spec.ts +66 -0
  293. package/tests/unit/color/rgb/serialize.spec.ts +46 -0
  294. package/tests/unit/color/xyz/analyze.spec.ts +33 -0
  295. package/tests/unit/color/xyz/construct.spec.ts +10 -0
  296. package/tests/unit/color/xyz/convert.spec.ts +18 -0
  297. package/tests/unit/credential/api-key.spec.ts +37 -0
  298. package/tests/unit/credential/bearer.spec.ts +23 -0
  299. package/tests/unit/credential/json-web-token.spec.ts +23 -0
  300. package/tests/unit/credential/password.spec.ts +41 -0
  301. package/tests/unit/cron/cron.spec.ts +84 -0
  302. package/tests/unit/css/class.spec.ts +157 -0
  303. package/tests/unit/environment/basic.spec.ts +20 -0
  304. package/tests/unit/environment/device.spec.ts +146 -0
  305. package/tests/unit/environment/feature.spec.ts +388 -0
  306. package/tests/unit/environment/geo.spec.ts +111 -0
  307. package/tests/unit/environment/runtime.spec.ts +364 -0
  308. package/tests/unit/environment/snapshot.spec.ts +4 -0
  309. package/tests/unit/environment/variable.spec.ts +190 -0
  310. package/tests/unit/event/class-event-proxy.spec.ts +225 -0
  311. package/tests/unit/event/event-manager.spec.ts +246 -0
  312. package/tests/unit/event/instance-event-proxy.spec.ts +187 -0
  313. package/tests/unit/exception/browser.spec.ts +213 -0
  314. package/tests/unit/exception/nodejs.spec.ts +144 -0
  315. package/tests/unit/exception/normalize.spec.ts +57 -0
  316. package/tests/unit/form/inputor-controller/base.spec.ts +458 -0
  317. package/tests/unit/form/inputor-controller/boolean.spec.ts +30 -0
  318. package/tests/unit/form/inputor-controller/file.spec.ts +27 -0
  319. package/tests/unit/form/inputor-controller/form.spec.ts +120 -0
  320. package/tests/unit/form/inputor-controller/helper.spec.ts +67 -0
  321. package/tests/unit/form/inputor-controller/multi-select.spec.ts +34 -0
  322. package/tests/unit/form/inputor-controller/number.spec.ts +36 -0
  323. package/tests/unit/form/inputor-controller/select.spec.ts +49 -0
  324. package/tests/unit/form/inputor-controller/text.spec.ts +34 -0
  325. package/tests/unit/http/api/api-core-host.spec.ts +207 -0
  326. package/tests/unit/http/api/api-schema.spec.ts +120 -0
  327. package/tests/unit/http/api/api-server.spec.ts +363 -0
  328. package/tests/unit/http/api/api-test.spec.ts +117 -0
  329. package/tests/unit/http/api/api.spec.ts +121 -0
  330. package/tests/unit/http/api-adapter/node-http.spec.ts +191 -0
  331. package/tests/unit/identifier/id.spec.ts +71 -0
  332. package/tests/unit/identifier/uuid.spec.ts +85 -0
  333. package/tests/unit/json/repair.spec.ts +11 -0
  334. package/tests/unit/log/log-emitter.spec.ts +33 -0
  335. package/tests/unit/log/log-scheduler.spec.ts +40 -0
  336. package/tests/unit/log/log-type.spec.ts +7 -0
  337. package/tests/unit/log/logger.spec.ts +237 -0
  338. package/tests/unit/openai/openai.spec.ts +64 -0
  339. package/tests/unit/orchestration/coordination/barrier.spec.ts +96 -0
  340. package/tests/unit/orchestration/coordination/count-down-latch.spec.ts +63 -0
  341. package/tests/unit/orchestration/coordination/errors.spec.ts +29 -0
  342. package/tests/unit/orchestration/coordination/keyed-lock.spec.ts +109 -0
  343. package/tests/unit/orchestration/coordination/mutex.spec.ts +132 -0
  344. package/tests/unit/orchestration/coordination/permit.spec.ts +43 -0
  345. package/tests/unit/orchestration/coordination/read-write-lock.spec.ts +154 -0
  346. package/tests/unit/orchestration/coordination/semaphore.spec.ts +135 -0
  347. package/tests/unit/orchestration/dispatching/dispatcher.spec.ts +41 -0
  348. package/tests/unit/orchestration/dispatching/selector/down-count-selector.spec.ts +81 -0
  349. package/tests/unit/orchestration/scheduling/scheduler.spec.ts +103 -0
  350. package/tests/unit/random/base.spec.ts +58 -0
  351. package/tests/unit/random/random-boolean.spec.ts +25 -0
  352. package/tests/unit/random/random-integer.spec.ts +32 -0
  353. package/tests/unit/random/random-number.spec.ts +33 -0
  354. package/tests/unit/random/random-string.spec.ts +22 -0
  355. package/tests/unit/reactor/alien-signals-effect.spec.ts +11 -10
  356. package/tests/unit/reactor/preact-signal.spec.ts +1 -2
  357. package/tests/unit/request/fetch/browser.spec.ts +222 -0
  358. package/tests/unit/request/fetch/general.spec.ts +43 -0
  359. package/tests/unit/request/fetch/nodejs.spec.ts +225 -0
  360. package/tests/unit/request/request/base.spec.ts +385 -0
  361. package/tests/unit/request/request/general.spec.ts +161 -0
  362. package/tests/unit/route/router/route.spec.ts +431 -0
  363. package/tests/unit/route/router/router.spec.ts +407 -0
  364. package/tests/unit/route/uri/hash.spec.ts +72 -0
  365. package/tests/unit/route/uri/pathname.spec.ts +147 -0
  366. package/tests/unit/route/uri/search.spec.ts +107 -0
  367. package/tests/unit/singleton/singleton.spec.ts +49 -0
  368. package/tests/unit/socket/client.spec.ts +208 -0
  369. package/tests/unit/socket/server.spec.ts +135 -0
  370. package/tests/unit/socket/socket-unit-heartbeat.spec.ts +214 -0
  371. package/tests/unit/storage/table.spec.ts +620 -0
  372. package/tests/unit/timer/expiration/expiration-manager.spec.ts +464 -0
  373. package/tests/unit/timer/expiration/min-heap.spec.ts +71 -0
  374. package/tests/unit/timer/expiration/remaining-manager.spec.ts +234 -0
  375. package/tests/unit/tube/helper.spec.ts +139 -0
  376. package/tests/unit/tube/tube.spec.ts +501 -0
  377. package/.oxlintrc.json +0 -5
  378. package/src/random/uuid.ts +0 -103
  379. package/tests/unit/random/uuid.spec.ts +0 -37
@@ -26,23 +26,28 @@ export const functionIife = <T extends AnyFunction>(
26
26
  return fn(...args)
27
27
  }
28
28
 
29
+ /**
30
+ * 表示只会保留首次执行结果的一次性函数。
31
+ */
29
32
  export type FunctionOnce<T extends AnyFunction> =
30
33
  (...args: Parameters<T>) => ReturnType<T>
31
34
  /**
32
- * Generate a one-off function for a given function.
35
+ * 生成一个只在首次调用时真正执行的函数。
33
36
  *
34
37
  * @example
35
38
  * ```
36
- * const onceFn = functionOnce((x) => x * 2)
37
- * // Will return 10
38
- * const result1 = onceFn(5)
39
- * // Will still return 10, original function will not be called again
40
- * const result2 = onceFn(10)
41
- * // If timesSubscriber is provided, it will be called with the number of calls after the second call
39
+ * const exampleFn1 = functionOnce((x: number) => x * 2)
40
+ * // Expect: 10
41
+ * const example1 = exampleFn1(5)
42
+ * // Expect: 10
43
+ * const example2 = exampleFn1(10)
44
+ *
42
45
  * let callCount = 0
43
- * const onceFnWithSubscriber = functionOnce((x) => x * 2, (times) => { callCount = times })
44
- * onceFnWithSubscriber(5) // callCount is still 0
45
- * onceFnWithSubscriber(10) // callCount becomes 2
46
+ * const exampleFn2 = functionOnce((x: number) => x * 2, (times) => { callCount = times })
47
+ * exampleFn2(5)
48
+ * exampleFn2(10)
49
+ * // Expect: 2
50
+ * const example3 = callCount
46
51
  * ```
47
52
  */
48
53
  export const functionOnce = <T extends AnyFunction>(
@@ -67,27 +72,30 @@ export const functionOnce = <T extends AnyFunction>(
67
72
  }
68
73
  }
69
74
 
75
+ /**
76
+ * 表示简单防抖后的函数类型。
77
+ */
70
78
  export type FunctionDebouncedSimple<T extends AnyFunction> =
71
79
  (...args: Parameters<T>) => void
80
+
72
81
  /**
73
- * Generate a simple debounced function that delays invoking
74
- * the original function until after a specified wait time
75
- * has elapsed since the last time the debounced function was called.
82
+ * 生成一个简单防抖函数,在最后一次调用后的指定时间再触发原函数。
76
83
  *
77
84
  * @example
78
85
  * ```
79
- * const debouncedFn = functionDebounceSimple((x) => console.log(x), 100)
80
- * // Will log 5 after 100ms
81
- * debouncedFn(5)
82
- * // Will not log anything, will reset the timer
83
- * debouncedFn(10)
86
+ * const records: number[] = []
87
+ * const exampleFn1 = functionDebounceSimple((x: number) => { records.push(x) }, 10)
88
+ * exampleFn1(5)
89
+ * exampleFn1(10)
90
+ * // Expect: records.length === 0
91
+ * const example1 = records.length === 0
84
92
  * ```
85
93
  */
86
94
  export const functionDebounceSimple = <T extends AnyFunction>(
87
95
  fn: T,
88
96
  ms: number
89
97
  ): FunctionDebouncedSimple<T> => {
90
- let timer: NodeJS.Timeout
98
+ let timer: ReturnType<typeof setTimeout>
91
99
  return (...args) => {
92
100
  clearTimeout(timer)
93
101
  timer = setTimeout(() => {
@@ -96,29 +104,30 @@ export const functionDebounceSimple = <T extends AnyFunction>(
96
104
  }
97
105
  }
98
106
 
107
+ /**
108
+ * 表示返回 `Promise` 的防抖函数类型。
109
+ */
99
110
  export type FunctionDebounced<T extends AnyFunction>
100
111
  = (...args: Parameters<T>) => Promise<ReturnType<T>>
101
112
  /**
102
- * Generate a debounced function that returns a promise resolving
103
- * to the result of the original function. If the debounced function is called
104
- * multiple times within the debounce period, it will only execute the original
105
- * function once, and all calls will receive the same result.
113
+ * 生成一个返回 `Promise` 的防抖函数,并在防抖窗口内合并并发调用。
106
114
  *
107
115
  * @example
108
116
  * ```
109
- * const debouncedFn = debounce(async (x) => x * 2, 100)
110
- * // Will execute the original function after 100ms
111
- * const result1 = debouncedFn(5)
112
- * // Will not execute the original function, will receive the same result as result1
113
- * const result2 = debouncedFn(10)
114
- * // After 100ms, both result1 and result2 will resolve to 10
117
+ * const exampleFn1 = debounce(async (x: number) => x * 2, 10)
118
+ * const example1 = exampleFn1(5)
119
+ * const example2 = exampleFn1(10)
120
+ * // Expect: example1 instanceof Promise
121
+ * const example3 = example1 instanceof Promise
122
+ * // Expect: example2 instanceof Promise
123
+ * const example4 = example2 instanceof Promise
115
124
  * ```
116
125
  */
117
126
  export const debounce = <T extends AnyFunction>(
118
127
  fn: T,
119
128
  ms: number
120
129
  ): FunctionDebounced<T> => {
121
- let timer: NodeJS.Timeout
130
+ let timer: ReturnType<typeof setTimeout>
122
131
  let waiting: AnyFunction[] = []
123
132
  return async (...args) => {
124
133
  clearTimeout(timer)
@@ -139,25 +148,23 @@ export const debounce = <T extends AnyFunction>(
139
148
  }
140
149
 
141
150
  const THROTTLE_TYPE_ERROR = new TypeError("Throttle: fn must be a SyncFunction or AsyncFunction")
151
+ /**
152
+ * 表示基于时间窗口的简单节流函数类型。
153
+ */
142
154
  export type FunctionThrottleTimeSimple<T extends AnyFunction> =
143
155
  (...args: Parameters<T>) => void
144
156
  /**
145
- * Generate a simple throttled function that only invokes the original function at most
146
- * once per every specified milliseconds. The throttled function will execute the original
147
- * function immediately on the first call, and then ignore subsequent calls until the
148
- * specified time has elapsed.
157
+ * 生成一个简单时间节流函数,在指定时间窗口内最多执行一次原函数。
149
158
  *
150
- * If `strict` is set to true, the throttled function will ensure that the window of time
151
- * during which the original function can be invoked is greater than the sum of the
152
- * specified milliseconds and the execution time of the original function.
159
+ * `strict` `true` 时,节流窗口会同时考虑等待时长与目标函数执行时长。
153
160
  *
154
161
  * @example
155
162
  * ```
156
163
  * let called = 0
157
- * const throttled = functionThrottleTimeSimple(() => { called += 1 }, 100)
158
- * throttled()
159
- * throttled()
160
- * // Expect: called === 1
164
+ * const exampleFn1 = functionThrottleTimeSimple(() => { called += 1 }, 100)
165
+ * exampleFn1()
166
+ * exampleFn1()
167
+ * // Expect: 1
161
168
  * const example1 = called
162
169
  * ```
163
170
  */
@@ -212,19 +219,21 @@ export const functionThrottleTimeSimple = <T extends AnyFunction>(
212
219
  }
213
220
  }
214
221
 
222
+ /**
223
+ * 表示执行期间丢弃重复调用的简单节流函数类型。
224
+ */
215
225
  export type FunctionThrottleSimple<T extends AnyFunction> =
216
226
  (...args: Parameters<T>) => void
217
227
  /**
218
- * Generate a throttled function that only invokes the original function
219
- * when it is not currently executing.
228
+ * 生成一个在执行期间忽略重复调用的节流函数。
220
229
  *
221
230
  * @example
222
231
  * ```
223
232
  * let called = 0
224
- * const throttled = functionThrottleSimple(() => { called += 1 })
225
- * throttled()
226
- * throttled()
227
- * // Expect: called === 1
233
+ * const exampleFn1 = functionThrottleSimple(() => { called += 1 })
234
+ * exampleFn1()
235
+ * exampleFn1()
236
+ * // Expect: 1
228
237
  * const example1 = called
229
238
  * ```
230
239
  */
@@ -256,23 +265,25 @@ export const functionThrottleSimple = <T extends AnyFunction>(
256
265
  }
257
266
  }
258
267
 
268
+ /**
269
+ * 表示返回 `Promise` 的时间节流函数类型。
270
+ */
259
271
  export type FunctionThrottleTime<T extends AnyFunction> =
260
272
  (...args: Parameters<T>) => Promise<ReturnType<T>>
261
273
  /**
262
- * Generate a throttled function that returns a promise resolving to the result
263
- * of the original function. The throttled function will ensure that the original
264
- * function is invoked at most once per every specified milliseconds.
274
+ * 生成一个返回 `Promise` 的时间节流函数。
265
275
  *
266
- * If `strict` is set to true, the window of time during which the original function
267
- * can be invoked will be greater than the sum of the specified milliseconds and
268
- * the execution time of the original function.
276
+ * `strict` `true` 时,节流窗口会同时考虑等待时长与目标函数执行时长。
269
277
  *
270
278
  * @example
271
279
  * ```
272
- * const throttled = throttleTime(async (value: number) => value * 2, 100)
273
- * const result1 = throttled(2)
274
- * const result2 = throttled(3)
275
- * // Expect: result1 and result2 resolve to 4
280
+ * const exampleFn1 = throttleTime(async (value: number) => value * 2, 100)
281
+ * const example1 = exampleFn1(2)
282
+ * const example2 = exampleFn1(3)
283
+ * // Expect: example1 instanceof Promise
284
+ * const example3 = example1 instanceof Promise
285
+ * // Expect: example2 instanceof Promise
286
+ * const example4 = example2 instanceof Promise
276
287
  * ```
277
288
  */
278
289
  export const throttleTime = <T extends AnyFunction>(
@@ -323,18 +334,23 @@ export const throttleTime = <T extends AnyFunction>(
323
334
  }
324
335
  }
325
336
 
337
+ /**
338
+ * 表示合并并发调用的节流函数类型。
339
+ */
326
340
  export type FunctionThrottle<T extends AnyFunction> =
327
341
  (...args: Parameters<T>) => Promise<ReturnType<T>>
328
342
  /**
329
- * Generate a throttled function that returns a promise resolving to the result
330
- * of the original function and coalesces concurrent calls.
343
+ * 生成一个返回 `Promise` 的节流函数,并合并并发调用。
331
344
  *
332
345
  * @example
333
346
  * ```
334
- * const throttled = functionThrottle(async () => "ok")
335
- * const result1 = throttled()
336
- * const result2 = throttled()
337
- * // Expect: result1 and result2 resolve to "ok"
347
+ * const exampleFn1 = functionThrottle(async () => "ok")
348
+ * const example1 = exampleFn1()
349
+ * const example2 = exampleFn1()
350
+ * // Expect: example1 instanceof Promise
351
+ * const example3 = example1 instanceof Promise
352
+ * // Expect: example2 instanceof Promise
353
+ * const example4 = example2 instanceof Promise
338
354
  * ```
339
355
  */
340
356
  export const functionThrottle = <T extends AnyFunction>(
@@ -409,6 +425,9 @@ export const functionPipe = <Fns extends AnyFunction[]>(
409
425
  return functionCompose(...fns.toReversed()) as FunctionPipeAll<Fns>
410
426
  }
411
427
 
428
+ /**
429
+ * 表示带参数缓存能力的记忆化函数类型。
430
+ */
412
431
  export type FunctionMemorized<T extends AnyFunction> =
413
432
  (...args: Parameters<T>) => ReturnType<T>
414
433
  // oxlint-disable-next-line no-explicit-any
@@ -434,7 +453,7 @@ const defaultMemorizeHasher = (...args: any[]): string => JSON.stringify(args)
434
453
  */
435
454
  export const functionMemorize = <T extends AnyFunction>(
436
455
  fn: T,
437
- hashFunction?: (...args: Parameters<T>) => unknown
456
+ hashFunction?: (...args: Parameters<T>) => unknown | undefined
438
457
  ): FunctionMemorized<T> => {
439
458
  const cache = new Map()
440
459
  const hasher = hashFunction ?? defaultMemorizeHasher
@@ -13,5 +13,6 @@ export * from "./error.ts"
13
13
  export * from "./regexp.ts"
14
14
  export * from "./promise.ts"
15
15
  export * from "./stream.ts"
16
+ export * from "./schedule.ts"
16
17
 
17
18
  export * from "./enhance.ts"