@stackframe/stack-shared 2.8.7 → 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 +10 -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
@@ -0,0 +1,102 @@
1
+ import { ReadWriteLock } from './locks.cjs';
2
+ import { ReactPromise } from './promises.cjs';
3
+ import { AsyncResult, Result } from './results.cjs';
4
+
5
+ type ReadonlyStore<T> = {
6
+ get(): T;
7
+ onChange(callback: (value: T, oldValue: T | undefined) => void): {
8
+ unsubscribe: () => void;
9
+ };
10
+ onceChange(callback: (value: T, oldValue: T | undefined) => void): {
11
+ unsubscribe: () => void;
12
+ };
13
+ };
14
+ type AsyncStoreStateChangeCallback<T> = (args: {
15
+ state: AsyncResult<T>;
16
+ oldState: AsyncResult<T>;
17
+ lastOkValue: T | undefined;
18
+ }) => void;
19
+ type ReadonlyAsyncStore<T> = {
20
+ isAvailable(): boolean;
21
+ get(): AsyncResult<T, unknown, void>;
22
+ getOrWait(): ReactPromise<T>;
23
+ onChange(callback: (value: T, oldValue: T | undefined) => void): {
24
+ unsubscribe: () => void;
25
+ };
26
+ onceChange(callback: (value: T, oldValue: T | undefined) => void): {
27
+ unsubscribe: () => void;
28
+ };
29
+ onStateChange(callback: AsyncStoreStateChangeCallback<T>): {
30
+ unsubscribe: () => void;
31
+ };
32
+ onceStateChange(callback: AsyncStoreStateChangeCallback<T>): {
33
+ unsubscribe: () => void;
34
+ };
35
+ };
36
+ declare class Store<T> implements ReadonlyStore<T> {
37
+ private _value;
38
+ private readonly _callbacks;
39
+ constructor(_value: T);
40
+ get(): T;
41
+ set(value: T): void;
42
+ update(updater: (value: T) => T): T;
43
+ onChange(callback: (value: T, oldValue: T | undefined) => void): {
44
+ unsubscribe: () => void;
45
+ };
46
+ onceChange(callback: (value: T, oldValue: T | undefined) => void): {
47
+ unsubscribe: () => void;
48
+ };
49
+ }
50
+ declare const storeLock: ReadWriteLock;
51
+ declare class AsyncStore<T> implements ReadonlyAsyncStore<T> {
52
+ private _isAvailable;
53
+ private _mostRecentOkValue;
54
+ private _isRejected;
55
+ private _rejectionError;
56
+ private readonly _waitingRejectFunctions;
57
+ private readonly _callbacks;
58
+ private _updateCounter;
59
+ private _lastSuccessfulUpdate;
60
+ constructor(...args: [] | [T]);
61
+ isAvailable(): boolean;
62
+ isRejected(): boolean;
63
+ get(): ({
64
+ status: "pending";
65
+ } & {
66
+ progress: void;
67
+ } & {
68
+ status: "pending";
69
+ }) | ({
70
+ status: "error";
71
+ error: unknown;
72
+ } & {
73
+ status: "error";
74
+ }) | ({
75
+ status: "ok";
76
+ data: T;
77
+ } & {
78
+ status: "ok";
79
+ });
80
+ getOrWait(): ReactPromise<T>;
81
+ _setIfLatest(result: Result<T>, curCounter: number): boolean;
82
+ set(value: T): void;
83
+ update(updater: (value: T | undefined) => T): T;
84
+ setAsync(promise: Promise<T>): Promise<boolean>;
85
+ setUnavailable(): void;
86
+ setRejected(error: unknown): void;
87
+ map<U>(mapper: (value: T) => U): AsyncStore<U>;
88
+ onChange(callback: (value: T, oldValue: T | undefined) => void): {
89
+ unsubscribe: () => void;
90
+ };
91
+ onStateChange(callback: AsyncStoreStateChangeCallback<T>): {
92
+ unsubscribe: () => void;
93
+ };
94
+ onceChange(callback: (value: T, oldValue: T | undefined) => void): {
95
+ unsubscribe: () => void;
96
+ };
97
+ onceStateChange(callback: AsyncStoreStateChangeCallback<T>): {
98
+ unsubscribe: () => void;
99
+ };
100
+ }
101
+
102
+ export { AsyncStore, type AsyncStoreStateChangeCallback, type ReadonlyAsyncStore, type ReadonlyStore, Store, storeLock };
@@ -1,7 +1,8 @@
1
- import { ReadWriteLock } from "./locks";
2
- import { ReactPromise } from "./promises";
3
- import { AsyncResult, Result } from "./results";
4
- export type ReadonlyStore<T> = {
1
+ import { ReadWriteLock } from './locks.js';
2
+ import { ReactPromise } from './promises.js';
3
+ import { AsyncResult, Result } from './results.js';
4
+
5
+ type ReadonlyStore<T> = {
5
6
  get(): T;
6
7
  onChange(callback: (value: T, oldValue: T | undefined) => void): {
7
8
  unsubscribe: () => void;
@@ -10,12 +11,12 @@ export type ReadonlyStore<T> = {
10
11
  unsubscribe: () => void;
11
12
  };
12
13
  };
13
- export type AsyncStoreStateChangeCallback<T> = (args: {
14
+ type AsyncStoreStateChangeCallback<T> = (args: {
14
15
  state: AsyncResult<T>;
15
16
  oldState: AsyncResult<T>;
16
17
  lastOkValue: T | undefined;
17
18
  }) => void;
18
- export type ReadonlyAsyncStore<T> = {
19
+ type ReadonlyAsyncStore<T> = {
19
20
  isAvailable(): boolean;
20
21
  get(): AsyncResult<T, unknown, void>;
21
22
  getOrWait(): ReactPromise<T>;
@@ -32,7 +33,7 @@ export type ReadonlyAsyncStore<T> = {
32
33
  unsubscribe: () => void;
33
34
  };
34
35
  };
35
- export declare class Store<T> implements ReadonlyStore<T> {
36
+ declare class Store<T> implements ReadonlyStore<T> {
36
37
  private _value;
37
38
  private readonly _callbacks;
38
39
  constructor(_value: T);
@@ -46,8 +47,8 @@ export declare class Store<T> implements ReadonlyStore<T> {
46
47
  unsubscribe: () => void;
47
48
  };
48
49
  }
49
- export declare const storeLock: ReadWriteLock;
50
- export declare class AsyncStore<T> implements ReadonlyAsyncStore<T> {
50
+ declare const storeLock: ReadWriteLock;
51
+ declare class AsyncStore<T> implements ReadonlyAsyncStore<T> {
51
52
  private _isAvailable;
52
53
  private _mostRecentOkValue;
53
54
  private _isRejected;
@@ -97,3 +98,5 @@ export declare class AsyncStore<T> implements ReadonlyAsyncStore<T> {
97
98
  unsubscribe: () => void;
98
99
  };
99
100
  }
101
+
102
+ export { AsyncStore, type AsyncStoreStateChangeCallback, type ReadonlyAsyncStore, type ReadonlyStore, Store, storeLock };
@@ -1,192 +1,222 @@
1
- import { ReadWriteLock } from "./locks";
2
- import { pending, rejected, resolved } from "./promises";
3
- import { AsyncResult, Result } from "./results";
4
- import { generateUuid } from "./uuids";
5
- export class Store {
6
- constructor(_value) {
7
- this._value = _value;
8
- this._callbacks = new Map();
9
- }
10
- get() {
11
- return this._value;
12
- }
13
- set(value) {
14
- const oldValue = this._value;
15
- this._value = value;
16
- this._callbacks.forEach((callback) => callback(value, oldValue));
17
- }
18
- update(updater) {
19
- const value = updater(this._value);
20
- this.set(value);
21
- return value;
22
- }
23
- onChange(callback) {
24
- const uuid = generateUuid();
25
- this._callbacks.set(uuid, callback);
26
- return {
27
- unsubscribe: () => {
28
- this._callbacks.delete(uuid);
29
- },
30
- };
31
- }
32
- onceChange(callback) {
33
- const { unsubscribe } = this.onChange((...args) => {
34
- unsubscribe();
35
- callback(...args);
36
- });
37
- return { unsubscribe };
38
- }
39
- }
40
- export const storeLock = new ReadWriteLock();
41
- export class AsyncStore {
42
- constructor(...args) {
43
- this._mostRecentOkValue = undefined;
44
- this._isRejected = false;
45
- this._waitingRejectFunctions = new Map();
46
- this._callbacks = new Map();
47
- this._updateCounter = 0;
48
- this._lastSuccessfulUpdate = -1;
49
- if (args.length === 0) {
50
- this._isAvailable = false;
51
- }
52
- else {
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/stores.tsx
21
+ var stores_exports = {};
22
+ __export(stores_exports, {
23
+ AsyncStore: () => AsyncStore,
24
+ Store: () => Store,
25
+ storeLock: () => storeLock
26
+ });
27
+ module.exports = __toCommonJS(stores_exports);
28
+ var import_locks = require("./locks");
29
+ var import_promises = require("./promises");
30
+ var import_results = require("./results");
31
+ var import_uuids = require("./uuids");
32
+ var Store = class {
33
+ constructor(_value) {
34
+ this._value = _value;
35
+ this._callbacks = /* @__PURE__ */ new Map();
36
+ }
37
+ get() {
38
+ return this._value;
39
+ }
40
+ set(value) {
41
+ const oldValue = this._value;
42
+ this._value = value;
43
+ this._callbacks.forEach((callback) => callback(value, oldValue));
44
+ }
45
+ update(updater) {
46
+ const value = updater(this._value);
47
+ this.set(value);
48
+ return value;
49
+ }
50
+ onChange(callback) {
51
+ const uuid = (0, import_uuids.generateUuid)();
52
+ this._callbacks.set(uuid, callback);
53
+ return {
54
+ unsubscribe: () => {
55
+ this._callbacks.delete(uuid);
56
+ }
57
+ };
58
+ }
59
+ onceChange(callback) {
60
+ const { unsubscribe } = this.onChange((...args) => {
61
+ unsubscribe();
62
+ callback(...args);
63
+ });
64
+ return { unsubscribe };
65
+ }
66
+ };
67
+ var storeLock = new import_locks.ReadWriteLock();
68
+ var AsyncStore = class _AsyncStore {
69
+ constructor(...args) {
70
+ this._mostRecentOkValue = void 0;
71
+ this._isRejected = false;
72
+ this._waitingRejectFunctions = /* @__PURE__ */ new Map();
73
+ this._callbacks = /* @__PURE__ */ new Map();
74
+ this._updateCounter = 0;
75
+ this._lastSuccessfulUpdate = -1;
76
+ if (args.length === 0) {
77
+ this._isAvailable = false;
78
+ } else {
79
+ this._isAvailable = true;
80
+ this._mostRecentOkValue = args[0];
81
+ }
82
+ }
83
+ isAvailable() {
84
+ return this._isAvailable;
85
+ }
86
+ isRejected() {
87
+ return this._isRejected;
88
+ }
89
+ get() {
90
+ if (this.isRejected()) {
91
+ return import_results.AsyncResult.error(this._rejectionError);
92
+ } else if (this.isAvailable()) {
93
+ return import_results.AsyncResult.ok(this._mostRecentOkValue);
94
+ } else {
95
+ return import_results.AsyncResult.pending();
96
+ }
97
+ }
98
+ getOrWait() {
99
+ const uuid = (0, import_uuids.generateUuid)();
100
+ if (this.isRejected()) {
101
+ return (0, import_promises.rejected)(this._rejectionError);
102
+ } else if (this.isAvailable()) {
103
+ return (0, import_promises.resolved)(this._mostRecentOkValue);
104
+ }
105
+ const promise = new Promise((resolve, reject) => {
106
+ this.onceChange((value) => {
107
+ resolve(value);
108
+ });
109
+ this._waitingRejectFunctions.set(uuid, reject);
110
+ });
111
+ const withFinally = promise.finally(() => {
112
+ this._waitingRejectFunctions.delete(uuid);
113
+ });
114
+ return (0, import_promises.pending)(withFinally);
115
+ }
116
+ _setIfLatest(result, curCounter) {
117
+ const oldState = this.get();
118
+ const oldValue = this._mostRecentOkValue;
119
+ if (curCounter > this._lastSuccessfulUpdate) {
120
+ switch (result.status) {
121
+ case "ok": {
122
+ if (!this._isAvailable || this._isRejected || this._mostRecentOkValue !== result.data) {
123
+ this._lastSuccessfulUpdate = curCounter;
53
124
  this._isAvailable = true;
54
- this._mostRecentOkValue = args[0];
55
- }
56
- }
57
- isAvailable() {
58
- return this._isAvailable;
59
- }
60
- isRejected() {
61
- return this._isRejected;
62
- }
63
- get() {
64
- if (this.isRejected()) {
65
- return AsyncResult.error(this._rejectionError);
66
- }
67
- else if (this.isAvailable()) {
68
- return AsyncResult.ok(this._mostRecentOkValue);
69
- }
70
- else {
71
- return AsyncResult.pending();
72
- }
73
- }
74
- getOrWait() {
75
- const uuid = generateUuid();
76
- if (this.isRejected()) {
77
- return rejected(this._rejectionError);
78
- }
79
- else if (this.isAvailable()) {
80
- return resolved(this._mostRecentOkValue);
125
+ this._isRejected = false;
126
+ this._mostRecentOkValue = result.data;
127
+ this._rejectionError = void 0;
128
+ this._callbacks.forEach((callback) => callback({
129
+ state: this.get(),
130
+ oldState,
131
+ lastOkValue: oldValue
132
+ }));
133
+ return true;
134
+ }
135
+ return false;
81
136
  }
82
- const promise = new Promise((resolve, reject) => {
83
- this.onceChange((value) => {
84
- resolve(value);
85
- });
86
- this._waitingRejectFunctions.set(uuid, reject);
87
- });
88
- const withFinally = promise.finally(() => {
89
- this._waitingRejectFunctions.delete(uuid);
90
- });
91
- return pending(withFinally);
92
- }
93
- _setIfLatest(result, curCounter) {
94
- const oldState = this.get();
95
- const oldValue = this._mostRecentOkValue;
96
- if (curCounter > this._lastSuccessfulUpdate) {
97
- switch (result.status) {
98
- case "ok": {
99
- if (!this._isAvailable || this._isRejected || this._mostRecentOkValue !== result.data) {
100
- this._lastSuccessfulUpdate = curCounter;
101
- this._isAvailable = true;
102
- this._isRejected = false;
103
- this._mostRecentOkValue = result.data;
104
- this._rejectionError = undefined;
105
- this._callbacks.forEach((callback) => callback({
106
- state: this.get(),
107
- oldState,
108
- lastOkValue: oldValue,
109
- }));
110
- return true;
111
- }
112
- return false;
113
- }
114
- case "error": {
115
- this._lastSuccessfulUpdate = curCounter;
116
- this._isAvailable = false;
117
- this._isRejected = true;
118
- this._rejectionError = result.error;
119
- this._waitingRejectFunctions.forEach((reject) => reject(result.error));
120
- this._callbacks.forEach((callback) => callback({
121
- state: this.get(),
122
- oldState,
123
- lastOkValue: oldValue,
124
- }));
125
- return true;
126
- }
127
- }
137
+ case "error": {
138
+ this._lastSuccessfulUpdate = curCounter;
139
+ this._isAvailable = false;
140
+ this._isRejected = true;
141
+ this._rejectionError = result.error;
142
+ this._waitingRejectFunctions.forEach((reject) => reject(result.error));
143
+ this._callbacks.forEach((callback) => callback({
144
+ state: this.get(),
145
+ oldState,
146
+ lastOkValue: oldValue
147
+ }));
148
+ return true;
128
149
  }
129
- return false;
130
- }
131
- set(value) {
132
- this._setIfLatest(Result.ok(value), ++this._updateCounter);
133
- }
134
- update(updater) {
135
- const value = updater(this._mostRecentOkValue);
136
- this.set(value);
137
- return value;
138
- }
139
- async setAsync(promise) {
140
- return await storeLock.withReadLock(async () => {
141
- const curCounter = ++this._updateCounter;
142
- const result = await Result.fromPromise(promise);
143
- return this._setIfLatest(result, curCounter);
144
- });
145
- }
146
- setUnavailable() {
147
- this._lastSuccessfulUpdate = ++this._updateCounter;
148
- this._isAvailable = false;
149
- this._isRejected = false;
150
- this._rejectionError = undefined;
151
- }
152
- setRejected(error) {
153
- this._setIfLatest(Result.error(error), ++this._updateCounter);
154
- }
155
- map(mapper) {
156
- const store = new AsyncStore();
157
- this.onChange((value) => {
158
- store.set(mapper(value));
159
- });
160
- return store;
161
- }
162
- onChange(callback) {
163
- return this.onStateChange(({ state, lastOkValue }) => {
164
- if (state.status === "ok") {
165
- callback(state.data, lastOkValue);
166
- }
167
- });
168
- }
169
- onStateChange(callback) {
170
- const uuid = generateUuid();
171
- this._callbacks.set(uuid, callback);
172
- return {
173
- unsubscribe: () => {
174
- this._callbacks.delete(uuid);
175
- },
176
- };
177
- }
178
- onceChange(callback) {
179
- const { unsubscribe } = this.onChange((...args) => {
180
- unsubscribe();
181
- callback(...args);
182
- });
183
- return { unsubscribe };
184
- }
185
- onceStateChange(callback) {
186
- const { unsubscribe } = this.onStateChange((...args) => {
187
- unsubscribe();
188
- callback(...args);
189
- });
190
- return { unsubscribe };
191
- }
192
- }
150
+ }
151
+ }
152
+ return false;
153
+ }
154
+ set(value) {
155
+ this._setIfLatest(import_results.Result.ok(value), ++this._updateCounter);
156
+ }
157
+ update(updater) {
158
+ const value = updater(this._mostRecentOkValue);
159
+ this.set(value);
160
+ return value;
161
+ }
162
+ async setAsync(promise) {
163
+ return await storeLock.withReadLock(async () => {
164
+ const curCounter = ++this._updateCounter;
165
+ const result = await import_results.Result.fromPromise(promise);
166
+ return this._setIfLatest(result, curCounter);
167
+ });
168
+ }
169
+ setUnavailable() {
170
+ this._lastSuccessfulUpdate = ++this._updateCounter;
171
+ this._isAvailable = false;
172
+ this._isRejected = false;
173
+ this._rejectionError = void 0;
174
+ }
175
+ setRejected(error) {
176
+ this._setIfLatest(import_results.Result.error(error), ++this._updateCounter);
177
+ }
178
+ map(mapper) {
179
+ const store = new _AsyncStore();
180
+ this.onChange((value) => {
181
+ store.set(mapper(value));
182
+ });
183
+ return store;
184
+ }
185
+ onChange(callback) {
186
+ return this.onStateChange(({ state, lastOkValue }) => {
187
+ if (state.status === "ok") {
188
+ callback(state.data, lastOkValue);
189
+ }
190
+ });
191
+ }
192
+ onStateChange(callback) {
193
+ const uuid = (0, import_uuids.generateUuid)();
194
+ this._callbacks.set(uuid, callback);
195
+ return {
196
+ unsubscribe: () => {
197
+ this._callbacks.delete(uuid);
198
+ }
199
+ };
200
+ }
201
+ onceChange(callback) {
202
+ const { unsubscribe } = this.onChange((...args) => {
203
+ unsubscribe();
204
+ callback(...args);
205
+ });
206
+ return { unsubscribe };
207
+ }
208
+ onceStateChange(callback) {
209
+ const { unsubscribe } = this.onStateChange((...args) => {
210
+ unsubscribe();
211
+ callback(...args);
212
+ });
213
+ return { unsubscribe };
214
+ }
215
+ };
216
+ // Annotate the CommonJS export names for ESM import in node:
217
+ 0 && (module.exports = {
218
+ AsyncStore,
219
+ Store,
220
+ storeLock
221
+ });
222
+ //# sourceMappingURL=stores.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/stores.tsx"],"sourcesContent":["import { ReadWriteLock } from \"./locks\";\nimport { ReactPromise, pending, rejected, resolved } from \"./promises\";\nimport { AsyncResult, Result } from \"./results\";\nimport { generateUuid } from \"./uuids\";\n\nexport type ReadonlyStore<T> = {\n get(): T,\n onChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void },\n onceChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void },\n};\n\nexport type AsyncStoreStateChangeCallback<T> = (args: { state: AsyncResult<T>, oldState: AsyncResult<T>, lastOkValue: T | undefined }) => void;\n\nexport type ReadonlyAsyncStore<T> = {\n isAvailable(): boolean,\n get(): AsyncResult<T, unknown, void>,\n getOrWait(): ReactPromise<T>,\n onChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void },\n onceChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void },\n onStateChange(callback: AsyncStoreStateChangeCallback<T>): { unsubscribe: () => void },\n onceStateChange(callback: AsyncStoreStateChangeCallback<T>): { unsubscribe: () => void },\n};\n\nexport class Store<T> implements ReadonlyStore<T> {\n private readonly _callbacks: Map<string, ((value: T, oldValue: T | undefined) => void)> = new Map();\n\n constructor(\n private _value: T\n ) {}\n\n get(): T {\n return this._value;\n }\n\n set(value: T): void {\n const oldValue = this._value;\n this._value = value;\n this._callbacks.forEach((callback) => callback(value, oldValue));\n }\n\n update(updater: (value: T) => T): T {\n const value = updater(this._value);\n this.set(value);\n return value;\n }\n\n onChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void } {\n const uuid = generateUuid();\n this._callbacks.set(uuid, callback);\n return {\n unsubscribe: () => {\n this._callbacks.delete(uuid);\n },\n };\n }\n\n onceChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void } {\n const { unsubscribe } = this.onChange((...args) => {\n unsubscribe();\n callback(...args);\n });\n return { unsubscribe };\n }\n}\n\nexport const storeLock = new ReadWriteLock();\n\n\nexport class AsyncStore<T> implements ReadonlyAsyncStore<T> {\n private _isAvailable: boolean;\n private _mostRecentOkValue: T | undefined = undefined;\n\n private _isRejected = false;\n private _rejectionError: unknown;\n private readonly _waitingRejectFunctions = new Map<string, ((error: unknown) => void)>();\n\n private readonly _callbacks: Map<string, AsyncStoreStateChangeCallback<T>> = new Map();\n\n private _updateCounter = 0;\n private _lastSuccessfulUpdate = -1;\n\n constructor(...args: [] | [T]) {\n if (args.length === 0) {\n this._isAvailable = false;\n } else {\n this._isAvailable = true;\n this._mostRecentOkValue = args[0];\n }\n }\n\n isAvailable(): boolean {\n return this._isAvailable;\n }\n\n isRejected(): boolean {\n return this._isRejected;\n }\n\n get() {\n if (this.isRejected()) {\n return AsyncResult.error(this._rejectionError);\n } else if (this.isAvailable()) {\n return AsyncResult.ok(this._mostRecentOkValue as T);\n } else {\n return AsyncResult.pending();\n }\n }\n\n getOrWait(): ReactPromise<T> {\n const uuid = generateUuid();\n if (this.isRejected()) {\n return rejected(this._rejectionError);\n } else if (this.isAvailable()) {\n return resolved(this._mostRecentOkValue as T);\n }\n const promise = new Promise<T>((resolve, reject) => {\n this.onceChange((value) => {\n resolve(value);\n });\n this._waitingRejectFunctions.set(uuid, reject);\n });\n const withFinally = promise.finally(() => {\n this._waitingRejectFunctions.delete(uuid);\n });\n return pending(withFinally);\n }\n\n _setIfLatest(result: Result<T>, curCounter: number) {\n const oldState = this.get();\n const oldValue = this._mostRecentOkValue;\n if (curCounter > this._lastSuccessfulUpdate) {\n switch (result.status) {\n case \"ok\": {\n if (!this._isAvailable || this._isRejected || this._mostRecentOkValue !== result.data) {\n this._lastSuccessfulUpdate = curCounter;\n this._isAvailable = true;\n this._isRejected = false;\n this._mostRecentOkValue = result.data;\n this._rejectionError = undefined;\n this._callbacks.forEach((callback) => callback({\n state: this.get(),\n oldState,\n lastOkValue: oldValue,\n }));\n return true;\n }\n return false;\n }\n case \"error\": {\n this._lastSuccessfulUpdate = curCounter;\n this._isAvailable = false;\n this._isRejected = true;\n this._rejectionError = result.error;\n this._waitingRejectFunctions.forEach((reject) => reject(result.error));\n this._callbacks.forEach((callback) => callback({\n state: this.get(),\n oldState,\n lastOkValue: oldValue,\n }));\n return true;\n }\n }\n }\n return false;\n }\n\n set(value: T): void {\n this._setIfLatest(Result.ok(value), ++this._updateCounter);\n }\n\n update(updater: (value: T | undefined) => T): T {\n const value = updater(this._mostRecentOkValue);\n this.set(value);\n return value;\n }\n\n async setAsync(promise: Promise<T>): Promise<boolean> {\n return await storeLock.withReadLock(async () => {\n const curCounter = ++this._updateCounter;\n const result = await Result.fromPromise(promise);\n return this._setIfLatest(result, curCounter);\n });\n }\n\n setUnavailable(): void {\n this._lastSuccessfulUpdate = ++this._updateCounter;\n this._isAvailable = false;\n this._isRejected = false;\n this._rejectionError = undefined;\n }\n\n setRejected(error: unknown): void {\n this._setIfLatest(Result.error(error), ++this._updateCounter);\n }\n\n map<U>(mapper: (value: T) => U): AsyncStore<U> {\n const store = new AsyncStore<U>();\n this.onChange((value) => {\n store.set(mapper(value));\n });\n return store;\n }\n\n onChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void } {\n return this.onStateChange(({ state, lastOkValue }) => {\n if (state.status === \"ok\") {\n callback(state.data, lastOkValue);\n }\n });\n }\n\n onStateChange(callback: AsyncStoreStateChangeCallback<T>): { unsubscribe: () => void } {\n const uuid = generateUuid();\n this._callbacks.set(uuid, callback);\n return {\n unsubscribe: () => {\n this._callbacks.delete(uuid);\n },\n };\n }\n\n onceChange(callback: (value: T, oldValue: T | undefined) => void): { unsubscribe: () => void } {\n const { unsubscribe } = this.onChange((...args) => {\n unsubscribe();\n callback(...args);\n });\n return { unsubscribe };\n }\n\n onceStateChange(callback: AsyncStoreStateChangeCallback<T>): { unsubscribe: () => void } {\n const { unsubscribe } = this.onStateChange((...args) => {\n unsubscribe();\n callback(...args);\n });\n return { unsubscribe };\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,72 @@
1
+ declare function typedToLowercase<S extends string>(s: S): Lowercase<S>;
2
+ declare function typedToUppercase<S extends string>(s: S): Uppercase<S>;
3
+ declare function typedCapitalize<S extends string>(s: S): Capitalize<S>;
4
+ /**
5
+ * Compares two strings in a way that is not dependent on the current locale.
6
+ */
7
+ declare function stringCompare(a: string, b: string): number;
8
+ /**
9
+ * Returns all whitespace character at the start of the string.
10
+ *
11
+ * Uses the same definition for whitespace as `String.prototype.trim()`.
12
+ */
13
+ declare function getWhitespacePrefix(s: string): string;
14
+ /**
15
+ * Returns all whitespace character at the end of the string.
16
+ *
17
+ * Uses the same definition for whitespace as `String.prototype.trim()`.
18
+ */
19
+ declare function getWhitespaceSuffix(s: string): string;
20
+ /**
21
+ * Returns a string with all empty or whitespace-only lines at the start removed.
22
+ *
23
+ * Uses the same definition for whitespace as `String.prototype.trim()`.
24
+ */
25
+ declare function trimEmptyLinesStart(s: string): string;
26
+ /**
27
+ * Returns a string with all empty or whitespace-only lines at the end removed.
28
+ *
29
+ * Uses the same definition for whitespace as `String.prototype.trim()`.
30
+ */
31
+ declare function trimEmptyLinesEnd(s: string): string;
32
+ /**
33
+ * Returns a string with all empty or whitespace-only lines trimmed at the start and end.
34
+ *
35
+ * Uses the same definition for whitespace as `String.prototype.trim()`.
36
+ */
37
+ declare function trimLines(s: string): string;
38
+ /**
39
+ * A template literal tag that returns the same string as the template literal without a tag.
40
+ *
41
+ * Useful for implementing your own template literal tags.
42
+ */
43
+ declare function templateIdentity(strings: TemplateStringsArray | readonly string[], ...values: string[]): string;
44
+ declare function deindent(code: string): string;
45
+ declare function deindent(strings: TemplateStringsArray | readonly string[], ...values: any[]): string;
46
+ declare function deindentTemplate(strings: TemplateStringsArray | readonly string[], ...values: any[]): [string[], ...string[]];
47
+ declare function extractScopes(scope: string, removeDuplicates?: boolean): string[];
48
+ declare function mergeScopeStrings(...scopes: string[]): string;
49
+ declare function escapeTemplateLiteral(s: string): string;
50
+ type Nicifiable = {
51
+ getNicifiableKeys?(): PropertyKey[];
52
+ getNicifiedObjectExtraLines?(): string[];
53
+ };
54
+ type NicifyOptions = {
55
+ maxDepth: number;
56
+ currentIndent: string;
57
+ lineIndent: string;
58
+ multiline: boolean;
59
+ refs: Map<unknown, string>;
60
+ path: string;
61
+ parent: null | {
62
+ options: NicifyOptions;
63
+ value: unknown;
64
+ };
65
+ keyInParent: PropertyKey | null;
66
+ hideFields: PropertyKey[];
67
+ overrides: (...args: Parameters<typeof nicify>) => string | null;
68
+ };
69
+ declare function nicify(value: unknown, options?: Partial<NicifyOptions>): string;
70
+ declare function replaceAll(input: string, searchValue: string, replaceValue: string): string;
71
+
72
+ export { type Nicifiable, type NicifyOptions, deindent, deindentTemplate, escapeTemplateLiteral, extractScopes, getWhitespacePrefix, getWhitespaceSuffix, mergeScopeStrings, nicify, replaceAll, stringCompare, templateIdentity, trimEmptyLinesEnd, trimEmptyLinesStart, trimLines, typedCapitalize, typedToLowercase, typedToUppercase };