@hexclave/shared 1.0.41 → 1.0.43

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 (1067) hide show
  1. package/dist/admin-interface-Bv8rBJo-.d.ts +379 -0
  2. package/dist/admin-interface-Bv8rBJo-.d.ts.map +1 -0
  3. package/dist/admin-metrics-DyW8_G82.d.ts +807 -0
  4. package/dist/admin-metrics-DyW8_G82.d.ts.map +1 -0
  5. package/dist/ai/image-limits.d.ts.map +1 -1
  6. package/dist/ai/image-limits.js +6 -7
  7. package/dist/ai/image-limits.js.map +1 -1
  8. package/dist/ai/llms/llms.d.ts.map +1 -1
  9. package/dist/ai/llms/llms.js +2 -4
  10. package/dist/ai/llms/llms.js.map +1 -1
  11. package/dist/ai/unified-prompts/reminders.js +2 -4
  12. package/dist/ai/unified-prompts/reminders.js.map +1 -1
  13. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  14. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +2 -5
  15. package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  16. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js +3 -6
  17. package/dist/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -1
  18. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +3 -6
  19. package/dist/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -1
  20. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +3 -6
  21. package/dist/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -1
  22. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +3 -6
  23. package/dist/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -1
  24. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +3 -6
  25. package/dist/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -1
  26. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  27. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +5 -6
  28. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  29. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +1 -2
  30. package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -1
  31. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +3 -6
  32. package/dist/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -1
  33. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +3 -6
  34. package/dist/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -1
  35. package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  36. package/dist/ai/unified-prompts/skill-site-prompt.js +2 -4
  37. package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  38. package/dist/analytics-IjkAsefy.d.ts +14 -0
  39. package/dist/analytics-IjkAsefy.d.ts.map +1 -0
  40. package/dist/apps/apps-config.d.ts.map +1 -1
  41. package/dist/apps/apps-config.js +2 -3
  42. package/dist/apps/apps-config.js.map +1 -1
  43. package/dist/apps/apps-ui.d.ts +1 -2
  44. package/dist/apps/apps-ui.d.ts.map +1 -1
  45. package/dist/apps/apps-ui.js +4 -5
  46. package/dist/apps/apps-ui.js.map +1 -1
  47. package/dist/client-interface-CGrvUtX0.d.ts +447 -0
  48. package/dist/client-interface-CGrvUtX0.d.ts.map +1 -0
  49. package/dist/config/db-sync-mappings.js +2 -3
  50. package/dist/config/db-sync-mappings.js.map +1 -1
  51. package/dist/config/format.d.ts +2 -61
  52. package/dist/config/format.js +2 -192
  53. package/dist/config/format.js.map +1 -1
  54. package/dist/config/migrate-catalogs-to-product-lines.d.ts.map +1 -1
  55. package/dist/config/migrate-catalogs-to-product-lines.js +2 -196
  56. package/dist/config/migrate-catalogs-to-product-lines.js.map +1 -1
  57. package/dist/config/schema-fuzzer.test.js +18 -172
  58. package/dist/config/schema-fuzzer.test.js.map +1 -1
  59. package/dist/config/schema.d.ts +2 -2328
  60. package/dist/config/schema.js +6 -351
  61. package/dist/config/schema.js.map +1 -1
  62. package/dist/config-authoring.d.ts +1 -1
  63. package/dist/config-authoring.d.ts.map +1 -1
  64. package/dist/config-authoring.js +2 -3
  65. package/dist/config-authoring.js.map +1 -1
  66. package/dist/config-authoring.test.js +1 -3
  67. package/dist/config-authoring.test.js.map +1 -1
  68. package/dist/config-eval.d.ts.map +1 -1
  69. package/dist/config-eval.js +4 -46
  70. package/dist/config-eval.js.map +1 -1
  71. package/dist/config-rendering.d.ts.map +1 -1
  72. package/dist/config-rendering.js +2 -48
  73. package/dist/config-rendering.js.map +1 -1
  74. package/dist/connected-accounts-D5CKe50A.d.ts +67 -0
  75. package/dist/connected-accounts-D5CKe50A.d.ts.map +1 -0
  76. package/dist/contact-channels-DW8yQxlc.d.ts +180 -0
  77. package/dist/contact-channels-DW8yQxlc.d.ts.map +1 -0
  78. package/dist/country-codes-CRWDroBE.d.ts +11 -0
  79. package/dist/country-codes-CRWDroBE.d.ts.map +1 -0
  80. package/dist/crud-CqmEW9s6.d.ts +98 -0
  81. package/dist/crud-CqmEW9s6.d.ts.map +1 -0
  82. package/dist/crud.d.ts +2 -98
  83. package/dist/crud.js +3 -71
  84. package/dist/crud.js.map +1 -1
  85. package/dist/currency-constants-Cq_q8twn.d.ts +45 -0
  86. package/dist/currency-constants-Cq_q8twn.d.ts.map +1 -0
  87. package/dist/current-user-Dvf8Ttjo.d.ts +284 -0
  88. package/dist/current-user-Dvf8Ttjo.d.ts.map +1 -0
  89. package/dist/dates-B6ne9iOR.d.ts +23 -0
  90. package/dist/dates-B6ne9iOR.d.ts.map +1 -0
  91. package/dist/email-outbox-BVqBaXpn.d.ts +1464 -0
  92. package/dist/{interface/crud/email-outbox.d.ts.map → email-outbox-BVqBaXpn.d.ts.map} +1 -1
  93. package/dist/emails-Ba4yEaCS.d.ts +40 -0
  94. package/dist/emails-Ba4yEaCS.d.ts.map +1 -0
  95. package/dist/errors-Cl-RUyed.d.ts +238 -0
  96. package/dist/errors-Cl-RUyed.d.ts.map +1 -0
  97. package/dist/esm/ai/image-limits.d.ts.map +1 -1
  98. package/dist/esm/ai/image-limits.js +5 -5
  99. package/dist/esm/ai/image-limits.js.map +1 -1
  100. package/dist/esm/ai/llms/llms.d.ts +1 -1
  101. package/dist/esm/ai/llms/llms.d.ts.map +1 -1
  102. package/dist/esm/ai/llms/llms.js +1 -2
  103. package/dist/esm/ai/llms/llms.js.map +1 -1
  104. package/dist/esm/ai/unified-prompts/reminders.js +1 -2
  105. package/dist/esm/ai/unified-prompts/reminders.js.map +1 -1
  106. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
  107. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +25 -28
  108. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
  109. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js +1 -2
  110. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/brain.js.map +1 -1
  111. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js +1 -2
  112. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/cli-help.js.map +1 -1
  113. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js +1 -2
  114. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/config-docs.js.map +1 -1
  115. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js +1 -2
  116. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/custom-components-instructions.js.map +1 -1
  117. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js +1 -2
  118. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/dashboard-instructions.js.map +1 -1
  119. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
  120. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +2 -3
  121. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
  122. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +1 -1
  123. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -1
  124. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js +1 -2
  125. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/openapi-specs.js.map +1 -1
  126. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js +1 -2
  127. package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/sdk-interface-source.js.map +1 -1
  128. package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
  129. package/dist/esm/ai/unified-prompts/skill-site-prompt.js +1 -2
  130. package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -1
  131. package/dist/esm/apps/apps-config.d.ts.map +1 -1
  132. package/dist/esm/apps/apps-config.js +1 -1
  133. package/dist/esm/apps/apps-config.js.map +1 -1
  134. package/dist/esm/apps/apps-ui.d.ts +2 -3
  135. package/dist/esm/apps/apps-ui.d.ts.map +1 -1
  136. package/dist/esm/apps/apps-ui.js +2 -3
  137. package/dist/esm/apps/apps-ui.js.map +1 -1
  138. package/dist/esm/config/db-sync-mappings.js +1 -1
  139. package/dist/esm/config/db-sync-mappings.js.map +1 -1
  140. package/dist/esm/config/format.d.ts +1 -1
  141. package/dist/esm/config/format.d.ts.map +1 -1
  142. package/dist/esm/config/format.js +1 -190
  143. package/dist/esm/config/format.js.map +1 -1
  144. package/dist/esm/config/migrate-catalogs-to-product-lines.d.ts.map +1 -1
  145. package/dist/esm/config/migrate-catalogs-to-product-lines.js +1 -194
  146. package/dist/esm/config/migrate-catalogs-to-product-lines.js.map +1 -1
  147. package/dist/esm/config/schema-fuzzer.test.js +20 -173
  148. package/dist/esm/config/schema-fuzzer.test.js.map +1 -1
  149. package/dist/esm/config/schema.d.ts +249 -250
  150. package/dist/esm/config/schema.d.ts.map +1 -1
  151. package/dist/esm/config/schema.js +2 -347
  152. package/dist/esm/config/schema.js.map +1 -1
  153. package/dist/esm/config-authoring.d.ts +1 -1
  154. package/dist/esm/config-authoring.d.ts.map +1 -1
  155. package/dist/esm/config-authoring.js +1 -1
  156. package/dist/esm/config-authoring.js.map +1 -1
  157. package/dist/esm/config-authoring.test.js +2 -3
  158. package/dist/esm/config-authoring.test.js.map +1 -1
  159. package/dist/esm/config-eval.d.ts +1 -1
  160. package/dist/esm/config-eval.d.ts.map +1 -1
  161. package/dist/esm/config-eval.js +1 -43
  162. package/dist/esm/config-eval.js.map +1 -1
  163. package/dist/esm/config-rendering.d.ts.map +1 -1
  164. package/dist/esm/config-rendering.js +1 -46
  165. package/dist/esm/config-rendering.js.map +1 -1
  166. package/dist/esm/crud.d.ts +1 -1
  167. package/dist/esm/crud.d.ts.map +1 -1
  168. package/dist/esm/crud.js +2 -69
  169. package/dist/esm/crud.js.map +1 -1
  170. package/dist/esm/helpers/emails.js +1 -2
  171. package/dist/esm/helpers/emails.js.map +1 -1
  172. package/dist/esm/helpers/init-prompt.d.ts.map +1 -1
  173. package/dist/esm/helpers/init-prompt.js +1 -2
  174. package/dist/esm/helpers/init-prompt.js.map +1 -1
  175. package/dist/esm/helpers/password.d.ts +1 -1
  176. package/dist/esm/helpers/password.d.ts.map +1 -1
  177. package/dist/esm/helpers/password.js +1 -2
  178. package/dist/esm/helpers/password.js.map +1 -1
  179. package/dist/esm/helpers/production-mode.d.ts +1 -1
  180. package/dist/esm/helpers/production-mode.d.ts.map +1 -1
  181. package/dist/esm/helpers/production-mode.js +1 -2
  182. package/dist/esm/helpers/production-mode.js.map +1 -1
  183. package/dist/esm/helpers/support-sla.d.ts.map +1 -1
  184. package/dist/esm/helpers/support-sla.js +1 -1
  185. package/dist/esm/helpers/support-sla.js.map +1 -1
  186. package/dist/esm/helpers/support-sla.test.js +2 -3
  187. package/dist/esm/helpers/support-sla.test.js.map +1 -1
  188. package/dist/esm/helpers/vault/client-side.d.ts.map +1 -1
  189. package/dist/esm/helpers/vault/client-side.js +1 -20
  190. package/dist/esm/helpers/vault/client-side.js.map +1 -1
  191. package/dist/esm/helpers/vault/server-side.js +1 -2
  192. package/dist/esm/helpers/vault/server-side.js.map +1 -1
  193. package/dist/esm/hooks/use-async-callback.d.ts.map +1 -1
  194. package/dist/esm/hooks/use-async-callback.js +1 -2
  195. package/dist/esm/hooks/use-async-callback.js.map +1 -1
  196. package/dist/esm/hooks/use-async-external-store.d.ts +1 -1
  197. package/dist/esm/hooks/use-async-external-store.d.ts.map +1 -1
  198. package/dist/esm/hooks/use-async-external-store.js +1 -2
  199. package/dist/esm/hooks/use-async-external-store.js.map +1 -1
  200. package/dist/esm/hooks/use-hash.js +1 -2
  201. package/dist/esm/hooks/use-hash.js.map +1 -1
  202. package/dist/esm/hooks/use-hover.d.ts.map +1 -1
  203. package/dist/esm/hooks/use-hover.js +1 -2
  204. package/dist/esm/hooks/use-hover.js.map +1 -1
  205. package/dist/esm/hooks/use-strict-memo.d.ts.map +1 -1
  206. package/dist/esm/hooks/use-strict-memo.js +1 -70
  207. package/dist/esm/hooks/use-strict-memo.js.map +1 -1
  208. package/dist/esm/index.d.ts +4 -4
  209. package/dist/esm/index.js +1 -2
  210. package/dist/esm/interface/admin-interface.d.ts +19 -19
  211. package/dist/esm/interface/admin-interface.d.ts.map +1 -1
  212. package/dist/esm/interface/admin-interface.js +1 -2
  213. package/dist/esm/interface/admin-interface.js.map +1 -1
  214. package/dist/esm/interface/admin-metrics.d.ts +11 -11
  215. package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
  216. package/dist/esm/interface/admin-metrics.js +1 -2
  217. package/dist/esm/interface/admin-metrics.js.map +1 -1
  218. package/dist/esm/interface/client-interface.d.ts +22 -22
  219. package/dist/esm/interface/client-interface.d.ts.map +1 -1
  220. package/dist/esm/interface/client-interface.js +31 -15
  221. package/dist/esm/interface/client-interface.js.map +1 -1
  222. package/dist/esm/interface/client-interface.test.js +84 -13
  223. package/dist/esm/interface/client-interface.test.js.map +1 -1
  224. package/dist/esm/interface/conversations.d.ts +33 -33
  225. package/dist/esm/interface/conversations.d.ts.map +1 -1
  226. package/dist/esm/interface/conversations.js +1 -2
  227. package/dist/esm/interface/conversations.js.map +1 -1
  228. package/dist/esm/interface/crud/analytics.d.ts.map +1 -1
  229. package/dist/esm/interface/crud/analytics.js +1 -1
  230. package/dist/esm/interface/crud/connected-accounts.d.ts +15 -17
  231. package/dist/esm/interface/crud/connected-accounts.d.ts.map +1 -1
  232. package/dist/esm/interface/crud/connected-accounts.js +1 -2
  233. package/dist/esm/interface/crud/connected-accounts.js.map +1 -1
  234. package/dist/esm/interface/crud/contact-channels.d.ts +24 -26
  235. package/dist/esm/interface/crud/contact-channels.d.ts.map +1 -1
  236. package/dist/esm/interface/crud/contact-channels.js +1 -2
  237. package/dist/esm/interface/crud/contact-channels.js.map +1 -1
  238. package/dist/esm/interface/crud/current-user.d.ts +20 -22
  239. package/dist/esm/interface/crud/current-user.d.ts.map +1 -1
  240. package/dist/esm/interface/crud/current-user.js +25 -29
  241. package/dist/esm/interface/crud/current-user.js.map +1 -1
  242. package/dist/esm/interface/crud/email-outbox.d.ts +32 -34
  243. package/dist/esm/interface/crud/email-outbox.d.ts.map +1 -1
  244. package/dist/esm/interface/crud/email-outbox.js +1 -2
  245. package/dist/esm/interface/crud/email-outbox.js.map +1 -1
  246. package/dist/esm/interface/crud/email-templates.d.ts +16 -18
  247. package/dist/esm/interface/crud/email-templates.d.ts.map +1 -1
  248. package/dist/esm/interface/crud/email-templates.js +1 -2
  249. package/dist/esm/interface/crud/email-templates.js.map +1 -1
  250. package/dist/esm/interface/crud/emails.d.ts +6 -8
  251. package/dist/esm/interface/crud/emails.d.ts.map +1 -1
  252. package/dist/esm/interface/crud/emails.js +1 -2
  253. package/dist/esm/interface/crud/emails.js.map +1 -1
  254. package/dist/esm/interface/crud/internal-api-keys.d.ts +16 -18
  255. package/dist/esm/interface/crud/internal-api-keys.d.ts.map +1 -1
  256. package/dist/esm/interface/crud/internal-api-keys.js +1 -2
  257. package/dist/esm/interface/crud/internal-api-keys.js.map +1 -1
  258. package/dist/esm/interface/crud/invoices.d.ts +2 -2
  259. package/dist/esm/interface/crud/invoices.d.ts.map +1 -1
  260. package/dist/esm/interface/crud/invoices.js +1 -2
  261. package/dist/esm/interface/crud/invoices.js.map +1 -1
  262. package/dist/esm/interface/crud/items.d.ts +6 -8
  263. package/dist/esm/interface/crud/items.d.ts.map +1 -1
  264. package/dist/esm/interface/crud/items.js +12 -16
  265. package/dist/esm/interface/crud/items.js.map +1 -1
  266. package/dist/esm/interface/crud/notification-preferences.d.ts +6 -8
  267. package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -1
  268. package/dist/esm/interface/crud/notification-preferences.js +8 -12
  269. package/dist/esm/interface/crud/notification-preferences.js.map +1 -1
  270. package/dist/esm/interface/crud/oauth-providers.d.ts +24 -26
  271. package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -1
  272. package/dist/esm/interface/crud/oauth-providers.js +1 -2
  273. package/dist/esm/interface/crud/oauth-providers.js.map +1 -1
  274. package/dist/esm/interface/crud/products.d.ts +21 -22
  275. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  276. package/dist/esm/interface/crud/products.js +3 -2
  277. package/dist/esm/interface/crud/products.js.map +1 -1
  278. package/dist/esm/interface/crud/project-api-keys.d.ts +5 -6
  279. package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -1
  280. package/dist/esm/interface/crud/project-api-keys.js +1 -2
  281. package/dist/esm/interface/crud/project-api-keys.js.map +1 -1
  282. package/dist/esm/interface/crud/project-permissions.d.ts +29 -31
  283. package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -1
  284. package/dist/esm/interface/crud/project-permissions.js +1 -2
  285. package/dist/esm/interface/crud/project-permissions.js.map +1 -1
  286. package/dist/esm/interface/crud/projects.d.ts +71 -73
  287. package/dist/esm/interface/crud/projects.d.ts.map +1 -1
  288. package/dist/esm/interface/crud/projects.js +3 -2
  289. package/dist/esm/interface/crud/projects.js.map +1 -1
  290. package/dist/esm/interface/crud/session-replays.d.ts.map +1 -1
  291. package/dist/esm/interface/crud/session-replays.js +1 -1
  292. package/dist/esm/interface/crud/sessions.d.ts +15 -17
  293. package/dist/esm/interface/crud/sessions.d.ts.map +1 -1
  294. package/dist/esm/interface/crud/sessions.js +1 -2
  295. package/dist/esm/interface/crud/sessions.js.map +1 -1
  296. package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -1
  297. package/dist/esm/interface/crud/sign-up-rules.js +1 -1
  298. package/dist/esm/interface/crud/svix-token.d.ts +8 -10
  299. package/dist/esm/interface/crud/svix-token.d.ts.map +1 -1
  300. package/dist/esm/interface/crud/svix-token.js +1 -2
  301. package/dist/esm/interface/crud/svix-token.js.map +1 -1
  302. package/dist/esm/interface/crud/team-invitation-details.d.ts +6 -8
  303. package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -1
  304. package/dist/esm/interface/crud/team-invitation-details.js +1 -2
  305. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -1
  306. package/dist/esm/interface/crud/team-invitation.d.ts +7 -9
  307. package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -1
  308. package/dist/esm/interface/crud/team-invitation.js +1 -2
  309. package/dist/esm/interface/crud/team-invitation.js.map +1 -1
  310. package/dist/esm/interface/crud/team-member-profiles.d.ts +26 -28
  311. package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -1
  312. package/dist/esm/interface/crud/team-member-profiles.js +1 -2
  313. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -1
  314. package/dist/esm/interface/crud/team-memberships.d.ts +14 -16
  315. package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -1
  316. package/dist/esm/interface/crud/team-memberships.js +1 -2
  317. package/dist/esm/interface/crud/team-memberships.js.map +1 -1
  318. package/dist/esm/interface/crud/team-permissions.d.ts +29 -31
  319. package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -1
  320. package/dist/esm/interface/crud/team-permissions.js +1 -2
  321. package/dist/esm/interface/crud/team-permissions.js.map +1 -1
  322. package/dist/esm/interface/crud/teams.d.ts +36 -38
  323. package/dist/esm/interface/crud/teams.d.ts.map +1 -1
  324. package/dist/esm/interface/crud/teams.js +2 -4
  325. package/dist/esm/interface/crud/teams.js.map +1 -1
  326. package/dist/esm/interface/crud/transactions.d.ts +14 -16
  327. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  328. package/dist/esm/interface/crud/transactions.js +7 -13
  329. package/dist/esm/interface/crud/transactions.js.map +1 -1
  330. package/dist/esm/interface/crud/users.d.ts +11 -12
  331. package/dist/esm/interface/crud/users.d.ts.map +1 -1
  332. package/dist/esm/interface/crud/users.js +9 -5
  333. package/dist/esm/interface/crud/users.js.map +1 -1
  334. package/dist/esm/interface/handler-urls.d.ts +1 -1
  335. package/dist/esm/interface/handler-urls.d.ts.map +1 -1
  336. package/dist/esm/interface/handler-urls.js +1 -2
  337. package/dist/esm/interface/page-component-versions.d.ts +1 -1
  338. package/dist/esm/interface/page-component-versions.d.ts.map +1 -1
  339. package/dist/esm/interface/page-component-versions.js +1 -2
  340. package/dist/esm/interface/page-component-versions.js.map +1 -1
  341. package/dist/esm/interface/plan-usage.d.ts +1 -1
  342. package/dist/esm/interface/plan-usage.d.ts.map +1 -1
  343. package/dist/esm/interface/plan-usage.js +1 -2
  344. package/dist/esm/interface/plan-usage.js.map +1 -1
  345. package/dist/esm/interface/server-interface.d.ts +19 -19
  346. package/dist/esm/interface/server-interface.d.ts.map +1 -1
  347. package/dist/esm/interface/server-interface.js +1 -2
  348. package/dist/esm/interface/server-interface.js.map +1 -1
  349. package/dist/esm/interface/webhooks.d.ts +2 -2
  350. package/dist/esm/interface/webhooks.d.ts.map +1 -1
  351. package/dist/esm/interface/webhooks.js +1 -2
  352. package/dist/esm/interface/webhooks.js.map +1 -1
  353. package/dist/esm/known-errors.d.ts +2 -2
  354. package/dist/esm/known-errors.d.ts.map +1 -1
  355. package/dist/esm/known-errors.js +10 -21
  356. package/dist/esm/known-errors.js.map +1 -1
  357. package/dist/esm/payments/payment-methods.d.ts.map +1 -1
  358. package/dist/esm/payments/payment-methods.js +1 -1
  359. package/dist/esm/payments/payment-methods.js.map +1 -1
  360. package/dist/esm/payments/stripe-limits.d.ts.map +1 -1
  361. package/dist/esm/payments/stripe-limits.js +1 -1
  362. package/dist/esm/payments/stripe-limits.js.map +1 -1
  363. package/dist/esm/plans.d.ts.map +1 -1
  364. package/dist/esm/plans.js +1 -1
  365. package/dist/esm/plans.js.map +1 -1
  366. package/dist/esm/schema-fields.d.ts +14 -14
  367. package/dist/esm/schema-fields.d.ts.map +1 -1
  368. package/dist/esm/schema-fields.js +3 -64
  369. package/dist/esm/schema-fields.js.map +1 -1
  370. package/dist/esm/sessions.d.ts +6 -6
  371. package/dist/esm/sessions.d.ts.map +1 -1
  372. package/dist/esm/sessions.js +1 -2
  373. package/dist/esm/sessions.js.map +1 -1
  374. package/dist/esm/sessions.test.js +2 -3
  375. package/dist/esm/sessions.test.js.map +1 -1
  376. package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  377. package/dist/esm/utils/analytics-clickmap-overlay.js +1 -1
  378. package/dist/esm/utils/api-keys.d.ts.map +1 -1
  379. package/dist/esm/utils/api-keys.js +1 -2
  380. package/dist/esm/utils/api-keys.js.map +1 -1
  381. package/dist/esm/utils/arrays.d.ts.map +1 -1
  382. package/dist/esm/utils/arrays.js +1 -470
  383. package/dist/esm/utils/arrays.js.map +1 -1
  384. package/dist/esm/utils/auth-methods.d.ts.map +1 -1
  385. package/dist/esm/utils/auth-methods.js +1 -1
  386. package/dist/esm/utils/auth-methods.js.map +1 -1
  387. package/dist/esm/utils/base64.d.ts.map +1 -1
  388. package/dist/esm/utils/base64.js +1 -10
  389. package/dist/esm/utils/base64.js.map +1 -1
  390. package/dist/esm/utils/booleans.d.ts.map +1 -1
  391. package/dist/esm/utils/booleans.js +1 -25
  392. package/dist/esm/utils/booleans.js.map +1 -1
  393. package/dist/esm/utils/browser-compat.d.ts.map +1 -1
  394. package/dist/esm/utils/browser-compat.js +1 -1
  395. package/dist/esm/utils/browser-compat.js.map +1 -1
  396. package/dist/esm/utils/bytes.d.ts.map +1 -1
  397. package/dist/esm/utils/bytes.js +3 -198
  398. package/dist/esm/utils/bytes.js.map +1 -1
  399. package/dist/esm/utils/caches.d.ts +1 -1
  400. package/dist/esm/utils/caches.d.ts.map +1 -1
  401. package/dist/esm/utils/caches.js +1 -27
  402. package/dist/esm/utils/caches.js.map +1 -1
  403. package/dist/esm/utils/cel-fields.d.ts.map +1 -1
  404. package/dist/esm/utils/cel-fields.js +1 -2
  405. package/dist/esm/utils/cel-fields.js.map +1 -1
  406. package/dist/esm/utils/cloud-hosts.d.ts.map +1 -1
  407. package/dist/esm/utils/cloud-hosts.js +1 -27
  408. package/dist/esm/utils/cloud-hosts.js.map +1 -1
  409. package/dist/esm/utils/compile-time.d.ts.map +1 -1
  410. package/dist/esm/utils/compile-time.js +1 -1
  411. package/dist/esm/utils/compile-time.js.map +1 -1
  412. package/dist/esm/utils/country-codes.d.ts.map +1 -1
  413. package/dist/esm/utils/country-codes.js +1 -16
  414. package/dist/esm/utils/country-codes.js.map +1 -1
  415. package/dist/esm/utils/crypto.d.ts.map +1 -1
  416. package/dist/esm/utils/crypto.js +3 -113
  417. package/dist/esm/utils/crypto.js.map +1 -1
  418. package/dist/esm/utils/currencies.d.ts +1 -1
  419. package/dist/esm/utils/currencies.d.ts.map +1 -1
  420. package/dist/esm/utils/currencies.js +2 -37
  421. package/dist/esm/utils/currencies.js.map +1 -1
  422. package/dist/esm/utils/currency-constants.d.ts.map +1 -1
  423. package/dist/esm/utils/currency-constants.js +1 -1
  424. package/dist/esm/utils/currency-constants.js.map +1 -1
  425. package/dist/esm/utils/dates.d.ts.map +1 -1
  426. package/dist/esm/utils/dates.js +1 -44
  427. package/dist/esm/utils/dates.js.map +1 -1
  428. package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -1
  429. package/dist/esm/utils/dev-env-state-path.js +1 -2
  430. package/dist/esm/utils/dev-env-state-path.js.map +1 -1
  431. package/dist/esm/utils/dev-tool.d.ts.map +1 -1
  432. package/dist/esm/utils/dev-tool.js +1 -1
  433. package/dist/esm/utils/dom.d.ts.map +1 -1
  434. package/dist/esm/utils/dom.js +1 -1
  435. package/dist/esm/utils/dom.js.map +1 -1
  436. package/dist/esm/utils/elements-chain.d.ts.map +1 -1
  437. package/dist/esm/utils/elements-chain.js +5 -50
  438. package/dist/esm/utils/elements-chain.js.map +1 -1
  439. package/dist/esm/utils/env.d.ts.map +1 -1
  440. package/dist/esm/utils/env.js +1 -2
  441. package/dist/esm/utils/env.js.map +1 -1
  442. package/dist/esm/utils/env.test.js +2 -3
  443. package/dist/esm/utils/env.test.js.map +1 -1
  444. package/dist/esm/utils/errors.d.ts +1 -1
  445. package/dist/esm/utils/errors.d.ts.map +1 -1
  446. package/dist/esm/utils/errors.js +1 -2
  447. package/dist/esm/utils/errors.js.map +1 -1
  448. package/dist/esm/utils/esbuild.d.ts +1 -1
  449. package/dist/esm/utils/esbuild.d.ts.map +1 -1
  450. package/dist/esm/utils/esbuild.js +2 -3
  451. package/dist/esm/utils/esbuild.js.map +1 -1
  452. package/dist/esm/utils/featurebase.d.ts.map +1 -1
  453. package/dist/esm/utils/featurebase.js +1 -2
  454. package/dist/esm/utils/featurebase.js.map +1 -1
  455. package/dist/esm/utils/fs.d.ts.map +1 -1
  456. package/dist/esm/utils/fs.js +1 -2
  457. package/dist/esm/utils/fs.js.map +1 -1
  458. package/dist/esm/utils/functions.d.ts.map +1 -1
  459. package/dist/esm/utils/functions.js +1 -24
  460. package/dist/esm/utils/functions.js.map +1 -1
  461. package/dist/esm/utils/geo.d.ts.map +1 -1
  462. package/dist/esm/utils/geo.js +1 -2
  463. package/dist/esm/utils/geo.js.map +1 -1
  464. package/dist/esm/utils/globals.d.ts.map +1 -1
  465. package/dist/esm/utils/globals.js +1 -1
  466. package/dist/esm/utils/globals.js.map +1 -1
  467. package/dist/esm/utils/hashes.d.ts.map +1 -1
  468. package/dist/esm/utils/hashes.js +1 -2
  469. package/dist/esm/utils/hashes.js.map +1 -1
  470. package/dist/esm/utils/html.d.ts.map +1 -1
  471. package/dist/esm/utils/html.js +1 -19
  472. package/dist/esm/utils/html.js.map +1 -1
  473. package/dist/esm/utils/http.d.ts.map +1 -1
  474. package/dist/esm/utils/http.js +1 -19
  475. package/dist/esm/utils/http.js.map +1 -1
  476. package/dist/esm/utils/ips.d.ts.map +1 -1
  477. package/dist/esm/utils/ips.js +1 -25
  478. package/dist/esm/utils/ips.js.map +1 -1
  479. package/dist/esm/utils/json.d.ts +1 -1
  480. package/dist/esm/utils/json.d.ts.map +1 -1
  481. package/dist/esm/utils/json.js +1 -155
  482. package/dist/esm/utils/json.js.map +1 -1
  483. package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -1
  484. package/dist/esm/utils/jsx-editable-transpiler.js +1 -2
  485. package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -1
  486. package/dist/esm/utils/jsx-editable-transpiler.test.js +2 -3
  487. package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -1
  488. package/dist/esm/utils/jwt.d.ts.map +1 -1
  489. package/dist/esm/utils/jwt.js +1 -2
  490. package/dist/esm/utils/jwt.js.map +1 -1
  491. package/dist/esm/utils/locks.d.ts.map +1 -1
  492. package/dist/esm/utils/locks.js +1 -2
  493. package/dist/esm/utils/locks.js.map +1 -1
  494. package/dist/esm/utils/maps.d.ts.map +1 -1
  495. package/dist/esm/utils/maps.js +1 -111
  496. package/dist/esm/utils/maps.js.map +1 -1
  497. package/dist/esm/utils/math.d.ts.map +1 -1
  498. package/dist/esm/utils/math.js +1 -11
  499. package/dist/esm/utils/math.js.map +1 -1
  500. package/dist/esm/utils/monkey-patch.d.ts.map +1 -1
  501. package/dist/esm/utils/monkey-patch.js +2 -3
  502. package/dist/esm/utils/monkey-patch.js.map +1 -1
  503. package/dist/esm/utils/node-http.js +1 -2
  504. package/dist/esm/utils/node-http.js.map +1 -1
  505. package/dist/esm/utils/numbers.d.ts.map +1 -1
  506. package/dist/esm/utils/numbers.js +1 -45
  507. package/dist/esm/utils/numbers.js.map +1 -1
  508. package/dist/esm/utils/oauth.d.ts.map +1 -1
  509. package/dist/esm/utils/oauth.js +1 -1
  510. package/dist/esm/utils/oauth.js.map +1 -1
  511. package/dist/esm/utils/objects.d.ts.map +1 -1
  512. package/dist/esm/utils/objects.js +1 -622
  513. package/dist/esm/utils/objects.js.map +1 -1
  514. package/dist/esm/utils/paginated-lists.d.ts.map +1 -1
  515. package/dist/esm/utils/paginated-lists.js +1 -2
  516. package/dist/esm/utils/paginated-lists.js.map +1 -1
  517. package/dist/esm/utils/paginated-lists.test.js +2 -3
  518. package/dist/esm/utils/paginated-lists.test.js.map +1 -1
  519. package/dist/esm/utils/passkey.d.ts +1 -1
  520. package/dist/esm/utils/passkey.js +1 -1
  521. package/dist/esm/utils/promises.d.ts +1 -1
  522. package/dist/esm/utils/promises.d.ts.map +1 -1
  523. package/dist/esm/utils/promises.js +1 -160
  524. package/dist/esm/utils/promises.js.map +1 -1
  525. package/dist/esm/utils/proxies.d.ts.map +1 -1
  526. package/dist/esm/utils/proxies.js +1 -37
  527. package/dist/esm/utils/proxies.js.map +1 -1
  528. package/dist/esm/utils/react.d.ts.map +1 -1
  529. package/dist/esm/utils/react.js +1 -41
  530. package/dist/esm/utils/react.js.map +1 -1
  531. package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
  532. package/dist/esm/utils/redirect-urls.js +2 -92
  533. package/dist/esm/utils/redirect-urls.js.map +1 -1
  534. package/dist/esm/utils/regex.js +1 -1
  535. package/dist/esm/utils/regex.js.map +1 -1
  536. package/dist/esm/utils/results.d.ts.map +1 -1
  537. package/dist/esm/utils/results.js +1 -213
  538. package/dist/esm/utils/results.js.map +1 -1
  539. package/dist/esm/utils/sentry.js +1 -1
  540. package/dist/esm/utils/sentry.js.map +1 -1
  541. package/dist/esm/utils/stores.d.ts +3 -3
  542. package/dist/esm/utils/stores.d.ts.map +1 -1
  543. package/dist/esm/utils/stores.js +1 -2
  544. package/dist/esm/utils/stores.js.map +1 -1
  545. package/dist/esm/utils/strings.d.ts.map +1 -1
  546. package/dist/esm/utils/strings.js +1 -251
  547. package/dist/esm/utils/strings.js.map +1 -1
  548. package/dist/esm/utils/strings.nicify.test.js +2 -3
  549. package/dist/esm/utils/strings.nicify.test.js.map +1 -1
  550. package/dist/esm/utils/telemetry.d.ts.map +1 -1
  551. package/dist/esm/utils/telemetry.js +1 -2
  552. package/dist/esm/utils/telemetry.js.map +1 -1
  553. package/dist/esm/utils/turnstile-browser.d.ts +1 -1
  554. package/dist/esm/utils/turnstile-browser.d.ts.map +1 -1
  555. package/dist/esm/utils/turnstile-browser.js +1 -2
  556. package/dist/esm/utils/turnstile-browser.js.map +1 -1
  557. package/dist/esm/utils/turnstile-flow.d.ts +1 -1
  558. package/dist/esm/utils/turnstile-flow.d.ts.map +1 -1
  559. package/dist/esm/utils/turnstile-flow.js +1 -2
  560. package/dist/esm/utils/turnstile-flow.js.map +1 -1
  561. package/dist/esm/utils/turnstile-flow.test.js +2 -3
  562. package/dist/esm/utils/turnstile-flow.test.js.map +1 -1
  563. package/dist/esm/utils/turnstile.d.ts.map +1 -1
  564. package/dist/esm/utils/turnstile.js +1 -1
  565. package/dist/esm/utils/turnstile.js.map +1 -1
  566. package/dist/esm/utils/typed-arrays.js +1 -2
  567. package/dist/esm/utils/typed-arrays.js.map +1 -1
  568. package/dist/esm/utils/types.d.ts +1 -1
  569. package/dist/esm/utils/types.d.ts.map +1 -1
  570. package/dist/esm/utils/types.js +1 -1
  571. package/dist/esm/utils/types.js.map +1 -1
  572. package/dist/esm/utils/unicode.d.ts.map +1 -1
  573. package/dist/esm/utils/unicode.js +1 -13
  574. package/dist/esm/utils/unicode.js.map +1 -1
  575. package/dist/esm/utils/urls.d.ts.map +1 -1
  576. package/dist/esm/utils/urls.js +1 -151
  577. package/dist/esm/utils/urls.js.map +1 -1
  578. package/dist/esm/utils/uuids.d.ts.map +1 -1
  579. package/dist/esm/utils/uuids.js +2 -26
  580. package/dist/esm/utils/uuids.js.map +1 -1
  581. package/dist/format-4JG1MGv5.d.ts +61 -0
  582. package/dist/format-4JG1MGv5.d.ts.map +1 -0
  583. package/dist/handler-urls-BHt3v8Ai.d.ts +70 -0
  584. package/dist/handler-urls-BHt3v8Ai.d.ts.map +1 -0
  585. package/dist/helpers/emails.js +2 -4
  586. package/dist/helpers/emails.js.map +1 -1
  587. package/dist/helpers/init-prompt.d.ts.map +1 -1
  588. package/dist/helpers/init-prompt.js +2 -4
  589. package/dist/helpers/init-prompt.js.map +1 -1
  590. package/dist/helpers/password.d.ts +1 -1
  591. package/dist/helpers/password.d.ts.map +1 -1
  592. package/dist/helpers/password.js +2 -4
  593. package/dist/helpers/password.js.map +1 -1
  594. package/dist/helpers/production-mode.d.ts +1 -1
  595. package/dist/helpers/production-mode.d.ts.map +1 -1
  596. package/dist/helpers/production-mode.js +2 -4
  597. package/dist/helpers/production-mode.js.map +1 -1
  598. package/dist/helpers/support-sla.d.ts.map +1 -1
  599. package/dist/helpers/support-sla.js +2 -3
  600. package/dist/helpers/support-sla.js.map +1 -1
  601. package/dist/helpers/support-sla.test.js +1 -3
  602. package/dist/helpers/support-sla.test.js.map +1 -1
  603. package/dist/helpers/vault/client-side.d.ts.map +1 -1
  604. package/dist/helpers/vault/client-side.js +2 -22
  605. package/dist/helpers/vault/client-side.js.map +1 -1
  606. package/dist/helpers/vault/server-side.js +2 -4
  607. package/dist/helpers/vault/server-side.js.map +1 -1
  608. package/dist/hooks/use-async-callback.d.ts.map +1 -1
  609. package/dist/hooks/use-async-callback.js +4 -5
  610. package/dist/hooks/use-async-callback.js.map +1 -1
  611. package/dist/hooks/use-async-external-store.d.ts +1 -1
  612. package/dist/hooks/use-async-external-store.d.ts.map +1 -1
  613. package/dist/hooks/use-async-external-store.js +2 -4
  614. package/dist/hooks/use-async-external-store.js.map +1 -1
  615. package/dist/hooks/use-hash.js +2 -4
  616. package/dist/hooks/use-hash.js.map +1 -1
  617. package/dist/hooks/use-hover.d.ts.map +1 -1
  618. package/dist/hooks/use-hover.js +2 -4
  619. package/dist/hooks/use-hover.js.map +1 -1
  620. package/dist/hooks/use-strict-memo.d.ts.map +1 -1
  621. package/dist/hooks/use-strict-memo.js +2 -72
  622. package/dist/hooks/use-strict-memo.js.map +1 -1
  623. package/dist/index.d.ts +4 -4
  624. package/dist/index.js +27 -29
  625. package/dist/interface/admin-interface.d.ts +3 -379
  626. package/dist/interface/admin-interface.js +2 -4
  627. package/dist/interface/admin-interface.js.map +1 -1
  628. package/dist/interface/admin-metrics.d.ts +2 -807
  629. package/dist/interface/admin-metrics.js +2 -4
  630. package/dist/interface/admin-metrics.js.map +1 -1
  631. package/dist/interface/client-interface.d.ts +2 -447
  632. package/dist/interface/client-interface.js +32 -17
  633. package/dist/interface/client-interface.js.map +1 -1
  634. package/dist/interface/client-interface.test.js +83 -13
  635. package/dist/interface/client-interface.test.js.map +1 -1
  636. package/dist/interface/conversations.d.ts +33 -33
  637. package/dist/interface/conversations.d.ts.map +1 -1
  638. package/dist/interface/conversations.js +2 -4
  639. package/dist/interface/conversations.js.map +1 -1
  640. package/dist/interface/crud/analytics.d.ts +2 -14
  641. package/dist/interface/crud/connected-accounts.d.ts +2 -68
  642. package/dist/interface/crud/connected-accounts.js +2 -4
  643. package/dist/interface/crud/connected-accounts.js.map +1 -1
  644. package/dist/interface/crud/contact-channels.d.ts +2 -181
  645. package/dist/interface/crud/contact-channels.js +2 -4
  646. package/dist/interface/crud/contact-channels.js.map +1 -1
  647. package/dist/interface/crud/current-user.d.ts +2 -285
  648. package/dist/interface/crud/current-user.js +2 -4
  649. package/dist/interface/crud/current-user.js.map +1 -1
  650. package/dist/interface/crud/email-outbox.d.ts +2 -1465
  651. package/dist/interface/crud/email-outbox.js +4 -5
  652. package/dist/interface/crud/email-outbox.js.map +1 -1
  653. package/dist/interface/crud/email-templates.d.ts +15 -16
  654. package/dist/interface/crud/email-templates.d.ts.map +1 -1
  655. package/dist/interface/crud/email-templates.js +2 -4
  656. package/dist/interface/crud/email-templates.js.map +1 -1
  657. package/dist/interface/crud/emails.d.ts +2 -41
  658. package/dist/interface/crud/emails.js +4 -5
  659. package/dist/interface/crud/emails.js.map +1 -1
  660. package/dist/interface/crud/internal-api-keys.d.ts +2 -140
  661. package/dist/interface/crud/internal-api-keys.js +2 -4
  662. package/dist/interface/crud/internal-api-keys.js.map +1 -1
  663. package/dist/interface/crud/invoices.d.ts +2 -43
  664. package/dist/interface/crud/invoices.js +2 -4
  665. package/dist/interface/crud/invoices.js.map +1 -1
  666. package/dist/interface/crud/items.d.ts +2 -30
  667. package/dist/interface/crud/items.js +2 -4
  668. package/dist/interface/crud/items.js.map +1 -1
  669. package/dist/interface/crud/notification-preferences.d.ts +2 -38
  670. package/dist/interface/crud/notification-preferences.js +2 -4
  671. package/dist/interface/crud/notification-preferences.js.map +1 -1
  672. package/dist/interface/crud/oauth-providers.d.ts +2 -186
  673. package/dist/interface/crud/oauth-providers.js +2 -4
  674. package/dist/interface/crud/oauth-providers.js.map +1 -1
  675. package/dist/interface/crud/products.d.ts +2 -182
  676. package/dist/interface/crud/products.js +4 -4
  677. package/dist/interface/crud/products.js.map +1 -1
  678. package/dist/interface/crud/project-api-keys.d.ts +2 -203
  679. package/dist/interface/crud/project-api-keys.js +2 -4
  680. package/dist/interface/crud/project-api-keys.js.map +1 -1
  681. package/dist/interface/crud/project-permissions.d.ts +2 -161
  682. package/dist/interface/crud/project-permissions.js +4 -5
  683. package/dist/interface/crud/project-permissions.js.map +1 -1
  684. package/dist/interface/crud/projects.d.ts +2 -901
  685. package/dist/interface/crud/projects.js +6 -5
  686. package/dist/interface/crud/projects.js.map +1 -1
  687. package/dist/interface/crud/session-replays.d.ts +2 -83
  688. package/dist/interface/crud/sessions.d.ts +2 -150
  689. package/dist/interface/crud/sessions.js +2 -4
  690. package/dist/interface/crud/sessions.js.map +1 -1
  691. package/dist/interface/crud/sign-up-rules.d.ts.map +1 -1
  692. package/dist/interface/crud/svix-token.d.ts +2 -31
  693. package/dist/interface/crud/svix-token.js +2 -4
  694. package/dist/interface/crud/svix-token.js.map +1 -1
  695. package/dist/interface/crud/team-invitation-details.d.ts +5 -6
  696. package/dist/interface/crud/team-invitation-details.d.ts.map +1 -1
  697. package/dist/interface/crud/team-invitation-details.js +4 -5
  698. package/dist/interface/crud/team-invitation-details.js.map +1 -1
  699. package/dist/interface/crud/team-invitation.d.ts +2 -54
  700. package/dist/interface/crud/team-invitation.js +4 -5
  701. package/dist/interface/crud/team-invitation.js.map +1 -1
  702. package/dist/interface/crud/team-member-profiles.d.ts +2 -286
  703. package/dist/interface/crud/team-member-profiles.js +4 -5
  704. package/dist/interface/crud/team-member-profiles.js.map +1 -1
  705. package/dist/interface/crud/team-memberships.d.ts +2 -75
  706. package/dist/interface/crud/team-memberships.js +2 -4
  707. package/dist/interface/crud/team-memberships.js.map +1 -1
  708. package/dist/interface/crud/team-permissions.d.ts +2 -169
  709. package/dist/interface/crud/team-permissions.js +4 -5
  710. package/dist/interface/crud/team-permissions.js.map +1 -1
  711. package/dist/interface/crud/teams.d.ts +2 -299
  712. package/dist/interface/crud/teams.js +5 -7
  713. package/dist/interface/crud/teams.js.map +1 -1
  714. package/dist/interface/crud/transactions.d.ts +2 -183
  715. package/dist/interface/crud/transactions.js +2 -4
  716. package/dist/interface/crud/transactions.js.map +1 -1
  717. package/dist/interface/crud/users.d.ts +2 -653
  718. package/dist/interface/crud/users.js +12 -8
  719. package/dist/interface/crud/users.js.map +1 -1
  720. package/dist/interface/handler-urls.d.ts +2 -51
  721. package/dist/interface/handler-urls.js +12 -14
  722. package/dist/interface/page-component-versions.d.ts +2 -25
  723. package/dist/interface/page-component-versions.js +2 -4
  724. package/dist/interface/page-component-versions.js.map +1 -1
  725. package/dist/interface/plan-usage.d.ts +2 -57
  726. package/dist/interface/plan-usage.js +2 -4
  727. package/dist/interface/plan-usage.js.map +1 -1
  728. package/dist/interface/server-interface.d.ts +2 -257
  729. package/dist/interface/server-interface.js +2 -4
  730. package/dist/interface/server-interface.js.map +1 -1
  731. package/dist/interface/webhooks.d.ts +2 -326
  732. package/dist/interface/webhooks.js +2 -4
  733. package/dist/interface/webhooks.js.map +1 -1
  734. package/dist/internal-api-keys-D8IYDodH.d.ts +139 -0
  735. package/dist/internal-api-keys-D8IYDodH.d.ts.map +1 -0
  736. package/dist/invoices-U65KzAZX.d.ts +43 -0
  737. package/dist/invoices-U65KzAZX.d.ts.map +1 -0
  738. package/dist/items-DlLSlVUD.d.ts +29 -0
  739. package/dist/items-DlLSlVUD.d.ts.map +1 -0
  740. package/dist/json-a1QIXu5z.d.ts +15 -0
  741. package/dist/json-a1QIXu5z.d.ts.map +1 -0
  742. package/dist/known-errors-Bm4a61wL.d.ts +575 -0
  743. package/dist/known-errors-Bm4a61wL.d.ts.map +1 -0
  744. package/dist/known-errors.d.ts +2 -575
  745. package/dist/known-errors.js +11 -23
  746. package/dist/known-errors.js.map +1 -1
  747. package/dist/notification-preferences-Bmzr_EOY.d.ts +37 -0
  748. package/dist/notification-preferences-Bmzr_EOY.d.ts.map +1 -0
  749. package/dist/oauth-providers-BMkKSSlA.d.ts +185 -0
  750. package/dist/oauth-providers-BMkKSSlA.d.ts.map +1 -0
  751. package/dist/objects-DkCkeBWE.d.ts +59 -0
  752. package/dist/objects-DkCkeBWE.d.ts.map +1 -0
  753. package/dist/passkey-CKg87UH-.d.ts +2 -0
  754. package/dist/payments/payment-methods.d.ts.map +1 -1
  755. package/dist/payments/payment-methods.js +2 -3
  756. package/dist/payments/payment-methods.js.map +1 -1
  757. package/dist/payments/stripe-limits.d.ts.map +1 -1
  758. package/dist/payments/stripe-limits.js +2 -3
  759. package/dist/payments/stripe-limits.js.map +1 -1
  760. package/dist/plan-usage-DfDoj5K4.d.ts +57 -0
  761. package/dist/plan-usage-DfDoj5K4.d.ts.map +1 -0
  762. package/dist/plans.d.ts.map +1 -1
  763. package/dist/plans.js +2 -3
  764. package/dist/plans.js.map +1 -1
  765. package/dist/products-Bs74ld-v.d.ts +182 -0
  766. package/dist/products-Bs74ld-v.d.ts.map +1 -0
  767. package/dist/project-api-keys--7V5X_UW.d.ts +203 -0
  768. package/dist/project-api-keys--7V5X_UW.d.ts.map +1 -0
  769. package/dist/project-permissions-kdi675F-.d.ts +160 -0
  770. package/dist/project-permissions-kdi675F-.d.ts.map +1 -0
  771. package/dist/projects-CgFGB3nO.d.ts +900 -0
  772. package/dist/projects-CgFGB3nO.d.ts.map +1 -0
  773. package/dist/results-DP3BzoL6.d.ts +70 -0
  774. package/dist/results-DP3BzoL6.d.ts.map +1 -0
  775. package/dist/{chunk-BE-pF4vm.js → rolldown-runtime-D6vf50IK.js} +12 -18
  776. package/dist/schema-01nWxmb4.d.ts +2328 -0
  777. package/dist/schema-01nWxmb4.d.ts.map +1 -0
  778. package/dist/schema-fields-DqGQ4kF7.d.ts +517 -0
  779. package/dist/schema-fields-DqGQ4kF7.d.ts.map +1 -0
  780. package/dist/schema-fields.d.ts +3 -518
  781. package/dist/schema-fields.js +21 -82
  782. package/dist/schema-fields.js.map +1 -1
  783. package/dist/server-interface-BUPG1kor.d.ts +257 -0
  784. package/dist/server-interface-BUPG1kor.d.ts.map +1 -0
  785. package/dist/session-replays-CXqhDpZq.d.ts +83 -0
  786. package/dist/session-replays-CXqhDpZq.d.ts.map +1 -0
  787. package/dist/sessions-B7Ko2Ldr.d.ts +149 -0
  788. package/dist/sessions-B7Ko2Ldr.d.ts.map +1 -0
  789. package/dist/sessions-d8qtvBUB.d.ts +175 -0
  790. package/dist/sessions-d8qtvBUB.d.ts.map +1 -0
  791. package/dist/sessions.d.ts +2 -175
  792. package/dist/sessions.js +4 -5
  793. package/dist/sessions.js.map +1 -1
  794. package/dist/sessions.test.js +1 -3
  795. package/dist/sessions.test.js.map +1 -1
  796. package/dist/strings-DWgkUybS.d.ts +76 -0
  797. package/dist/strings-DWgkUybS.d.ts.map +1 -0
  798. package/dist/svix-token-BsMrLGvy.d.ts +30 -0
  799. package/dist/svix-token-BsMrLGvy.d.ts.map +1 -0
  800. package/dist/team-invitation-Cyqt9oWw.d.ts +53 -0
  801. package/dist/team-invitation-Cyqt9oWw.d.ts.map +1 -0
  802. package/dist/team-member-profiles-uTluO8XI.d.ts +285 -0
  803. package/dist/team-member-profiles-uTluO8XI.d.ts.map +1 -0
  804. package/dist/team-memberships-DZHk2A5b.d.ts +74 -0
  805. package/dist/team-memberships-DZHk2A5b.d.ts.map +1 -0
  806. package/dist/team-permissions-DqOpaOWh.d.ts +168 -0
  807. package/dist/team-permissions-DqOpaOWh.d.ts.map +1 -0
  808. package/dist/teams-CQMcBnjM.d.ts +298 -0
  809. package/dist/teams-CQMcBnjM.d.ts.map +1 -0
  810. package/dist/transactions-DhnbvGH5.d.ts +182 -0
  811. package/dist/transactions-DhnbvGH5.d.ts.map +1 -0
  812. package/dist/types-DfTcxNtM.d.ts +77 -0
  813. package/dist/types-DfTcxNtM.d.ts.map +1 -0
  814. package/dist/users-CmBBuF00.d.ts +653 -0
  815. package/dist/users-CmBBuF00.d.ts.map +1 -0
  816. package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  817. package/dist/utils/analytics-clickmap-overlay.js +2 -3
  818. package/dist/utils/analytics-clickmap-overlay.js.map +1 -1
  819. package/dist/utils/api-keys.d.ts.map +1 -1
  820. package/dist/utils/api-keys.js +4 -5
  821. package/dist/utils/api-keys.js.map +1 -1
  822. package/dist/utils/arrays.d.ts.map +1 -1
  823. package/dist/utils/arrays.js +2 -472
  824. package/dist/utils/arrays.js.map +1 -1
  825. package/dist/utils/auth-methods.d.ts.map +1 -1
  826. package/dist/utils/auth-methods.js +2 -3
  827. package/dist/utils/auth-methods.js.map +1 -1
  828. package/dist/utils/base64.d.ts.map +1 -1
  829. package/dist/utils/base64.js +2 -12
  830. package/dist/utils/base64.js.map +1 -1
  831. package/dist/utils/booleans.d.ts.map +1 -1
  832. package/dist/utils/booleans.js +2 -27
  833. package/dist/utils/booleans.js.map +1 -1
  834. package/dist/utils/browser-compat.d.ts.map +1 -1
  835. package/dist/utils/browser-compat.js +2 -3
  836. package/dist/utils/browser-compat.js.map +1 -1
  837. package/dist/utils/bytes.d.ts.map +1 -1
  838. package/dist/utils/bytes.js +4 -200
  839. package/dist/utils/bytes.js.map +1 -1
  840. package/dist/utils/caches.d.ts.map +1 -1
  841. package/dist/utils/caches.js +2 -29
  842. package/dist/utils/caches.js.map +1 -1
  843. package/dist/utils/cel-fields.d.ts.map +1 -1
  844. package/dist/utils/cel-fields.js +2 -4
  845. package/dist/utils/cel-fields.js.map +1 -1
  846. package/dist/utils/cloud-hosts.d.ts.map +1 -1
  847. package/dist/utils/cloud-hosts.js +2 -29
  848. package/dist/utils/cloud-hosts.js.map +1 -1
  849. package/dist/utils/compile-time.d.ts.map +1 -1
  850. package/dist/utils/compile-time.js +2 -3
  851. package/dist/utils/compile-time.js.map +1 -1
  852. package/dist/utils/country-codes.d.ts +2 -11
  853. package/dist/utils/country-codes.js +2 -18
  854. package/dist/utils/country-codes.js.map +1 -1
  855. package/dist/utils/crypto.d.ts.map +1 -1
  856. package/dist/utils/crypto.js +4 -115
  857. package/dist/utils/crypto.js.map +1 -1
  858. package/dist/utils/currencies.d.ts +1 -1
  859. package/dist/utils/currencies.d.ts.map +1 -1
  860. package/dist/utils/currencies.js +3 -39
  861. package/dist/utils/currencies.js.map +1 -1
  862. package/dist/utils/currency-constants.d.ts +2 -45
  863. package/dist/utils/currency-constants.js +2 -3
  864. package/dist/utils/currency-constants.js.map +1 -1
  865. package/dist/utils/dates.d.ts +2 -23
  866. package/dist/utils/dates.js +2 -46
  867. package/dist/utils/dates.js.map +1 -1
  868. package/dist/utils/dev-env-state-path.d.ts.map +1 -1
  869. package/dist/utils/dev-env-state-path.js +2 -4
  870. package/dist/utils/dev-env-state-path.js.map +1 -1
  871. package/dist/utils/dev-tool.d.ts.map +1 -1
  872. package/dist/utils/dev-tool.js +2 -3
  873. package/dist/utils/dev-tool.js.map +1 -1
  874. package/dist/utils/dom.d.ts.map +1 -1
  875. package/dist/utils/dom.js +2 -3
  876. package/dist/utils/dom.js.map +1 -1
  877. package/dist/utils/elements-chain.d.ts.map +1 -1
  878. package/dist/utils/elements-chain.js +6 -52
  879. package/dist/utils/elements-chain.js.map +1 -1
  880. package/dist/utils/env.d.ts.map +1 -1
  881. package/dist/utils/env.js +2 -4
  882. package/dist/utils/env.js.map +1 -1
  883. package/dist/utils/env.test.js +1 -3
  884. package/dist/utils/env.test.js.map +1 -1
  885. package/dist/utils/errors.d.ts +2 -238
  886. package/dist/utils/errors.js +2 -4
  887. package/dist/utils/errors.js.map +1 -1
  888. package/dist/utils/esbuild.d.ts +1 -1
  889. package/dist/utils/esbuild.d.ts.map +1 -1
  890. package/dist/utils/esbuild.js +5 -6
  891. package/dist/utils/esbuild.js.map +1 -1
  892. package/dist/utils/featurebase.d.ts.map +1 -1
  893. package/dist/utils/featurebase.js +2 -4
  894. package/dist/utils/featurebase.js.map +1 -1
  895. package/dist/utils/fs.d.ts.map +1 -1
  896. package/dist/utils/fs.js +5 -6
  897. package/dist/utils/fs.js.map +1 -1
  898. package/dist/utils/functions.d.ts.map +1 -1
  899. package/dist/utils/functions.js +2 -26
  900. package/dist/utils/functions.js.map +1 -1
  901. package/dist/utils/geo.d.ts.map +1 -1
  902. package/dist/utils/geo.js +2 -4
  903. package/dist/utils/geo.js.map +1 -1
  904. package/dist/utils/globals.d.ts.map +1 -1
  905. package/dist/utils/globals.js +2 -3
  906. package/dist/utils/globals.js.map +1 -1
  907. package/dist/utils/hashes.d.ts.map +1 -1
  908. package/dist/utils/hashes.js +4 -5
  909. package/dist/utils/hashes.js.map +1 -1
  910. package/dist/utils/html.d.ts.map +1 -1
  911. package/dist/utils/html.js +2 -21
  912. package/dist/utils/html.js.map +1 -1
  913. package/dist/utils/http.d.ts.map +1 -1
  914. package/dist/utils/http.js +2 -21
  915. package/dist/utils/http.js.map +1 -1
  916. package/dist/utils/ips.d.ts.map +1 -1
  917. package/dist/utils/ips.js +4 -28
  918. package/dist/utils/ips.js.map +1 -1
  919. package/dist/utils/json.d.ts +2 -15
  920. package/dist/utils/json.js +2 -157
  921. package/dist/utils/json.js.map +1 -1
  922. package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -1
  923. package/dist/utils/jsx-editable-transpiler.js +7 -8
  924. package/dist/utils/jsx-editable-transpiler.js.map +1 -1
  925. package/dist/utils/jsx-editable-transpiler.test.js +1 -3
  926. package/dist/utils/jsx-editable-transpiler.test.js.map +1 -1
  927. package/dist/utils/jwt.d.ts.map +1 -1
  928. package/dist/utils/jwt.js +6 -7
  929. package/dist/utils/jwt.js.map +1 -1
  930. package/dist/utils/locks.d.ts.map +1 -1
  931. package/dist/utils/locks.js +2 -4
  932. package/dist/utils/locks.js.map +1 -1
  933. package/dist/utils/maps.d.ts.map +1 -1
  934. package/dist/utils/maps.js +2 -113
  935. package/dist/utils/maps.js.map +1 -1
  936. package/dist/utils/math.d.ts.map +1 -1
  937. package/dist/utils/math.js +2 -13
  938. package/dist/utils/math.js.map +1 -1
  939. package/dist/utils/monkey-patch.d.ts.map +1 -1
  940. package/dist/utils/monkey-patch.js +3 -5
  941. package/dist/utils/monkey-patch.js.map +1 -1
  942. package/dist/utils/node-http.js +2 -4
  943. package/dist/utils/node-http.js.map +1 -1
  944. package/dist/utils/numbers.d.ts.map +1 -1
  945. package/dist/utils/numbers.js +2 -47
  946. package/dist/utils/numbers.js.map +1 -1
  947. package/dist/utils/oauth.d.ts.map +1 -1
  948. package/dist/utils/oauth.js +2 -3
  949. package/dist/utils/oauth.js.map +1 -1
  950. package/dist/utils/objects.d.ts +2 -59
  951. package/dist/utils/objects.js +2 -624
  952. package/dist/utils/objects.js.map +1 -1
  953. package/dist/utils/paginated-lists.d.ts.map +1 -1
  954. package/dist/utils/paginated-lists.js +2 -4
  955. package/dist/utils/paginated-lists.js.map +1 -1
  956. package/dist/utils/paginated-lists.test.js +1 -3
  957. package/dist/utils/paginated-lists.test.js.map +1 -1
  958. package/dist/utils/passkey.d.ts +2 -2
  959. package/dist/utils/promises.d.ts +1 -1
  960. package/dist/utils/promises.d.ts.map +1 -1
  961. package/dist/utils/promises.js +2 -162
  962. package/dist/utils/promises.js.map +1 -1
  963. package/dist/utils/proxies.d.ts.map +1 -1
  964. package/dist/utils/proxies.js +2 -39
  965. package/dist/utils/proxies.js.map +1 -1
  966. package/dist/utils/react.d.ts.map +1 -1
  967. package/dist/utils/react.js +4 -44
  968. package/dist/utils/react.js.map +1 -1
  969. package/dist/utils/redirect-urls.d.ts.map +1 -1
  970. package/dist/utils/redirect-urls.js +3 -94
  971. package/dist/utils/redirect-urls.js.map +1 -1
  972. package/dist/utils/regex.js +2 -3
  973. package/dist/utils/regex.js.map +1 -1
  974. package/dist/utils/results.d.ts +2 -70
  975. package/dist/utils/results.js +2 -215
  976. package/dist/utils/results.js.map +1 -1
  977. package/dist/utils/sentry.js +2 -3
  978. package/dist/utils/sentry.js.map +1 -1
  979. package/dist/utils/stores.d.ts +1 -1
  980. package/dist/utils/stores.d.ts.map +1 -1
  981. package/dist/utils/stores.js +2 -4
  982. package/dist/utils/stores.js.map +1 -1
  983. package/dist/utils/strings.d.ts +2 -76
  984. package/dist/utils/strings.js +2 -253
  985. package/dist/utils/strings.js.map +1 -1
  986. package/dist/utils/strings.nicify.test.js +1 -3
  987. package/dist/utils/strings.nicify.test.js.map +1 -1
  988. package/dist/utils/telemetry.d.ts.map +1 -1
  989. package/dist/utils/telemetry.js +2 -4
  990. package/dist/utils/telemetry.js.map +1 -1
  991. package/dist/utils/turnstile-browser.d.ts.map +1 -1
  992. package/dist/utils/turnstile-browser.js +2 -4
  993. package/dist/utils/turnstile-browser.js.map +1 -1
  994. package/dist/utils/turnstile-flow.d.ts.map +1 -1
  995. package/dist/utils/turnstile-flow.js +2 -4
  996. package/dist/utils/turnstile-flow.js.map +1 -1
  997. package/dist/utils/turnstile-flow.test.js +1 -3
  998. package/dist/utils/turnstile-flow.test.js.map +1 -1
  999. package/dist/utils/turnstile.d.ts.map +1 -1
  1000. package/dist/utils/turnstile.js +2 -3
  1001. package/dist/utils/turnstile.js.map +1 -1
  1002. package/dist/utils/typed-arrays.js +2 -4
  1003. package/dist/utils/typed-arrays.js.map +1 -1
  1004. package/dist/utils/types.d.ts +2 -77
  1005. package/dist/utils/types.js +2 -3
  1006. package/dist/utils/types.js.map +1 -1
  1007. package/dist/utils/unicode.d.ts.map +1 -1
  1008. package/dist/utils/unicode.js +2 -15
  1009. package/dist/utils/unicode.js.map +1 -1
  1010. package/dist/utils/urls.d.ts.map +1 -1
  1011. package/dist/utils/urls.js +2 -153
  1012. package/dist/utils/urls.js.map +1 -1
  1013. package/dist/utils/uuids.d.ts.map +1 -1
  1014. package/dist/utils/uuids.js +3 -28
  1015. package/dist/utils/uuids.js.map +1 -1
  1016. package/dist/webhooks-ByXrdSOx.d.ts +326 -0
  1017. package/dist/webhooks-ByXrdSOx.d.ts.map +1 -0
  1018. package/package.json +2 -8
  1019. package/src/interface/client-interface.test.ts +77 -12
  1020. package/src/interface/client-interface.ts +9 -9
  1021. package/dist/config/format.d.ts.map +0 -1
  1022. package/dist/config/schema.d.ts.map +0 -1
  1023. package/dist/crud.d.ts.map +0 -1
  1024. package/dist/interface/admin-interface.d.ts.map +0 -1
  1025. package/dist/interface/admin-metrics.d.ts.map +0 -1
  1026. package/dist/interface/client-interface.d.ts.map +0 -1
  1027. package/dist/interface/crud/analytics.d.ts.map +0 -1
  1028. package/dist/interface/crud/connected-accounts.d.ts.map +0 -1
  1029. package/dist/interface/crud/contact-channels.d.ts.map +0 -1
  1030. package/dist/interface/crud/current-user.d.ts.map +0 -1
  1031. package/dist/interface/crud/emails.d.ts.map +0 -1
  1032. package/dist/interface/crud/internal-api-keys.d.ts.map +0 -1
  1033. package/dist/interface/crud/invoices.d.ts.map +0 -1
  1034. package/dist/interface/crud/items.d.ts.map +0 -1
  1035. package/dist/interface/crud/notification-preferences.d.ts.map +0 -1
  1036. package/dist/interface/crud/oauth-providers.d.ts.map +0 -1
  1037. package/dist/interface/crud/products.d.ts.map +0 -1
  1038. package/dist/interface/crud/project-api-keys.d.ts.map +0 -1
  1039. package/dist/interface/crud/project-permissions.d.ts.map +0 -1
  1040. package/dist/interface/crud/projects.d.ts.map +0 -1
  1041. package/dist/interface/crud/session-replays.d.ts.map +0 -1
  1042. package/dist/interface/crud/sessions.d.ts.map +0 -1
  1043. package/dist/interface/crud/svix-token.d.ts.map +0 -1
  1044. package/dist/interface/crud/team-invitation.d.ts.map +0 -1
  1045. package/dist/interface/crud/team-member-profiles.d.ts.map +0 -1
  1046. package/dist/interface/crud/team-memberships.d.ts.map +0 -1
  1047. package/dist/interface/crud/team-permissions.d.ts.map +0 -1
  1048. package/dist/interface/crud/teams.d.ts.map +0 -1
  1049. package/dist/interface/crud/transactions.d.ts.map +0 -1
  1050. package/dist/interface/crud/users.d.ts.map +0 -1
  1051. package/dist/interface/handler-urls.d.ts.map +0 -1
  1052. package/dist/interface/page-component-versions.d.ts.map +0 -1
  1053. package/dist/interface/plan-usage.d.ts.map +0 -1
  1054. package/dist/interface/server-interface.d.ts.map +0 -1
  1055. package/dist/interface/webhooks.d.ts.map +0 -1
  1056. package/dist/known-errors.d.ts.map +0 -1
  1057. package/dist/schema-fields.d.ts.map +0 -1
  1058. package/dist/sessions.d.ts.map +0 -1
  1059. package/dist/utils/country-codes.d.ts.map +0 -1
  1060. package/dist/utils/currency-constants.d.ts.map +0 -1
  1061. package/dist/utils/dates.d.ts.map +0 -1
  1062. package/dist/utils/errors.d.ts.map +0 -1
  1063. package/dist/utils/json.d.ts.map +0 -1
  1064. package/dist/utils/objects.d.ts.map +0 -1
  1065. package/dist/utils/results.d.ts.map +0 -1
  1066. package/dist/utils/strings.d.ts.map +0 -1
  1067. package/dist/utils/types.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"redirect-urls.js","names":[],"sources":["../../../src/utils/redirect-urls.tsx"],"sourcesContent":["import { HexclaveAssertionError, captureError } from \"./errors\";\nimport { createUrlIfValid, isLocalhost, matchHostnamePattern } from \"./urls\";\n\ntype TrustedDomainConfig = {\n allowLocalhost?: boolean,\n trustedDomains: readonly (string | null | undefined)[],\n};\n\nconst defaultHostedHandlerDomainSuffix = \".built-with-stack-auth.com\";\nconst hostedHandlerProjectIdPlaceholder = \"{projectId}\";\nconst hostedHandlerPathPlaceholder = \"{hostedPath}\";\nconst defaultPorts = new Map<string, string>([['https:', '443'], ['http:', '80']]);\nconst hostedHandlerTemplateProjectIdA = \"00000000-0000-4000-8000-000000000000\";\nconst hostedHandlerTemplateProjectIdB = \"11111111-1111-4111-8111-111111111111\";\n\nfunction replaceHexclavePortPrefix(input: string | undefined, hexclavePortPrefix: string | undefined): string | undefined {\n if (input == null) return undefined;\n return hexclavePortPrefix ? input.replace(/\\$\\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\\}/g, hexclavePortPrefix) : input;\n}\n\nfunction getHostedHandlerUrlFromTemplate(template: string, projectId: string, hostedPath: string): string {\n return template\n .replaceAll(hostedHandlerProjectIdPlaceholder, projectId)\n .replaceAll(hostedHandlerPathPlaceholder, hostedPath);\n}\n\nfunction assertHostedHandlerTemplateHasProjectOrigin(template: string): void {\n const projectUrlA = new URL(getHostedHandlerUrlFromTemplate(template, hostedHandlerTemplateProjectIdA, \"handler\"));\n const projectUrlB = new URL(getHostedHandlerUrlFromTemplate(template, hostedHandlerTemplateProjectIdB, \"handler\"));\n if (projectUrlA.origin === projectUrlB.origin || !projectUrlA.hostname.includes(hostedHandlerTemplateProjectIdA)) {\n throw new HexclaveAssertionError(\"The hosted handler URL template must put {projectId} in the hostname.\", {\n hostedHandlerUrlTemplate: template,\n hint: \"Use a project-specific origin like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}', not a shared-origin path like 'https://example.com/{projectId}/{hostedPath}'.\",\n });\n }\n}\n\nexport function getHostedHandlerTrustedDomain(options: {\n projectId: string,\n hostedHandlerDomainSuffix?: string,\n hostedHandlerUrlTemplate?: string,\n hexclavePortPrefix?: string,\n}): string {\n return new URL(getHostedHandlerUrlFromConfig({\n ...options,\n hostedPath: \"handler\",\n })).origin;\n}\n\nexport function getHostedHandlerUrlFromConfig(options: {\n projectId: string,\n hostedPath: string,\n hostedHandlerDomainSuffix?: string,\n hostedHandlerUrlTemplate?: string,\n hexclavePortPrefix?: string,\n}): string {\n const configuredTemplate = replaceHexclavePortPrefix(options.hostedHandlerUrlTemplate, options.hexclavePortPrefix);\n return configuredTemplate == null\n ? (() => {\n const domainSuffix = replaceHexclavePortPrefix(options.hostedHandlerDomainSuffix, options.hexclavePortPrefix) ?? defaultHostedHandlerDomainSuffix;\n if (!domainSuffix.startsWith(\".\")) {\n throw new HexclaveAssertionError(\"The hosted handler domain suffix must start with a dot.\", {\n domainSuffix,\n hint: \"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX to a value like '.built-with-stack-auth.com'.\",\n });\n }\n return `https://${options.projectId}${domainSuffix}/${options.hostedPath}`;\n })()\n : (() => {\n if (!configuredTemplate.includes(hostedHandlerProjectIdPlaceholder) || !configuredTemplate.includes(hostedHandlerPathPlaceholder)) {\n throw new HexclaveAssertionError(\"The hosted handler URL template must contain {projectId} and {hostedPath}.\", {\n hostedHandlerUrlTemplate: configuredTemplate,\n hint: \"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE to a value like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}'.\",\n });\n }\n assertHostedHandlerTemplateHasProjectOrigin(configuredTemplate);\n return getHostedHandlerUrlFromTemplate(configuredTemplate, options.projectId, options.hostedPath);\n })();\n}\n\nexport function getImplicitlyTrustedDomainsForProject(options: {\n projectId: string,\n hostedHandlerDomainSuffix?: string,\n hostedHandlerUrlTemplate?: string,\n hexclavePortPrefix?: string,\n}): string[] {\n return [getHostedHandlerTrustedDomain(options)];\n}\n\nfunction normalizePort(url: URL): string {\n const port = url.port || defaultPorts.get(url.protocol) || '';\n return port ? `${url.hostname}:${port}` : url.hostname;\n}\n\nfunction isDefaultPort(url: URL): boolean {\n return !url.port ||\n (url.protocol === 'https:' && url.port === '443') ||\n (url.protocol === 'http:' && url.port === '80');\n}\n\nfunction portsMatch(url1: URL, url2: URL): boolean {\n return normalizePort(url1) === normalizePort(url2);\n}\n\nfunction parseWildcardUrlPattern(pattern: string): { protocol: string, hostPattern: string } | null {\n const protocolSeparatorIndex = pattern.indexOf(\"://\");\n if (protocolSeparatorIndex === -1) return null;\n\n const protocol = `${pattern.slice(0, protocolSeparatorIndex)}:`;\n const hostAndPath = pattern.slice(protocolSeparatorIndex + \"://\".length);\n const pathStartIndex = hostAndPath.indexOf(\"/\");\n const hostPattern = pathStartIndex === -1 ? hostAndPath : hostAndPath.slice(0, pathStartIndex);\n if (hostPattern === \"\") return null;\n return { protocol, hostPattern };\n}\n\nfunction hostPatternWithoutPort(hostPattern: string): string {\n if (!hostPatternHasExplicitPort(hostPattern)) {\n return hostPattern;\n }\n const portSeparatorIndex = hostPattern.lastIndexOf(\":\");\n return hostPattern.slice(0, portSeparatorIndex);\n}\n\nfunction hostPatternHasExplicitPort(hostPattern: string): boolean {\n const portSeparatorIndex = hostPattern.lastIndexOf(\":\");\n if (portSeparatorIndex === -1) {\n return false;\n }\n const port = hostPattern.slice(portSeparatorIndex + 1);\n return port === \"*\" || (port !== \"\" && [...port].every(char => char >= \"0\" && char <= \"9\"));\n}\n\nfunction matchesTrustedDomain(testUrl: URL, pattern: string): boolean {\n const baseUrl = createUrlIfValid(pattern);\n\n if (baseUrl != null && !pattern.includes('*')) {\n return baseUrl.protocol === testUrl.protocol &&\n baseUrl.hostname === testUrl.hostname &&\n portsMatch(baseUrl, testUrl);\n }\n\n const parsedPattern = parseWildcardUrlPattern(pattern);\n if (parsedPattern == null) {\n captureError(\"invalid-redirect-domain\", new HexclaveAssertionError(\"Invalid domain pattern\", { pattern }));\n return false;\n }\n\n if (testUrl.protocol !== parsedPattern.protocol) {\n return false;\n }\n\n const hasPortInPattern = hostPatternHasExplicitPort(parsedPattern.hostPattern);\n return hasPortInPattern\n ? matchHostnamePattern(parsedPattern.hostPattern, normalizePort(testUrl))\n : matchHostnamePattern(parsedPattern.hostPattern, testUrl.hostname) && isDefaultPort(testUrl);\n}\n\nexport function isAcceptedNativeAppUrl(urlOrString: string): boolean {\n const url = createUrlIfValid(urlOrString);\n if (!url) return false;\n\n // Legacy scheme accepted indefinitely; baked into already-shipped Swift SDK binaries.\n return url.protocol === 'stack-auth-mobile-oauth-url:'\n || url.protocol === 'hexclave-mobile-oauth-url:';\n}\n\nexport function validateRedirectUrl(\n urlOrString: string | URL,\n config: TrustedDomainConfig,\n): boolean {\n const url = createUrlIfValid(urlOrString);\n if (!url) return false;\n\n if (config.allowLocalhost === true && isLocalhost(url)) {\n return true;\n }\n\n return config.trustedDomains.some(domain => domain != null && matchesTrustedDomain(url, domain));\n}\n\nexport function getTrustedParentDomain(currentDomain: string, trustedDomains: readonly (string | null | undefined)[]): string | null {\n const hostPatterns = trustedDomains\n .filter((domain): domain is string => domain != null)\n .map((domain) => {\n const url = createUrlIfValid(domain);\n if (url != null && !domain.includes(\"*\")) {\n return url.hostname.toLowerCase();\n }\n const parsedPattern = parseWildcardUrlPattern(domain);\n return parsedPattern == null ? null : hostPatternWithoutPort(parsedPattern.hostPattern).toLowerCase();\n })\n .filter((domain): domain is string => domain != null);\n\n const parts = currentDomain.toLowerCase().split('.');\n for (let i = parts.length - 2; i >= 0; i--) {\n const parentDomain = parts.slice(i).join('.');\n if (hostPatterns.includes(parentDomain) && hostPatterns.includes(`**.${parentDomain}`)) {\n return parentDomain;\n }\n }\n\n return null;\n}\n\nimport.meta.vitest?.test(\"validateRedirectUrl matches exact and wildcard trusted domains\", ({ expect }) => {\n expect(validateRedirectUrl(\"https://example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"https://example.com\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"https://api.example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"https://*.example.com\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"https://api.v2.example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"https://*.example.com\"],\n })).toBe(false);\n});\n\nimport.meta.vitest?.test(\"validateRedirectUrl trusts implicit hosted handler domains\", ({ expect }) => {\n const projectId = \"12345678-1234-4234-8234-123456789abc\";\n expect(validateRedirectUrl(`https://${projectId}.built-with-stack-auth.com/anything`, {\n allowLocalhost: false,\n trustedDomains: getImplicitlyTrustedDomainsForProject({ projectId }),\n })).toBe(true);\n expect(validateRedirectUrl(\"https://other-project.built-with-stack-auth.com/anything\", {\n allowLocalhost: false,\n trustedDomains: getImplicitlyTrustedDomainsForProject({ projectId }),\n })).toBe(false);\n expect(validateRedirectUrl(`http://${projectId}.localhost:9209/anything`, {\n allowLocalhost: false,\n trustedDomains: getImplicitlyTrustedDomainsForProject({\n projectId,\n hostedHandlerUrlTemplate: \"http://{projectId}.localhost:${NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81}09/{hostedPath}\",\n hexclavePortPrefix: \"92\",\n }),\n })).toBe(true);\n});\n\nimport.meta.vitest?.test(\"getImplicitlyTrustedDomainsForProject rejects shared-origin hosted templates\", ({ expect }) => {\n expect(() => getImplicitlyTrustedDomainsForProject({\n projectId: \"12345678-1234-4234-8234-123456789abc\",\n hostedHandlerUrlTemplate: \"https://host.example.com/{projectId}/{hostedPath}\",\n })).toThrowErrorMatchingInlineSnapshot(`\n [HexclaveAssertionError: The hosted handler URL template must put {projectId} in the hostname.\n\n This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]\n `);\n});\n\nimport.meta.vitest?.test(\"validateRedirectUrl respects default and explicit ports\", ({ expect }) => {\n expect(validateRedirectUrl(\"https://example.com:443/path\", {\n allowLocalhost: false,\n trustedDomains: [\"https://example.com\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"http://api.example.com:3000\", {\n allowLocalhost: false,\n trustedDomains: [\"http://*.example.com:3000\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"http://api.example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"http://*.example.com:3000\"],\n })).toBe(false);\n expect(validateRedirectUrl(\"http://api.example.com:1234\", {\n allowLocalhost: false,\n trustedDomains: [\"http://*.example.com:*\"],\n })).toBe(true);\n});\n\nimport.meta.vitest?.test(\"validateRedirectUrl respects localhost allowance and invalid patterns\", ({ expect }) => {\n const originalConsoleError = console.error;\n console.error = () => {};\n try {\n expect(validateRedirectUrl(\"http://localhost:3000\", {\n allowLocalhost: true,\n trustedDomains: [],\n })).toBe(true);\n expect(validateRedirectUrl(\"http://localhost:3000\", {\n allowLocalhost: false,\n trustedDomains: [],\n })).toBe(false);\n expect(validateRedirectUrl(\"https://example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"not a url\"],\n })).toBe(false);\n } finally {\n console.error = originalConsoleError;\n }\n});\n\nimport.meta.vitest?.test(\"getTrustedParentDomain ignores empty entries and strips ports\", ({ expect }) => {\n expect(getTrustedParentDomain(\"app.example.com\", [\n null,\n undefined,\n \"https://example.com\",\n \"https://**.example.com:*\",\n ])).toBe(\"example.com\");\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"redirect-urls.js","names":[],"sources":["../../../src/utils/redirect-urls.tsx"],"sourcesContent":["import { HexclaveAssertionError, captureError } from \"./errors\";\nimport { createUrlIfValid, isLocalhost, matchHostnamePattern } from \"./urls\";\n\ntype TrustedDomainConfig = {\n allowLocalhost?: boolean,\n trustedDomains: readonly (string | null | undefined)[],\n};\n\nconst defaultHostedHandlerDomainSuffix = \".built-with-stack-auth.com\";\nconst hostedHandlerProjectIdPlaceholder = \"{projectId}\";\nconst hostedHandlerPathPlaceholder = \"{hostedPath}\";\nconst defaultPorts = new Map<string, string>([['https:', '443'], ['http:', '80']]);\nconst hostedHandlerTemplateProjectIdA = \"00000000-0000-4000-8000-000000000000\";\nconst hostedHandlerTemplateProjectIdB = \"11111111-1111-4111-8111-111111111111\";\n\nfunction replaceHexclavePortPrefix(input: string | undefined, hexclavePortPrefix: string | undefined): string | undefined {\n if (input == null) return undefined;\n return hexclavePortPrefix ? input.replace(/\\$\\{NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81\\}/g, hexclavePortPrefix) : input;\n}\n\nfunction getHostedHandlerUrlFromTemplate(template: string, projectId: string, hostedPath: string): string {\n return template\n .replaceAll(hostedHandlerProjectIdPlaceholder, projectId)\n .replaceAll(hostedHandlerPathPlaceholder, hostedPath);\n}\n\nfunction assertHostedHandlerTemplateHasProjectOrigin(template: string): void {\n const projectUrlA = new URL(getHostedHandlerUrlFromTemplate(template, hostedHandlerTemplateProjectIdA, \"handler\"));\n const projectUrlB = new URL(getHostedHandlerUrlFromTemplate(template, hostedHandlerTemplateProjectIdB, \"handler\"));\n if (projectUrlA.origin === projectUrlB.origin || !projectUrlA.hostname.includes(hostedHandlerTemplateProjectIdA)) {\n throw new HexclaveAssertionError(\"The hosted handler URL template must put {projectId} in the hostname.\", {\n hostedHandlerUrlTemplate: template,\n hint: \"Use a project-specific origin like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}', not a shared-origin path like 'https://example.com/{projectId}/{hostedPath}'.\",\n });\n }\n}\n\nexport function getHostedHandlerTrustedDomain(options: {\n projectId: string,\n hostedHandlerDomainSuffix?: string,\n hostedHandlerUrlTemplate?: string,\n hexclavePortPrefix?: string,\n}): string {\n return new URL(getHostedHandlerUrlFromConfig({\n ...options,\n hostedPath: \"handler\",\n })).origin;\n}\n\nexport function getHostedHandlerUrlFromConfig(options: {\n projectId: string,\n hostedPath: string,\n hostedHandlerDomainSuffix?: string,\n hostedHandlerUrlTemplate?: string,\n hexclavePortPrefix?: string,\n}): string {\n const configuredTemplate = replaceHexclavePortPrefix(options.hostedHandlerUrlTemplate, options.hexclavePortPrefix);\n return configuredTemplate == null\n ? (() => {\n const domainSuffix = replaceHexclavePortPrefix(options.hostedHandlerDomainSuffix, options.hexclavePortPrefix) ?? defaultHostedHandlerDomainSuffix;\n if (!domainSuffix.startsWith(\".\")) {\n throw new HexclaveAssertionError(\"The hosted handler domain suffix must start with a dot.\", {\n domainSuffix,\n hint: \"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_DOMAIN_SUFFIX to a value like '.built-with-stack-auth.com'.\",\n });\n }\n return `https://${options.projectId}${domainSuffix}/${options.hostedPath}`;\n })()\n : (() => {\n if (!configuredTemplate.includes(hostedHandlerProjectIdPlaceholder) || !configuredTemplate.includes(hostedHandlerPathPlaceholder)) {\n throw new HexclaveAssertionError(\"The hosted handler URL template must contain {projectId} and {hostedPath}.\", {\n hostedHandlerUrlTemplate: configuredTemplate,\n hint: \"Set NEXT_PUBLIC_STACK_HOSTED_HANDLER_URL_TEMPLATE to a value like 'https://{projectId}.built-with-stack-auth.com/{hostedPath}'.\",\n });\n }\n assertHostedHandlerTemplateHasProjectOrigin(configuredTemplate);\n return getHostedHandlerUrlFromTemplate(configuredTemplate, options.projectId, options.hostedPath);\n })();\n}\n\nexport function getImplicitlyTrustedDomainsForProject(options: {\n projectId: string,\n hostedHandlerDomainSuffix?: string,\n hostedHandlerUrlTemplate?: string,\n hexclavePortPrefix?: string,\n}): string[] {\n return [getHostedHandlerTrustedDomain(options)];\n}\n\nfunction normalizePort(url: URL): string {\n const port = url.port || defaultPorts.get(url.protocol) || '';\n return port ? `${url.hostname}:${port}` : url.hostname;\n}\n\nfunction isDefaultPort(url: URL): boolean {\n return !url.port ||\n (url.protocol === 'https:' && url.port === '443') ||\n (url.protocol === 'http:' && url.port === '80');\n}\n\nfunction portsMatch(url1: URL, url2: URL): boolean {\n return normalizePort(url1) === normalizePort(url2);\n}\n\nfunction parseWildcardUrlPattern(pattern: string): { protocol: string, hostPattern: string } | null {\n const protocolSeparatorIndex = pattern.indexOf(\"://\");\n if (protocolSeparatorIndex === -1) return null;\n\n const protocol = `${pattern.slice(0, protocolSeparatorIndex)}:`;\n const hostAndPath = pattern.slice(protocolSeparatorIndex + \"://\".length);\n const pathStartIndex = hostAndPath.indexOf(\"/\");\n const hostPattern = pathStartIndex === -1 ? hostAndPath : hostAndPath.slice(0, pathStartIndex);\n if (hostPattern === \"\") return null;\n return { protocol, hostPattern };\n}\n\nfunction hostPatternWithoutPort(hostPattern: string): string {\n if (!hostPatternHasExplicitPort(hostPattern)) {\n return hostPattern;\n }\n const portSeparatorIndex = hostPattern.lastIndexOf(\":\");\n return hostPattern.slice(0, portSeparatorIndex);\n}\n\nfunction hostPatternHasExplicitPort(hostPattern: string): boolean {\n const portSeparatorIndex = hostPattern.lastIndexOf(\":\");\n if (portSeparatorIndex === -1) {\n return false;\n }\n const port = hostPattern.slice(portSeparatorIndex + 1);\n return port === \"*\" || (port !== \"\" && [...port].every(char => char >= \"0\" && char <= \"9\"));\n}\n\nfunction matchesTrustedDomain(testUrl: URL, pattern: string): boolean {\n const baseUrl = createUrlIfValid(pattern);\n\n if (baseUrl != null && !pattern.includes('*')) {\n return baseUrl.protocol === testUrl.protocol &&\n baseUrl.hostname === testUrl.hostname &&\n portsMatch(baseUrl, testUrl);\n }\n\n const parsedPattern = parseWildcardUrlPattern(pattern);\n if (parsedPattern == null) {\n captureError(\"invalid-redirect-domain\", new HexclaveAssertionError(\"Invalid domain pattern\", { pattern }));\n return false;\n }\n\n if (testUrl.protocol !== parsedPattern.protocol) {\n return false;\n }\n\n const hasPortInPattern = hostPatternHasExplicitPort(parsedPattern.hostPattern);\n return hasPortInPattern\n ? matchHostnamePattern(parsedPattern.hostPattern, normalizePort(testUrl))\n : matchHostnamePattern(parsedPattern.hostPattern, testUrl.hostname) && isDefaultPort(testUrl);\n}\n\nexport function isAcceptedNativeAppUrl(urlOrString: string): boolean {\n const url = createUrlIfValid(urlOrString);\n if (!url) return false;\n\n // Legacy scheme accepted indefinitely; baked into already-shipped Swift SDK binaries.\n return url.protocol === 'stack-auth-mobile-oauth-url:'\n || url.protocol === 'hexclave-mobile-oauth-url:';\n}\n\nexport function validateRedirectUrl(\n urlOrString: string | URL,\n config: TrustedDomainConfig,\n): boolean {\n const url = createUrlIfValid(urlOrString);\n if (!url) return false;\n\n if (config.allowLocalhost === true && isLocalhost(url)) {\n return true;\n }\n\n return config.trustedDomains.some(domain => domain != null && matchesTrustedDomain(url, domain));\n}\n\nexport function getTrustedParentDomain(currentDomain: string, trustedDomains: readonly (string | null | undefined)[]): string | null {\n const hostPatterns = trustedDomains\n .filter((domain): domain is string => domain != null)\n .map((domain) => {\n const url = createUrlIfValid(domain);\n if (url != null && !domain.includes(\"*\")) {\n return url.hostname.toLowerCase();\n }\n const parsedPattern = parseWildcardUrlPattern(domain);\n return parsedPattern == null ? null : hostPatternWithoutPort(parsedPattern.hostPattern).toLowerCase();\n })\n .filter((domain): domain is string => domain != null);\n\n const parts = currentDomain.toLowerCase().split('.');\n for (let i = parts.length - 2; i >= 0; i--) {\n const parentDomain = parts.slice(i).join('.');\n if (hostPatterns.includes(parentDomain) && hostPatterns.includes(`**.${parentDomain}`)) {\n return parentDomain;\n }\n }\n\n return null;\n}\n\nimport.meta.vitest?.test(\"validateRedirectUrl matches exact and wildcard trusted domains\", ({ expect }) => {\n expect(validateRedirectUrl(\"https://example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"https://example.com\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"https://api.example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"https://*.example.com\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"https://api.v2.example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"https://*.example.com\"],\n })).toBe(false);\n});\n\nimport.meta.vitest?.test(\"validateRedirectUrl trusts implicit hosted handler domains\", ({ expect }) => {\n const projectId = \"12345678-1234-4234-8234-123456789abc\";\n expect(validateRedirectUrl(`https://${projectId}.built-with-stack-auth.com/anything`, {\n allowLocalhost: false,\n trustedDomains: getImplicitlyTrustedDomainsForProject({ projectId }),\n })).toBe(true);\n expect(validateRedirectUrl(\"https://other-project.built-with-stack-auth.com/anything\", {\n allowLocalhost: false,\n trustedDomains: getImplicitlyTrustedDomainsForProject({ projectId }),\n })).toBe(false);\n expect(validateRedirectUrl(`http://${projectId}.localhost:9209/anything`, {\n allowLocalhost: false,\n trustedDomains: getImplicitlyTrustedDomainsForProject({\n projectId,\n hostedHandlerUrlTemplate: \"http://{projectId}.localhost:${NEXT_PUBLIC_HEXCLAVE_PORT_PREFIX:-81}09/{hostedPath}\",\n hexclavePortPrefix: \"92\",\n }),\n })).toBe(true);\n});\n\nimport.meta.vitest?.test(\"getImplicitlyTrustedDomainsForProject rejects shared-origin hosted templates\", ({ expect }) => {\n expect(() => getImplicitlyTrustedDomainsForProject({\n projectId: \"12345678-1234-4234-8234-123456789abc\",\n hostedHandlerUrlTemplate: \"https://host.example.com/{projectId}/{hostedPath}\",\n })).toThrowErrorMatchingInlineSnapshot(`\n [HexclaveAssertionError: The hosted handler URL template must put {projectId} in the hostname.\n\n This is likely an error in Hexclave. Please make sure you are running the newest version and report it.]\n `);\n});\n\nimport.meta.vitest?.test(\"validateRedirectUrl respects default and explicit ports\", ({ expect }) => {\n expect(validateRedirectUrl(\"https://example.com:443/path\", {\n allowLocalhost: false,\n trustedDomains: [\"https://example.com\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"http://api.example.com:3000\", {\n allowLocalhost: false,\n trustedDomains: [\"http://*.example.com:3000\"],\n })).toBe(true);\n expect(validateRedirectUrl(\"http://api.example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"http://*.example.com:3000\"],\n })).toBe(false);\n expect(validateRedirectUrl(\"http://api.example.com:1234\", {\n allowLocalhost: false,\n trustedDomains: [\"http://*.example.com:*\"],\n })).toBe(true);\n});\n\nimport.meta.vitest?.test(\"validateRedirectUrl respects localhost allowance and invalid patterns\", ({ expect }) => {\n const originalConsoleError = console.error;\n console.error = () => {};\n try {\n expect(validateRedirectUrl(\"http://localhost:3000\", {\n allowLocalhost: true,\n trustedDomains: [],\n })).toBe(true);\n expect(validateRedirectUrl(\"http://localhost:3000\", {\n allowLocalhost: false,\n trustedDomains: [],\n })).toBe(false);\n expect(validateRedirectUrl(\"https://example.com\", {\n allowLocalhost: false,\n trustedDomains: [\"not a url\"],\n })).toBe(false);\n } finally {\n console.error = originalConsoleError;\n }\n});\n\nimport.meta.vitest?.test(\"getTrustedParentDomain ignores empty entries and strips ports\", ({ expect }) => {\n expect(getTrustedParentDomain(\"app.example.com\", [\n null,\n undefined,\n \"https://example.com\",\n \"https://**.example.com:*\",\n ])).toBe(\"example.com\");\n});\n"],"mappings":"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"}
@@ -7,7 +7,7 @@ function createCachedRegex(pattern) {
7
7
  cachedRegexes.set(pattern, regex);
8
8
  return regex;
9
9
  }
10
-
11
10
  //#endregion
12
11
  export { createCachedRegex };
12
+
13
13
  //# sourceMappingURL=regex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"regex.js","names":[],"sources":["../../../src/utils/regex.tsx"],"sourcesContent":["const cachedRegexes = new Map<string, RegExp>();\n\nexport function createCachedRegex(pattern: string) {\n const cached = cachedRegexes.get(pattern);\n if (cached) return cached;\n\n const regex = new RegExp(pattern);\n cachedRegexes.set(pattern, regex);\n return regex;\n}\n"],"mappings":";AAAA,MAAM,gCAAgB,IAAI,KAAqB;AAE/C,SAAgB,kBAAkB,SAAiB;CACjD,MAAM,SAAS,cAAc,IAAI,QAAQ;AACzC,KAAI,OAAQ,QAAO;CAEnB,MAAM,QAAQ,IAAI,OAAO,QAAQ;AACjC,eAAc,IAAI,SAAS,MAAM;AACjC,QAAO"}
1
+ {"version":3,"file":"regex.js","names":[],"sources":["../../../src/utils/regex.tsx"],"sourcesContent":["const cachedRegexes = new Map<string, RegExp>();\n\nexport function createCachedRegex(pattern: string) {\n const cached = cachedRegexes.get(pattern);\n if (cached) return cached;\n\n const regex = new RegExp(pattern);\n cachedRegexes.set(pattern, regex);\n return regex;\n}\n"],"mappings":";AAAA,MAAM,gCAAgB,IAAI,IAAoB;AAE9C,SAAgB,kBAAkB,SAAiB;CACjD,MAAM,SAAS,cAAc,IAAI,OAAO;CACxC,IAAI,QAAQ,OAAO;CAEnB,MAAM,QAAQ,IAAI,OAAO,OAAO;CAChC,cAAc,IAAI,SAAS,KAAK;CAChC,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"results.d.ts","names":[],"sources":["../../../src/utils/results.tsx"],"mappings":";KAGY,MAAA;EAER,MAAA;EACA,IAAA,EAAM,CAAA;AAAA;EAGN,MAAA;EACA,KAAA,EAAO,CAAA;AAAA;AAAA,KAGC,WAAA,6BACR,MAAA,CAAO,CAAA,EAAG,CAAA;EAGR,MAAA;AAAA;EAGA,QAAA,EAAU,CAAA;AAAA;AAAA,cAKH,MAAA;;;;QAIP,IAAA,EAAQ,CAAA,GAAI,MAAA,CAAO,CAAA;IAAc,MAAA;EAAA;WAM9B,KAAA,EAAS,CAAA,GAAI,MAAA,QAAc,CAAA;IAAO,MAAA;EAAA;;gBAO7B,MAAA,EAAU,MAAA,CAAO,CAAA,EAAG,CAAA,GAAE,QAAA,EAAY,CAAA,KAAI,CAAA,GAAI,CAAA;kBAGxC,MAAA,EAAU,MAAA,CAAO,CAAA,EAAG,CAAA,MAAK,CAAA;uBAMd,MAAA,EAAU,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,CAAA,OAAM,OAAA,CAAQ,CAAA;;;cAkDxD,WAAA;;;UAxEP,IAAA,EAAQ,CAAA,KAAI,MAAA,CAAO,CAAA;IAAc,MAAA;EAAA;aAM9B,KAAA,EAAS,CAAA,KAAI,MAAA,QAAc,CAAA;IAAO,MAAA;EAAA;;;mBAyE1B,MAAA,EAAU,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,GAAE,QAAA,EAAY,CAAA,KAAI,CAAA,GAAI,CAAA;qBAMhD,MAAA,EAAU,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,MAAK,CAAA;;;iBAqC3C,OAAA,CAAA,GAAW,WAAA;EAAoC,MAAA;AAAA;AAAA,iBAC/C,OAAA,GAAA,CAAW,QAAA,EAAU,CAAA,GAAI,WAAA,eAA0B,CAAA;EAAO,MAAA;AAAA;AAAA,iBAoBpD,eAAA,GAAA,CAAmB,OAAA,EAAS,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,MAAA,CAAO,CAAA;AAAA,iBA2B9D,YAAA,GAAA,CAAgB,EAAA,QAAU,CAAA,GAAI,MAAA,CAAO,CAAA;AAAA,iBA4B/B,iBAAA,GAAA,CAAqB,EAAA,QAAU,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,MAAA,CAAO,CAAA;AAAA,iBA4BjE,SAAA,gCAAA,CAA0C,MAAA,EAAQ,MAAA,CAAO,CAAA,EAAG,CAAA,GAAI,EAAA,GAAK,IAAA,EAAM,CAAA,KAAM,CAAA,GAAI,MAAA,CAAO,CAAA,EAAG,CAAA;AAAA,iBAC/F,SAAA,gCAAA,CAA0C,MAAA,EAAQ,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,EAAA,GAAK,IAAA,EAAM,CAAA,KAAM,CAAA,GAAI,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA;AAAA,cAiDlH,UAAA,sBAAgC,cAAA;EAAA,SACR,MAAA,EAAQ,CAAA;cAAR,MAAA,EAAQ,CAAA;EAAA,IAqBhC,QAAA,CAAA;AAAA;AAAA,iBAuCS,KAAA,MAAA,CACb,EAAA,GAAK,YAAA,aAAyB,MAAA,CAAO,CAAA,EAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,CAAA,IAC/D,aAAA;EACE;AAAA;;IACD,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,UAAA,CAAW,CAAA;EAAQ,QAAA;AAAA"}
1
+ {"version":3,"file":"results.d.ts","names":[],"sources":["../../../src/utils/results.tsx"],"mappings":";KAGY,MAAA;EAER,MAAA;EACA,IAAA,EAAM,CAAA;AAAA;EAGN,MAAA;EACA,KAAA,EAAO,CAAC;AAAA;AAAA,KAGA,WAAA,6BACR,MAAA,CAAO,CAAA,EAAG,CAAA;EAGR,MAAA;AAAA;EAGA,QAAA,EAAU,CAAA;AAAA;AAAA,cAKH,MAAA;;;;QAIP,IAAA,EAAQ,CAAA,GAAI,MAAA,CAAO,CAAA;IAAc,MAAA;EAAA;WAM9B,KAAA,EAAS,CAAA,GAAI,MAAA,QAAc,CAAA;IAAO,MAAA;EAAA;;gBAO7B,MAAA,EAAU,MAAA,CAAO,CAAA,EAAG,CAAA,GAAE,QAAA,EAAY,CAAA,KAAI,CAAA,GAAI,CAAA;kBAGxC,MAAA,EAAU,MAAA,CAAO,CAAA,EAAG,CAAA,MAAK,CAAA;uBAMd,MAAA,EAAU,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,CAAA,OAAM,OAAA,CAAQ,CAAA;;;cAkDxD,WAAA;;;UAxEP,IAAA,EAAQ,CAAA,KAAI,MAAA,CAAO,CAAA;IAAc,MAAA;EAAA;aAM9B,KAAA,EAAS,CAAA,KAAI,MAAA,QAAc,CAAA;IAAO,MAAA;EAAA;;;mBAyE1B,MAAA,EAAU,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,GAAE,QAAA,EAAY,CAAA,KAAI,CAAA,GAAI,CAAA;qBAMhD,MAAA,EAAU,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,MAAK,CAAA;;;iBAqC3C,OAAA,IAAW,WAAW;EAAyB,MAAM;AAAA;AAAA,iBACrD,OAAA,IAAW,QAAA,EAAU,CAAA,GAAI,WAAA,eAA0B,CAAA;EAAO,MAAA;AAAA;AAAA,iBAoBpD,eAAA,IAAmB,OAAA,EAAS,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,MAAA,CAAO,CAAA;AAAA,iBA2B9D,YAAA,IAAgB,EAAA,QAAU,CAAA,GAAI,MAAA,CAAO,CAAA;AAAA,iBA4B/B,iBAAA,IAAqB,EAAA,QAAU,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,MAAA,CAAO,CAAA;AAAA,iBA4BjE,SAAA,iCAA0C,MAAA,EAAQ,MAAA,CAAO,CAAA,EAAG,CAAA,GAAI,EAAA,GAAK,IAAA,EAAM,CAAA,KAAM,CAAA,GAAI,MAAA,CAAO,CAAA,EAAG,CAAA;AAAA,iBAC/F,SAAA,iCAA0C,MAAA,EAAQ,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA,GAAI,EAAA,GAAK,IAAA,EAAM,CAAA,KAAM,CAAA,GAAI,WAAA,CAAY,CAAA,EAAG,CAAA,EAAG,CAAA;AAAA,cAiDlH,UAAA,sBAAgC,cAAA;EAAA,SACR,MAAA,EAAQ,CAAA;cAAR,MAAA,EAAQ,CAAA;EAAA,IAqBhC,QAAA;AAAA;AAAA,iBAuCS,KAAA,OACb,EAAA,GAAK,YAAA,aAAyB,MAAA,CAAO,CAAA,EAAG,CAAA,IAAK,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,CAAA,IAC/D,aAAA;EACE;AAAA;;IACD,OAAA,CAAQ,MAAA,CAAO,CAAA,EAAG,UAAA,CAAW,CAAA;EAAQ,QAAA;AAAA"}
@@ -1,6 +1,5 @@
1
1
  import { wait } from "./promises.js";
2
2
  import { deindent, nicify } from "./strings.js";
3
-
4
3
  //#region src/utils/results.tsx
5
4
  const Result = {
6
5
  fromThrowing,
@@ -31,50 +30,6 @@ const Result = {
31
30
  },
32
31
  retry
33
32
  };
34
- (void 0)?.test("Result.ok and Result.error", ({ expect }) => {
35
- const okResult = Result.ok(42);
36
- expect(okResult.status).toBe("ok");
37
- expect(okResult.data).toBe(42);
38
- const error = /* @__PURE__ */ new Error("Test error");
39
- const errorResult = Result.error(error);
40
- expect(errorResult.status).toBe("error");
41
- expect(errorResult.error).toBe(error);
42
- });
43
- (void 0)?.test("Result.or", ({ expect }) => {
44
- expect(Result.or({
45
- status: "ok",
46
- data: 42
47
- }, 0)).toBe(42);
48
- expect(Result.or({
49
- status: "error",
50
- error: "error message"
51
- }, 0)).toBe(0);
52
- });
53
- (void 0)?.test("Result.orThrow", ({ expect }) => {
54
- expect(Result.orThrow({
55
- status: "ok",
56
- data: 42
57
- })).toBe(42);
58
- const error = /* @__PURE__ */ new Error("Test error");
59
- const errorResult = {
60
- status: "error",
61
- error
62
- };
63
- expect(() => Result.orThrow(errorResult)).toThrow(error);
64
- });
65
- (void 0)?.test("Result.orThrowAsync", async ({ expect }) => {
66
- const okPromise = Promise.resolve({
67
- status: "ok",
68
- data: 42
69
- });
70
- expect(await Result.orThrowAsync(okPromise)).toBe(42);
71
- const error = /* @__PURE__ */ new Error("Test error");
72
- const errorPromise = Promise.resolve({
73
- status: "error",
74
- error
75
- });
76
- await expect(Result.orThrowAsync(errorPromise)).rejects.toThrow(error);
77
- });
78
33
  const AsyncResult = {
79
34
  fromThrowing,
80
35
  fromPromise: promiseToResult,
@@ -92,55 +47,12 @@ const AsyncResult = {
92
47
  },
93
48
  retry
94
49
  };
95
- (void 0)?.test("AsyncResult.or", ({ expect }) => {
96
- expect(AsyncResult.or({
97
- status: "ok",
98
- data: 42
99
- }, 0)).toBe(42);
100
- expect(AsyncResult.or({
101
- status: "error",
102
- error: "error message"
103
- }, 0)).toBe(0);
104
- expect(AsyncResult.or({
105
- status: "pending",
106
- progress: void 0
107
- }, 0)).toBe(0);
108
- });
109
- (void 0)?.test("AsyncResult.orThrow", ({ expect }) => {
110
- expect(AsyncResult.orThrow({
111
- status: "ok",
112
- data: 42
113
- })).toBe(42);
114
- const error = /* @__PURE__ */ new Error("Test error");
115
- const errorResult = {
116
- status: "error",
117
- error
118
- };
119
- expect(() => AsyncResult.orThrow(errorResult)).toThrow(error);
120
- const pendingResult = {
121
- status: "pending",
122
- progress: void 0
123
- };
124
- expect(() => AsyncResult.orThrow(pendingResult)).toThrow("Result still pending");
125
- });
126
50
  function pending$1(progress) {
127
51
  return {
128
52
  status: "pending",
129
53
  progress
130
54
  };
131
55
  }
132
- (void 0)?.test("pending", ({ expect }) => {
133
- const pendingResult = pending$1();
134
- expect(pendingResult.status).toBe("pending");
135
- expect(pendingResult.progress).toBe(void 0);
136
- const progressValue = {
137
- loaded: 50,
138
- total: 100
139
- };
140
- const pendingWithProgress = pending$1(progressValue);
141
- expect(pendingWithProgress.status).toBe("pending");
142
- expect(pendingWithProgress.progress).toBe(progressValue);
143
- });
144
56
  async function promiseToResult(promise) {
145
57
  try {
146
58
  const value = await promise;
@@ -149,15 +61,6 @@ async function promiseToResult(promise) {
149
61
  return Result.error(error);
150
62
  }
151
63
  }
152
- (void 0)?.test("promiseToResult", async ({ expect }) => {
153
- const resolvedResult = await promiseToResult(Promise.resolve(42));
154
- expect(resolvedResult.status).toBe("ok");
155
- if (resolvedResult.status === "ok") expect(resolvedResult.data).toBe(42);
156
- const error = /* @__PURE__ */ new Error("Test error");
157
- const rejectedResult = await promiseToResult(Promise.reject(error));
158
- expect(rejectedResult.status).toBe("error");
159
- if (rejectedResult.status === "error") expect(rejectedResult.error).toBe(error);
160
- });
161
64
  function fromThrowing(fn) {
162
65
  try {
163
66
  return Result.ok(fn());
@@ -165,19 +68,6 @@ function fromThrowing(fn) {
165
68
  return Result.error(error);
166
69
  }
167
70
  }
168
- (void 0)?.test("fromThrowing", ({ expect }) => {
169
- const successFn = () => 42;
170
- const successResult = fromThrowing(successFn);
171
- expect(successResult.status).toBe("ok");
172
- if (successResult.status === "ok") expect(successResult.data).toBe(42);
173
- const error = /* @__PURE__ */ new Error("Test error");
174
- const errorFn = () => {
175
- throw error;
176
- };
177
- const errorResult = fromThrowing(errorFn);
178
- expect(errorResult.status).toBe("error");
179
- if (errorResult.status === "error") expect(errorResult.error).toBe(error);
180
- });
181
71
  async function fromThrowingAsync(fn) {
182
72
  try {
183
73
  return Result.ok(await fn());
@@ -185,19 +75,6 @@ async function fromThrowingAsync(fn) {
185
75
  return Result.error(error);
186
76
  }
187
77
  }
188
- (void 0)?.test("fromThrowingAsync", async ({ expect }) => {
189
- const successFn = async () => 42;
190
- const successResult = await fromThrowingAsync(successFn);
191
- expect(successResult.status).toBe("ok");
192
- if (successResult.status === "ok") expect(successResult.data).toBe(42);
193
- const error = /* @__PURE__ */ new Error("Test error");
194
- const errorFn = async () => {
195
- throw error;
196
- };
197
- const errorResult = await fromThrowingAsync(errorFn);
198
- expect(errorResult.status).toBe("error");
199
- if (errorResult.status === "error") expect(errorResult.error).toBe(error);
200
- });
201
78
  function mapResult(result, fn) {
202
79
  if (result.status === "error") return {
203
80
  status: "error",
@@ -209,34 +86,6 @@ function mapResult(result, fn) {
209
86
  };
210
87
  return Result.ok(fn(result.data));
211
88
  }
212
- (void 0)?.test("mapResult", ({ expect }) => {
213
- const mappedOk = mapResult({
214
- status: "ok",
215
- data: 42
216
- }, (n) => n * 2);
217
- expect(mappedOk.status).toBe("ok");
218
- if (mappedOk.status === "ok") expect(mappedOk.data).toBe(84);
219
- const mappedError = mapResult({
220
- status: "error",
221
- error: "error message"
222
- }, (n) => n * 2);
223
- expect(mappedError.status).toBe("error");
224
- if (mappedError.status === "error") expect(mappedError.error).toBe("error message");
225
- expect(mapResult({
226
- status: "pending",
227
- progress: void 0
228
- }, (n) => n * 2).status).toBe("pending");
229
- const progressValue = {
230
- loaded: 50,
231
- total: 100
232
- };
233
- const mappedPendingWithProgress = mapResult({
234
- status: "pending",
235
- progress: progressValue
236
- }, (n) => n * 2);
237
- expect(mappedPendingWithProgress.status).toBe("pending");
238
- if (mappedPendingWithProgress.status === "pending") expect(mappedPendingWithProgress.progress).toBe(progressValue);
239
- });
240
89
  var RetryError = class extends AggregateError {
241
90
  constructor(errors) {
242
91
  const strings = errors.map((e) => nicify(e));
@@ -260,33 +109,6 @@ var RetryError = class extends AggregateError {
260
109
  }
261
110
  };
262
111
  RetryError.prototype.name = "RetryError";
263
- (void 0)?.test("RetryError", ({ expect }) => {
264
- const singleError = /* @__PURE__ */ new Error("Single error");
265
- const retryErrorSingle = new RetryError([singleError]);
266
- expect(retryErrorSingle.name).toBe("RetryError");
267
- expect(retryErrorSingle.errors).toEqual([singleError]);
268
- expect(retryErrorSingle.attempts).toBe(1);
269
- expect(retryErrorSingle.cause).toBe(singleError);
270
- expect(retryErrorSingle.message).toContain("Error after 1 attempts");
271
- const error1 = /* @__PURE__ */ new Error("Error 1");
272
- const error2 = /* @__PURE__ */ new Error("Error 2");
273
- const retryErrorMultiple = new RetryError([error1, error2]);
274
- expect(retryErrorMultiple.name).toBe("RetryError");
275
- expect(retryErrorMultiple.errors).toEqual([error1, error2]);
276
- expect(retryErrorMultiple.attempts).toBe(2);
277
- expect(retryErrorMultiple.cause).toBe(error2);
278
- expect(retryErrorMultiple.message).toContain("Error after 2 attempts");
279
- expect(retryErrorMultiple.message).toContain("Attempt 1");
280
- expect(retryErrorMultiple.message).toContain("Attempt 2");
281
- const sameError = /* @__PURE__ */ new Error("Same error");
282
- const retryErrorSame = new RetryError([sameError, sameError]);
283
- expect(retryErrorSame.name).toBe("RetryError");
284
- expect(retryErrorSame.errors).toEqual([sameError, sameError]);
285
- expect(retryErrorSame.attempts).toBe(2);
286
- expect(retryErrorSame.cause).toBe(sameError);
287
- expect(retryErrorSame.message).toContain("Error after 2 attempts");
288
- expect(retryErrorSame.message).toContain("Attempts 1-2");
289
- });
290
112
  async function retry(fn, totalAttempts, { exponentialDelayBase = 1e3 } = {}) {
291
113
  const errors = [];
292
114
  for (let i = 0; i < totalAttempts; i++) {
@@ -299,41 +121,7 @@ async function retry(fn, totalAttempts, { exponentialDelayBase = 1e3 } = {}) {
299
121
  }
300
122
  return Object.assign(Result.error(new RetryError(errors)), { attempts: totalAttempts });
301
123
  }
302
- (void 0)?.test("retry", async ({ expect }) => {
303
- const successFn = async () => Result.ok("success");
304
- expect(await retry(successFn, 3, { exponentialDelayBase: 0 })).toEqual({
305
- status: "ok",
306
- data: "success",
307
- attempts: 1
308
- });
309
- let attemptCount = 0;
310
- const eventualSuccessFn = async () => {
311
- return ++attemptCount < 2 ? Result.error(/* @__PURE__ */ new Error(`Attempt ${attemptCount} failed`)) : Result.ok("eventual success");
312
- };
313
- expect(await retry(eventualSuccessFn, 3, { exponentialDelayBase: 0 })).toEqual({
314
- status: "ok",
315
- data: "eventual success",
316
- attempts: 2
317
- });
318
- const errors = [
319
- /* @__PURE__ */ new Error("Error 1"),
320
- /* @__PURE__ */ new Error("Error 2"),
321
- /* @__PURE__ */ new Error("Error 3")
322
- ];
323
- const allFailFn = async (attempt) => {
324
- return Result.error(errors[attempt]);
325
- };
326
- const allFailResult = await retry(allFailFn, 3, { exponentialDelayBase: 0 });
327
- expect(allFailResult).toEqual({
328
- status: "error",
329
- error: expect.any(RetryError),
330
- attempts: 3
331
- });
332
- const retryError = allFailResult.error;
333
- expect(retryError.errors).toEqual(errors);
334
- expect(retryError.attempts).toBe(3);
335
- });
336
-
337
124
  //#endregion
338
125
  export { AsyncResult, Result };
126
+
339
127
  //# sourceMappingURL=results.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"results.js","names":[],"sources":["../../../src/utils/results.tsx"],"sourcesContent":["import { wait } from \"./promises\";\nimport { deindent, nicify } from \"./strings\";\n\nexport type Result<T, E = unknown> =\n | {\n status: \"ok\",\n data: T,\n }\n | {\n status: \"error\",\n error: E,\n };\n\nexport type AsyncResult<T, E = unknown, P = void> =\n | Result<T, E>\n | (\n & {\n status: \"pending\",\n }\n & {\n progress: P,\n }\n );\n\n\nexport const Result = {\n fromThrowing,\n fromThrowingAsync,\n fromPromise: promiseToResult,\n ok<T>(data: T): Result<T, never> & { status: \"ok\" } {\n return {\n status: \"ok\",\n data,\n };\n },\n error<E>(error: E): Result<never, E> & { status: \"error\" } {\n return {\n status: \"error\",\n error,\n };\n },\n map: mapResult,\n or: <T, E, U>(result: Result<T, E>, fallback: U): T | U => {\n return result.status === \"ok\" ? result.data : fallback;\n },\n orThrow: <T, E>(result: Result<T, E>): T => {\n if (result.status === \"error\") {\n throw result.error;\n }\n return result.data;\n },\n orThrowAsync: async <T, E>(result: Promise<Result<T, E>>): Promise<T> => {\n return Result.orThrow(await result);\n },\n retry,\n};\nimport.meta.vitest?.test(\"Result.ok and Result.error\", ({ expect }) => {\n // Test Result.ok\n const okResult = Result.ok(42);\n expect(okResult.status).toBe(\"ok\");\n expect(okResult.data).toBe(42);\n\n // Test Result.error\n const error = new Error(\"Test error\");\n const errorResult = Result.error(error);\n expect(errorResult.status).toBe(\"error\");\n expect(errorResult.error).toBe(error);\n});\n\nimport.meta.vitest?.test(\"Result.or\", ({ expect }) => {\n // Test with ok result\n const okResult: Result<number, string> = { status: \"ok\", data: 42 };\n expect(Result.or(okResult, 0)).toBe(42);\n\n // Test with error result\n const errorResult: Result<number, string> = { status: \"error\", error: \"error message\" };\n expect(Result.or(errorResult, 0)).toBe(0);\n});\n\nimport.meta.vitest?.test(\"Result.orThrow\", ({ expect }) => {\n // Test with ok result\n const okResult: Result<number, Error> = { status: \"ok\", data: 42 };\n expect(Result.orThrow(okResult)).toBe(42);\n\n // Test with error result\n const error = new Error(\"Test error\");\n const errorResult: Result<number, Error> = { status: \"error\", error };\n expect(() => Result.orThrow(errorResult)).toThrow(error);\n});\n\nimport.meta.vitest?.test(\"Result.orThrowAsync\", async ({ expect }) => {\n // Test with ok result\n const okPromise = Promise.resolve({ status: \"ok\", data: 42 } as Result<number, Error>);\n expect(await Result.orThrowAsync(okPromise)).toBe(42);\n\n // Test with error result\n const error = new Error(\"Test error\");\n const errorPromise = Promise.resolve({ status: \"error\", error } as Result<number, Error>);\n await expect(Result.orThrowAsync(errorPromise)).rejects.toThrow(error);\n});\n\nexport const AsyncResult = {\n fromThrowing,\n fromPromise: promiseToResult,\n ok: Result.ok,\n error: Result.error,\n pending,\n map: mapResult,\n or: <T, E, P, U>(result: AsyncResult<T, E, P>, fallback: U): T | U => {\n if (result.status === \"pending\") {\n return fallback;\n }\n return Result.or(result, fallback);\n },\n orThrow: <T, E, P>(result: AsyncResult<T, E, P>): T => {\n if (result.status === \"pending\") {\n throw new Error(\"Result still pending\");\n }\n return Result.orThrow(result);\n },\n retry,\n};\nimport.meta.vitest?.test(\"AsyncResult.or\", ({ expect }) => {\n // Test with ok result\n const okResult: AsyncResult<number, string> = { status: \"ok\", data: 42 };\n expect(AsyncResult.or(okResult, 0)).toBe(42);\n\n // Test with error result\n const errorResult: AsyncResult<number, string> = { status: \"error\", error: \"error message\" };\n expect(AsyncResult.or(errorResult, 0)).toBe(0);\n\n // Test with pending result\n const pendingResult: AsyncResult<number, string> = { status: \"pending\", progress: undefined };\n expect(AsyncResult.or(pendingResult, 0)).toBe(0);\n});\n\nimport.meta.vitest?.test(\"AsyncResult.orThrow\", ({ expect }) => {\n // Test with ok result\n const okResult: AsyncResult<number, Error> = { status: \"ok\", data: 42 };\n expect(AsyncResult.orThrow(okResult)).toBe(42);\n\n // Test with error result\n const error = new Error(\"Test error\");\n const errorResult: AsyncResult<number, Error> = { status: \"error\", error };\n expect(() => AsyncResult.orThrow(errorResult)).toThrow(error);\n\n // Test with pending result\n const pendingResult: AsyncResult<number, Error> = { status: \"pending\", progress: undefined };\n expect(() => AsyncResult.orThrow(pendingResult)).toThrow(\"Result still pending\");\n});\n\nfunction pending(): AsyncResult<never, never, void> & { status: \"pending\" };\nfunction pending<P>(progress: P): AsyncResult<never, never, P> & { status: \"pending\" };\nfunction pending<P>(progress?: P): AsyncResult<never, never, P> & { status: \"pending\" } {\n return {\n status: \"pending\",\n progress: progress!,\n };\n}\nimport.meta.vitest?.test(\"pending\", ({ expect }) => {\n // Test without progress\n const pendingResult = pending();\n expect(pendingResult.status).toBe(\"pending\");\n expect(pendingResult.progress).toBe(undefined);\n\n // Test with progress\n const progressValue = { loaded: 50, total: 100 };\n const pendingWithProgress = pending(progressValue);\n expect(pendingWithProgress.status).toBe(\"pending\");\n expect(pendingWithProgress.progress).toBe(progressValue);\n});\n\nasync function promiseToResult<T>(promise: Promise<T>): Promise<Result<T>> {\n try {\n const value = await promise;\n return Result.ok(value);\n } catch (error) {\n return Result.error(error);\n }\n}\nimport.meta.vitest?.test(\"promiseToResult\", async ({ expect }) => {\n // Test with resolved promise\n const resolvedPromise = Promise.resolve(42);\n const resolvedResult = await promiseToResult(resolvedPromise);\n expect(resolvedResult.status).toBe(\"ok\");\n if (resolvedResult.status === \"ok\") {\n expect(resolvedResult.data).toBe(42);\n }\n\n // Test with rejected promise\n const error = new Error(\"Test error\");\n const rejectedPromise = Promise.reject(error);\n const rejectedResult = await promiseToResult(rejectedPromise);\n expect(rejectedResult.status).toBe(\"error\");\n if (rejectedResult.status === \"error\") {\n expect(rejectedResult.error).toBe(error);\n }\n});\n\nfunction fromThrowing<T>(fn: () => T): Result<T, unknown> {\n try {\n return Result.ok(fn());\n } catch (error) {\n return Result.error(error);\n }\n}\nimport.meta.vitest?.test(\"fromThrowing\", ({ expect }) => {\n // Test with function that succeeds\n const successFn = () => 42;\n const successResult = fromThrowing(successFn);\n expect(successResult.status).toBe(\"ok\");\n if (successResult.status === \"ok\") {\n expect(successResult.data).toBe(42);\n }\n\n // Test with function that throws\n const error = new Error(\"Test error\");\n const errorFn = () => {\n throw error;\n };\n const errorResult = fromThrowing(errorFn);\n expect(errorResult.status).toBe(\"error\");\n if (errorResult.status === \"error\") {\n expect(errorResult.error).toBe(error);\n }\n});\n\nasync function fromThrowingAsync<T>(fn: () => Promise<T>): Promise<Result<T, unknown>> {\n try {\n return Result.ok(await fn());\n } catch (error) {\n return Result.error(error);\n }\n}\nimport.meta.vitest?.test(\"fromThrowingAsync\", async ({ expect }) => {\n // Test with async function that succeeds\n const successFn = async () => 42;\n const successResult = await fromThrowingAsync(successFn);\n expect(successResult.status).toBe(\"ok\");\n if (successResult.status === \"ok\") {\n expect(successResult.data).toBe(42);\n }\n\n // Test with async function that throws\n const error = new Error(\"Test error\");\n const errorFn = async () => {\n throw error;\n };\n const errorResult = await fromThrowingAsync(errorFn);\n expect(errorResult.status).toBe(\"error\");\n if (errorResult.status === \"error\") {\n expect(errorResult.error).toBe(error);\n }\n});\n\nfunction mapResult<T, U, E = unknown, P = unknown>(result: Result<T, E>, fn: (data: T) => U): Result<U, E>;\nfunction mapResult<T, U, E = unknown, P = unknown>(result: AsyncResult<T, E, P>, fn: (data: T) => U): AsyncResult<U, E, P>;\nfunction mapResult<T, U, E = unknown, P = unknown>(result: AsyncResult<T, E, P>, fn: (data: T) => U): AsyncResult<U, E, P> {\n if (result.status === \"error\") return {\n status: \"error\",\n error: result.error,\n };\n if (result.status === \"pending\") return {\n status: \"pending\",\n ...\"progress\" in result ? { progress: result.progress } : {},\n } as any;\n\n return Result.ok(fn(result.data));\n}\nimport.meta.vitest?.test(\"mapResult\", ({ expect }) => {\n // Test with ok result\n const okResult: Result<number, string> = { status: \"ok\", data: 42 };\n const mappedOk = mapResult(okResult, (n: number) => n * 2);\n expect(mappedOk.status).toBe(\"ok\");\n if (mappedOk.status === \"ok\") {\n expect(mappedOk.data).toBe(84);\n }\n\n // Test with error result\n const errorResult: Result<number, string> = { status: \"error\", error: \"error message\" };\n const mappedError = mapResult(errorResult, (n: number) => n * 2);\n expect(mappedError.status).toBe(\"error\");\n if (mappedError.status === \"error\") {\n expect(mappedError.error).toBe(\"error message\");\n }\n\n // Test with pending result (no progress)\n const pendingResult: AsyncResult<number, string, void> = { status: \"pending\", progress: undefined };\n const mappedPending = mapResult(pendingResult, (n: number) => n * 2);\n expect(mappedPending.status).toBe(\"pending\");\n\n // Test with pending result (with progress)\n const progressValue = { loaded: 50, total: 100 };\n const pendingWithProgress: AsyncResult<number, string, typeof progressValue> = {\n status: \"pending\",\n progress: progressValue\n };\n const mappedPendingWithProgress = mapResult(pendingWithProgress, (n: number) => n * 2);\n expect(mappedPendingWithProgress.status).toBe(\"pending\");\n if (mappedPendingWithProgress.status === \"pending\") {\n expect(mappedPendingWithProgress.progress).toBe(progressValue);\n }\n});\n\n\nclass RetryError<E = unknown> extends AggregateError {\n constructor(public readonly errors: E[]) {\n const strings = errors.map(e => nicify(e));\n const isAllSame = strings.length > 1 && strings.every(s => s === strings[0]);\n super(\n errors,\n deindent`\n Error after ${errors.length} attempts.\n \n ${isAllSame ? deindent`\n Attempts 1-${errors.length}:\n ${strings[0]}\n ` : strings.map((s, i) => deindent`\n Attempt ${i + 1}:\n ${s}\n `).join(\"\\n\\n\")}\n `,\n { cause: errors[errors.length - 1] }\n );\n this.name = \"RetryError\";\n }\n\n get attempts() {\n return this.errors.length;\n }\n}\nRetryError.prototype.name = \"RetryError\";\n\nimport.meta.vitest?.test(\"RetryError\", ({ expect }) => {\n // Test with single error\n const singleError = new Error(\"Single error\");\n const retryErrorSingle = new RetryError([singleError]);\n expect(retryErrorSingle.name).toBe(\"RetryError\");\n expect(retryErrorSingle.errors).toEqual([singleError]);\n expect(retryErrorSingle.attempts).toBe(1);\n expect(retryErrorSingle.cause).toBe(singleError);\n expect(retryErrorSingle.message).toContain(\"Error after 1 attempts\");\n\n // Test with multiple different errors\n const error1 = new Error(\"Error 1\");\n const error2 = new Error(\"Error 2\");\n const retryErrorMultiple = new RetryError([error1, error2]);\n expect(retryErrorMultiple.name).toBe(\"RetryError\");\n expect(retryErrorMultiple.errors).toEqual([error1, error2]);\n expect(retryErrorMultiple.attempts).toBe(2);\n expect(retryErrorMultiple.cause).toBe(error2);\n expect(retryErrorMultiple.message).toContain(\"Error after 2 attempts\");\n expect(retryErrorMultiple.message).toContain(\"Attempt 1\");\n expect(retryErrorMultiple.message).toContain(\"Attempt 2\");\n\n // Test with multiple identical errors\n const sameError = new Error(\"Same error\");\n const retryErrorSame = new RetryError([sameError, sameError]);\n expect(retryErrorSame.name).toBe(\"RetryError\");\n expect(retryErrorSame.errors).toEqual([sameError, sameError]);\n expect(retryErrorSame.attempts).toBe(2);\n expect(retryErrorSame.cause).toBe(sameError);\n expect(retryErrorSame.message).toContain(\"Error after 2 attempts\");\n expect(retryErrorSame.message).toContain(\"Attempts 1-2\");\n});\n\nasync function retry<T, E>(\n fn: (attemptIndex: number) => Result<T, E> | Promise<Result<T, E>>,\n totalAttempts: number,\n { exponentialDelayBase = 1000 } = {},\n): Promise<Result<T, RetryError<E>> & { attempts: number }> {\n const errors: E[] = [];\n for (let i = 0; i < totalAttempts; i++) {\n const res = await fn(i);\n if (res.status === \"ok\") {\n return Object.assign(Result.ok(res.data), { attempts: i + 1 });\n } else {\n errors.push(res.error);\n if (i < totalAttempts - 1) {\n await wait((Math.random() + 0.5) * exponentialDelayBase * (2 ** i));\n }\n }\n }\n return Object.assign(Result.error(new RetryError(errors)), { attempts: totalAttempts });\n}\nimport.meta.vitest?.test(\"retry\", async ({ expect }) => {\n // Test successful on first attempt\n const successFn = async () => Result.ok(\"success\");\n const successResult = await retry(successFn, 3, { exponentialDelayBase: 0 });\n expect(successResult).toEqual({ status: \"ok\", data: \"success\", attempts: 1 });\n\n // Test successful after failures\n let attemptCount = 0;\n const eventualSuccessFn = async () => {\n return ++attemptCount < 2 ? Result.error(new Error(`Attempt ${attemptCount} failed`))\n : Result.ok(\"eventual success\");\n };\n const eventualSuccessResult = await retry(eventualSuccessFn, 3, { exponentialDelayBase: 0 });\n expect(eventualSuccessResult).toEqual({ status: \"ok\", data: \"eventual success\", attempts: 2 });\n\n // Test all attempts fail\n const errors = [new Error(\"Error 1\"), new Error(\"Error 2\"), new Error(\"Error 3\")];\n const allFailFn = async (attempt: number) => {\n return Result.error(errors[attempt]);\n };\n const allFailResult = await retry(allFailFn, 3, { exponentialDelayBase: 0 });\n expect(allFailResult).toEqual({ status: \"error\", error: expect.any(RetryError), attempts: 3 });\n const retryError = (allFailResult as any).error as RetryError;\n expect(retryError.errors).toEqual(errors);\n expect(retryError.attempts).toBe(3);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"results.js","names":["pending"],"sources":["../../../src/utils/results.tsx"],"sourcesContent":["import { wait } from \"./promises\";\nimport { deindent, nicify } from \"./strings\";\n\nexport type Result<T, E = unknown> =\n | {\n status: \"ok\",\n data: T,\n }\n | {\n status: \"error\",\n error: E,\n };\n\nexport type AsyncResult<T, E = unknown, P = void> =\n | Result<T, E>\n | (\n & {\n status: \"pending\",\n }\n & {\n progress: P,\n }\n );\n\n\nexport const Result = {\n fromThrowing,\n fromThrowingAsync,\n fromPromise: promiseToResult,\n ok<T>(data: T): Result<T, never> & { status: \"ok\" } {\n return {\n status: \"ok\",\n data,\n };\n },\n error<E>(error: E): Result<never, E> & { status: \"error\" } {\n return {\n status: \"error\",\n error,\n };\n },\n map: mapResult,\n or: <T, E, U>(result: Result<T, E>, fallback: U): T | U => {\n return result.status === \"ok\" ? result.data : fallback;\n },\n orThrow: <T, E>(result: Result<T, E>): T => {\n if (result.status === \"error\") {\n throw result.error;\n }\n return result.data;\n },\n orThrowAsync: async <T, E>(result: Promise<Result<T, E>>): Promise<T> => {\n return Result.orThrow(await result);\n },\n retry,\n};\nimport.meta.vitest?.test(\"Result.ok and Result.error\", ({ expect }) => {\n // Test Result.ok\n const okResult = Result.ok(42);\n expect(okResult.status).toBe(\"ok\");\n expect(okResult.data).toBe(42);\n\n // Test Result.error\n const error = new Error(\"Test error\");\n const errorResult = Result.error(error);\n expect(errorResult.status).toBe(\"error\");\n expect(errorResult.error).toBe(error);\n});\n\nimport.meta.vitest?.test(\"Result.or\", ({ expect }) => {\n // Test with ok result\n const okResult: Result<number, string> = { status: \"ok\", data: 42 };\n expect(Result.or(okResult, 0)).toBe(42);\n\n // Test with error result\n const errorResult: Result<number, string> = { status: \"error\", error: \"error message\" };\n expect(Result.or(errorResult, 0)).toBe(0);\n});\n\nimport.meta.vitest?.test(\"Result.orThrow\", ({ expect }) => {\n // Test with ok result\n const okResult: Result<number, Error> = { status: \"ok\", data: 42 };\n expect(Result.orThrow(okResult)).toBe(42);\n\n // Test with error result\n const error = new Error(\"Test error\");\n const errorResult: Result<number, Error> = { status: \"error\", error };\n expect(() => Result.orThrow(errorResult)).toThrow(error);\n});\n\nimport.meta.vitest?.test(\"Result.orThrowAsync\", async ({ expect }) => {\n // Test with ok result\n const okPromise = Promise.resolve({ status: \"ok\", data: 42 } as Result<number, Error>);\n expect(await Result.orThrowAsync(okPromise)).toBe(42);\n\n // Test with error result\n const error = new Error(\"Test error\");\n const errorPromise = Promise.resolve({ status: \"error\", error } as Result<number, Error>);\n await expect(Result.orThrowAsync(errorPromise)).rejects.toThrow(error);\n});\n\nexport const AsyncResult = {\n fromThrowing,\n fromPromise: promiseToResult,\n ok: Result.ok,\n error: Result.error,\n pending,\n map: mapResult,\n or: <T, E, P, U>(result: AsyncResult<T, E, P>, fallback: U): T | U => {\n if (result.status === \"pending\") {\n return fallback;\n }\n return Result.or(result, fallback);\n },\n orThrow: <T, E, P>(result: AsyncResult<T, E, P>): T => {\n if (result.status === \"pending\") {\n throw new Error(\"Result still pending\");\n }\n return Result.orThrow(result);\n },\n retry,\n};\nimport.meta.vitest?.test(\"AsyncResult.or\", ({ expect }) => {\n // Test with ok result\n const okResult: AsyncResult<number, string> = { status: \"ok\", data: 42 };\n expect(AsyncResult.or(okResult, 0)).toBe(42);\n\n // Test with error result\n const errorResult: AsyncResult<number, string> = { status: \"error\", error: \"error message\" };\n expect(AsyncResult.or(errorResult, 0)).toBe(0);\n\n // Test with pending result\n const pendingResult: AsyncResult<number, string> = { status: \"pending\", progress: undefined };\n expect(AsyncResult.or(pendingResult, 0)).toBe(0);\n});\n\nimport.meta.vitest?.test(\"AsyncResult.orThrow\", ({ expect }) => {\n // Test with ok result\n const okResult: AsyncResult<number, Error> = { status: \"ok\", data: 42 };\n expect(AsyncResult.orThrow(okResult)).toBe(42);\n\n // Test with error result\n const error = new Error(\"Test error\");\n const errorResult: AsyncResult<number, Error> = { status: \"error\", error };\n expect(() => AsyncResult.orThrow(errorResult)).toThrow(error);\n\n // Test with pending result\n const pendingResult: AsyncResult<number, Error> = { status: \"pending\", progress: undefined };\n expect(() => AsyncResult.orThrow(pendingResult)).toThrow(\"Result still pending\");\n});\n\nfunction pending(): AsyncResult<never, never, void> & { status: \"pending\" };\nfunction pending<P>(progress: P): AsyncResult<never, never, P> & { status: \"pending\" };\nfunction pending<P>(progress?: P): AsyncResult<never, never, P> & { status: \"pending\" } {\n return {\n status: \"pending\",\n progress: progress!,\n };\n}\nimport.meta.vitest?.test(\"pending\", ({ expect }) => {\n // Test without progress\n const pendingResult = pending();\n expect(pendingResult.status).toBe(\"pending\");\n expect(pendingResult.progress).toBe(undefined);\n\n // Test with progress\n const progressValue = { loaded: 50, total: 100 };\n const pendingWithProgress = pending(progressValue);\n expect(pendingWithProgress.status).toBe(\"pending\");\n expect(pendingWithProgress.progress).toBe(progressValue);\n});\n\nasync function promiseToResult<T>(promise: Promise<T>): Promise<Result<T>> {\n try {\n const value = await promise;\n return Result.ok(value);\n } catch (error) {\n return Result.error(error);\n }\n}\nimport.meta.vitest?.test(\"promiseToResult\", async ({ expect }) => {\n // Test with resolved promise\n const resolvedPromise = Promise.resolve(42);\n const resolvedResult = await promiseToResult(resolvedPromise);\n expect(resolvedResult.status).toBe(\"ok\");\n if (resolvedResult.status === \"ok\") {\n expect(resolvedResult.data).toBe(42);\n }\n\n // Test with rejected promise\n const error = new Error(\"Test error\");\n const rejectedPromise = Promise.reject(error);\n const rejectedResult = await promiseToResult(rejectedPromise);\n expect(rejectedResult.status).toBe(\"error\");\n if (rejectedResult.status === \"error\") {\n expect(rejectedResult.error).toBe(error);\n }\n});\n\nfunction fromThrowing<T>(fn: () => T): Result<T, unknown> {\n try {\n return Result.ok(fn());\n } catch (error) {\n return Result.error(error);\n }\n}\nimport.meta.vitest?.test(\"fromThrowing\", ({ expect }) => {\n // Test with function that succeeds\n const successFn = () => 42;\n const successResult = fromThrowing(successFn);\n expect(successResult.status).toBe(\"ok\");\n if (successResult.status === \"ok\") {\n expect(successResult.data).toBe(42);\n }\n\n // Test with function that throws\n const error = new Error(\"Test error\");\n const errorFn = () => {\n throw error;\n };\n const errorResult = fromThrowing(errorFn);\n expect(errorResult.status).toBe(\"error\");\n if (errorResult.status === \"error\") {\n expect(errorResult.error).toBe(error);\n }\n});\n\nasync function fromThrowingAsync<T>(fn: () => Promise<T>): Promise<Result<T, unknown>> {\n try {\n return Result.ok(await fn());\n } catch (error) {\n return Result.error(error);\n }\n}\nimport.meta.vitest?.test(\"fromThrowingAsync\", async ({ expect }) => {\n // Test with async function that succeeds\n const successFn = async () => 42;\n const successResult = await fromThrowingAsync(successFn);\n expect(successResult.status).toBe(\"ok\");\n if (successResult.status === \"ok\") {\n expect(successResult.data).toBe(42);\n }\n\n // Test with async function that throws\n const error = new Error(\"Test error\");\n const errorFn = async () => {\n throw error;\n };\n const errorResult = await fromThrowingAsync(errorFn);\n expect(errorResult.status).toBe(\"error\");\n if (errorResult.status === \"error\") {\n expect(errorResult.error).toBe(error);\n }\n});\n\nfunction mapResult<T, U, E = unknown, P = unknown>(result: Result<T, E>, fn: (data: T) => U): Result<U, E>;\nfunction mapResult<T, U, E = unknown, P = unknown>(result: AsyncResult<T, E, P>, fn: (data: T) => U): AsyncResult<U, E, P>;\nfunction mapResult<T, U, E = unknown, P = unknown>(result: AsyncResult<T, E, P>, fn: (data: T) => U): AsyncResult<U, E, P> {\n if (result.status === \"error\") return {\n status: \"error\",\n error: result.error,\n };\n if (result.status === \"pending\") return {\n status: \"pending\",\n ...\"progress\" in result ? { progress: result.progress } : {},\n } as any;\n\n return Result.ok(fn(result.data));\n}\nimport.meta.vitest?.test(\"mapResult\", ({ expect }) => {\n // Test with ok result\n const okResult: Result<number, string> = { status: \"ok\", data: 42 };\n const mappedOk = mapResult(okResult, (n: number) => n * 2);\n expect(mappedOk.status).toBe(\"ok\");\n if (mappedOk.status === \"ok\") {\n expect(mappedOk.data).toBe(84);\n }\n\n // Test with error result\n const errorResult: Result<number, string> = { status: \"error\", error: \"error message\" };\n const mappedError = mapResult(errorResult, (n: number) => n * 2);\n expect(mappedError.status).toBe(\"error\");\n if (mappedError.status === \"error\") {\n expect(mappedError.error).toBe(\"error message\");\n }\n\n // Test with pending result (no progress)\n const pendingResult: AsyncResult<number, string, void> = { status: \"pending\", progress: undefined };\n const mappedPending = mapResult(pendingResult, (n: number) => n * 2);\n expect(mappedPending.status).toBe(\"pending\");\n\n // Test with pending result (with progress)\n const progressValue = { loaded: 50, total: 100 };\n const pendingWithProgress: AsyncResult<number, string, typeof progressValue> = {\n status: \"pending\",\n progress: progressValue\n };\n const mappedPendingWithProgress = mapResult(pendingWithProgress, (n: number) => n * 2);\n expect(mappedPendingWithProgress.status).toBe(\"pending\");\n if (mappedPendingWithProgress.status === \"pending\") {\n expect(mappedPendingWithProgress.progress).toBe(progressValue);\n }\n});\n\n\nclass RetryError<E = unknown> extends AggregateError {\n constructor(public readonly errors: E[]) {\n const strings = errors.map(e => nicify(e));\n const isAllSame = strings.length > 1 && strings.every(s => s === strings[0]);\n super(\n errors,\n deindent`\n Error after ${errors.length} attempts.\n \n ${isAllSame ? deindent`\n Attempts 1-${errors.length}:\n ${strings[0]}\n ` : strings.map((s, i) => deindent`\n Attempt ${i + 1}:\n ${s}\n `).join(\"\\n\\n\")}\n `,\n { cause: errors[errors.length - 1] }\n );\n this.name = \"RetryError\";\n }\n\n get attempts() {\n return this.errors.length;\n }\n}\nRetryError.prototype.name = \"RetryError\";\n\nimport.meta.vitest?.test(\"RetryError\", ({ expect }) => {\n // Test with single error\n const singleError = new Error(\"Single error\");\n const retryErrorSingle = new RetryError([singleError]);\n expect(retryErrorSingle.name).toBe(\"RetryError\");\n expect(retryErrorSingle.errors).toEqual([singleError]);\n expect(retryErrorSingle.attempts).toBe(1);\n expect(retryErrorSingle.cause).toBe(singleError);\n expect(retryErrorSingle.message).toContain(\"Error after 1 attempts\");\n\n // Test with multiple different errors\n const error1 = new Error(\"Error 1\");\n const error2 = new Error(\"Error 2\");\n const retryErrorMultiple = new RetryError([error1, error2]);\n expect(retryErrorMultiple.name).toBe(\"RetryError\");\n expect(retryErrorMultiple.errors).toEqual([error1, error2]);\n expect(retryErrorMultiple.attempts).toBe(2);\n expect(retryErrorMultiple.cause).toBe(error2);\n expect(retryErrorMultiple.message).toContain(\"Error after 2 attempts\");\n expect(retryErrorMultiple.message).toContain(\"Attempt 1\");\n expect(retryErrorMultiple.message).toContain(\"Attempt 2\");\n\n // Test with multiple identical errors\n const sameError = new Error(\"Same error\");\n const retryErrorSame = new RetryError([sameError, sameError]);\n expect(retryErrorSame.name).toBe(\"RetryError\");\n expect(retryErrorSame.errors).toEqual([sameError, sameError]);\n expect(retryErrorSame.attempts).toBe(2);\n expect(retryErrorSame.cause).toBe(sameError);\n expect(retryErrorSame.message).toContain(\"Error after 2 attempts\");\n expect(retryErrorSame.message).toContain(\"Attempts 1-2\");\n});\n\nasync function retry<T, E>(\n fn: (attemptIndex: number) => Result<T, E> | Promise<Result<T, E>>,\n totalAttempts: number,\n { exponentialDelayBase = 1000 } = {},\n): Promise<Result<T, RetryError<E>> & { attempts: number }> {\n const errors: E[] = [];\n for (let i = 0; i < totalAttempts; i++) {\n const res = await fn(i);\n if (res.status === \"ok\") {\n return Object.assign(Result.ok(res.data), { attempts: i + 1 });\n } else {\n errors.push(res.error);\n if (i < totalAttempts - 1) {\n await wait((Math.random() + 0.5) * exponentialDelayBase * (2 ** i));\n }\n }\n }\n return Object.assign(Result.error(new RetryError(errors)), { attempts: totalAttempts });\n}\nimport.meta.vitest?.test(\"retry\", async ({ expect }) => {\n // Test successful on first attempt\n const successFn = async () => Result.ok(\"success\");\n const successResult = await retry(successFn, 3, { exponentialDelayBase: 0 });\n expect(successResult).toEqual({ status: \"ok\", data: \"success\", attempts: 1 });\n\n // Test successful after failures\n let attemptCount = 0;\n const eventualSuccessFn = async () => {\n return ++attemptCount < 2 ? Result.error(new Error(`Attempt ${attemptCount} failed`))\n : Result.ok(\"eventual success\");\n };\n const eventualSuccessResult = await retry(eventualSuccessFn, 3, { exponentialDelayBase: 0 });\n expect(eventualSuccessResult).toEqual({ status: \"ok\", data: \"eventual success\", attempts: 2 });\n\n // Test all attempts fail\n const errors = [new Error(\"Error 1\"), new Error(\"Error 2\"), new Error(\"Error 3\")];\n const allFailFn = async (attempt: number) => {\n return Result.error(errors[attempt]);\n };\n const allFailResult = await retry(allFailFn, 3, { exponentialDelayBase: 0 });\n expect(allFailResult).toEqual({ status: \"error\", error: expect.any(RetryError), attempts: 3 });\n const retryError = (allFailResult as any).error as RetryError;\n expect(retryError.errors).toEqual(errors);\n expect(retryError.attempts).toBe(3);\n});\n"],"mappings":"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"}
@@ -8,7 +8,7 @@ const sentryBaseConfig = {
8
8
  replaysOnErrorSampleRate: 1,
9
9
  replaysSessionSampleRate: 1
10
10
  };
11
-
12
11
  //#endregion
13
12
  export { sentryBaseConfig };
13
+
14
14
  //# sourceMappingURL=sentry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sentry.js","names":[],"sources":["../../../src/utils/sentry.tsx"],"sourcesContent":["export const sentryBaseConfig = {\n ignoreErrors: [\n // React throws these errors when used with some browser extensions (eg. Google Translate)\n \"NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.\",\n \"NotFoundError: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.\",\n ],\n\n normalizeDepth: 5,\n maxValueLength: 5000,\n\n // Adjust this value in production, or use tracesSampler for greater control\n tracesSampleRate: 1.0,\n\n // Setting this option to true will print useful information to the console while you're setting up Sentry.\n debug: false,\n\n replaysOnErrorSampleRate: 1.0,\n\n replaysSessionSampleRate: 1.0,\n};\n"],"mappings":";AAAA,MAAa,mBAAmB;CAC9B,cAAc,CAEZ,iHACA,+IACD;CAED,gBAAgB;CAChB,gBAAgB;CAGhB,kBAAkB;CAGlB,OAAO;CAEP,0BAA0B;CAE1B,0BAA0B;CAC3B"}
1
+ {"version":3,"file":"sentry.js","names":[],"sources":["../../../src/utils/sentry.tsx"],"sourcesContent":["export const sentryBaseConfig = {\n ignoreErrors: [\n // React throws these errors when used with some browser extensions (eg. Google Translate)\n \"NotFoundError: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.\",\n \"NotFoundError: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.\",\n ],\n\n normalizeDepth: 5,\n maxValueLength: 5000,\n\n // Adjust this value in production, or use tracesSampler for greater control\n tracesSampleRate: 1.0,\n\n // Setting this option to true will print useful information to the console while you're setting up Sentry.\n debug: false,\n\n replaysOnErrorSampleRate: 1.0,\n\n replaysSessionSampleRate: 1.0,\n};\n"],"mappings":";AAAA,MAAa,mBAAmB;CAC9B,cAAc,CAEZ,iHACA,8IACF;CAEA,gBAAgB;CAChB,gBAAgB;CAGhB,kBAAkB;CAGlB,OAAO;CAEP,0BAA0B;CAE1B,0BAA0B;AAC5B"}
@@ -1,6 +1,6 @@
1
- import { ReactPromise } from "./promises";
2
- import { AsyncResult, Result } from "./results";
3
- import { ReadWriteLock } from "./locks";
1
+ import { ReactPromise } from "./promises.js";
2
+ import { AsyncResult, Result } from "./results.js";
3
+ import { ReadWriteLock } from "./locks.js";
4
4
 
5
5
  //#region src/utils/stores.d.ts
6
6
  type ReadonlyStore<T> = {
@@ -1 +1 @@
1
- {"version":3,"file":"stores.d.ts","names":[],"sources":["../../../src/utils/stores.tsx"],"mappings":";;;;;KAKY,aAAA;EACV,GAAA,IAAO,CAAA;EACP,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EACnE,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;AAAA;AAAA,KAG3D,6BAAA,OAAoC,IAAA;EAAQ,KAAA,EAAO,WAAA,CAAY,CAAA;EAAI,QAAA,EAAU,WAAA,CAAY,CAAA;EAAI,WAAA,EAAa,CAAA;AAAA;AAAA,KAE1G,kBAAA;EACV,WAAA;EACA,GAAA,IAAO,WAAA,CAAY,CAAA;EACnB,SAAA,IAAa,YAAA,CAAa,CAAA;EAC1B,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EACnE,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EACrE,aAAA,CAAc,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;EAC7D,eAAA,CAAgB,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;AAAA;AAAA,cAGpD,KAAA,eAAoB,aAAA,CAAc,CAAA;EAAA,QAInC,MAAA;EAAA,iBAHO,UAAA;cAGP,MAAA,EAAQ,CAAA;EAGlB,GAAA,CAAA,GAAO,CAAA;EAIP,GAAA,CAAI,KAAA,EAAO,CAAA;EAMX,MAAA,CAAO,OAAA,GAAU,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,CAAA;EAMlC,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EAUnE,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;AAAA;AAAA,cAS1D,SAAA,EAAS,aAAA;AAAA,cAGT,UAAA,eAAyB,kBAAA,CAAmB,CAAA;EAAA,QAC/C,YAAA;EAAA,QACA,kBAAA;EAAA,QAEA,WAAA;EAAA,QACA,eAAA;EAAA,iBACS,uBAAA;EAAA,iBAEA,UAAA;EAAA,QAET,cAAA;EAAA,QACA,qBAAA;iBAEO,IAAA,QAAY,CAAA;EAS3B,WAAA,CAAA;EAIA,UAAA,CAAA;EAIA,GAAA,CAAA;;;;;;;;;;;;;;;;;EAUA,SAAA,CAAA,GAAa,YAAA,CAAa,CAAA;EAmB1B,YAAA,CAAa,MAAA,EAAQ,MAAA,CAAO,CAAA,GAAI,UAAA;EAuChC,GAAA,CAAI,KAAA,EAAO,CAAA;EAIX,MAAA,CAAO,OAAA,GAAU,KAAA,EAAO,CAAA,iBAAkB,CAAA,GAAI,CAAA;EAMxC,QAAA,CAAS,OAAA,EAAS,OAAA,CAAQ,CAAA,IAAK,OAAA;EAQrC,cAAA,CAAA;EAQA,WAAA,CAAY,KAAA;EAIZ,GAAA,GAAA,CAAO,MAAA,GAAS,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,UAAA,CAAW,CAAA;EAQ5C,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EAQnE,aAAA,CAAc,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;EAU7D,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EAQrE,eAAA,CAAgB,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;AAAA"}
1
+ {"version":3,"file":"stores.d.ts","names":[],"sources":["../../../src/utils/stores.tsx"],"mappings":";;;;;KAKY,aAAA;EACV,GAAA,IAAO,CAAA;EACP,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EACnE,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;AAAA;AAAA,KAG3D,6BAAA,OAAoC,IAAA;EAAQ,KAAA,EAAO,WAAA,CAAY,CAAA;EAAI,QAAA,EAAU,WAAA,CAAY,CAAA;EAAI,WAAA,EAAa,CAAA;AAAA;AAAA,KAE1G,kBAAA;EACV,WAAA;EACA,GAAA,IAAO,WAAA,CAAY,CAAA;EACnB,SAAA,IAAa,YAAA,CAAa,CAAA;EAC1B,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EACnE,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EACrE,aAAA,CAAc,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;EAC7D,eAAA,CAAgB,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;AAAA;AAAA,cAGpD,KAAA,eAAoB,aAAA,CAAc,CAAA;EAAA,QAInC,MAAA;EAAA,iBAHO,UAAA;cAGP,MAAA,EAAQ,CAAA;EAGlB,GAAA,IAAO,CAAA;EAIP,GAAA,CAAI,KAAA,EAAO,CAAA;EAMX,MAAA,CAAO,OAAA,GAAU,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,CAAA;EAMlC,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EAUnE,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;AAAA;AAAA,cAS1D,SAAA,EAAS,aAAsB;AAAA,cAG/B,UAAA,eAAyB,kBAAA,CAAmB,CAAA;EAAA,QAC/C,YAAA;EAAA,QACA,kBAAA;EAAA,QAEA,WAAA;EAAA,QACA,eAAA;EAAA,iBACS,uBAAA;EAAA,iBAEA,UAAA;EAAA,QAET,cAAA;EAAA,QACA,qBAAA;iBAEO,IAAA,QAAY,CAAA;EAS3B,WAAA;EAIA,UAAA;EAIA,GAAA;;;;;;;;;;;;;;;;;EAUA,SAAA,IAAa,YAAA,CAAa,CAAA;EAmB1B,YAAA,CAAa,MAAA,EAAQ,MAAA,CAAO,CAAA,GAAI,UAAA;EAuChC,GAAA,CAAI,KAAA,EAAO,CAAA;EAIX,MAAA,CAAO,OAAA,GAAU,KAAA,EAAO,CAAA,iBAAkB,CAAA,GAAI,CAAA;EAMxC,QAAA,CAAS,OAAA,EAAS,OAAA,CAAQ,CAAA,IAAK,OAAA;EAQrC,cAAA;EAQA,WAAA,CAAY,KAAA;EAIZ,GAAA,IAAO,MAAA,GAAS,KAAA,EAAO,CAAA,KAAM,CAAA,GAAI,UAAA,CAAW,CAAA;EAQ5C,QAAA,CAAS,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EAQnE,aAAA,CAAc,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;EAU7D,UAAA,CAAW,QAAA,GAAW,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;IAA2B,WAAA;EAAA;EAQrE,eAAA,CAAgB,QAAA,EAAU,6BAAA,CAA8B,CAAA;IAAO,WAAA;EAAA;AAAA"}
@@ -2,7 +2,6 @@ import { pending, rejected, resolved } from "./promises.js";
2
2
  import { AsyncResult, Result } from "./results.js";
3
3
  import { generateUuid } from "./uuids.js";
4
4
  import { ReadWriteLock } from "./locks.js";
5
-
6
5
  //#region src/utils/stores.tsx
7
6
  var Store = class {
8
7
  constructor(_value) {
@@ -169,7 +168,7 @@ var AsyncStore = class AsyncStore {
169
168
  return { unsubscribe };
170
169
  }
171
170
  };
172
-
173
171
  //#endregion
174
172
  export { AsyncStore, Store, storeLock };
173
+
175
174
  //# sourceMappingURL=stores.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stores.js","names":[],"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._mostRecentOkValue = undefined;\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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"}
1
+ {"version":3,"file":"stores.js","names":[],"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._mostRecentOkValue = undefined;\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":";;;;;AAuBA,IAAa,QAAb,MAAkD;CAGhD,YACE,QACA;EADQ,KAAA,SAAA;oCAHgF,IAAI,IAAI;CAI/F;CAEH,MAAS;EACP,OAAO,KAAK;CACd;CAEA,IAAI,OAAgB;EAClB,MAAM,WAAW,KAAK;EACtB,KAAK,SAAS;EACd,KAAK,WAAW,SAAS,aAAa,SAAS,OAAO,QAAQ,CAAC;CACjE;CAEA,OAAO,SAA6B;EAClC,MAAM,QAAQ,QAAQ,KAAK,MAAM;EACjC,KAAK,IAAI,KAAK;EACd,OAAO;CACT;CAEA,SAAS,UAAoF;EAC3F,MAAM,OAAO,aAAa;EAC1B,KAAK,WAAW,IAAI,MAAM,QAAQ;EAClC,OAAO,EACL,mBAAmB;GACjB,KAAK,WAAW,OAAO,IAAI;EAC7B,EACF;CACF;CAEA,WAAW,UAAoF;EAC7F,MAAM,EAAE,gBAAgB,KAAK,UAAU,GAAG,SAAS;GACjD,YAAY;GACZ,SAAS,GAAG,IAAI;EAClB,CAAC;EACD,OAAO,EAAE,YAAY;CACvB;AACF;AAEA,MAAa,YAAY,IAAI,cAAc;AAG3C,IAAa,aAAb,MAAa,WAA+C;CAa1D,YAAY,GAAG,MAAgB;4BAXa,KAAA;qBAEtB;iDAEqB,IAAI,IAAwC;oCAEV,IAAI,IAAI;wBAE5D;+BACO;EAG9B,IAAI,KAAK,WAAW,GAClB,KAAK,eAAe;OACf;GACL,KAAK,eAAe;GACpB,KAAK,qBAAqB,KAAK;EACjC;CACF;CAEA,cAAuB;EACrB,OAAO,KAAK;CACd;CAEA,aAAsB;EACpB,OAAO,KAAK;CACd;CAEA,MAAM;EACJ,IAAI,KAAK,WAAW,GAClB,OAAO,YAAY,MAAM,KAAK,eAAe;OACxC,IAAI,KAAK,YAAY,GAC1B,OAAO,YAAY,GAAG,KAAK,kBAAuB;OAElD,OAAO,YAAY,QAAQ;CAE/B;CAEA,YAA6B;EAC3B,MAAM,OAAO,aAAa;EAC1B,IAAI,KAAK,WAAW,GAClB,OAAO,SAAS,KAAK,eAAe;OAC/B,IAAI,KAAK,YAAY,GAC1B,OAAO,SAAS,KAAK,kBAAuB;EAW9C,OAAO,QAHa,IANA,SAAY,SAAS,WAAW;GAClD,KAAK,YAAY,UAAU;IACzB,QAAQ,KAAK;GACf,CAAC;GACD,KAAK,wBAAwB,IAAI,MAAM,MAAM;EAC/C,CAC0B,CAAC,CAAC,cAAc;GACxC,KAAK,wBAAwB,OAAO,IAAI;EAC1C,CACyB,CAAC;CAC5B;CAEA,aAAa,QAAmB,YAAoB;EAClD,MAAM,WAAW,KAAK,IAAI;EAC1B,MAAM,WAAW,KAAK;EACtB,IAAI,aAAa,KAAK,uBACpB,QAAQ,OAAO,QAAf;GACE,KAAK;IACH,IAAI,CAAC,KAAK,gBAAgB,KAAK,eAAe,KAAK,uBAAuB,OAAO,MAAM;KACrF,KAAK,wBAAwB;KAC7B,KAAK,eAAe;KACpB,KAAK,cAAc;KACnB,KAAK,qBAAqB,OAAO;KACjC,KAAK,kBAAkB,KAAA;KACvB,KAAK,WAAW,SAAS,aAAa,SAAS;MAC7C,OAAO,KAAK,IAAI;MAChB;MACA,aAAa;KACf,CAAC,CAAC;KACF,OAAO;IACT;IACA,OAAO;GAET,KAAK;IACH,KAAK,wBAAwB;IAC7B,KAAK,eAAe;IACpB,KAAK,cAAc;IACnB,KAAK,kBAAkB,OAAO;IAC9B,KAAK,wBAAwB,SAAS,WAAW,OAAO,OAAO,KAAK,CAAC;IACrE,KAAK,WAAW,SAAS,aAAa,SAAS;KAC7C,OAAO,KAAK,IAAI;KAChB;KACA,aAAa;IACf,CAAC,CAAC;IACF,OAAO;EAEX;EAEF,OAAO;CACT;CAEA,IAAI,OAAgB;EAClB,KAAK,aAAa,OAAO,GAAG,KAAK,GAAG,EAAE,KAAK,cAAc;CAC3D;CAEA,OAAO,SAAyC;EAC9C,MAAM,QAAQ,QAAQ,KAAK,kBAAkB;EAC7C,KAAK,IAAI,KAAK;EACd,OAAO;CACT;CAEA,MAAM,SAAS,SAAuC;EACpD,OAAO,MAAM,UAAU,aAAa,YAAY;GAC9C,MAAM,aAAa,EAAE,KAAK;GAC1B,MAAM,SAAS,MAAM,OAAO,YAAY,OAAO;GAC/C,OAAO,KAAK,aAAa,QAAQ,UAAU;EAC7C,CAAC;CACH;CAEA,iBAAuB;EACrB,KAAK,wBAAwB,EAAE,KAAK;EACpC,KAAK,qBAAqB,KAAA;EAC1B,KAAK,eAAe;EACpB,KAAK,cAAc;EACnB,KAAK,kBAAkB,KAAA;CACzB;CAEA,YAAY,OAAsB;EAChC,KAAK,aAAa,OAAO,MAAM,KAAK,GAAG,EAAE,KAAK,cAAc;CAC9D;CAEA,IAAO,QAAwC;EAC7C,MAAM,QAAQ,IAAI,WAAc;EAChC,KAAK,UAAU,UAAU;GACvB,MAAM,IAAI,OAAO,KAAK,CAAC;EACzB,CAAC;EACD,OAAO;CACT;CAEA,SAAS,UAAoF;EAC3F,OAAO,KAAK,eAAe,EAAE,OAAO,kBAAkB;GACpD,IAAI,MAAM,WAAW,MACnB,SAAS,MAAM,MAAM,WAAW;EAEpC,CAAC;CACH;CAEA,cAAc,UAAyE;EACrF,MAAM,OAAO,aAAa;EAC1B,KAAK,WAAW,IAAI,MAAM,QAAQ;EAClC,OAAO,EACL,mBAAmB;GACjB,KAAK,WAAW,OAAO,IAAI;EAC7B,EACF;CACF;CAEA,WAAW,UAAoF;EAC7F,MAAM,EAAE,gBAAgB,KAAK,UAAU,GAAG,SAAS;GACjD,YAAY;GACZ,SAAS,GAAG,IAAI;EAClB,CAAC;EACD,OAAO,EAAE,YAAY;CACvB;CAEA,gBAAgB,UAAyE;EACvF,MAAM,EAAE,gBAAgB,KAAK,eAAe,GAAG,SAAS;GACtD,YAAY;GACZ,SAAS,GAAG,IAAI;EAClB,CAAC;EACD,OAAO,EAAE,YAAY;CACvB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"strings.d.ts","names":[],"sources":["../../../src/utils/strings.tsx"],"mappings":";KAIY,IAAA,iDACV,CAAA,mBACI,CAAA,uEACK,CAAA,GAAI,IAAA,8BAAkC,SAAA,GAAY,IAAA,CAAK,IAAA,EAAM,SAAA;AAAA,iBAGxD,SAAA,8CAAA,CAAwD,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,SAAA,GAAY,IAAA,CAAK,CAAA,EAAG,SAAA;AAAA,iBAInG,gBAAA,kBAAA,CAAmC,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,CAAA;AAAA,iBAepD,gBAAA,kBAAA,CAAmC,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,CAAA;AAAA,iBAepD,eAAA,kBAAA,CAAkC,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,CAAA;;;;iBAgBpD,aAAA,CAAc,CAAA,UAAW,CAAA;;;;;;iBAuCzB,mBAAA,CAAoB,CAAA;;;;;;iBAmBpB,mBAAA,CAAoB,CAAA;;;;;;iBAmBpB,mBAAA,CAAoB,CAAA;AA/HpC;;;;;AAAA,iBAyJgB,iBAAA,CAAkB,CAAA;;;;;;iBAwBlB,SAAA,CAAU,CAAA;;;;;;iBAsBV,gBAAA,CAAiB,OAAA,EAAS,oBAAA,yBAA6C,MAAA;AAAA,iBAuBvE,QAAA,CAAS,IAAA;AAAA,iBACT,QAAA,CAAS,OAAA,EAAS,oBAAA,yBAA6C,MAAA;AAAA,iBAM/D,gBAAA,CAAiB,OAAA,EAAS,oBAAA,yBAA6C,MAAA;AAAA,iBAyFvE,aAAA,CAAc,KAAA,UAAe,gBAAA;AAAA,iBAiC7B,iBAAA,CAAA,GAAqB,MAAA;AAAA,iBA4BrB,qBAAA,CAAsB,CAAA;AAAA,KAqD1B,UAAA;EACV,iBAAA,KAAsB,WAAA;EACtB,2BAAA;AAAA;AAAA,KAEU,aAAA;EACV,QAAA;EACA,aAAA;EACA,UAAA;EACA,SAAA;EACA,IAAA,EAAM,GAAA;EACN,IAAA;EACA,MAAA;IACE,OAAA,EAAS,aAAA;IACT,KAAA;EAAA;EAEF,WAAA,EAAa,WAAA;EACb,UAAA,EAAY,WAAA;EACZ,SAAA,MAAe,IAAA,EAAM,UAAA,QAAkB,MAAA;AAAA;AAAA,iBAEzB,MAAA,CACd,KAAA,WACA,OAAA,GAAS,OAAA,CAAQ,aAAA;AAAA,iBA8KH,UAAA,CAAW,KAAA,UAAe,WAAA,UAAqB,YAAA"}
1
+ {"version":3,"file":"strings.d.ts","names":[],"sources":["../../../src/utils/strings.tsx"],"mappings":";KAIY,IAAA,iDACV,CAAA,mBACI,CAAA,uEACK,CAAA,GAAI,IAAA,8BAAkC,SAAA,GAAY,IAAA,CAAK,IAAA,EAAM,SAAA;AAAA,iBAGxD,SAAA,+CAAwD,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,SAAA,GAAY,IAAA,CAAK,CAAA,EAAG,SAAA;AAAA,iBAInG,gBAAA,mBAAmC,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,CAAA;AAAA,iBAepD,gBAAA,mBAAmC,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,CAAA;AAAA,iBAepD,eAAA,mBAAkC,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,CAAA;;;;iBAgBpD,aAAA,CAAc,CAAA,UAAW,CAAS;;;;;;iBAuClC,mBAAA,CAAoB,CAAS;;;;;;iBAmB7B,mBAAA,CAAoB,CAAS;;;;;;iBAmB7B,mBAAA,CAAoB,CAAS;AA/H7C;;;;;AAAA,iBAyJgB,iBAAA,CAAkB,CAAS;;;;;;iBAwB3B,SAAA,CAAU,CAAS;;;;;;iBAsBnB,gBAAA,CAAiB,OAAA,EAAS,oBAAoB,yBAAyB,MAAA;AAAA,iBAuBvE,QAAA,CAAS,IAAY;AAAA,iBACrB,QAAA,CAAS,OAAA,EAAS,oBAAoB,yBAAyB,MAAA;AAAA,iBAM/D,gBAAA,CAAiB,OAAA,EAAS,oBAAoB,yBAAyB,MAAA;AAAA,iBAyFvE,aAAA,CAAc,KAAA,UAAe,gBAAqB;AAAA,iBAiClD,iBAAA,IAAqB,MAAM;AAAA,iBA4B3B,qBAAA,CAAsB,CAAS;AAAA,KAqDnC,UAAA;EACV,iBAAA,KAAsB,WAAW;EACjC,2BAAA;AAAA;AAAA,KAEU,aAAA;EACV,QAAA;EACA,aAAA;EACA,UAAA;EACA,SAAA;EACA,IAAA,EAAM,GAAA;EACN,IAAA;EACA,MAAA;IACE,OAAA,EAAS,aAAA;IACT,KAAA;EAAA;EAEF,WAAA,EAAa,WAAA;EACb,UAAA,EAAY,WAAA;EACZ,SAAA,MAAe,IAAA,EAAM,UAAA,QAAkB,MAAA;AAAA;AAAA,iBAEzB,MAAA,CACd,KAAA,WACA,OAAA,GAAS,OAAO,CAAC,aAAA;AAAA,iBA8KH,UAAA,CAAW,KAAA,UAAe,WAAA,UAAqB,YAAA"}