@stackframe/stack-shared 2.8.8 → 2.8.10

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 (476) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/config/format.d.cts +39 -0
  3. package/dist/config/format.d.ts +14 -13
  4. package/dist/config/format.js +147 -206
  5. package/dist/config/format.js.map +1 -0
  6. package/dist/config/schema.d.cts +724 -0
  7. package/dist/config/schema.d.ts +51 -48
  8. package/dist/config/schema.js +230 -172
  9. package/dist/config/schema.js.map +1 -0
  10. package/dist/crud.d.cts +102 -0
  11. package/dist/crud.d.ts +15 -13
  12. package/dist/crud.js +83 -128
  13. package/dist/crud.js.map +1 -0
  14. package/dist/esm/config/format.js +135 -0
  15. package/dist/esm/config/format.js.map +1 -0
  16. package/dist/esm/config/schema.js +199 -0
  17. package/dist/esm/config/schema.js.map +1 -0
  18. package/dist/esm/crud.js +60 -0
  19. package/dist/esm/crud.js.map +1 -0
  20. package/dist/esm/global.d.js +1 -0
  21. package/dist/esm/global.d.js.map +1 -0
  22. package/dist/esm/helpers/password.js +17 -0
  23. package/dist/esm/helpers/password.js.map +1 -0
  24. package/dist/esm/helpers/production-mode.js +50 -0
  25. package/dist/esm/helpers/production-mode.js.map +1 -0
  26. package/dist/esm/hooks/use-async-callback.js +38 -0
  27. package/dist/esm/hooks/use-async-callback.js.map +1 -0
  28. package/dist/esm/hooks/use-async-external-store.js +23 -0
  29. package/dist/esm/hooks/use-async-external-store.js.map +1 -0
  30. package/dist/esm/hooks/use-hash.js +17 -0
  31. package/dist/esm/hooks/use-hash.js.map +1 -0
  32. package/dist/esm/hooks/use-strict-memo.js +61 -0
  33. package/dist/esm/hooks/use-strict-memo.js.map +1 -0
  34. package/dist/esm/index.js +22 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/esm/interface/adminInterface.js +244 -0
  37. package/dist/esm/interface/adminInterface.js.map +1 -0
  38. package/dist/esm/interface/clientInterface.js +2041 -0
  39. package/dist/esm/interface/clientInterface.js.map +1 -0
  40. package/dist/esm/interface/crud/contact-channels.js +77 -0
  41. package/dist/esm/interface/crud/contact-channels.js.map +1 -0
  42. package/dist/esm/interface/crud/current-user.js +65 -0
  43. package/dist/esm/interface/crud/current-user.js.map +1 -0
  44. package/dist/esm/interface/crud/email-templates.js +52 -0
  45. package/dist/esm/interface/crud/email-templates.js.map +1 -0
  46. package/dist/esm/interface/crud/emails.js +20 -0
  47. package/dist/esm/interface/crud/emails.js.map +1 -0
  48. package/dist/esm/interface/crud/internal-api-keys.js +69 -0
  49. package/dist/esm/interface/crud/internal-api-keys.js.map +1 -0
  50. package/dist/esm/interface/crud/oauth.js +24 -0
  51. package/dist/esm/interface/crud/oauth.js.map +1 -0
  52. package/dist/esm/interface/crud/project-api-keys.js +93 -0
  53. package/dist/esm/interface/crud/project-api-keys.js.map +1 -0
  54. package/dist/esm/interface/crud/project-permissions.js +113 -0
  55. package/dist/esm/interface/crud/project-permissions.js.map +1 -0
  56. package/dist/esm/interface/crud/projects.js +188 -0
  57. package/dist/esm/interface/crud/projects.js.map +1 -0
  58. package/dist/esm/interface/crud/sessions.js +62 -0
  59. package/dist/esm/interface/crud/sessions.js.map +1 -0
  60. package/dist/esm/interface/crud/svix-token.js +22 -0
  61. package/dist/esm/interface/crud/svix-token.js.map +1 -0
  62. package/dist/esm/interface/crud/team-invitation-details.js +23 -0
  63. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -0
  64. package/dist/esm/interface/crud/team-invitation.js +36 -0
  65. package/dist/esm/interface/crud/team-invitation.js.map +1 -0
  66. package/dist/esm/interface/crud/team-member-profiles.js +62 -0
  67. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -0
  68. package/dist/esm/interface/crud/team-memberships.js +60 -0
  69. package/dist/esm/interface/crud/team-memberships.js.map +1 -0
  70. package/dist/esm/interface/crud/team-permissions.js +114 -0
  71. package/dist/esm/interface/crud/team-permissions.js.map +1 -0
  72. package/dist/esm/interface/crud/teams.js +143 -0
  73. package/dist/esm/interface/crud/teams.js.map +1 -0
  74. package/dist/esm/interface/crud/users.js +139 -0
  75. package/dist/esm/interface/crud/users.js.map +1 -0
  76. package/dist/esm/interface/serverInterface.js +485 -0
  77. package/dist/esm/interface/serverInterface.js.map +1 -0
  78. package/dist/esm/interface/webhooks.js +21 -0
  79. package/dist/esm/interface/webhooks.js.map +1 -0
  80. package/dist/esm/known-errors.js +1223 -0
  81. package/dist/esm/known-errors.js.map +1 -0
  82. package/dist/esm/schema-fields.js +484 -0
  83. package/dist/esm/schema-fields.js.map +1 -0
  84. package/dist/esm/sessions.js +168 -0
  85. package/dist/esm/sessions.js.map +1 -0
  86. package/dist/esm/utils/api-keys.js +79 -0
  87. package/dist/esm/utils/api-keys.js.map +1 -0
  88. package/dist/esm/utils/arrays.js +78 -0
  89. package/dist/esm/utils/arrays.js.map +1 -0
  90. package/dist/esm/utils/base64.js +18 -0
  91. package/dist/esm/utils/base64.js.map +1 -0
  92. package/dist/esm/utils/booleans.js +12 -0
  93. package/dist/esm/utils/booleans.js.map +1 -0
  94. package/dist/esm/utils/browser-compat.js +21 -0
  95. package/dist/esm/utils/browser-compat.js.map +1 -0
  96. package/dist/esm/utils/bytes.js +160 -0
  97. package/dist/esm/utils/bytes.js.map +1 -0
  98. package/dist/esm/utils/caches.js +167 -0
  99. package/dist/esm/utils/caches.js.map +1 -0
  100. package/dist/esm/utils/compile-time.js +11 -0
  101. package/dist/esm/utils/compile-time.js.map +1 -0
  102. package/dist/esm/utils/crypto.js +25 -0
  103. package/dist/esm/utils/crypto.js.map +1 -0
  104. package/dist/esm/utils/dates.js +64 -0
  105. package/dist/esm/utils/dates.js.map +1 -0
  106. package/dist/esm/utils/dom.js +11 -0
  107. package/dist/esm/utils/dom.js.map +1 -0
  108. package/dist/esm/utils/env.js +58 -0
  109. package/dist/esm/utils/env.js.map +1 -0
  110. package/dist/esm/utils/errors.js +174 -0
  111. package/dist/esm/utils/errors.js.map +1 -0
  112. package/dist/esm/utils/fs.js +37 -0
  113. package/dist/esm/utils/fs.js.map +1 -0
  114. package/dist/esm/utils/functions.js +12 -0
  115. package/dist/esm/utils/functions.js.map +1 -0
  116. package/dist/esm/utils/geo.js +15 -0
  117. package/dist/esm/utils/geo.js.map +1 -0
  118. package/dist/esm/utils/globals.js +18 -0
  119. package/dist/esm/utils/globals.js.map +1 -0
  120. package/dist/esm/utils/hashes.js +55 -0
  121. package/dist/esm/utils/hashes.js.map +1 -0
  122. package/dist/esm/utils/html.js +13 -0
  123. package/dist/esm/utils/html.js.map +1 -0
  124. package/dist/esm/utils/http.js +60 -0
  125. package/dist/esm/utils/http.js.map +1 -0
  126. package/dist/esm/utils/ips.js +15 -0
  127. package/dist/esm/utils/ips.js.map +1 -0
  128. package/dist/esm/utils/json.js +31 -0
  129. package/dist/esm/utils/json.js.map +1 -0
  130. package/dist/esm/utils/jwt.js +87 -0
  131. package/dist/esm/utils/jwt.js.map +1 -0
  132. package/dist/esm/utils/locks.js +57 -0
  133. package/dist/esm/utils/locks.js.map +1 -0
  134. package/dist/esm/utils/maps.js +181 -0
  135. package/dist/esm/utils/maps.js.map +1 -0
  136. package/dist/esm/utils/math.js +8 -0
  137. package/dist/esm/utils/math.js.map +1 -0
  138. package/dist/esm/utils/node-http.js +42 -0
  139. package/dist/esm/utils/node-http.js.map +1 -0
  140. package/dist/esm/utils/numbers.js +32 -0
  141. package/dist/esm/utils/numbers.js.map +1 -0
  142. package/dist/esm/utils/oauth.js +10 -0
  143. package/dist/esm/utils/oauth.js.map +1 -0
  144. package/dist/esm/utils/objects.js +153 -0
  145. package/dist/esm/utils/objects.js.map +1 -0
  146. package/dist/esm/utils/passkey.js +1 -0
  147. package/dist/esm/utils/passkey.js.map +1 -0
  148. package/dist/esm/utils/promises.js +233 -0
  149. package/dist/esm/utils/promises.js.map +1 -0
  150. package/dist/esm/utils/proxies.js +128 -0
  151. package/dist/esm/utils/proxies.js.map +1 -0
  152. package/dist/esm/utils/react.js +78 -0
  153. package/dist/esm/utils/react.js.map +1 -0
  154. package/dist/esm/utils/results.js +141 -0
  155. package/dist/esm/utils/results.js.map +1 -0
  156. package/dist/esm/utils/sentry.js +20 -0
  157. package/dist/esm/utils/sentry.js.map +1 -0
  158. package/dist/esm/utils/stores.js +195 -0
  159. package/dist/esm/utils/stores.js.map +1 -0
  160. package/dist/esm/utils/strings.js +294 -0
  161. package/dist/esm/utils/strings.js.map +1 -0
  162. package/dist/esm/utils/strings.nicify.test.js +222 -0
  163. package/dist/esm/utils/strings.nicify.test.js.map +1 -0
  164. package/dist/esm/utils/types.js +1 -0
  165. package/dist/esm/utils/types.js.map +1 -0
  166. package/dist/esm/utils/unicode.js +11 -0
  167. package/dist/esm/utils/unicode.js.map +1 -0
  168. package/dist/esm/utils/urls.js +53 -0
  169. package/dist/esm/utils/urls.js.map +1 -0
  170. package/dist/esm/utils/uuids.js +16 -0
  171. package/dist/esm/utils/uuids.js.map +1 -0
  172. package/dist/global.d.d.cts +1 -0
  173. package/dist/global.d.d.ts +1 -0
  174. package/dist/global.d.js +2 -0
  175. package/dist/global.d.js.map +1 -0
  176. package/dist/helpers/password.d.cts +11 -0
  177. package/dist/helpers/password.d.ts +11 -2
  178. package/dist/helpers/password.js +41 -11
  179. package/dist/helpers/password.js.map +1 -0
  180. package/dist/helpers/production-mode.d.cts +12 -0
  181. package/dist/helpers/production-mode.d.ts +9 -3
  182. package/dist/helpers/production-mode.js +72 -45
  183. package/dist/helpers/production-mode.js.map +1 -0
  184. package/dist/hooks/use-async-callback.d.cts +6 -0
  185. package/dist/hooks/use-async-callback.d.ts +6 -3
  186. package/dist/hooks/use-async-callback.js +72 -30
  187. package/dist/hooks/use-async-callback.js.map +1 -0
  188. package/dist/hooks/use-async-external-store.d.cts +7 -0
  189. package/dist/hooks/use-async-external-store.d.ts +5 -2
  190. package/dist/hooks/use-async-external-store.js +47 -19
  191. package/dist/hooks/use-async-external-store.js.map +1 -0
  192. package/dist/hooks/use-hash.d.cts +3 -0
  193. package/dist/hooks/use-hash.d.ts +3 -1
  194. package/dist/hooks/use-hash.js +41 -8
  195. package/dist/hooks/use-hash.js.map +1 -0
  196. package/dist/hooks/use-strict-memo.d.cts +8 -0
  197. package/dist/hooks/use-strict-memo.d.ts +3 -1
  198. package/dist/hooks/use-strict-memo.js +78 -131
  199. package/dist/hooks/use-strict-memo.js.map +1 -0
  200. package/dist/index.d.cts +30 -0
  201. package/dist/index.d.ts +30 -4
  202. package/dist/index.js +42 -4
  203. package/dist/index.js.map +1 -0
  204. package/dist/interface/adminInterface.d.cts +94 -0
  205. package/dist/interface/adminInterface.d.ts +38 -15
  206. package/dist/interface/adminInterface.js +269 -174
  207. package/dist/interface/adminInterface.js.map +1 -0
  208. package/dist/interface/clientInterface.d.cts +260 -0
  209. package/dist/interface/clientInterface.d.ts +25 -18
  210. package/dist/interface/clientInterface.js +2054 -995
  211. package/dist/interface/clientInterface.js.map +1 -0
  212. package/dist/interface/crud/contact-channels.d.cts +180 -0
  213. package/dist/interface/crud/contact-channels.d.ts +30 -25
  214. package/dist/interface/crud/contact-channels.js +101 -59
  215. package/dist/interface/crud/contact-channels.js.map +1 -0
  216. package/dist/interface/crud/current-user.d.cts +205 -0
  217. package/dist/interface/crud/current-user.d.ts +17 -12
  218. package/dist/interface/crud/current-user.js +86 -56
  219. package/dist/interface/crud/current-user.js.map +1 -0
  220. package/dist/interface/crud/email-templates.d.cts +84 -0
  221. package/dist/interface/crud/email-templates.d.ts +24 -19
  222. package/dist/interface/crud/email-templates.js +77 -37
  223. package/dist/interface/crud/email-templates.js.map +1 -0
  224. package/dist/interface/crud/emails.d.cts +69 -0
  225. package/dist/interface/crud/emails.d.ts +12 -7
  226. package/dist/interface/crud/emails.js +54 -12
  227. package/dist/interface/crud/emails.js.map +1 -0
  228. package/dist/interface/crud/internal-api-keys.d.cts +139 -0
  229. package/dist/interface/crud/internal-api-keys.d.ts +22 -17
  230. package/dist/interface/crud/internal-api-keys.js +92 -54
  231. package/dist/interface/crud/internal-api-keys.js.map +1 -0
  232. package/dist/interface/crud/oauth.d.cts +34 -0
  233. package/dist/interface/crud/oauth.d.ts +16 -11
  234. package/dist/interface/crud/oauth.js +48 -14
  235. package/dist/interface/crud/oauth.js.map +1 -0
  236. package/dist/interface/crud/project-api-keys.d.cts +196 -0
  237. package/dist/interface/crud/project-api-keys.d.ts +18 -10
  238. package/dist/interface/crud/project-api-keys.js +121 -74
  239. package/dist/interface/crud/project-api-keys.js.map +1 -0
  240. package/dist/interface/crud/project-permissions.d.cts +160 -0
  241. package/dist/interface/crud/project-permissions.d.ts +38 -33
  242. package/dist/interface/crud/project-permissions.js +148 -90
  243. package/dist/interface/crud/project-permissions.js.map +1 -0
  244. package/dist/interface/crud/projects.d.cts +640 -0
  245. package/dist/interface/crud/projects.d.ts +36 -31
  246. package/dist/interface/crud/projects.js +218 -156
  247. package/dist/interface/crud/projects.js.map +1 -0
  248. package/dist/interface/crud/sessions.d.cts +149 -0
  249. package/dist/interface/crud/sessions.d.ts +21 -16
  250. package/dist/interface/crud/sessions.js +86 -50
  251. package/dist/interface/crud/sessions.js.map +1 -0
  252. package/dist/interface/crud/svix-token.d.cts +26 -0
  253. package/dist/interface/crud/svix-token.d.ts +14 -9
  254. package/dist/interface/crud/svix-token.js +46 -12
  255. package/dist/interface/crud/svix-token.js.map +1 -0
  256. package/dist/interface/crud/team-invitation-details.d.cts +30 -0
  257. package/dist/interface/crud/team-invitation-details.d.ts +12 -7
  258. package/dist/interface/crud/team-invitation-details.js +57 -15
  259. package/dist/interface/crud/team-invitation-details.js.map +1 -0
  260. package/dist/interface/crud/team-invitation.d.cts +49 -0
  261. package/dist/interface/crud/team-invitation.d.ts +13 -8
  262. package/dist/interface/crud/team-invitation.js +69 -27
  263. package/dist/interface/crud/team-invitation.js.map +1 -0
  264. package/dist/interface/crud/team-member-profiles.d.cts +229 -0
  265. package/dist/interface/crud/team-member-profiles.d.ts +20 -15
  266. package/dist/interface/crud/team-member-profiles.js +95 -49
  267. package/dist/interface/crud/team-member-profiles.js.map +1 -0
  268. package/dist/interface/crud/team-memberships.d.cts +74 -0
  269. package/dist/interface/crud/team-memberships.d.ts +22 -17
  270. package/dist/interface/crud/team-memberships.js +85 -45
  271. package/dist/interface/crud/team-memberships.js.map +1 -0
  272. package/dist/interface/crud/team-permissions.d.cts +168 -0
  273. package/dist/interface/crud/team-permissions.d.ts +38 -33
  274. package/dist/interface/crud/team-permissions.js +149 -91
  275. package/dist/interface/crud/team-permissions.js.map +1 -0
  276. package/dist/interface/crud/teams.d.cts +298 -0
  277. package/dist/interface/crud/teams.d.ts +45 -40
  278. package/dist/interface/crud/teams.js +177 -119
  279. package/dist/interface/crud/teams.js.map +1 -0
  280. package/dist/interface/crud/users.d.cts +469 -0
  281. package/dist/interface/crud/users.d.ts +31 -26
  282. package/dist/interface/crud/users.js +172 -118
  283. package/dist/interface/crud/users.js.map +1 -0
  284. package/dist/interface/serverInterface.d.cts +128 -0
  285. package/dist/interface/serverInterface.d.ts +29 -17
  286. package/dist/interface/serverInterface.js +506 -339
  287. package/dist/interface/serverInterface.js.map +1 -0
  288. package/dist/interface/webhooks.d.cts +292 -0
  289. package/dist/interface/webhooks.d.ts +6 -3
  290. package/dist/interface/webhooks.js +45 -15
  291. package/dist/interface/webhooks.js.map +1 -0
  292. package/dist/known-errors.d.cts +444 -0
  293. package/dist/known-errors.d.ts +12 -9
  294. package/dist/known-errors.js +1088 -561
  295. package/dist/known-errors.js.map +1 -0
  296. package/dist/schema-fields.d.cts +163 -0
  297. package/dist/schema-fields.d.ts +116 -114
  298. package/dist/schema-fields.js +593 -427
  299. package/dist/schema-fields.js.map +1 -0
  300. package/dist/sessions.d.cts +109 -0
  301. package/dist/sessions.d.ts +6 -3
  302. package/dist/sessions.js +201 -172
  303. package/dist/sessions.js.map +1 -0
  304. package/dist/utils/api-keys.d.cts +24 -0
  305. package/dist/utils/api-keys.d.ts +5 -4
  306. package/dist/utils/api-keys.js +106 -66
  307. package/dist/utils/api-keys.js.map +1 -0
  308. package/dist/utils/arrays.d.cts +18 -0
  309. package/dist/utils/arrays.d.ts +15 -13
  310. package/dist/utils/arrays.js +101 -168
  311. package/dist/utils/arrays.js.map +1 -0
  312. package/dist/utils/base64.d.cts +4 -0
  313. package/dist/utils/base64.d.ts +4 -2
  314. package/dist/utils/base64.js +41 -20
  315. package/dist/utils/base64.js.map +1 -0
  316. package/dist/utils/booleans.d.cts +6 -0
  317. package/dist/utils/booleans.d.ts +6 -4
  318. package/dist/utils/booleans.js +35 -27
  319. package/dist/utils/booleans.js.map +1 -0
  320. package/dist/utils/browser-compat.d.cts +8 -0
  321. package/dist/utils/browser-compat.d.ts +3 -1
  322. package/dist/utils/browser-compat.js +45 -16
  323. package/dist/utils/browser-compat.js.map +1 -0
  324. package/dist/utils/bytes.d.cts +15 -0
  325. package/dist/utils/bytes.d.ts +15 -13
  326. package/dist/utils/bytes.js +182 -270
  327. package/dist/utils/bytes.js.map +1 -0
  328. package/dist/utils/caches.d.cts +98 -0
  329. package/dist/utils/caches.d.ts +17 -14
  330. package/dist/utils/caches.js +188 -193
  331. package/dist/utils/caches.js.map +1 -0
  332. package/dist/utils/compile-time.d.cts +8 -0
  333. package/dist/utils/compile-time.d.ts +3 -1
  334. package/dist/utils/compile-time.js +35 -10
  335. package/dist/utils/compile-time.js.map +1 -0
  336. package/dist/utils/crypto.d.cts +8 -0
  337. package/dist/utils/crypto.d.ts +4 -2
  338. package/dist/utils/crypto.js +49 -21
  339. package/dist/utils/crypto.js.map +1 -0
  340. package/dist/utils/dates.d.cts +15 -0
  341. package/dist/utils/dates.d.ts +6 -4
  342. package/dist/utils/dates.js +83 -105
  343. package/dist/utils/dates.js.map +1 -0
  344. package/dist/utils/dom.d.cts +3 -0
  345. package/dist/utils/dom.d.ts +3 -1
  346. package/dist/utils/dom.js +35 -7
  347. package/dist/utils/dom.js.map +1 -0
  348. package/dist/utils/env.d.cts +9 -0
  349. package/dist/utils/env.d.ts +6 -4
  350. package/dist/utils/env.js +70 -43
  351. package/dist/utils/env.js.map +1 -0
  352. package/dist/utils/errors.d.cts +223 -0
  353. package/dist/utils/errors.d.ts +14 -11
  354. package/dist/utils/errors.js +148 -126
  355. package/dist/utils/errors.js.map +1 -0
  356. package/dist/utils/fs.d.cts +7 -0
  357. package/dist/utils/fs.d.ts +5 -3
  358. package/dist/utils/fs.js +70 -27
  359. package/dist/utils/fs.js.map +1 -0
  360. package/dist/utils/functions.d.cts +4 -0
  361. package/dist/utils/functions.d.ts +4 -2
  362. package/dist/utils/functions.js +35 -18
  363. package/dist/utils/functions.js.map +1 -0
  364. package/dist/utils/geo.d.cts +22 -0
  365. package/dist/utils/geo.d.ts +6 -3
  366. package/dist/utils/geo.js +39 -9
  367. package/dist/utils/geo.js.map +1 -0
  368. package/dist/utils/globals.d.cts +5 -0
  369. package/dist/utils/globals.d.ts +4 -2
  370. package/dist/utils/globals.js +41 -14
  371. package/dist/utils/globals.js.map +1 -0
  372. package/dist/utils/hashes.d.cts +7 -0
  373. package/dist/utils/hashes.d.ts +7 -5
  374. package/dist/utils/hashes.js +87 -41
  375. package/dist/utils/hashes.js.map +1 -0
  376. package/dist/utils/html.d.cts +4 -0
  377. package/dist/utils/html.d.ts +4 -2
  378. package/dist/utils/html.js +36 -37
  379. package/dist/utils/html.js.map +1 -0
  380. package/dist/utils/http.d.cts +43 -0
  381. package/dist/utils/http.d.ts +6 -4
  382. package/dist/utils/http.js +83 -83
  383. package/dist/utils/http.js.map +1 -0
  384. package/dist/utils/ips.d.cts +6 -0
  385. package/dist/utils/ips.d.ts +6 -4
  386. package/dist/utils/ips.js +48 -35
  387. package/dist/utils/ips.js.map +1 -0
  388. package/dist/utils/json.d.cts +13 -0
  389. package/dist/utils/json.d.ts +9 -6
  390. package/dist/utils/json.js +54 -157
  391. package/dist/utils/json.js.map +1 -0
  392. package/dist/utils/jwt.d.cts +44 -0
  393. package/dist/utils/jwt.d.ts +14 -11
  394. package/dist/utils/jwt.js +119 -84
  395. package/dist/utils/jwt.js.map +1 -0
  396. package/dist/utils/locks.d.cts +15 -0
  397. package/dist/utils/locks.d.ts +3 -2
  398. package/dist/utils/locks.js +76 -56
  399. package/dist/utils/locks.js.map +1 -0
  400. package/dist/utils/maps.d.cts +59 -0
  401. package/dist/utils/maps.d.ts +6 -4
  402. package/dist/utils/maps.js +207 -343
  403. package/dist/utils/maps.js.map +1 -0
  404. package/dist/utils/math.d.cts +6 -0
  405. package/dist/utils/math.d.ts +3 -1
  406. package/dist/utils/math.js +31 -16
  407. package/dist/utils/math.js.map +1 -0
  408. package/dist/utils/node-http.d.cts +15 -0
  409. package/dist/utils/node-http.d.ts +5 -5
  410. package/dist/utils/node-http.js +65 -36
  411. package/dist/utils/node-http.js.map +1 -0
  412. package/dist/utils/numbers.d.cts +5 -0
  413. package/dist/utils/numbers.d.ts +5 -3
  414. package/dist/utils/numbers.js +53 -66
  415. package/dist/utils/numbers.js.map +1 -0
  416. package/dist/utils/oauth.d.cts +8 -0
  417. package/dist/utils/oauth.d.ts +8 -6
  418. package/dist/utils/oauth.js +37 -4
  419. package/dist/utils/oauth.js.map +1 -0
  420. package/dist/utils/objects.d.cts +65 -0
  421. package/dist/utils/objects.d.ts +31 -30
  422. package/dist/utils/objects.js +196 -374
  423. package/dist/utils/objects.js.map +1 -0
  424. package/dist/utils/passkey.d.cts +1 -0
  425. package/dist/utils/passkey.d.ts +1 -1
  426. package/dist/utils/passkey.js +19 -1
  427. package/dist/utils/passkey.js.map +1 -0
  428. package/dist/utils/promises.d.cts +74 -0
  429. package/dist/utils/promises.d.ts +20 -18
  430. package/dist/utils/promises.js +252 -393
  431. package/dist/utils/promises.js.map +1 -0
  432. package/dist/utils/proxies.d.cts +4 -0
  433. package/dist/utils/proxies.d.ts +4 -2
  434. package/dist/utils/proxies.js +150 -161
  435. package/dist/utils/proxies.js.map +1 -0
  436. package/dist/utils/react.d.cts +25 -0
  437. package/dist/utils/react.d.ts +9 -6
  438. package/dist/utils/react.js +88 -134
  439. package/dist/utils/react.js.map +1 -0
  440. package/dist/utils/results.d.cts +78 -0
  441. package/dist/utils/results.d.ts +10 -9
  442. package/dist/utils/results.js +143 -324
  443. package/dist/utils/results.js.map +1 -0
  444. package/dist/utils/sentry.d.cts +5 -0
  445. package/dist/utils/sentry.d.ts +5 -2
  446. package/dist/utils/sentry.js +44 -14
  447. package/dist/utils/sentry.js.map +1 -0
  448. package/dist/utils/stores.d.cts +102 -0
  449. package/dist/utils/stores.d.ts +12 -9
  450. package/dist/utils/stores.js +219 -189
  451. package/dist/utils/stores.js.map +1 -0
  452. package/dist/utils/strings.d.cts +72 -0
  453. package/dist/utils/strings.d.ts +22 -20
  454. package/dist/utils/strings.js +299 -580
  455. package/dist/utils/strings.js.map +1 -0
  456. package/dist/utils/strings.nicify.test.d.cts +2 -0
  457. package/dist/utils/strings.nicify.test.d.ts +2 -1
  458. package/dist/utils/strings.nicify.test.js +168 -158
  459. package/dist/utils/strings.nicify.test.js.map +1 -0
  460. package/dist/utils/types.d.cts +23 -0
  461. package/dist/utils/types.d.ts +8 -6
  462. package/dist/utils/types.js +19 -1
  463. package/dist/utils/types.js.map +1 -0
  464. package/dist/utils/unicode.d.cts +3 -0
  465. package/dist/utils/unicode.d.ts +3 -1
  466. package/dist/utils/unicode.js +34 -21
  467. package/dist/utils/unicode.js.map +1 -0
  468. package/dist/utils/urls.d.cts +20 -0
  469. package/dist/utils/urls.d.ts +10 -8
  470. package/dist/utils/urls.js +76 -165
  471. package/dist/utils/urls.js.map +1 -0
  472. package/dist/utils/uuids.d.cts +4 -0
  473. package/dist/utils/uuids.d.ts +4 -2
  474. package/dist/utils/uuids.js +39 -35
  475. package/dist/utils/uuids.js.map +1 -0
  476. package/package.json +5 -5
@@ -1,412 +1,271 @@
1
- import { KnownError } from "..";
2
- import { StackAssertionError, captureError, concatStacktraces } from "./errors";
3
- import { DependenciesMap } from "./maps";
4
- import { Result } from "./results";
5
- import { generateUuid } from "./uuids";
6
- export function createPromise(callback) {
7
- let status = "pending";
8
- let valueOrReason = undefined;
9
- let resolve = null;
10
- let reject = null;
11
- const promise = new Promise((res, rej) => {
12
- resolve = (value) => {
13
- if (status !== "pending")
14
- return;
15
- status = "fulfilled";
16
- valueOrReason = value;
17
- res(value);
18
- };
19
- reject = (reason) => {
20
- if (status !== "pending")
21
- return;
22
- status = "rejected";
23
- valueOrReason = reason;
24
- rej(reason);
25
- };
26
- });
27
- callback(resolve, reject);
28
- return Object.assign(promise, {
29
- status: status,
30
- ...status === "fulfilled" ? { value: valueOrReason } : {},
31
- ...status === "rejected" ? { reason: valueOrReason } : {},
32
- });
33
- }
34
- import.meta.vitest?.test("createPromise", async ({ expect }) => {
35
- // Test resolved promise
36
- const resolvedPromise = createPromise((resolve) => {
37
- resolve(42);
38
- });
39
- expect(resolvedPromise.status).toBe("fulfilled");
40
- expect(resolvedPromise.value).toBe(42);
41
- expect(await resolvedPromise).toBe(42);
42
- // Test rejected promise
43
- const error = new Error("Test error");
44
- const rejectedPromise = createPromise((_, reject) => {
45
- reject(error);
46
- });
47
- expect(rejectedPromise.status).toBe("rejected");
48
- expect(rejectedPromise.reason).toBe(error);
49
- await expect(rejectedPromise).rejects.toBe(error);
50
- // Test pending promise
51
- const pendingPromise = createPromise(() => {
52
- // Do nothing, leave it pending
53
- });
54
- expect(pendingPromise.status).toBe("pending");
55
- expect(pendingPromise.value).toBeUndefined();
56
- expect(pendingPromise.reason).toBeUndefined();
57
- // Test that resolving after already resolved does nothing
58
- let resolveCount = 0;
59
- const multiResolvePromise = createPromise((resolve) => {
60
- resolve(1);
61
- resolveCount++;
62
- resolve(2);
63
- resolveCount++;
64
- });
65
- expect(resolveCount).toBe(2); // Both resolve calls executed
66
- expect(multiResolvePromise.status).toBe("fulfilled");
67
- expect(multiResolvePromise.value).toBe(1); // Only first resolve took effect
68
- expect(await multiResolvePromise).toBe(1);
69
- });
70
- let resolvedCache = null;
71
- /**
72
- * Like Promise.resolve(...), but also adds the status and value properties for use with React's `use` hook, and caches
73
- * the value so that invoking `resolved` twice returns the same promise.
74
- */
75
- export function resolved(value) {
76
- resolvedCache ??= new DependenciesMap();
77
- if (resolvedCache.has([value])) {
78
- return resolvedCache.get([value]);
79
- }
80
- const res = Object.assign(Promise.resolve(value), {
81
- status: "fulfilled",
82
- value,
83
- });
84
- resolvedCache.set([value], res);
85
- return res;
86
- }
87
- import.meta.vitest?.test("resolved", async ({ expect }) => {
88
- // Test with primitive value
89
- const promise1 = resolved(42);
90
- expect(promise1.status).toBe("fulfilled");
91
- // Need to use type assertion since value is only available when status is "fulfilled"
92
- expect(promise1.value).toBe(42);
93
- expect(await promise1).toBe(42);
94
- // Test with object value
95
- const obj = { test: true };
96
- const promise2 = resolved(obj);
97
- expect(promise2.status).toBe("fulfilled");
98
- expect(promise2.value).toBe(obj);
99
- expect(await promise2).toBe(obj);
100
- // Test caching (same reference for same value)
101
- const promise3 = resolved(42);
102
- expect(promise3).toBe(promise1); // Same reference due to caching
103
- // Test with different value (different reference)
104
- const promise4 = resolved(43);
105
- expect(promise4).not.toBe(promise1);
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/utils/promises.tsx
21
+ var promises_exports = {};
22
+ __export(promises_exports, {
23
+ createPromise: () => createPromise,
24
+ ignoreUnhandledRejection: () => ignoreUnhandledRejection,
25
+ neverResolve: () => neverResolve,
26
+ pending: () => pending,
27
+ rateLimited: () => rateLimited,
28
+ rejected: () => rejected,
29
+ resolved: () => resolved,
30
+ runAsynchronously: () => runAsynchronously,
31
+ runAsynchronouslyWithAlert: () => runAsynchronouslyWithAlert,
32
+ throttled: () => throttled,
33
+ timeout: () => timeout,
34
+ timeoutThrow: () => timeoutThrow,
35
+ wait: () => wait,
36
+ waitUntil: () => waitUntil
106
37
  });
107
- let rejectedCache = null;
108
- /**
109
- * Like Promise.reject(...), but also adds the status and value properties for use with React's `use` hook, and caches
110
- * the value so that invoking `rejected` twice returns the same promise.
111
- */
112
- export function rejected(reason) {
113
- rejectedCache ??= new DependenciesMap();
114
- if (rejectedCache.has([reason])) {
115
- return rejectedCache.get([reason]);
116
- }
117
- const promise = Promise.reject(reason);
118
- ignoreUnhandledRejection(promise);
119
- const res = Object.assign(promise, {
120
- status: "rejected",
121
- reason: reason,
122
- });
123
- rejectedCache.set([reason], res);
124
- return res;
38
+ module.exports = __toCommonJS(promises_exports);
39
+ var import__ = require("..");
40
+ var import_errors = require("./errors");
41
+ var import_maps = require("./maps");
42
+ var import_results = require("./results");
43
+ var import_uuids = require("./uuids");
44
+ function createPromise(callback) {
45
+ let status = "pending";
46
+ let valueOrReason = void 0;
47
+ let resolve = null;
48
+ let reject = null;
49
+ const promise = new Promise((res, rej) => {
50
+ resolve = (value) => {
51
+ if (status !== "pending") return;
52
+ status = "fulfilled";
53
+ valueOrReason = value;
54
+ res(value);
55
+ };
56
+ reject = (reason) => {
57
+ if (status !== "pending") return;
58
+ status = "rejected";
59
+ valueOrReason = reason;
60
+ rej(reason);
61
+ };
62
+ });
63
+ callback(resolve, reject);
64
+ return Object.assign(promise, {
65
+ status,
66
+ ...status === "fulfilled" ? { value: valueOrReason } : {},
67
+ ...status === "rejected" ? { reason: valueOrReason } : {}
68
+ });
125
69
  }
126
- import.meta.vitest?.test("rejected", ({ expect }) => {
127
- // Test with error object
128
- const error = new Error("Test error");
129
- const promise1 = rejected(error);
130
- expect(promise1.status).toBe("rejected");
131
- // Need to use type assertion since reason is only available when status is "rejected"
132
- expect(promise1.reason).toBe(error);
133
- // Test with string reason
134
- const promise2 = rejected("error message");
135
- expect(promise2.status).toBe("rejected");
136
- expect(promise2.reason).toBe("error message");
137
- // Test caching (same reference for same reason)
138
- const promise3 = rejected(error);
139
- expect(promise3).toBe(promise1); // Same reference due to caching
140
- // Test with different reason (different reference)
141
- const differentError = new Error("Different error");
142
- const promise4 = rejected(differentError);
143
- expect(promise4).not.toBe(promise1);
144
- // Note: We're not using await expect(promise).rejects to avoid unhandled rejections
145
- });
146
- // We'll skip the rejection test for pending() since it's causing unhandled rejections
147
- // The function is already well tested through other tests like rejected() and createPromise()
148
- const neverResolvePromise = pending(new Promise(() => { }));
149
- export function neverResolve() {
150
- return neverResolvePromise;
70
+ var resolvedCache = null;
71
+ function resolved(value) {
72
+ resolvedCache ??= new import_maps.DependenciesMap();
73
+ if (resolvedCache.has([value])) {
74
+ return resolvedCache.get([value]);
75
+ }
76
+ const res = Object.assign(Promise.resolve(value), {
77
+ status: "fulfilled",
78
+ value
79
+ });
80
+ resolvedCache.set([value], res);
81
+ return res;
151
82
  }
152
- import.meta.vitest?.test("neverResolve", ({ expect }) => {
153
- const promise = neverResolve();
154
- expect(promise.status).toBe("pending");
155
- expect(promise.value).toBeUndefined();
156
- expect(promise.reason).toBeUndefined();
157
- // Test that multiple calls return the same promise
158
- const promise2 = neverResolve();
159
- expect(promise2).toBe(promise);
160
- });
161
- export function pending(promise, options = {}) {
162
- const res = promise.then(value => {
163
- res.status = "fulfilled";
164
- res.value = value;
165
- return value;
166
- }, actualReason => {
167
- res.status = "rejected";
168
- res.reason = actualReason;
169
- throw actualReason;
170
- });
171
- res.status = "pending";
172
- return res;
83
+ var rejectedCache = null;
84
+ function rejected(reason) {
85
+ rejectedCache ??= new import_maps.DependenciesMap();
86
+ if (rejectedCache.has([reason])) {
87
+ return rejectedCache.get([reason]);
88
+ }
89
+ const promise = Promise.reject(reason);
90
+ ignoreUnhandledRejection(promise);
91
+ const res = Object.assign(promise, {
92
+ status: "rejected",
93
+ reason
94
+ });
95
+ rejectedCache.set([reason], res);
96
+ return res;
173
97
  }
174
- import.meta.vitest?.test("pending", async ({ expect }) => {
175
- // Test with a promise that resolves
176
- const resolvePromise = Promise.resolve(42);
177
- const pendingPromise = pending(resolvePromise);
178
- // Initially it should be pending
179
- expect(pendingPromise.status).toBe("pending");
180
- // After resolution, it should be fulfilled
181
- await resolvePromise;
182
- // Need to wait a tick for the then handler to execute
183
- await new Promise(resolve => setTimeout(resolve, 0));
184
- expect(pendingPromise.status).toBe("fulfilled");
185
- expect(pendingPromise.value).toBe(42);
186
- // For the rejection test, we'll use a separate test to avoid unhandled rejections
187
- });
188
- /**
189
- * Should be used to wrap Promises that are not immediately awaited, so they don't throw an unhandled promise rejection
190
- * error.
191
- *
192
- * Vercel kills serverless functions on unhandled promise rejection errors, so this is important.
193
- */
194
- export function ignoreUnhandledRejection(promise) {
195
- promise.catch(() => { });
98
+ var neverResolvePromise = pending(new Promise(() => {
99
+ }));
100
+ function neverResolve() {
101
+ return neverResolvePromise;
196
102
  }
197
- import.meta.vitest?.test("ignoreUnhandledRejection", async ({ expect }) => {
198
- // Test with a promise that resolves
199
- const resolvePromise = Promise.resolve(42);
200
- ignoreUnhandledRejection(resolvePromise);
201
- expect(await resolvePromise).toBe(42); // Should still resolve to the same value
202
- // Test with a promise that rejects
203
- // The promise should still reject, but the rejection is caught internally
204
- // so it doesn't cause an unhandled rejection error
205
- const error = new Error("Test error");
206
- const rejectPromise = Promise.reject(error);
207
- ignoreUnhandledRejection(rejectPromise);
208
- await expect(rejectPromise).rejects.toBe(error);
209
- });
210
- export async function wait(ms) {
211
- if (!Number.isFinite(ms) || ms < 0) {
212
- throw new StackAssertionError(`wait() requires a non-negative integer number of milliseconds to wait. (found: ${ms}ms)`);
213
- }
214
- if (ms >= 2 ** 31) {
215
- throw new StackAssertionError("The maximum timeout for wait() is 2147483647ms (2**31 - 1). (found: ${ms}ms)");
103
+ function pending(promise, options = {}) {
104
+ const res = promise.then(
105
+ (value) => {
106
+ res.status = "fulfilled";
107
+ res.value = value;
108
+ return value;
109
+ },
110
+ (actualReason) => {
111
+ res.status = "rejected";
112
+ res.reason = actualReason;
113
+ throw actualReason;
216
114
  }
217
- return await new Promise(resolve => setTimeout(resolve, ms));
115
+ );
116
+ res.status = "pending";
117
+ return res;
218
118
  }
219
- import.meta.vitest?.test("wait", async ({ expect }) => {
220
- // Test with valid input
221
- const start = Date.now();
222
- await wait(10);
223
- const elapsed = Date.now() - start;
224
- expect(elapsed).toBeGreaterThanOrEqual(5); // Allow some flexibility in timing
225
- // Test with zero
226
- await expect(wait(0)).resolves.toBeUndefined();
227
- // Test with negative number
228
- await expect(wait(-10)).rejects.toThrow("wait() requires a non-negative integer");
229
- // Test with non-finite number
230
- await expect(wait(NaN)).rejects.toThrow("wait() requires a non-negative integer");
231
- await expect(wait(Infinity)).rejects.toThrow("wait() requires a non-negative integer");
232
- // Test with too large number
233
- await expect(wait(2 ** 31)).rejects.toThrow("The maximum timeout for wait()");
234
- });
235
- export async function waitUntil(date) {
236
- return await wait(date.getTime() - Date.now());
119
+ function ignoreUnhandledRejection(promise) {
120
+ promise.catch(() => {
121
+ });
237
122
  }
238
- import.meta.vitest?.test("waitUntil", async ({ expect }) => {
239
- // Test with future date
240
- const futureDate = new Date(Date.now() + 10);
241
- const start = Date.now();
242
- await waitUntil(futureDate);
243
- const elapsed = Date.now() - start;
244
- expect(elapsed).toBeGreaterThanOrEqual(5); // Allow some flexibility in timing
245
- // Test with past date - this will throw because wait() requires non-negative time
246
- // We need to verify it throws the correct error
247
- try {
248
- await waitUntil(new Date(Date.now() - 1000));
249
- expect.fail("Should have thrown an error");
250
- }
251
- catch (error) {
252
- expect(error).toBeInstanceOf(StackAssertionError);
253
- expect(error.message).toContain("wait() requires a non-negative integer");
254
- }
255
- });
256
- export function runAsynchronouslyWithAlert(...args) {
257
- return runAsynchronously(args[0], {
258
- ...args[1],
259
- onError: error => {
260
- if (error instanceof KnownError && process.env.NODE_ENV.includes("production")) {
261
- alert(error.message);
262
- }
263
- else {
264
- alert(`An unhandled error occurred. Please ${process.env.NODE_ENV === "development" ? `check the browser console for the full error.` : "report this to the developer."}\n\n${error}`);
265
- }
266
- args[1]?.onError?.(error);
267
- },
268
- }, ...args.slice(2));
123
+ async function wait(ms) {
124
+ if (!Number.isFinite(ms) || ms < 0) {
125
+ throw new import_errors.StackAssertionError(`wait() requires a non-negative integer number of milliseconds to wait. (found: ${ms}ms)`);
126
+ }
127
+ if (ms >= 2 ** 31) {
128
+ throw new import_errors.StackAssertionError("The maximum timeout for wait() is 2147483647ms (2**31 - 1). (found: ${ms}ms)");
129
+ }
130
+ return await new Promise((resolve) => setTimeout(resolve, ms));
269
131
  }
270
- import.meta.vitest?.test("runAsynchronouslyWithAlert", ({ expect }) => {
271
- // Simple test to verify the function calls runAsynchronously
272
- // We can't easily test the alert functionality without mocking
273
- const testFn = () => Promise.resolve("test");
274
- const testOptions = { noErrorLogging: true };
275
- // Just verify it doesn't throw
276
- expect(() => runAsynchronouslyWithAlert(testFn, testOptions)).not.toThrow();
277
- // We can't easily test the error handling without mocking, so we'll
278
- // just verify the function exists and can be called
279
- expect(typeof runAsynchronouslyWithAlert).toBe("function");
280
- });
281
- export function runAsynchronously(promiseOrFunc, options = {}) {
282
- if (typeof promiseOrFunc === "function") {
283
- promiseOrFunc = promiseOrFunc();
284
- }
285
- const duringError = new Error();
286
- promiseOrFunc?.catch(error => {
287
- options.onError?.(error);
288
- const newError = new StackAssertionError("Uncaught error in asynchronous function: " + error.toString(), { cause: error });
289
- concatStacktraces(newError, duringError);
290
- if (!options.noErrorLogging) {
291
- captureError("runAsynchronously", newError);
132
+ async function waitUntil(date) {
133
+ return await wait(date.getTime() - Date.now());
134
+ }
135
+ function runAsynchronouslyWithAlert(...args) {
136
+ return runAsynchronously(
137
+ args[0],
138
+ {
139
+ ...args[1],
140
+ onError: (error) => {
141
+ if (error instanceof import__.KnownError && typeof process !== "undefined" && process.env.NODE_ENV?.includes("production")) {
142
+ alert(error.message);
143
+ } else {
144
+ alert(`An unhandled error occurred. Please ${process.env.NODE_ENV === "development" ? `check the browser console for the full error.` : "report this to the developer."}
145
+
146
+ ${error}`);
292
147
  }
293
- });
148
+ args[1]?.onError?.(error);
149
+ }
150
+ },
151
+ ...args.slice(2)
152
+ );
294
153
  }
295
- import.meta.vitest?.test("runAsynchronously", ({ expect }) => {
296
- // Simple test to verify the function exists and can be called
297
- const testFn = () => Promise.resolve("test");
298
- // Just verify it doesn't throw
299
- expect(() => runAsynchronously(testFn)).not.toThrow();
300
- expect(() => runAsynchronously(Promise.resolve("test"))).not.toThrow();
301
- expect(() => runAsynchronously(undefined)).not.toThrow();
302
- // We can't easily test the error handling without mocking, so we'll
303
- // just verify the function exists and can be called with options
304
- expect(() => runAsynchronously(testFn, { noErrorLogging: true })).not.toThrow();
305
- expect(() => runAsynchronously(testFn, { onError: () => { } })).not.toThrow();
306
- });
307
- class TimeoutError extends Error {
308
- constructor(ms) {
309
- super(`Timeout after ${ms}ms`);
310
- this.ms = ms;
311
- this.name = "TimeoutError";
154
+ function runAsynchronously(promiseOrFunc, options = {}) {
155
+ if (typeof promiseOrFunc === "function") {
156
+ promiseOrFunc = promiseOrFunc();
157
+ }
158
+ const duringError = new Error();
159
+ promiseOrFunc?.catch((error) => {
160
+ options.onError?.(error);
161
+ const newError = new import_errors.StackAssertionError(
162
+ "Uncaught error in asynchronous function: " + error.toString(),
163
+ { cause: error }
164
+ );
165
+ (0, import_errors.concatStacktraces)(newError, duringError);
166
+ if (!options.noErrorLogging) {
167
+ (0, import_errors.captureError)("runAsynchronously", newError);
312
168
  }
169
+ });
313
170
  }
314
- export async function timeout(promise, ms) {
315
- return await Promise.race([
316
- promise.then(value => Result.ok(value)),
317
- wait(ms).then(() => Result.error(new TimeoutError(ms))),
318
- ]);
171
+ var TimeoutError = class extends Error {
172
+ constructor(ms) {
173
+ super(`Timeout after ${ms}ms`);
174
+ this.ms = ms;
175
+ this.name = "TimeoutError";
176
+ }
177
+ };
178
+ async function timeout(promise, ms) {
179
+ return await Promise.race([
180
+ promise.then((value) => import_results.Result.ok(value)),
181
+ wait(ms).then(() => import_results.Result.error(new TimeoutError(ms)))
182
+ ]);
319
183
  }
320
- import.meta.vitest?.test("timeout", async ({ expect }) => {
321
- // Test with a promise that resolves quickly
322
- const fastPromise = Promise.resolve(42);
323
- const fastResult = await timeout(fastPromise, 100);
324
- expect(fastResult.status).toBe("ok");
325
- if (fastResult.status === "ok") {
326
- expect(fastResult.data).toBe(42);
184
+ async function timeoutThrow(promise, ms) {
185
+ return import_results.Result.orThrow(await timeout(promise, ms));
186
+ }
187
+ function rateLimited(func, options) {
188
+ let waitUntil2 = performance.now();
189
+ let queue = [];
190
+ let addedToQueueCallbacks = /* @__PURE__ */ new Map();
191
+ const next = async () => {
192
+ while (true) {
193
+ if (waitUntil2 > performance.now()) {
194
+ await wait(Math.max(1, waitUntil2 - performance.now() + 1));
195
+ } else if (queue.length === 0) {
196
+ const uuid = (0, import_uuids.generateUuid)();
197
+ await new Promise((resolve) => {
198
+ addedToQueueCallbacks.set(uuid, resolve);
199
+ });
200
+ addedToQueueCallbacks.delete(uuid);
201
+ } else {
202
+ break;
203
+ }
327
204
  }
328
- // Test with a promise that takes longer than the timeout
329
- const slowPromise = new Promise(resolve => setTimeout(() => resolve("too late"), 50));
330
- const slowResult = await timeout(slowPromise, 10);
331
- expect(slowResult.status).toBe("error");
332
- if (slowResult.status === "error") {
333
- expect(slowResult.error).toBeInstanceOf(TimeoutError);
334
- expect(slowResult.error.ms).toBe(10);
205
+ const nextFuncs = options.batchCalls ? queue.splice(0, queue.length) : [queue.shift()];
206
+ const start = performance.now();
207
+ const value = await import_results.Result.fromPromise(func());
208
+ const end = performance.now();
209
+ waitUntil2 = Math.max(
210
+ waitUntil2,
211
+ start + (options.throttleMs ?? 0),
212
+ end + (options.gapMs ?? 0)
213
+ );
214
+ for (const nextFunc of nextFuncs) {
215
+ if (value.status === "ok") {
216
+ nextFunc[0](value.data);
217
+ } else {
218
+ nextFunc[1](value.error);
219
+ }
335
220
  }
336
- });
337
- export async function timeoutThrow(promise, ms) {
338
- return Result.orThrow(await timeout(promise, ms));
339
- }
340
- import.meta.vitest?.test("timeoutThrow", async ({ expect }) => {
341
- // Test with a promise that resolves quickly
342
- const fastPromise = Promise.resolve(42);
343
- const fastResult = await timeoutThrow(fastPromise, 100);
344
- expect(fastResult).toBe(42);
345
- // Test with a promise that takes longer than the timeout
346
- const slowPromise = new Promise(resolve => setTimeout(() => resolve("too late"), 50));
347
- await expect(timeoutThrow(slowPromise, 10)).rejects.toThrow("Timeout after 10ms");
348
- await expect(timeoutThrow(slowPromise, 10)).rejects.toBeInstanceOf(TimeoutError);
349
- });
350
- export function rateLimited(func, options) {
351
- let waitUntil = performance.now();
352
- let queue = [];
353
- let addedToQueueCallbacks = new Map;
354
- const next = async () => {
355
- while (true) {
356
- if (waitUntil > performance.now()) {
357
- await wait(Math.max(1, waitUntil - performance.now() + 1));
358
- }
359
- else if (queue.length === 0) {
360
- const uuid = generateUuid();
361
- await new Promise(resolve => {
362
- addedToQueueCallbacks.set(uuid, resolve);
363
- });
364
- addedToQueueCallbacks.delete(uuid);
365
- }
366
- else {
367
- break;
368
- }
369
- }
370
- const nextFuncs = options.batchCalls ? queue.splice(0, queue.length) : [queue.shift()];
371
- const start = performance.now();
372
- const value = await Result.fromPromise(func());
373
- const end = performance.now();
374
- waitUntil = Math.max(waitUntil, start + (options.throttleMs ?? 0), end + (options.gapMs ?? 0));
375
- for (const nextFunc of nextFuncs) {
376
- if (value.status === "ok") {
377
- nextFunc[0](value.data);
378
- }
379
- else {
380
- nextFunc[1](value.error);
381
- }
382
- }
383
- };
384
- runAsynchronously(async () => {
385
- while (true) {
386
- await next();
387
- }
221
+ };
222
+ runAsynchronously(async () => {
223
+ while (true) {
224
+ await next();
225
+ }
226
+ });
227
+ return () => {
228
+ return new Promise((resolve, reject) => {
229
+ waitUntil2 = Math.max(
230
+ waitUntil2,
231
+ performance.now() + (options.debounceMs ?? 0)
232
+ );
233
+ queue.push([resolve, reject]);
234
+ addedToQueueCallbacks.forEach((cb) => cb());
388
235
  });
389
- return () => {
390
- return new Promise((resolve, reject) => {
391
- waitUntil = Math.max(waitUntil, performance.now() + (options.debounceMs ?? 0));
392
- queue.push([resolve, reject]);
393
- addedToQueueCallbacks.forEach(cb => cb());
394
- });
395
- };
236
+ };
396
237
  }
397
- export function throttled(func, delayMs) {
398
- let timeout = null;
399
- let nextAvailable = null;
400
- return async (...args) => {
401
- while (nextAvailable !== null) {
402
- await nextAvailable;
403
- }
404
- nextAvailable = new Promise(resolve => {
405
- timeout = setTimeout(() => {
406
- nextAvailable = null;
407
- resolve(func(...args));
408
- }, delayMs);
409
- });
410
- return await nextAvailable;
411
- };
238
+ function throttled(func, delayMs) {
239
+ let timeout2 = null;
240
+ let nextAvailable = null;
241
+ return async (...args) => {
242
+ while (nextAvailable !== null) {
243
+ await nextAvailable;
244
+ }
245
+ nextAvailable = new Promise((resolve) => {
246
+ timeout2 = setTimeout(() => {
247
+ nextAvailable = null;
248
+ resolve(func(...args));
249
+ }, delayMs);
250
+ });
251
+ return await nextAvailable;
252
+ };
412
253
  }
254
+ // Annotate the CommonJS export names for ESM import in node:
255
+ 0 && (module.exports = {
256
+ createPromise,
257
+ ignoreUnhandledRejection,
258
+ neverResolve,
259
+ pending,
260
+ rateLimited,
261
+ rejected,
262
+ resolved,
263
+ runAsynchronously,
264
+ runAsynchronouslyWithAlert,
265
+ throttled,
266
+ timeout,
267
+ timeoutThrow,
268
+ wait,
269
+ waitUntil
270
+ });
271
+ //# sourceMappingURL=promises.js.map