@hexclave/shared 1.0.41 → 1.0.42

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 (1066) hide show
  1. package/dist/admin-interface-Y9EZqwD6.d.ts +379 -0
  2. package/dist/admin-interface-Y9EZqwD6.d.ts.map +1 -0
  3. package/dist/admin-metrics-bsOkw4YQ.d.ts +807 -0
  4. package/dist/admin-metrics-bsOkw4YQ.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 +3 -6
  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-iIw4nU5k.d.ts +447 -0
  48. package/dist/client-interface-iIw4nU5k.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-BBoN3hsn.d.ts +284 -0
  88. package/dist/current-user-BBoN3hsn.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-B1wmVPRG.d.ts +1464 -0
  92. package/dist/{interface/crud/email-outbox.d.ts.map → email-outbox-B1wmVPRG.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 +2 -3
  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 +227 -228
  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 +2 -3
  213. package/dist/esm/interface/admin-interface.js.map +1 -1
  214. package/dist/esm/interface/admin-metrics.d.ts +10 -10
  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 +32 -16
  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 +8 -8
  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 +22 -24
  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 +30 -32
  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.map +1 -1
  259. package/dist/esm/interface/crud/invoices.js +1 -2
  260. package/dist/esm/interface/crud/invoices.js.map +1 -1
  261. package/dist/esm/interface/crud/items.d.ts +6 -8
  262. package/dist/esm/interface/crud/items.d.ts.map +1 -1
  263. package/dist/esm/interface/crud/items.js +12 -16
  264. package/dist/esm/interface/crud/items.js.map +1 -1
  265. package/dist/esm/interface/crud/notification-preferences.d.ts +6 -8
  266. package/dist/esm/interface/crud/notification-preferences.d.ts.map +1 -1
  267. package/dist/esm/interface/crud/notification-preferences.js +8 -12
  268. package/dist/esm/interface/crud/notification-preferences.js.map +1 -1
  269. package/dist/esm/interface/crud/oauth-providers.d.ts +24 -26
  270. package/dist/esm/interface/crud/oauth-providers.d.ts.map +1 -1
  271. package/dist/esm/interface/crud/oauth-providers.js +1 -2
  272. package/dist/esm/interface/crud/oauth-providers.js.map +1 -1
  273. package/dist/esm/interface/crud/products.d.ts +21 -22
  274. package/dist/esm/interface/crud/products.d.ts.map +1 -1
  275. package/dist/esm/interface/crud/products.js +3 -2
  276. package/dist/esm/interface/crud/products.js.map +1 -1
  277. package/dist/esm/interface/crud/project-api-keys.d.ts +5 -6
  278. package/dist/esm/interface/crud/project-api-keys.d.ts.map +1 -1
  279. package/dist/esm/interface/crud/project-api-keys.js +1 -2
  280. package/dist/esm/interface/crud/project-api-keys.js.map +1 -1
  281. package/dist/esm/interface/crud/project-permissions.d.ts +29 -31
  282. package/dist/esm/interface/crud/project-permissions.d.ts.map +1 -1
  283. package/dist/esm/interface/crud/project-permissions.js +1 -2
  284. package/dist/esm/interface/crud/project-permissions.js.map +1 -1
  285. package/dist/esm/interface/crud/projects.d.ts +63 -65
  286. package/dist/esm/interface/crud/projects.d.ts.map +1 -1
  287. package/dist/esm/interface/crud/projects.js +3 -2
  288. package/dist/esm/interface/crud/projects.js.map +1 -1
  289. package/dist/esm/interface/crud/session-replays.d.ts.map +1 -1
  290. package/dist/esm/interface/crud/session-replays.js +1 -1
  291. package/dist/esm/interface/crud/sessions.d.ts +15 -17
  292. package/dist/esm/interface/crud/sessions.d.ts.map +1 -1
  293. package/dist/esm/interface/crud/sessions.js +1 -2
  294. package/dist/esm/interface/crud/sessions.js.map +1 -1
  295. package/dist/esm/interface/crud/sign-up-rules.d.ts.map +1 -1
  296. package/dist/esm/interface/crud/sign-up-rules.js +1 -1
  297. package/dist/esm/interface/crud/svix-token.d.ts +8 -10
  298. package/dist/esm/interface/crud/svix-token.d.ts.map +1 -1
  299. package/dist/esm/interface/crud/svix-token.js +1 -2
  300. package/dist/esm/interface/crud/svix-token.js.map +1 -1
  301. package/dist/esm/interface/crud/team-invitation-details.d.ts +6 -8
  302. package/dist/esm/interface/crud/team-invitation-details.d.ts.map +1 -1
  303. package/dist/esm/interface/crud/team-invitation-details.js +1 -2
  304. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -1
  305. package/dist/esm/interface/crud/team-invitation.d.ts +7 -9
  306. package/dist/esm/interface/crud/team-invitation.d.ts.map +1 -1
  307. package/dist/esm/interface/crud/team-invitation.js +1 -2
  308. package/dist/esm/interface/crud/team-invitation.js.map +1 -1
  309. package/dist/esm/interface/crud/team-member-profiles.d.ts +36 -38
  310. package/dist/esm/interface/crud/team-member-profiles.d.ts.map +1 -1
  311. package/dist/esm/interface/crud/team-member-profiles.js +1 -2
  312. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -1
  313. package/dist/esm/interface/crud/team-memberships.d.ts +14 -16
  314. package/dist/esm/interface/crud/team-memberships.d.ts.map +1 -1
  315. package/dist/esm/interface/crud/team-memberships.js +1 -2
  316. package/dist/esm/interface/crud/team-memberships.js.map +1 -1
  317. package/dist/esm/interface/crud/team-permissions.d.ts +29 -31
  318. package/dist/esm/interface/crud/team-permissions.d.ts.map +1 -1
  319. package/dist/esm/interface/crud/team-permissions.js +1 -2
  320. package/dist/esm/interface/crud/team-permissions.js.map +1 -1
  321. package/dist/esm/interface/crud/teams.d.ts +36 -38
  322. package/dist/esm/interface/crud/teams.d.ts.map +1 -1
  323. package/dist/esm/interface/crud/teams.js +2 -4
  324. package/dist/esm/interface/crud/teams.js.map +1 -1
  325. package/dist/esm/interface/crud/transactions.d.ts +14 -16
  326. package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
  327. package/dist/esm/interface/crud/transactions.js +7 -13
  328. package/dist/esm/interface/crud/transactions.js.map +1 -1
  329. package/dist/esm/interface/crud/users.d.ts +21 -22
  330. package/dist/esm/interface/crud/users.d.ts.map +1 -1
  331. package/dist/esm/interface/crud/users.js +9 -5
  332. package/dist/esm/interface/crud/users.js.map +1 -1
  333. package/dist/esm/interface/handler-urls.d.ts +1 -1
  334. package/dist/esm/interface/handler-urls.d.ts.map +1 -1
  335. package/dist/esm/interface/handler-urls.js +1 -2
  336. package/dist/esm/interface/page-component-versions.d.ts +1 -1
  337. package/dist/esm/interface/page-component-versions.d.ts.map +1 -1
  338. package/dist/esm/interface/page-component-versions.js +1 -2
  339. package/dist/esm/interface/page-component-versions.js.map +1 -1
  340. package/dist/esm/interface/plan-usage.d.ts +1 -1
  341. package/dist/esm/interface/plan-usage.d.ts.map +1 -1
  342. package/dist/esm/interface/plan-usage.js +1 -2
  343. package/dist/esm/interface/plan-usage.js.map +1 -1
  344. package/dist/esm/interface/server-interface.d.ts +19 -19
  345. package/dist/esm/interface/server-interface.d.ts.map +1 -1
  346. package/dist/esm/interface/server-interface.js +2 -3
  347. package/dist/esm/interface/server-interface.js.map +1 -1
  348. package/dist/esm/interface/webhooks.d.ts +4 -4
  349. package/dist/esm/interface/webhooks.d.ts.map +1 -1
  350. package/dist/esm/interface/webhooks.js +1 -2
  351. package/dist/esm/interface/webhooks.js.map +1 -1
  352. package/dist/esm/known-errors.d.ts +2 -2
  353. package/dist/esm/known-errors.d.ts.map +1 -1
  354. package/dist/esm/known-errors.js +10 -21
  355. package/dist/esm/known-errors.js.map +1 -1
  356. package/dist/esm/payments/payment-methods.d.ts.map +1 -1
  357. package/dist/esm/payments/payment-methods.js +1 -1
  358. package/dist/esm/payments/payment-methods.js.map +1 -1
  359. package/dist/esm/payments/stripe-limits.d.ts.map +1 -1
  360. package/dist/esm/payments/stripe-limits.js +1 -1
  361. package/dist/esm/payments/stripe-limits.js.map +1 -1
  362. package/dist/esm/plans.d.ts.map +1 -1
  363. package/dist/esm/plans.js +1 -1
  364. package/dist/esm/plans.js.map +1 -1
  365. package/dist/esm/schema-fields.d.ts +14 -14
  366. package/dist/esm/schema-fields.d.ts.map +1 -1
  367. package/dist/esm/schema-fields.js +3 -64
  368. package/dist/esm/schema-fields.js.map +1 -1
  369. package/dist/esm/sessions.d.ts +6 -6
  370. package/dist/esm/sessions.d.ts.map +1 -1
  371. package/dist/esm/sessions.js +1 -2
  372. package/dist/esm/sessions.js.map +1 -1
  373. package/dist/esm/sessions.test.js +2 -3
  374. package/dist/esm/sessions.test.js.map +1 -1
  375. package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  376. package/dist/esm/utils/analytics-clickmap-overlay.js +1 -1
  377. package/dist/esm/utils/api-keys.d.ts.map +1 -1
  378. package/dist/esm/utils/api-keys.js +1 -2
  379. package/dist/esm/utils/api-keys.js.map +1 -1
  380. package/dist/esm/utils/arrays.d.ts.map +1 -1
  381. package/dist/esm/utils/arrays.js +1 -470
  382. package/dist/esm/utils/arrays.js.map +1 -1
  383. package/dist/esm/utils/auth-methods.d.ts.map +1 -1
  384. package/dist/esm/utils/auth-methods.js +1 -1
  385. package/dist/esm/utils/auth-methods.js.map +1 -1
  386. package/dist/esm/utils/base64.d.ts.map +1 -1
  387. package/dist/esm/utils/base64.js +1 -10
  388. package/dist/esm/utils/base64.js.map +1 -1
  389. package/dist/esm/utils/booleans.d.ts.map +1 -1
  390. package/dist/esm/utils/booleans.js +1 -25
  391. package/dist/esm/utils/booleans.js.map +1 -1
  392. package/dist/esm/utils/browser-compat.d.ts.map +1 -1
  393. package/dist/esm/utils/browser-compat.js +1 -1
  394. package/dist/esm/utils/browser-compat.js.map +1 -1
  395. package/dist/esm/utils/bytes.d.ts.map +1 -1
  396. package/dist/esm/utils/bytes.js +3 -198
  397. package/dist/esm/utils/bytes.js.map +1 -1
  398. package/dist/esm/utils/caches.d.ts +1 -1
  399. package/dist/esm/utils/caches.d.ts.map +1 -1
  400. package/dist/esm/utils/caches.js +1 -27
  401. package/dist/esm/utils/caches.js.map +1 -1
  402. package/dist/esm/utils/cel-fields.d.ts.map +1 -1
  403. package/dist/esm/utils/cel-fields.js +1 -2
  404. package/dist/esm/utils/cel-fields.js.map +1 -1
  405. package/dist/esm/utils/cloud-hosts.d.ts.map +1 -1
  406. package/dist/esm/utils/cloud-hosts.js +1 -27
  407. package/dist/esm/utils/cloud-hosts.js.map +1 -1
  408. package/dist/esm/utils/compile-time.d.ts.map +1 -1
  409. package/dist/esm/utils/compile-time.js +1 -1
  410. package/dist/esm/utils/compile-time.js.map +1 -1
  411. package/dist/esm/utils/country-codes.d.ts.map +1 -1
  412. package/dist/esm/utils/country-codes.js +1 -16
  413. package/dist/esm/utils/country-codes.js.map +1 -1
  414. package/dist/esm/utils/crypto.d.ts.map +1 -1
  415. package/dist/esm/utils/crypto.js +3 -113
  416. package/dist/esm/utils/crypto.js.map +1 -1
  417. package/dist/esm/utils/currencies.d.ts +1 -1
  418. package/dist/esm/utils/currencies.d.ts.map +1 -1
  419. package/dist/esm/utils/currencies.js +2 -37
  420. package/dist/esm/utils/currencies.js.map +1 -1
  421. package/dist/esm/utils/currency-constants.d.ts.map +1 -1
  422. package/dist/esm/utils/currency-constants.js +1 -1
  423. package/dist/esm/utils/currency-constants.js.map +1 -1
  424. package/dist/esm/utils/dates.d.ts.map +1 -1
  425. package/dist/esm/utils/dates.js +1 -44
  426. package/dist/esm/utils/dates.js.map +1 -1
  427. package/dist/esm/utils/dev-env-state-path.d.ts.map +1 -1
  428. package/dist/esm/utils/dev-env-state-path.js +1 -2
  429. package/dist/esm/utils/dev-env-state-path.js.map +1 -1
  430. package/dist/esm/utils/dev-tool.d.ts.map +1 -1
  431. package/dist/esm/utils/dev-tool.js +1 -1
  432. package/dist/esm/utils/dom.d.ts.map +1 -1
  433. package/dist/esm/utils/dom.js +1 -1
  434. package/dist/esm/utils/dom.js.map +1 -1
  435. package/dist/esm/utils/elements-chain.d.ts.map +1 -1
  436. package/dist/esm/utils/elements-chain.js +5 -50
  437. package/dist/esm/utils/elements-chain.js.map +1 -1
  438. package/dist/esm/utils/env.d.ts.map +1 -1
  439. package/dist/esm/utils/env.js +1 -2
  440. package/dist/esm/utils/env.js.map +1 -1
  441. package/dist/esm/utils/env.test.js +2 -3
  442. package/dist/esm/utils/env.test.js.map +1 -1
  443. package/dist/esm/utils/errors.d.ts +1 -1
  444. package/dist/esm/utils/errors.d.ts.map +1 -1
  445. package/dist/esm/utils/errors.js +1 -2
  446. package/dist/esm/utils/errors.js.map +1 -1
  447. package/dist/esm/utils/esbuild.d.ts +1 -1
  448. package/dist/esm/utils/esbuild.d.ts.map +1 -1
  449. package/dist/esm/utils/esbuild.js +2 -3
  450. package/dist/esm/utils/esbuild.js.map +1 -1
  451. package/dist/esm/utils/featurebase.d.ts.map +1 -1
  452. package/dist/esm/utils/featurebase.js +1 -2
  453. package/dist/esm/utils/featurebase.js.map +1 -1
  454. package/dist/esm/utils/fs.d.ts.map +1 -1
  455. package/dist/esm/utils/fs.js +1 -2
  456. package/dist/esm/utils/fs.js.map +1 -1
  457. package/dist/esm/utils/functions.d.ts.map +1 -1
  458. package/dist/esm/utils/functions.js +1 -24
  459. package/dist/esm/utils/functions.js.map +1 -1
  460. package/dist/esm/utils/geo.d.ts.map +1 -1
  461. package/dist/esm/utils/geo.js +1 -2
  462. package/dist/esm/utils/geo.js.map +1 -1
  463. package/dist/esm/utils/globals.d.ts.map +1 -1
  464. package/dist/esm/utils/globals.js +1 -1
  465. package/dist/esm/utils/globals.js.map +1 -1
  466. package/dist/esm/utils/hashes.d.ts.map +1 -1
  467. package/dist/esm/utils/hashes.js +1 -2
  468. package/dist/esm/utils/hashes.js.map +1 -1
  469. package/dist/esm/utils/html.d.ts.map +1 -1
  470. package/dist/esm/utils/html.js +1 -19
  471. package/dist/esm/utils/html.js.map +1 -1
  472. package/dist/esm/utils/http.d.ts.map +1 -1
  473. package/dist/esm/utils/http.js +1 -19
  474. package/dist/esm/utils/http.js.map +1 -1
  475. package/dist/esm/utils/ips.d.ts.map +1 -1
  476. package/dist/esm/utils/ips.js +1 -25
  477. package/dist/esm/utils/ips.js.map +1 -1
  478. package/dist/esm/utils/json.d.ts +1 -1
  479. package/dist/esm/utils/json.d.ts.map +1 -1
  480. package/dist/esm/utils/json.js +1 -155
  481. package/dist/esm/utils/json.js.map +1 -1
  482. package/dist/esm/utils/jsx-editable-transpiler.d.ts.map +1 -1
  483. package/dist/esm/utils/jsx-editable-transpiler.js +1 -2
  484. package/dist/esm/utils/jsx-editable-transpiler.js.map +1 -1
  485. package/dist/esm/utils/jsx-editable-transpiler.test.js +2 -3
  486. package/dist/esm/utils/jsx-editable-transpiler.test.js.map +1 -1
  487. package/dist/esm/utils/jwt.d.ts.map +1 -1
  488. package/dist/esm/utils/jwt.js +1 -2
  489. package/dist/esm/utils/jwt.js.map +1 -1
  490. package/dist/esm/utils/locks.d.ts.map +1 -1
  491. package/dist/esm/utils/locks.js +1 -2
  492. package/dist/esm/utils/locks.js.map +1 -1
  493. package/dist/esm/utils/maps.d.ts.map +1 -1
  494. package/dist/esm/utils/maps.js +1 -111
  495. package/dist/esm/utils/maps.js.map +1 -1
  496. package/dist/esm/utils/math.d.ts.map +1 -1
  497. package/dist/esm/utils/math.js +1 -11
  498. package/dist/esm/utils/math.js.map +1 -1
  499. package/dist/esm/utils/monkey-patch.d.ts.map +1 -1
  500. package/dist/esm/utils/monkey-patch.js +2 -3
  501. package/dist/esm/utils/monkey-patch.js.map +1 -1
  502. package/dist/esm/utils/node-http.js +1 -2
  503. package/dist/esm/utils/node-http.js.map +1 -1
  504. package/dist/esm/utils/numbers.d.ts.map +1 -1
  505. package/dist/esm/utils/numbers.js +1 -45
  506. package/dist/esm/utils/numbers.js.map +1 -1
  507. package/dist/esm/utils/oauth.d.ts.map +1 -1
  508. package/dist/esm/utils/oauth.js +1 -1
  509. package/dist/esm/utils/oauth.js.map +1 -1
  510. package/dist/esm/utils/objects.d.ts.map +1 -1
  511. package/dist/esm/utils/objects.js +1 -622
  512. package/dist/esm/utils/objects.js.map +1 -1
  513. package/dist/esm/utils/paginated-lists.d.ts.map +1 -1
  514. package/dist/esm/utils/paginated-lists.js +1 -2
  515. package/dist/esm/utils/paginated-lists.js.map +1 -1
  516. package/dist/esm/utils/paginated-lists.test.js +2 -3
  517. package/dist/esm/utils/paginated-lists.test.js.map +1 -1
  518. package/dist/esm/utils/passkey.d.ts +1 -1
  519. package/dist/esm/utils/passkey.js +1 -1
  520. package/dist/esm/utils/promises.d.ts +1 -1
  521. package/dist/esm/utils/promises.d.ts.map +1 -1
  522. package/dist/esm/utils/promises.js +2 -161
  523. package/dist/esm/utils/promises.js.map +1 -1
  524. package/dist/esm/utils/proxies.d.ts.map +1 -1
  525. package/dist/esm/utils/proxies.js +1 -37
  526. package/dist/esm/utils/proxies.js.map +1 -1
  527. package/dist/esm/utils/react.d.ts.map +1 -1
  528. package/dist/esm/utils/react.js +1 -41
  529. package/dist/esm/utils/react.js.map +1 -1
  530. package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
  531. package/dist/esm/utils/redirect-urls.js +2 -92
  532. package/dist/esm/utils/redirect-urls.js.map +1 -1
  533. package/dist/esm/utils/regex.js +1 -1
  534. package/dist/esm/utils/regex.js.map +1 -1
  535. package/dist/esm/utils/results.d.ts.map +1 -1
  536. package/dist/esm/utils/results.js +1 -213
  537. package/dist/esm/utils/results.js.map +1 -1
  538. package/dist/esm/utils/sentry.js +1 -1
  539. package/dist/esm/utils/sentry.js.map +1 -1
  540. package/dist/esm/utils/stores.d.ts +3 -3
  541. package/dist/esm/utils/stores.d.ts.map +1 -1
  542. package/dist/esm/utils/stores.js +1 -2
  543. package/dist/esm/utils/stores.js.map +1 -1
  544. package/dist/esm/utils/strings.d.ts.map +1 -1
  545. package/dist/esm/utils/strings.js +1 -251
  546. package/dist/esm/utils/strings.js.map +1 -1
  547. package/dist/esm/utils/strings.nicify.test.js +2 -3
  548. package/dist/esm/utils/strings.nicify.test.js.map +1 -1
  549. package/dist/esm/utils/telemetry.d.ts.map +1 -1
  550. package/dist/esm/utils/telemetry.js +1 -2
  551. package/dist/esm/utils/telemetry.js.map +1 -1
  552. package/dist/esm/utils/turnstile-browser.d.ts +1 -1
  553. package/dist/esm/utils/turnstile-browser.d.ts.map +1 -1
  554. package/dist/esm/utils/turnstile-browser.js +1 -2
  555. package/dist/esm/utils/turnstile-browser.js.map +1 -1
  556. package/dist/esm/utils/turnstile-flow.d.ts +1 -1
  557. package/dist/esm/utils/turnstile-flow.d.ts.map +1 -1
  558. package/dist/esm/utils/turnstile-flow.js +1 -2
  559. package/dist/esm/utils/turnstile-flow.js.map +1 -1
  560. package/dist/esm/utils/turnstile-flow.test.js +2 -3
  561. package/dist/esm/utils/turnstile-flow.test.js.map +1 -1
  562. package/dist/esm/utils/turnstile.d.ts.map +1 -1
  563. package/dist/esm/utils/turnstile.js +1 -1
  564. package/dist/esm/utils/turnstile.js.map +1 -1
  565. package/dist/esm/utils/typed-arrays.js +1 -2
  566. package/dist/esm/utils/typed-arrays.js.map +1 -1
  567. package/dist/esm/utils/types.d.ts +1 -1
  568. package/dist/esm/utils/types.d.ts.map +1 -1
  569. package/dist/esm/utils/types.js +1 -1
  570. package/dist/esm/utils/types.js.map +1 -1
  571. package/dist/esm/utils/unicode.d.ts.map +1 -1
  572. package/dist/esm/utils/unicode.js +1 -13
  573. package/dist/esm/utils/unicode.js.map +1 -1
  574. package/dist/esm/utils/urls.d.ts.map +1 -1
  575. package/dist/esm/utils/urls.js +1 -151
  576. package/dist/esm/utils/urls.js.map +1 -1
  577. package/dist/esm/utils/uuids.d.ts.map +1 -1
  578. package/dist/esm/utils/uuids.js +2 -26
  579. package/dist/esm/utils/uuids.js.map +1 -1
  580. package/dist/format-4JG1MGv5.d.ts +61 -0
  581. package/dist/format-4JG1MGv5.d.ts.map +1 -0
  582. package/dist/handler-urls-BHt3v8Ai.d.ts +70 -0
  583. package/dist/handler-urls-BHt3v8Ai.d.ts.map +1 -0
  584. package/dist/helpers/emails.js +2 -4
  585. package/dist/helpers/emails.js.map +1 -1
  586. package/dist/helpers/init-prompt.d.ts.map +1 -1
  587. package/dist/helpers/init-prompt.js +2 -4
  588. package/dist/helpers/init-prompt.js.map +1 -1
  589. package/dist/helpers/password.d.ts +1 -1
  590. package/dist/helpers/password.d.ts.map +1 -1
  591. package/dist/helpers/password.js +2 -4
  592. package/dist/helpers/password.js.map +1 -1
  593. package/dist/helpers/production-mode.d.ts +1 -1
  594. package/dist/helpers/production-mode.d.ts.map +1 -1
  595. package/dist/helpers/production-mode.js +2 -4
  596. package/dist/helpers/production-mode.js.map +1 -1
  597. package/dist/helpers/support-sla.d.ts.map +1 -1
  598. package/dist/helpers/support-sla.js +2 -3
  599. package/dist/helpers/support-sla.js.map +1 -1
  600. package/dist/helpers/support-sla.test.js +1 -3
  601. package/dist/helpers/support-sla.test.js.map +1 -1
  602. package/dist/helpers/vault/client-side.d.ts.map +1 -1
  603. package/dist/helpers/vault/client-side.js +2 -22
  604. package/dist/helpers/vault/client-side.js.map +1 -1
  605. package/dist/helpers/vault/server-side.js +2 -4
  606. package/dist/helpers/vault/server-side.js.map +1 -1
  607. package/dist/hooks/use-async-callback.d.ts.map +1 -1
  608. package/dist/hooks/use-async-callback.js +4 -5
  609. package/dist/hooks/use-async-callback.js.map +1 -1
  610. package/dist/hooks/use-async-external-store.d.ts +1 -1
  611. package/dist/hooks/use-async-external-store.d.ts.map +1 -1
  612. package/dist/hooks/use-async-external-store.js +2 -4
  613. package/dist/hooks/use-async-external-store.js.map +1 -1
  614. package/dist/hooks/use-hash.js +2 -4
  615. package/dist/hooks/use-hash.js.map +1 -1
  616. package/dist/hooks/use-hover.d.ts.map +1 -1
  617. package/dist/hooks/use-hover.js +2 -4
  618. package/dist/hooks/use-hover.js.map +1 -1
  619. package/dist/hooks/use-strict-memo.d.ts.map +1 -1
  620. package/dist/hooks/use-strict-memo.js +2 -72
  621. package/dist/hooks/use-strict-memo.js.map +1 -1
  622. package/dist/index.d.ts +4 -4
  623. package/dist/index.js +27 -29
  624. package/dist/interface/admin-interface.d.ts +3 -379
  625. package/dist/interface/admin-interface.js +3 -5
  626. package/dist/interface/admin-interface.js.map +1 -1
  627. package/dist/interface/admin-metrics.d.ts +2 -807
  628. package/dist/interface/admin-metrics.js +2 -4
  629. package/dist/interface/admin-metrics.js.map +1 -1
  630. package/dist/interface/client-interface.d.ts +2 -447
  631. package/dist/interface/client-interface.js +33 -18
  632. package/dist/interface/client-interface.js.map +1 -1
  633. package/dist/interface/client-interface.test.js +83 -13
  634. package/dist/interface/client-interface.test.js.map +1 -1
  635. package/dist/interface/conversations.d.ts +8 -8
  636. package/dist/interface/conversations.d.ts.map +1 -1
  637. package/dist/interface/conversations.js +2 -4
  638. package/dist/interface/conversations.js.map +1 -1
  639. package/dist/interface/crud/analytics.d.ts +2 -14
  640. package/dist/interface/crud/connected-accounts.d.ts +2 -68
  641. package/dist/interface/crud/connected-accounts.js +2 -4
  642. package/dist/interface/crud/connected-accounts.js.map +1 -1
  643. package/dist/interface/crud/contact-channels.d.ts +2 -181
  644. package/dist/interface/crud/contact-channels.js +2 -4
  645. package/dist/interface/crud/contact-channels.js.map +1 -1
  646. package/dist/interface/crud/current-user.d.ts +2 -285
  647. package/dist/interface/crud/current-user.js +2 -4
  648. package/dist/interface/crud/current-user.js.map +1 -1
  649. package/dist/interface/crud/email-outbox.d.ts +2 -1465
  650. package/dist/interface/crud/email-outbox.js +4 -5
  651. package/dist/interface/crud/email-outbox.js.map +1 -1
  652. package/dist/interface/crud/email-templates.d.ts +15 -16
  653. package/dist/interface/crud/email-templates.d.ts.map +1 -1
  654. package/dist/interface/crud/email-templates.js +2 -4
  655. package/dist/interface/crud/email-templates.js.map +1 -1
  656. package/dist/interface/crud/emails.d.ts +2 -41
  657. package/dist/interface/crud/emails.js +4 -5
  658. package/dist/interface/crud/emails.js.map +1 -1
  659. package/dist/interface/crud/internal-api-keys.d.ts +2 -140
  660. package/dist/interface/crud/internal-api-keys.js +2 -4
  661. package/dist/interface/crud/internal-api-keys.js.map +1 -1
  662. package/dist/interface/crud/invoices.d.ts +2 -43
  663. package/dist/interface/crud/invoices.js +2 -4
  664. package/dist/interface/crud/invoices.js.map +1 -1
  665. package/dist/interface/crud/items.d.ts +2 -30
  666. package/dist/interface/crud/items.js +2 -4
  667. package/dist/interface/crud/items.js.map +1 -1
  668. package/dist/interface/crud/notification-preferences.d.ts +2 -38
  669. package/dist/interface/crud/notification-preferences.js +2 -4
  670. package/dist/interface/crud/notification-preferences.js.map +1 -1
  671. package/dist/interface/crud/oauth-providers.d.ts +2 -186
  672. package/dist/interface/crud/oauth-providers.js +2 -4
  673. package/dist/interface/crud/oauth-providers.js.map +1 -1
  674. package/dist/interface/crud/products.d.ts +2 -182
  675. package/dist/interface/crud/products.js +4 -4
  676. package/dist/interface/crud/products.js.map +1 -1
  677. package/dist/interface/crud/project-api-keys.d.ts +2 -203
  678. package/dist/interface/crud/project-api-keys.js +2 -4
  679. package/dist/interface/crud/project-api-keys.js.map +1 -1
  680. package/dist/interface/crud/project-permissions.d.ts +2 -161
  681. package/dist/interface/crud/project-permissions.js +4 -5
  682. package/dist/interface/crud/project-permissions.js.map +1 -1
  683. package/dist/interface/crud/projects.d.ts +2 -901
  684. package/dist/interface/crud/projects.js +6 -5
  685. package/dist/interface/crud/projects.js.map +1 -1
  686. package/dist/interface/crud/session-replays.d.ts +2 -83
  687. package/dist/interface/crud/sessions.d.ts +2 -150
  688. package/dist/interface/crud/sessions.js +2 -4
  689. package/dist/interface/crud/sessions.js.map +1 -1
  690. package/dist/interface/crud/sign-up-rules.d.ts.map +1 -1
  691. package/dist/interface/crud/svix-token.d.ts +2 -31
  692. package/dist/interface/crud/svix-token.js +2 -4
  693. package/dist/interface/crud/svix-token.js.map +1 -1
  694. package/dist/interface/crud/team-invitation-details.d.ts +5 -6
  695. package/dist/interface/crud/team-invitation-details.d.ts.map +1 -1
  696. package/dist/interface/crud/team-invitation-details.js +4 -5
  697. package/dist/interface/crud/team-invitation-details.js.map +1 -1
  698. package/dist/interface/crud/team-invitation.d.ts +2 -54
  699. package/dist/interface/crud/team-invitation.js +4 -5
  700. package/dist/interface/crud/team-invitation.js.map +1 -1
  701. package/dist/interface/crud/team-member-profiles.d.ts +2 -286
  702. package/dist/interface/crud/team-member-profiles.js +4 -5
  703. package/dist/interface/crud/team-member-profiles.js.map +1 -1
  704. package/dist/interface/crud/team-memberships.d.ts +2 -75
  705. package/dist/interface/crud/team-memberships.js +2 -4
  706. package/dist/interface/crud/team-memberships.js.map +1 -1
  707. package/dist/interface/crud/team-permissions.d.ts +2 -169
  708. package/dist/interface/crud/team-permissions.js +4 -5
  709. package/dist/interface/crud/team-permissions.js.map +1 -1
  710. package/dist/interface/crud/teams.d.ts +2 -299
  711. package/dist/interface/crud/teams.js +5 -7
  712. package/dist/interface/crud/teams.js.map +1 -1
  713. package/dist/interface/crud/transactions.d.ts +2 -183
  714. package/dist/interface/crud/transactions.js +2 -4
  715. package/dist/interface/crud/transactions.js.map +1 -1
  716. package/dist/interface/crud/users.d.ts +2 -653
  717. package/dist/interface/crud/users.js +12 -8
  718. package/dist/interface/crud/users.js.map +1 -1
  719. package/dist/interface/handler-urls.d.ts +2 -51
  720. package/dist/interface/handler-urls.js +12 -14
  721. package/dist/interface/page-component-versions.d.ts +2 -25
  722. package/dist/interface/page-component-versions.js +2 -4
  723. package/dist/interface/page-component-versions.js.map +1 -1
  724. package/dist/interface/plan-usage.d.ts +2 -57
  725. package/dist/interface/plan-usage.js +2 -4
  726. package/dist/interface/plan-usage.js.map +1 -1
  727. package/dist/interface/server-interface.d.ts +2 -257
  728. package/dist/interface/server-interface.js +3 -5
  729. package/dist/interface/server-interface.js.map +1 -1
  730. package/dist/interface/webhooks.d.ts +2 -326
  731. package/dist/interface/webhooks.js +2 -4
  732. package/dist/interface/webhooks.js.map +1 -1
  733. package/dist/internal-api-keys-D8IYDodH.d.ts +139 -0
  734. package/dist/internal-api-keys-D8IYDodH.d.ts.map +1 -0
  735. package/dist/invoices-CHo9YKbI.d.ts +43 -0
  736. package/dist/invoices-CHo9YKbI.d.ts.map +1 -0
  737. package/dist/items-DlLSlVUD.d.ts +29 -0
  738. package/dist/items-DlLSlVUD.d.ts.map +1 -0
  739. package/dist/json-a1QIXu5z.d.ts +15 -0
  740. package/dist/json-a1QIXu5z.d.ts.map +1 -0
  741. package/dist/known-errors-Bm4a61wL.d.ts +575 -0
  742. package/dist/known-errors-Bm4a61wL.d.ts.map +1 -0
  743. package/dist/known-errors.d.ts +2 -575
  744. package/dist/known-errors.js +11 -23
  745. package/dist/known-errors.js.map +1 -1
  746. package/dist/notification-preferences-Bmzr_EOY.d.ts +37 -0
  747. package/dist/notification-preferences-Bmzr_EOY.d.ts.map +1 -0
  748. package/dist/oauth-providers-BMkKSSlA.d.ts +185 -0
  749. package/dist/oauth-providers-BMkKSSlA.d.ts.map +1 -0
  750. package/dist/objects-DkCkeBWE.d.ts +59 -0
  751. package/dist/objects-DkCkeBWE.d.ts.map +1 -0
  752. package/dist/passkey-CKg87UH-.d.ts +2 -0
  753. package/dist/payments/payment-methods.d.ts.map +1 -1
  754. package/dist/payments/payment-methods.js +2 -3
  755. package/dist/payments/payment-methods.js.map +1 -1
  756. package/dist/payments/stripe-limits.d.ts.map +1 -1
  757. package/dist/payments/stripe-limits.js +2 -3
  758. package/dist/payments/stripe-limits.js.map +1 -1
  759. package/dist/plan-usage-DfDoj5K4.d.ts +57 -0
  760. package/dist/plan-usage-DfDoj5K4.d.ts.map +1 -0
  761. package/dist/plans.d.ts.map +1 -1
  762. package/dist/plans.js +2 -3
  763. package/dist/plans.js.map +1 -1
  764. package/dist/products-Bs74ld-v.d.ts +182 -0
  765. package/dist/products-Bs74ld-v.d.ts.map +1 -0
  766. package/dist/project-api-keys--7V5X_UW.d.ts +203 -0
  767. package/dist/project-api-keys--7V5X_UW.d.ts.map +1 -0
  768. package/dist/project-permissions-kdi675F-.d.ts +160 -0
  769. package/dist/project-permissions-kdi675F-.d.ts.map +1 -0
  770. package/dist/projects-CFTNXRfG.d.ts +900 -0
  771. package/dist/projects-CFTNXRfG.d.ts.map +1 -0
  772. package/dist/results-DP3BzoL6.d.ts +70 -0
  773. package/dist/results-DP3BzoL6.d.ts.map +1 -0
  774. package/dist/{chunk-BE-pF4vm.js → rolldown-runtime-D6vf50IK.js} +12 -18
  775. package/dist/schema-CJwkGkdf.d.ts +2328 -0
  776. package/dist/schema-CJwkGkdf.d.ts.map +1 -0
  777. package/dist/schema-fields-DqGQ4kF7.d.ts +517 -0
  778. package/dist/schema-fields-DqGQ4kF7.d.ts.map +1 -0
  779. package/dist/schema-fields.d.ts +3 -518
  780. package/dist/schema-fields.js +21 -82
  781. package/dist/schema-fields.js.map +1 -1
  782. package/dist/server-interface-CgpxsLT_.d.ts +257 -0
  783. package/dist/server-interface-CgpxsLT_.d.ts.map +1 -0
  784. package/dist/session-replays-CXqhDpZq.d.ts +83 -0
  785. package/dist/session-replays-CXqhDpZq.d.ts.map +1 -0
  786. package/dist/sessions-B7Ko2Ldr.d.ts +149 -0
  787. package/dist/sessions-B7Ko2Ldr.d.ts.map +1 -0
  788. package/dist/sessions-d8qtvBUB.d.ts +175 -0
  789. package/dist/sessions-d8qtvBUB.d.ts.map +1 -0
  790. package/dist/sessions.d.ts +2 -175
  791. package/dist/sessions.js +4 -5
  792. package/dist/sessions.js.map +1 -1
  793. package/dist/sessions.test.js +1 -3
  794. package/dist/sessions.test.js.map +1 -1
  795. package/dist/strings-DWgkUybS.d.ts +76 -0
  796. package/dist/strings-DWgkUybS.d.ts.map +1 -0
  797. package/dist/svix-token-BsMrLGvy.d.ts +30 -0
  798. package/dist/svix-token-BsMrLGvy.d.ts.map +1 -0
  799. package/dist/team-invitation-Cyqt9oWw.d.ts +53 -0
  800. package/dist/team-invitation-Cyqt9oWw.d.ts.map +1 -0
  801. package/dist/team-member-profiles-BoDEqx-0.d.ts +285 -0
  802. package/dist/team-member-profiles-BoDEqx-0.d.ts.map +1 -0
  803. package/dist/team-memberships-DZHk2A5b.d.ts +74 -0
  804. package/dist/team-memberships-DZHk2A5b.d.ts.map +1 -0
  805. package/dist/team-permissions-DqOpaOWh.d.ts +168 -0
  806. package/dist/team-permissions-DqOpaOWh.d.ts.map +1 -0
  807. package/dist/teams-CQMcBnjM.d.ts +298 -0
  808. package/dist/teams-CQMcBnjM.d.ts.map +1 -0
  809. package/dist/transactions-DhnbvGH5.d.ts +182 -0
  810. package/dist/transactions-DhnbvGH5.d.ts.map +1 -0
  811. package/dist/types-DfTcxNtM.d.ts +77 -0
  812. package/dist/types-DfTcxNtM.d.ts.map +1 -0
  813. package/dist/users-DHNRwoSz.d.ts +653 -0
  814. package/dist/users-DHNRwoSz.d.ts.map +1 -0
  815. package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -1
  816. package/dist/utils/analytics-clickmap-overlay.js +2 -3
  817. package/dist/utils/analytics-clickmap-overlay.js.map +1 -1
  818. package/dist/utils/api-keys.d.ts.map +1 -1
  819. package/dist/utils/api-keys.js +4 -5
  820. package/dist/utils/api-keys.js.map +1 -1
  821. package/dist/utils/arrays.d.ts.map +1 -1
  822. package/dist/utils/arrays.js +2 -472
  823. package/dist/utils/arrays.js.map +1 -1
  824. package/dist/utils/auth-methods.d.ts.map +1 -1
  825. package/dist/utils/auth-methods.js +2 -3
  826. package/dist/utils/auth-methods.js.map +1 -1
  827. package/dist/utils/base64.d.ts.map +1 -1
  828. package/dist/utils/base64.js +2 -12
  829. package/dist/utils/base64.js.map +1 -1
  830. package/dist/utils/booleans.d.ts.map +1 -1
  831. package/dist/utils/booleans.js +2 -27
  832. package/dist/utils/booleans.js.map +1 -1
  833. package/dist/utils/browser-compat.d.ts.map +1 -1
  834. package/dist/utils/browser-compat.js +2 -3
  835. package/dist/utils/browser-compat.js.map +1 -1
  836. package/dist/utils/bytes.d.ts.map +1 -1
  837. package/dist/utils/bytes.js +4 -200
  838. package/dist/utils/bytes.js.map +1 -1
  839. package/dist/utils/caches.d.ts.map +1 -1
  840. package/dist/utils/caches.js +2 -29
  841. package/dist/utils/caches.js.map +1 -1
  842. package/dist/utils/cel-fields.d.ts.map +1 -1
  843. package/dist/utils/cel-fields.js +2 -4
  844. package/dist/utils/cel-fields.js.map +1 -1
  845. package/dist/utils/cloud-hosts.d.ts.map +1 -1
  846. package/dist/utils/cloud-hosts.js +2 -29
  847. package/dist/utils/cloud-hosts.js.map +1 -1
  848. package/dist/utils/compile-time.d.ts.map +1 -1
  849. package/dist/utils/compile-time.js +2 -3
  850. package/dist/utils/compile-time.js.map +1 -1
  851. package/dist/utils/country-codes.d.ts +2 -11
  852. package/dist/utils/country-codes.js +2 -18
  853. package/dist/utils/country-codes.js.map +1 -1
  854. package/dist/utils/crypto.d.ts.map +1 -1
  855. package/dist/utils/crypto.js +4 -115
  856. package/dist/utils/crypto.js.map +1 -1
  857. package/dist/utils/currencies.d.ts +1 -1
  858. package/dist/utils/currencies.d.ts.map +1 -1
  859. package/dist/utils/currencies.js +3 -39
  860. package/dist/utils/currencies.js.map +1 -1
  861. package/dist/utils/currency-constants.d.ts +2 -45
  862. package/dist/utils/currency-constants.js +2 -3
  863. package/dist/utils/currency-constants.js.map +1 -1
  864. package/dist/utils/dates.d.ts +2 -23
  865. package/dist/utils/dates.js +2 -46
  866. package/dist/utils/dates.js.map +1 -1
  867. package/dist/utils/dev-env-state-path.d.ts.map +1 -1
  868. package/dist/utils/dev-env-state-path.js +2 -4
  869. package/dist/utils/dev-env-state-path.js.map +1 -1
  870. package/dist/utils/dev-tool.d.ts.map +1 -1
  871. package/dist/utils/dev-tool.js +2 -3
  872. package/dist/utils/dev-tool.js.map +1 -1
  873. package/dist/utils/dom.d.ts.map +1 -1
  874. package/dist/utils/dom.js +2 -3
  875. package/dist/utils/dom.js.map +1 -1
  876. package/dist/utils/elements-chain.d.ts.map +1 -1
  877. package/dist/utils/elements-chain.js +6 -52
  878. package/dist/utils/elements-chain.js.map +1 -1
  879. package/dist/utils/env.d.ts.map +1 -1
  880. package/dist/utils/env.js +2 -4
  881. package/dist/utils/env.js.map +1 -1
  882. package/dist/utils/env.test.js +1 -3
  883. package/dist/utils/env.test.js.map +1 -1
  884. package/dist/utils/errors.d.ts +2 -238
  885. package/dist/utils/errors.js +2 -4
  886. package/dist/utils/errors.js.map +1 -1
  887. package/dist/utils/esbuild.d.ts +1 -1
  888. package/dist/utils/esbuild.d.ts.map +1 -1
  889. package/dist/utils/esbuild.js +5 -6
  890. package/dist/utils/esbuild.js.map +1 -1
  891. package/dist/utils/featurebase.d.ts.map +1 -1
  892. package/dist/utils/featurebase.js +2 -4
  893. package/dist/utils/featurebase.js.map +1 -1
  894. package/dist/utils/fs.d.ts.map +1 -1
  895. package/dist/utils/fs.js +5 -6
  896. package/dist/utils/fs.js.map +1 -1
  897. package/dist/utils/functions.d.ts.map +1 -1
  898. package/dist/utils/functions.js +2 -26
  899. package/dist/utils/functions.js.map +1 -1
  900. package/dist/utils/geo.d.ts.map +1 -1
  901. package/dist/utils/geo.js +2 -4
  902. package/dist/utils/geo.js.map +1 -1
  903. package/dist/utils/globals.d.ts.map +1 -1
  904. package/dist/utils/globals.js +2 -3
  905. package/dist/utils/globals.js.map +1 -1
  906. package/dist/utils/hashes.d.ts.map +1 -1
  907. package/dist/utils/hashes.js +4 -5
  908. package/dist/utils/hashes.js.map +1 -1
  909. package/dist/utils/html.d.ts.map +1 -1
  910. package/dist/utils/html.js +2 -21
  911. package/dist/utils/html.js.map +1 -1
  912. package/dist/utils/http.d.ts.map +1 -1
  913. package/dist/utils/http.js +2 -21
  914. package/dist/utils/http.js.map +1 -1
  915. package/dist/utils/ips.d.ts.map +1 -1
  916. package/dist/utils/ips.js +4 -28
  917. package/dist/utils/ips.js.map +1 -1
  918. package/dist/utils/json.d.ts +2 -15
  919. package/dist/utils/json.js +2 -157
  920. package/dist/utils/json.js.map +1 -1
  921. package/dist/utils/jsx-editable-transpiler.d.ts.map +1 -1
  922. package/dist/utils/jsx-editable-transpiler.js +7 -8
  923. package/dist/utils/jsx-editable-transpiler.js.map +1 -1
  924. package/dist/utils/jsx-editable-transpiler.test.js +1 -3
  925. package/dist/utils/jsx-editable-transpiler.test.js.map +1 -1
  926. package/dist/utils/jwt.d.ts.map +1 -1
  927. package/dist/utils/jwt.js +6 -7
  928. package/dist/utils/jwt.js.map +1 -1
  929. package/dist/utils/locks.d.ts.map +1 -1
  930. package/dist/utils/locks.js +2 -4
  931. package/dist/utils/locks.js.map +1 -1
  932. package/dist/utils/maps.d.ts.map +1 -1
  933. package/dist/utils/maps.js +2 -113
  934. package/dist/utils/maps.js.map +1 -1
  935. package/dist/utils/math.d.ts.map +1 -1
  936. package/dist/utils/math.js +2 -13
  937. package/dist/utils/math.js.map +1 -1
  938. package/dist/utils/monkey-patch.d.ts.map +1 -1
  939. package/dist/utils/monkey-patch.js +3 -5
  940. package/dist/utils/monkey-patch.js.map +1 -1
  941. package/dist/utils/node-http.js +2 -4
  942. package/dist/utils/node-http.js.map +1 -1
  943. package/dist/utils/numbers.d.ts.map +1 -1
  944. package/dist/utils/numbers.js +2 -47
  945. package/dist/utils/numbers.js.map +1 -1
  946. package/dist/utils/oauth.d.ts.map +1 -1
  947. package/dist/utils/oauth.js +2 -3
  948. package/dist/utils/oauth.js.map +1 -1
  949. package/dist/utils/objects.d.ts +2 -59
  950. package/dist/utils/objects.js +2 -624
  951. package/dist/utils/objects.js.map +1 -1
  952. package/dist/utils/paginated-lists.d.ts.map +1 -1
  953. package/dist/utils/paginated-lists.js +2 -4
  954. package/dist/utils/paginated-lists.js.map +1 -1
  955. package/dist/utils/paginated-lists.test.js +1 -3
  956. package/dist/utils/paginated-lists.test.js.map +1 -1
  957. package/dist/utils/passkey.d.ts +2 -2
  958. package/dist/utils/promises.d.ts +1 -1
  959. package/dist/utils/promises.d.ts.map +1 -1
  960. package/dist/utils/promises.js +3 -163
  961. package/dist/utils/promises.js.map +1 -1
  962. package/dist/utils/proxies.d.ts.map +1 -1
  963. package/dist/utils/proxies.js +2 -39
  964. package/dist/utils/proxies.js.map +1 -1
  965. package/dist/utils/react.d.ts.map +1 -1
  966. package/dist/utils/react.js +4 -44
  967. package/dist/utils/react.js.map +1 -1
  968. package/dist/utils/redirect-urls.d.ts.map +1 -1
  969. package/dist/utils/redirect-urls.js +3 -94
  970. package/dist/utils/redirect-urls.js.map +1 -1
  971. package/dist/utils/regex.js +2 -3
  972. package/dist/utils/regex.js.map +1 -1
  973. package/dist/utils/results.d.ts +2 -70
  974. package/dist/utils/results.js +2 -215
  975. package/dist/utils/results.js.map +1 -1
  976. package/dist/utils/sentry.js +2 -3
  977. package/dist/utils/sentry.js.map +1 -1
  978. package/dist/utils/stores.d.ts +1 -1
  979. package/dist/utils/stores.d.ts.map +1 -1
  980. package/dist/utils/stores.js +2 -4
  981. package/dist/utils/stores.js.map +1 -1
  982. package/dist/utils/strings.d.ts +2 -76
  983. package/dist/utils/strings.js +2 -253
  984. package/dist/utils/strings.js.map +1 -1
  985. package/dist/utils/strings.nicify.test.js +1 -3
  986. package/dist/utils/strings.nicify.test.js.map +1 -1
  987. package/dist/utils/telemetry.d.ts.map +1 -1
  988. package/dist/utils/telemetry.js +2 -4
  989. package/dist/utils/telemetry.js.map +1 -1
  990. package/dist/utils/turnstile-browser.d.ts.map +1 -1
  991. package/dist/utils/turnstile-browser.js +2 -4
  992. package/dist/utils/turnstile-browser.js.map +1 -1
  993. package/dist/utils/turnstile-flow.d.ts.map +1 -1
  994. package/dist/utils/turnstile-flow.js +2 -4
  995. package/dist/utils/turnstile-flow.js.map +1 -1
  996. package/dist/utils/turnstile-flow.test.js +1 -3
  997. package/dist/utils/turnstile-flow.test.js.map +1 -1
  998. package/dist/utils/turnstile.d.ts.map +1 -1
  999. package/dist/utils/turnstile.js +2 -3
  1000. package/dist/utils/turnstile.js.map +1 -1
  1001. package/dist/utils/typed-arrays.js +2 -4
  1002. package/dist/utils/typed-arrays.js.map +1 -1
  1003. package/dist/utils/types.d.ts +2 -77
  1004. package/dist/utils/types.js +2 -3
  1005. package/dist/utils/types.js.map +1 -1
  1006. package/dist/utils/unicode.d.ts.map +1 -1
  1007. package/dist/utils/unicode.js +2 -15
  1008. package/dist/utils/unicode.js.map +1 -1
  1009. package/dist/utils/urls.d.ts.map +1 -1
  1010. package/dist/utils/urls.js +2 -153
  1011. package/dist/utils/urls.js.map +1 -1
  1012. package/dist/utils/uuids.d.ts.map +1 -1
  1013. package/dist/utils/uuids.js +3 -28
  1014. package/dist/utils/uuids.js.map +1 -1
  1015. package/dist/webhooks-8Ts1Clcb.d.ts +326 -0
  1016. package/dist/webhooks-8Ts1Clcb.d.ts.map +1 -0
  1017. package/package.json +2 -8
  1018. package/src/interface/client-interface.test.ts +77 -12
  1019. package/src/interface/client-interface.ts +9 -9
  1020. package/dist/config/format.d.ts.map +0 -1
  1021. package/dist/config/schema.d.ts.map +0 -1
  1022. package/dist/crud.d.ts.map +0 -1
  1023. package/dist/interface/admin-interface.d.ts.map +0 -1
  1024. package/dist/interface/admin-metrics.d.ts.map +0 -1
  1025. package/dist/interface/client-interface.d.ts.map +0 -1
  1026. package/dist/interface/crud/analytics.d.ts.map +0 -1
  1027. package/dist/interface/crud/connected-accounts.d.ts.map +0 -1
  1028. package/dist/interface/crud/contact-channels.d.ts.map +0 -1
  1029. package/dist/interface/crud/current-user.d.ts.map +0 -1
  1030. package/dist/interface/crud/emails.d.ts.map +0 -1
  1031. package/dist/interface/crud/internal-api-keys.d.ts.map +0 -1
  1032. package/dist/interface/crud/invoices.d.ts.map +0 -1
  1033. package/dist/interface/crud/items.d.ts.map +0 -1
  1034. package/dist/interface/crud/notification-preferences.d.ts.map +0 -1
  1035. package/dist/interface/crud/oauth-providers.d.ts.map +0 -1
  1036. package/dist/interface/crud/products.d.ts.map +0 -1
  1037. package/dist/interface/crud/project-api-keys.d.ts.map +0 -1
  1038. package/dist/interface/crud/project-permissions.d.ts.map +0 -1
  1039. package/dist/interface/crud/projects.d.ts.map +0 -1
  1040. package/dist/interface/crud/session-replays.d.ts.map +0 -1
  1041. package/dist/interface/crud/sessions.d.ts.map +0 -1
  1042. package/dist/interface/crud/svix-token.d.ts.map +0 -1
  1043. package/dist/interface/crud/team-invitation.d.ts.map +0 -1
  1044. package/dist/interface/crud/team-member-profiles.d.ts.map +0 -1
  1045. package/dist/interface/crud/team-memberships.d.ts.map +0 -1
  1046. package/dist/interface/crud/team-permissions.d.ts.map +0 -1
  1047. package/dist/interface/crud/teams.d.ts.map +0 -1
  1048. package/dist/interface/crud/transactions.d.ts.map +0 -1
  1049. package/dist/interface/crud/users.d.ts.map +0 -1
  1050. package/dist/interface/handler-urls.d.ts.map +0 -1
  1051. package/dist/interface/page-component-versions.d.ts.map +0 -1
  1052. package/dist/interface/plan-usage.d.ts.map +0 -1
  1053. package/dist/interface/server-interface.d.ts.map +0 -1
  1054. package/dist/interface/webhooks.d.ts.map +0 -1
  1055. package/dist/known-errors.d.ts.map +0 -1
  1056. package/dist/schema-fields.d.ts.map +0 -1
  1057. package/dist/sessions.d.ts.map +0 -1
  1058. package/dist/utils/country-codes.d.ts.map +0 -1
  1059. package/dist/utils/currency-constants.d.ts.map +0 -1
  1060. package/dist/utils/dates.d.ts.map +0 -1
  1061. package/dist/utils/errors.d.ts.map +0 -1
  1062. package/dist/utils/json.d.ts.map +0 -1
  1063. package/dist/utils/objects.d.ts.map +0 -1
  1064. package/dist/utils/results.d.ts.map +0 -1
  1065. package/dist/utils/strings.d.ts.map +0 -1
  1066. package/dist/utils/types.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"objects.js","names":[],"sources":["../../../src/utils/objects.tsx"],"sourcesContent":["import { HexclaveAssertionError } from \"./errors\";\nimport { identity } from \"./functions\";\nimport { stringCompare } from \"./strings\";\nimport { typeAssertIs } from \"./types\";\n\nexport function isNotNull<T>(value: T): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\nimport.meta.vitest?.test(\"isNotNull\", ({ expect }) => {\n expect(isNotNull(null)).toBe(false);\n expect(isNotNull(undefined)).toBe(false);\n expect(isNotNull(0)).toBe(true);\n expect(isNotNull(\"\")).toBe(true);\n expect(isNotNull(false)).toBe(true);\n expect(isNotNull({})).toBe(true);\n expect(isNotNull([])).toBe(true);\n});\n\nexport type DeepPartial<T> = T extends object ? (T extends any[] ? { [P in keyof T]: DeepPartial<T[P]> } : { [P in keyof T]?: DeepPartial<T[P]> }) : T;\nexport type DeepRequired<T> = T extends object ? { [P in keyof T]-?: DeepRequired<T[P]> } : T;\nexport type DeepRequiredOrUndefined<T> = T extends object ? { [P in keyof { [K in keyof T]-?: K}]: DeepRequiredOrUndefined<T[P]> } : T;\n\n\n/**\n * Assumes both objects are primitives, arrays, or non-function plain objects, and compares them deeply.\n *\n * Note that since they are assumed to be plain objects, this function does not compare prototypes.\n */\nexport function deepPlainEquals<T>(obj1: T, obj2: unknown, options: { ignoreUndefinedValues?: boolean } = {}): obj2 is T {\n if (typeof obj1 !== typeof obj2) return false;\n if (obj1 === obj2) return true;\n\n switch (typeof obj1) {\n case 'object': {\n if (!obj1 || !obj2) return false;\n\n if (Array.isArray(obj1) || Array.isArray(obj2)) {\n if (!Array.isArray(obj1) || !Array.isArray(obj2)) return false;\n if (obj1.length !== obj2.length) return false;\n return obj1.every((v, i) => deepPlainEquals(v, obj2[i], options));\n }\n\n const entries1 = Object.entries(obj1).filter(([k, v]) => !options.ignoreUndefinedValues || v !== undefined);\n const entries2 = Object.entries(obj2).filter(([k, v]) => !options.ignoreUndefinedValues || v !== undefined);\n if (entries1.length !== entries2.length) return false;\n return entries1.every(([k, v1]) => {\n const e2 = entries2.find(([k2]) => k === k2);\n if (!e2) return false;\n return deepPlainEquals(v1, e2[1], options);\n });\n }\n case 'undefined':\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n case 'function':{\n return false;\n }\n default: {\n throw new Error(\"Unexpected typeof \" + typeof obj1);\n }\n }\n}\nimport.meta.vitest?.test(\"deepPlainEquals\", ({ expect }) => {\n // Simple values\n expect(deepPlainEquals(1, 1)).toBe(true);\n expect(deepPlainEquals(\"test\", \"test\")).toBe(true);\n expect(deepPlainEquals(1, 2)).toBe(false);\n expect(deepPlainEquals(\"test\", \"other\")).toBe(false);\n\n // Arrays\n expect(deepPlainEquals([1, 2, 3], [1, 2, 3])).toBe(true);\n expect(deepPlainEquals([1, 2, 3], [1, 2, 4])).toBe(false);\n expect(deepPlainEquals([1, 2, 3], [1, 2])).toBe(false);\n\n // Objects\n expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 2 })).toBe(true);\n expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 3 })).toBe(false);\n expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1 })).toBe(false);\n\n // Nested structures\n expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 3 }] })).toBe(true);\n expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 4 }] })).toBe(false);\n\n // With options\n expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 }, { ignoreUndefinedValues: true })).toBe(true);\n expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 })).toBe(false);\n});\n\nexport function isCloneable<T>(obj: T): obj is Exclude<T, symbol | Function> {\n return typeof obj !== 'symbol' && typeof obj !== 'function';\n}\n\nexport function shallowClone<T extends object>(obj: T): T {\n if (!isCloneable(obj)) throw new HexclaveAssertionError(\"shallowClone does not support symbols or functions\", { obj });\n\n if (Array.isArray(obj)) return obj.map(identity) as T;\n return { ...obj };\n}\nimport.meta.vitest?.test(\"shallowClone\", ({ expect }) => {\n expect(shallowClone({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });\n expect(shallowClone([1, 2, 3])).toEqual([1, 2, 3]);\n expect(() => shallowClone(() => {})).toThrow();\n});\n\nexport function deepPlainClone<T>(obj: T): T {\n if (typeof obj === 'function') throw new HexclaveAssertionError(\"deepPlainClone does not support functions\");\n if (typeof obj === 'symbol') throw new HexclaveAssertionError(\"deepPlainClone does not support symbols\");\n if (typeof obj !== 'object' || !obj) return obj;\n if (Array.isArray(obj)) return obj.map(deepPlainClone) as any;\n return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, deepPlainClone(v)])) as any;\n}\nimport.meta.vitest?.test(\"deepPlainClone\", ({ expect }) => {\n // Primitive values\n expect(deepPlainClone(1)).toBe(1);\n expect(deepPlainClone(\"test\")).toBe(\"test\");\n expect(deepPlainClone(null)).toBe(null);\n expect(deepPlainClone(undefined)).toBe(undefined);\n\n // Arrays\n const arr = [1, 2, 3];\n const clonedArr = deepPlainClone(arr);\n expect(clonedArr).toEqual(arr);\n expect(clonedArr).not.toBe(arr); // Different reference\n\n // Objects\n const obj = { a: 1, b: 2 };\n const clonedObj = deepPlainClone(obj);\n expect(clonedObj).toEqual(obj);\n expect(clonedObj).not.toBe(obj); // Different reference\n\n // Nested structures\n const nested = { a: 1, b: [1, 2, { c: 3 }] };\n const clonedNested = deepPlainClone(nested);\n expect(clonedNested).toEqual(nested);\n expect(clonedNested).not.toBe(nested); // Different reference\n expect(clonedNested.b).not.toBe(nested.b); // Different reference for nested array\n expect(clonedNested.b[2]).not.toBe(nested.b[2]); // Different reference for nested object\n\n // Error cases\n expect(() => deepPlainClone(() => {})).toThrow();\n expect(() => deepPlainClone(Symbol())).toThrow();\n});\n\nexport type DeepMerge<T, U> = U extends any ? DeepMergeNonDistributive<T, U> : never; // distributive conditional type https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types\ntype DeepMergeNonDistributive<T, U> = Omit<T, keyof U> & Omit<U, keyof T> & DeepMergeInner<Pick<T, keyof U & keyof T>, Pick<U, keyof U & keyof T>>;\ntype DeepMergeInner<T, U> = {\n [K in { [Ki in keyof U]-?: Ki }[keyof U]]: // we use this weird construct instead of just `keyof U` because TypeScript automatically removes the `undefined` key when using `-?` as a modifier; this is a workaround to make TypeScript not recognize the -? and for us to get the `undefined` key back\n undefined extends U[K]\n ? K extends keyof T\n ? T[K] extends object\n ? Exclude<U[K], undefined> extends object\n ? DeepMerge<T[K], Exclude<U[K], undefined>>\n : T[K] | Exclude<U[K], undefined>\n : T[K] | Exclude<U[K], undefined>\n : Exclude<U[K], undefined>\n : K extends keyof T\n ? T[K] extends object\n ? U[K] extends object\n ? DeepMerge<T[K], U[K]>\n : U[K]\n : U[K]\n : U[K];\n};\nexport function deepMerge<T extends {}, U extends {}>(baseObj: T, mergeObj: U): DeepMerge<T, U> {\n if ([baseObj, mergeObj, ...Object.values(baseObj), ...Object.values(mergeObj)].some(o => !isCloneable(o))) throw new HexclaveAssertionError(\"deepMerge does not support functions or symbols\", { baseObj, mergeObj });\n\n const res: any = shallowClone(baseObj);\n for (const [key, mergeValue] of Object.entries(mergeObj)) {\n if (has(res, key as any)) {\n const baseValue = get(res, key as any);\n if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {\n set(res, key, deepMerge(baseValue, mergeValue));\n continue;\n }\n }\n set(res, key, mergeValue);\n }\n return res as any;\n}\nimport.meta.vitest?.test(\"deepMerge\", ({ expect }) => {\n // Test merging flat objects\n expect(deepMerge({ a: 1 }, { b: 2 })).toEqual({ a: 1, b: 2 });\n expect(deepMerge({ a: 1 }, { a: 2 })).toEqual({ a: 2 });\n expect(deepMerge({ a: 1, b: 2 }, { b: 3, c: 4 })).toEqual({ a: 1, b: 3, c: 4 });\n\n // Test with nested objects\n expect(deepMerge(\n { a: { x: 1, y: 2 }, b: 3 },\n { a: { y: 3, z: 4 }, c: 5 }\n )).toEqual({ a: { x: 1, y: 3, z: 4 }, b: 3, c: 5 });\n\n // Test with arrays\n expect(deepMerge(\n { a: [1, 2], b: 3 },\n { a: [3, 4], c: 5 }\n )).toEqual({ a: [3, 4], b: 3, c: 5 });\n\n // Test with null values\n expect(deepMerge(\n { a: { x: 1 }, b: null },\n { a: { y: 2 }, b: { z: 3 } }\n )).toEqual({ a: { x: 1, y: 2 }, b: { z: 3 } });\n\n // Test with undefined values\n expect(deepMerge(\n { a: 1, b: undefined },\n { b: 2, c: 3 }\n )).toEqual({ a: 1, b: 2, c: 3 });\n\n // Test deeply nested structures\n expect(deepMerge(\n {\n a: {\n x: { deep: 1 },\n y: [1, 2]\n },\n b: 2\n },\n {\n a: {\n x: { deeper: 3 },\n y: [3, 4]\n },\n c: 3\n }\n )).toEqual({\n a: {\n x: { deep: 1, deeper: 3 },\n y: [3, 4]\n },\n b: 2,\n c: 3\n });\n\n // Test with empty objects\n expect(deepMerge({}, { a: 1 })).toEqual({ a: 1 });\n expect(deepMerge({ a: 1 }, {})).toEqual({ a: 1 });\n expect(deepMerge({}, {})).toEqual({});\n\n // Test that original objects are not modified\n const base = { a: { x: 1 }, b: 2 };\n const merge = { a: { y: 2 }, c: 3 };\n const baseClone = deepPlainClone(base);\n const mergeClone = deepPlainClone(merge);\n\n const result = deepMerge(base, merge);\n expect(base).toEqual(baseClone);\n expect(merge).toEqual(mergeClone);\n expect(result).toEqual({ a: { x: 1, y: 2 }, b: 2, c: 3 });\n\n // Test error cases\n expect(() => deepMerge({ a: () => {} }, { b: 2 })).toThrow();\n expect(() => deepMerge({ a: 1 }, { b: () => {} })).toThrow();\n expect(() => deepMerge({ a: Symbol() }, { b: 2 })).toThrow();\n expect(() => deepMerge({ a: 1 }, { b: Symbol() })).toThrow();\n});\n\nexport type DeepOmit<T, U> = T extends object ? { [K in keyof T]: K extends keyof U ? (T[K] extends U[K] ? undefined : T[K]) : T[K] } : (T extends U ? undefined : T);\n\nexport function typedEntries<T extends {}>(obj: T): [Exclude<keyof T, number>, T[keyof T]][] {\n return Object.entries(obj) as any;\n}\nimport.meta.vitest?.test(\"typedEntries\", ({ expect }) => {\n expect(typedEntries({})).toEqual([]);\n expect(typedEntries({ a: 1, b: 2 })).toEqual([[\"a\", 1], [\"b\", 2]]);\n expect(typedEntries({ a: \"hello\", b: true, c: null })).toEqual([[\"a\", \"hello\"], [\"b\", true], [\"c\", null]]);\n\n // Test with object containing methods\n const objWithMethod = { a: 1, b: () => \"test\" };\n const entries = typedEntries(objWithMethod);\n expect(entries.length).toBe(2);\n expect(entries[0][0]).toBe(\"a\");\n expect(entries[0][1]).toBe(1);\n expect(entries[1][0]).toBe(\"b\");\n expect(typeof entries[1][1]).toBe(\"function\");\n});\n\nexport function typedFromEntries<K extends PropertyKey, V>(entries: (readonly [K, V])[]): Record<K, V> {\n return Object.fromEntries(entries) as any;\n}\nimport.meta.vitest?.test(\"typedFromEntries\", ({ expect }) => {\n expect(typedFromEntries([])).toEqual({});\n expect(typedFromEntries([[\"a\", 1], [\"b\", 2]])).toEqual({ a: 1, b: 2 });\n\n // Test with mixed types (using type assertion)\n const mixedEntries = [[\"a\", \"hello\"], [\"b\", true], [\"c\", null]] as [string, string | boolean | null][];\n const mixedObj = typedFromEntries(mixedEntries);\n expect(mixedObj).toEqual({ a: \"hello\", b: true, c: null });\n\n // Test with function values\n const fn = () => \"test\";\n type MixedValue = number | (() => string);\n const fnEntries: [string, MixedValue][] = [[\"a\", 1], [\"b\", fn]];\n const obj = typedFromEntries(fnEntries);\n expect(obj.a).toBe(1);\n expect(typeof obj.b).toBe(\"function\");\n // Type assertion needed for the function call\n expect((obj.b as () => string)()).toBe(\"test\");\n});\n\nexport function typedKeys<T extends {}>(obj: T): (Exclude<keyof T, number>)[] {\n return Object.keys(obj) as any;\n}\nimport.meta.vitest?.test(\"typedKeys\", ({ expect }) => {\n expect(typedKeys({})).toEqual([]);\n expect(typedKeys({ a: 1, b: 2 })).toEqual([\"a\", \"b\"]);\n expect(typedKeys({ a: \"hello\", b: true, c: null })).toEqual([\"a\", \"b\", \"c\"]);\n\n // Test with object containing methods\n const objWithMethod = { a: 1, b: () => \"test\" };\n expect(typedKeys(objWithMethod)).toEqual([\"a\", \"b\"]);\n});\n\nexport function typedValues<T extends {}>(obj: T): T[keyof T][] {\n return Object.values(obj) as any;\n}\nimport.meta.vitest?.test(\"typedValues\", ({ expect }) => {\n expect(typedValues({})).toEqual([]);\n expect(typedValues({ a: 1, b: 2 })).toEqual([1, 2]);\n\n // Test with mixed types\n type MixedObj = { a: string, b: boolean, c: null };\n const mixedObj: MixedObj = { a: \"hello\", b: true, c: null };\n expect(typedValues(mixedObj)).toEqual([\"hello\", true, null]);\n\n // Test with object containing methods\n type ObjWithFn = { a: number, b: () => string };\n const fn = () => \"test\";\n const objWithMethod: ObjWithFn = { a: 1, b: fn };\n const values = typedValues(objWithMethod);\n expect(values.length).toBe(2);\n expect(values[0]).toBe(1);\n expect(typeof values[1]).toBe(\"function\");\n // Need to cast to the correct type\n const fnValue = values[1] as () => string;\n expect(fnValue()).toBe(\"test\");\n});\n\nexport function typedAssign<T extends {}, U extends {}>(target: T, source: U): T & U {\n return Object.assign(target, source);\n}\nimport.meta.vitest?.test(\"typedAssign\", ({ expect }) => {\n // Test with empty objects\n const emptyTarget = {};\n const emptyResult = typedAssign(emptyTarget, { a: 1 });\n expect(emptyResult).toEqual({ a: 1 });\n expect(emptyResult).toBe(emptyTarget); // Same reference\n\n // Test with non-empty target\n const target = { a: 1, b: 2 };\n const result = typedAssign(target, { c: 3, d: 4 });\n expect(result).toEqual({ a: 1, b: 2, c: 3, d: 4 });\n expect(result).toBe(target); // Same reference\n\n // Test with overlapping properties\n const targetWithOverlap = { a: 1, b: 2 };\n const resultWithOverlap = typedAssign(targetWithOverlap, { b: 3, c: 4 });\n expect(resultWithOverlap).toEqual({ a: 1, b: 3, c: 4 });\n expect(resultWithOverlap).toBe(targetWithOverlap); // Same reference\n});\n\nexport type FilterUndefined<T> =\n & { [k in keyof T as (undefined extends T[k] ? (T[k] extends undefined | void ? never : k) : never)]+?: T[k] & ({} | null) }\n & { [k in keyof T as (undefined extends T[k] ? never : k)]: T[k] & ({} | null) }\n\n/**\n * Returns a new object with all undefined values removed. Useful when spreading optional parameters on an object, as\n * TypeScript's `Partial<XYZ>` type allows `undefined` values.\n */\nexport function filterUndefined<T extends object>(obj: T): FilterUndefined<T> {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined)) as any;\n}\nimport.meta.vitest?.test(\"filterUndefined\", ({ expect }) => {\n expect(filterUndefined({})).toEqual({});\n expect(filterUndefined({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });\n expect(filterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });\n expect(filterUndefined({ a: undefined, b: undefined })).toEqual({});\n expect(filterUndefined({ a: null, b: undefined })).toEqual({ a: null });\n expect(filterUndefined({ a: 0, b: \"\", c: false, d: undefined })).toEqual({ a: 0, b: \"\", c: false });\n});\n\nexport type FilterUndefinedOrNull<T> = FilterUndefined<{ [k in keyof T]: null extends T[k] ? NonNullable<T[k]> | undefined : T[k] }>;\n\n/**\n * Returns a new object with all undefined and null values removed. Useful when spreading optional parameters on an object, as\n * TypeScript's `Partial<XYZ>` type allows `undefined` values.\n */\nexport function filterUndefinedOrNull<T extends object>(obj: T): FilterUndefinedOrNull<T> {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined && v !== null)) as any;\n}\nimport.meta.vitest?.test(\"filterUndefinedOrNull\", ({ expect }) => {\n expect(filterUndefinedOrNull({})).toEqual({});\n expect(filterUndefinedOrNull({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });\n});\n\nexport type DeepFilterUndefined<T> = T extends object ? FilterUndefined<{ [K in keyof T]: DeepFilterUndefined<T[K]> }> : T;\ntypeAssertIs<DeepFilterUndefined<{ a: { b: { c?: undefined, d?: 123 } } }>, { a: { b: { d?: 123 } } }>()();\n\nexport function deepFilterUndefined<T extends object>(obj: T): DeepFilterUndefined<T> {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined).map(([k, v]) => [k, isObjectLike(v) ? deepFilterUndefined(v) : v])) as any;\n}\nimport.meta.vitest?.test(\"deepFilterUndefined\", ({ expect }) => {\n expect(deepFilterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });\n});\n\nexport function pick<T extends {}, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\n return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k as K))) as any;\n}\nimport.meta.vitest?.test(\"pick\", ({ expect }) => {\n const obj = { a: 1, b: 2, c: 3, d: 4 };\n expect(pick(obj, [\"a\", \"c\"])).toEqual({ a: 1, c: 3 });\n expect(pick(obj, [])).toEqual({});\n expect(pick(obj, [\"a\", \"e\" as keyof typeof obj])).toEqual({ a: 1 });\n // Use type assertion for empty object to avoid TypeScript error\n expect(pick({} as Record<string, unknown>, [\"a\"])).toEqual({});\n});\n\nexport function omit<T extends {}, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> {\n if (!Array.isArray(keys)) throw new HexclaveAssertionError(\"omit: keys must be an array\", { obj, keys });\n return Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k as K))) as any;\n}\nimport.meta.vitest?.test(\"omit\", ({ expect }) => {\n const obj = { a: 1, b: 2, c: 3, d: 4 };\n expect(omit(obj, [\"a\", \"c\"])).toEqual({ b: 2, d: 4 });\n expect(omit(obj, [])).toEqual(obj);\n expect(omit(obj, [\"a\", \"e\" as keyof typeof obj])).toEqual({ b: 2, c: 3, d: 4 });\n // Use type assertion for empty object to avoid TypeScript error\n expect(omit({} as Record<string, unknown>, [\"a\"])).toEqual({});\n});\n\nexport function split<T extends {}, K extends keyof T>(obj: T, keys: K[]): [Pick<T, K>, Omit<T, K>] {\n return [pick(obj, keys), omit(obj, keys)];\n}\nimport.meta.vitest?.test(\"split\", ({ expect }) => {\n const obj = { a: 1, b: 2, c: 3, d: 4 };\n expect(split(obj, [\"a\", \"c\"])).toEqual([{ a: 1, c: 3 }, { b: 2, d: 4 }]);\n expect(split(obj, [])).toEqual([{}, obj]);\n expect(split(obj, [\"a\", \"e\" as keyof typeof obj])).toEqual([{ a: 1 }, { b: 2, c: 3, d: 4 }]);\n // Use type assertion for empty object to avoid TypeScript error\n expect(split({} as Record<string, unknown>, [\"a\"])).toEqual([{}, {}]);\n});\n\nexport function mapValues<T extends object, U>(obj: T, fn: (value: T extends (infer E)[] ? E : T[keyof T], key: keyof T) => U): Record<keyof T, U> {\n if (Array.isArray(obj)) {\n return obj.map((v, i) => fn(v, i as keyof T)) as any;\n }\n return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, fn(v, k as keyof T)])) as any;\n}\nimport.meta.vitest?.test(\"mapValues\", ({ expect }) => {\n expect(mapValues({ a: 1, b: 2 }, v => v * 2)).toEqual({ a: 2, b: 4 });\n expect(mapValues([1, 2, 3], v => v * 2)).toEqual([2, 4, 6]);\n});\n\nexport function sortKeys<T extends object>(obj: T): T {\n if (Array.isArray(obj)) {\n return [...obj] as any;\n }\n return Object.fromEntries(Object.entries(obj).sort(([a], [b]) => stringCompare(a, b))) as any;\n}\nimport.meta.vitest?.test(\"sortKeys\", ({ expect }) => {\n const obj = {\n \"1\": 0,\n \"10\": 1,\n b: 2,\n \"2\": 3,\n a: 4,\n \"-3.33\": 5,\n \"-4\": 6,\n \"-3\": 7,\n abc: 8,\n \"a-b\": 9,\n ab: 10,\n ac: 11,\n aa: 12,\n aab: 13,\n };\n expect(Object.entries(sortKeys(obj))).toEqual([\n [\"1\", 0],\n [\"2\", 3],\n [\"10\", 1],\n [\"-3\", 7],\n [\"-3.33\", 5],\n [\"-4\", 6],\n [\"a\", 4],\n [\"a-b\", 9],\n [\"aa\", 12],\n [\"aab\", 13],\n [\"ab\", 10],\n [\"abc\", 8],\n [\"ac\", 11],\n [\"b\", 2],\n ]);\n});\n\nexport function deepSortKeys<T extends object>(obj: T): T {\n return sortKeys(mapValues(obj, v => isObjectLike(v) ? deepSortKeys(v) : v)) as any;\n}\nimport.meta.vitest?.test(\"deepSortKeys\", ({ expect }) => {\n const obj = {\n h: { i: { k: 9, j: 8 }, l: 10 },\n b: { d: 3, c: 2 },\n a: 1,\n e: [4, 5, { g: 7, f: 6 }],\n };\n const sorted = deepSortKeys(obj);\n expect(Object.entries(sorted)).toEqual([\n [\"a\", 1],\n [\"b\", { c: 2, d: 3 }],\n [\"e\", [4, 5, { f: 6, g: 7 }]],\n [\"h\", { i: { j: 8, k: 9 }, l: 10 }],\n ]);\n expect(Object.entries(sorted.b)).toEqual([\n [\"c\", 2],\n [\"d\", 3],\n ]);\n expect(Object.entries(sorted.e[2])).toEqual([\n [\"f\", 6],\n [\"g\", 7],\n ]);\n expect(Object.entries(sorted.h)).toEqual([\n [\"i\", { j: 8, k: 9 }],\n [\"l\", 10],\n ]);\n expect(Object.entries(sorted.h.i)).toEqual([\n [\"j\", 8],\n [\"k\", 9],\n ]);\n});\n\nexport function set<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K, value: T[K & keyof T]) {\n if (!isObjectLike(obj)) throw new HexclaveAssertionError(`set: obj is not an object (found: ${(obj as any) === null ? \"null\" : typeof obj})`, { obj, key, value });\n Object.defineProperty(obj, key, { value, writable: true, configurable: true, enumerable: true });\n}\n\nexport function get<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K): T[K & keyof T] {\n if ((obj as any) == null) throw new HexclaveAssertionError(\"get: obj is null or undefined\", { obj, key });\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (!descriptor) throw new HexclaveAssertionError(`get: key ${String(key)} does not exist`, { obj, key });\n return descriptor.value;\n}\n\nexport function getOrUndefined<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K): T[K & keyof T] | undefined {\n if ((obj as any) == null) throw new HexclaveAssertionError(\"getOrUndefined: obj is null or undefined\", { obj, key });\n return has(obj, key) ? get(obj, key) : undefined;\n}\n\nexport function has<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K): obj is T & { [k in K & keyof T]: unknown } {\n if ((obj as any) == null) throw new HexclaveAssertionError(\"has: obj is null or undefined\", { obj, key });\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nimport.meta.vitest?.test(\"has\", ({ expect }) => {\n const obj = { a: 1, b: undefined, c: null };\n expect(has(obj, \"a\")).toBe(true);\n expect(has(obj, \"b\")).toBe(true);\n expect(has(obj, \"c\")).toBe(true);\n expect(has(obj, \"d\" as keyof typeof obj)).toBe(false);\n});\n\n\nexport function hasAndNotUndefined<T extends object, K extends keyof T>(obj: T, key: K): obj is T & { [k in K]: Exclude<T[K], undefined> } {\n return has(obj, key) && get(obj, key) !== undefined;\n}\n\nexport function deleteKey<T extends object, K extends keyof T>(obj: T, key: K) {\n if (has(obj, key)) {\n Reflect.deleteProperty(obj, key);\n } else {\n throw new HexclaveAssertionError(`deleteKey: key ${String(key)} does not exist`, { obj, key });\n }\n}\n\n/**\n * Returns true iff the value is an object or a function, but not null.\n */\nexport function isObjectLike(value: unknown): value is object | Function {\n return (typeof value === 'object' || typeof value === 'function') && value !== null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"objects.js","names":[],"sources":["../../../src/utils/objects.tsx"],"sourcesContent":["import { HexclaveAssertionError } from \"./errors\";\nimport { identity } from \"./functions\";\nimport { stringCompare } from \"./strings\";\nimport { typeAssertIs } from \"./types\";\n\nexport function isNotNull<T>(value: T): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\nimport.meta.vitest?.test(\"isNotNull\", ({ expect }) => {\n expect(isNotNull(null)).toBe(false);\n expect(isNotNull(undefined)).toBe(false);\n expect(isNotNull(0)).toBe(true);\n expect(isNotNull(\"\")).toBe(true);\n expect(isNotNull(false)).toBe(true);\n expect(isNotNull({})).toBe(true);\n expect(isNotNull([])).toBe(true);\n});\n\nexport type DeepPartial<T> = T extends object ? (T extends any[] ? { [P in keyof T]: DeepPartial<T[P]> } : { [P in keyof T]?: DeepPartial<T[P]> }) : T;\nexport type DeepRequired<T> = T extends object ? { [P in keyof T]-?: DeepRequired<T[P]> } : T;\nexport type DeepRequiredOrUndefined<T> = T extends object ? { [P in keyof { [K in keyof T]-?: K}]: DeepRequiredOrUndefined<T[P]> } : T;\n\n\n/**\n * Assumes both objects are primitives, arrays, or non-function plain objects, and compares them deeply.\n *\n * Note that since they are assumed to be plain objects, this function does not compare prototypes.\n */\nexport function deepPlainEquals<T>(obj1: T, obj2: unknown, options: { ignoreUndefinedValues?: boolean } = {}): obj2 is T {\n if (typeof obj1 !== typeof obj2) return false;\n if (obj1 === obj2) return true;\n\n switch (typeof obj1) {\n case 'object': {\n if (!obj1 || !obj2) return false;\n\n if (Array.isArray(obj1) || Array.isArray(obj2)) {\n if (!Array.isArray(obj1) || !Array.isArray(obj2)) return false;\n if (obj1.length !== obj2.length) return false;\n return obj1.every((v, i) => deepPlainEquals(v, obj2[i], options));\n }\n\n const entries1 = Object.entries(obj1).filter(([k, v]) => !options.ignoreUndefinedValues || v !== undefined);\n const entries2 = Object.entries(obj2).filter(([k, v]) => !options.ignoreUndefinedValues || v !== undefined);\n if (entries1.length !== entries2.length) return false;\n return entries1.every(([k, v1]) => {\n const e2 = entries2.find(([k2]) => k === k2);\n if (!e2) return false;\n return deepPlainEquals(v1, e2[1], options);\n });\n }\n case 'undefined':\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n case 'function':{\n return false;\n }\n default: {\n throw new Error(\"Unexpected typeof \" + typeof obj1);\n }\n }\n}\nimport.meta.vitest?.test(\"deepPlainEquals\", ({ expect }) => {\n // Simple values\n expect(deepPlainEquals(1, 1)).toBe(true);\n expect(deepPlainEquals(\"test\", \"test\")).toBe(true);\n expect(deepPlainEquals(1, 2)).toBe(false);\n expect(deepPlainEquals(\"test\", \"other\")).toBe(false);\n\n // Arrays\n expect(deepPlainEquals([1, 2, 3], [1, 2, 3])).toBe(true);\n expect(deepPlainEquals([1, 2, 3], [1, 2, 4])).toBe(false);\n expect(deepPlainEquals([1, 2, 3], [1, 2])).toBe(false);\n\n // Objects\n expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 2 })).toBe(true);\n expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 3 })).toBe(false);\n expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1 })).toBe(false);\n\n // Nested structures\n expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 3 }] })).toBe(true);\n expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 4 }] })).toBe(false);\n\n // With options\n expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 }, { ignoreUndefinedValues: true })).toBe(true);\n expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 })).toBe(false);\n});\n\nexport function isCloneable<T>(obj: T): obj is Exclude<T, symbol | Function> {\n return typeof obj !== 'symbol' && typeof obj !== 'function';\n}\n\nexport function shallowClone<T extends object>(obj: T): T {\n if (!isCloneable(obj)) throw new HexclaveAssertionError(\"shallowClone does not support symbols or functions\", { obj });\n\n if (Array.isArray(obj)) return obj.map(identity) as T;\n return { ...obj };\n}\nimport.meta.vitest?.test(\"shallowClone\", ({ expect }) => {\n expect(shallowClone({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });\n expect(shallowClone([1, 2, 3])).toEqual([1, 2, 3]);\n expect(() => shallowClone(() => {})).toThrow();\n});\n\nexport function deepPlainClone<T>(obj: T): T {\n if (typeof obj === 'function') throw new HexclaveAssertionError(\"deepPlainClone does not support functions\");\n if (typeof obj === 'symbol') throw new HexclaveAssertionError(\"deepPlainClone does not support symbols\");\n if (typeof obj !== 'object' || !obj) return obj;\n if (Array.isArray(obj)) return obj.map(deepPlainClone) as any;\n return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, deepPlainClone(v)])) as any;\n}\nimport.meta.vitest?.test(\"deepPlainClone\", ({ expect }) => {\n // Primitive values\n expect(deepPlainClone(1)).toBe(1);\n expect(deepPlainClone(\"test\")).toBe(\"test\");\n expect(deepPlainClone(null)).toBe(null);\n expect(deepPlainClone(undefined)).toBe(undefined);\n\n // Arrays\n const arr = [1, 2, 3];\n const clonedArr = deepPlainClone(arr);\n expect(clonedArr).toEqual(arr);\n expect(clonedArr).not.toBe(arr); // Different reference\n\n // Objects\n const obj = { a: 1, b: 2 };\n const clonedObj = deepPlainClone(obj);\n expect(clonedObj).toEqual(obj);\n expect(clonedObj).not.toBe(obj); // Different reference\n\n // Nested structures\n const nested = { a: 1, b: [1, 2, { c: 3 }] };\n const clonedNested = deepPlainClone(nested);\n expect(clonedNested).toEqual(nested);\n expect(clonedNested).not.toBe(nested); // Different reference\n expect(clonedNested.b).not.toBe(nested.b); // Different reference for nested array\n expect(clonedNested.b[2]).not.toBe(nested.b[2]); // Different reference for nested object\n\n // Error cases\n expect(() => deepPlainClone(() => {})).toThrow();\n expect(() => deepPlainClone(Symbol())).toThrow();\n});\n\nexport type DeepMerge<T, U> = U extends any ? DeepMergeNonDistributive<T, U> : never; // distributive conditional type https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types\ntype DeepMergeNonDistributive<T, U> = Omit<T, keyof U> & Omit<U, keyof T> & DeepMergeInner<Pick<T, keyof U & keyof T>, Pick<U, keyof U & keyof T>>;\ntype DeepMergeInner<T, U> = {\n [K in { [Ki in keyof U]-?: Ki }[keyof U]]: // we use this weird construct instead of just `keyof U` because TypeScript automatically removes the `undefined` key when using `-?` as a modifier; this is a workaround to make TypeScript not recognize the -? and for us to get the `undefined` key back\n undefined extends U[K]\n ? K extends keyof T\n ? T[K] extends object\n ? Exclude<U[K], undefined> extends object\n ? DeepMerge<T[K], Exclude<U[K], undefined>>\n : T[K] | Exclude<U[K], undefined>\n : T[K] | Exclude<U[K], undefined>\n : Exclude<U[K], undefined>\n : K extends keyof T\n ? T[K] extends object\n ? U[K] extends object\n ? DeepMerge<T[K], U[K]>\n : U[K]\n : U[K]\n : U[K];\n};\nexport function deepMerge<T extends {}, U extends {}>(baseObj: T, mergeObj: U): DeepMerge<T, U> {\n if ([baseObj, mergeObj, ...Object.values(baseObj), ...Object.values(mergeObj)].some(o => !isCloneable(o))) throw new HexclaveAssertionError(\"deepMerge does not support functions or symbols\", { baseObj, mergeObj });\n\n const res: any = shallowClone(baseObj);\n for (const [key, mergeValue] of Object.entries(mergeObj)) {\n if (has(res, key as any)) {\n const baseValue = get(res, key as any);\n if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {\n set(res, key, deepMerge(baseValue, mergeValue));\n continue;\n }\n }\n set(res, key, mergeValue);\n }\n return res as any;\n}\nimport.meta.vitest?.test(\"deepMerge\", ({ expect }) => {\n // Test merging flat objects\n expect(deepMerge({ a: 1 }, { b: 2 })).toEqual({ a: 1, b: 2 });\n expect(deepMerge({ a: 1 }, { a: 2 })).toEqual({ a: 2 });\n expect(deepMerge({ a: 1, b: 2 }, { b: 3, c: 4 })).toEqual({ a: 1, b: 3, c: 4 });\n\n // Test with nested objects\n expect(deepMerge(\n { a: { x: 1, y: 2 }, b: 3 },\n { a: { y: 3, z: 4 }, c: 5 }\n )).toEqual({ a: { x: 1, y: 3, z: 4 }, b: 3, c: 5 });\n\n // Test with arrays\n expect(deepMerge(\n { a: [1, 2], b: 3 },\n { a: [3, 4], c: 5 }\n )).toEqual({ a: [3, 4], b: 3, c: 5 });\n\n // Test with null values\n expect(deepMerge(\n { a: { x: 1 }, b: null },\n { a: { y: 2 }, b: { z: 3 } }\n )).toEqual({ a: { x: 1, y: 2 }, b: { z: 3 } });\n\n // Test with undefined values\n expect(deepMerge(\n { a: 1, b: undefined },\n { b: 2, c: 3 }\n )).toEqual({ a: 1, b: 2, c: 3 });\n\n // Test deeply nested structures\n expect(deepMerge(\n {\n a: {\n x: { deep: 1 },\n y: [1, 2]\n },\n b: 2\n },\n {\n a: {\n x: { deeper: 3 },\n y: [3, 4]\n },\n c: 3\n }\n )).toEqual({\n a: {\n x: { deep: 1, deeper: 3 },\n y: [3, 4]\n },\n b: 2,\n c: 3\n });\n\n // Test with empty objects\n expect(deepMerge({}, { a: 1 })).toEqual({ a: 1 });\n expect(deepMerge({ a: 1 }, {})).toEqual({ a: 1 });\n expect(deepMerge({}, {})).toEqual({});\n\n // Test that original objects are not modified\n const base = { a: { x: 1 }, b: 2 };\n const merge = { a: { y: 2 }, c: 3 };\n const baseClone = deepPlainClone(base);\n const mergeClone = deepPlainClone(merge);\n\n const result = deepMerge(base, merge);\n expect(base).toEqual(baseClone);\n expect(merge).toEqual(mergeClone);\n expect(result).toEqual({ a: { x: 1, y: 2 }, b: 2, c: 3 });\n\n // Test error cases\n expect(() => deepMerge({ a: () => {} }, { b: 2 })).toThrow();\n expect(() => deepMerge({ a: 1 }, { b: () => {} })).toThrow();\n expect(() => deepMerge({ a: Symbol() }, { b: 2 })).toThrow();\n expect(() => deepMerge({ a: 1 }, { b: Symbol() })).toThrow();\n});\n\nexport type DeepOmit<T, U> = T extends object ? { [K in keyof T]: K extends keyof U ? (T[K] extends U[K] ? undefined : T[K]) : T[K] } : (T extends U ? undefined : T);\n\nexport function typedEntries<T extends {}>(obj: T): [Exclude<keyof T, number>, T[keyof T]][] {\n return Object.entries(obj) as any;\n}\nimport.meta.vitest?.test(\"typedEntries\", ({ expect }) => {\n expect(typedEntries({})).toEqual([]);\n expect(typedEntries({ a: 1, b: 2 })).toEqual([[\"a\", 1], [\"b\", 2]]);\n expect(typedEntries({ a: \"hello\", b: true, c: null })).toEqual([[\"a\", \"hello\"], [\"b\", true], [\"c\", null]]);\n\n // Test with object containing methods\n const objWithMethod = { a: 1, b: () => \"test\" };\n const entries = typedEntries(objWithMethod);\n expect(entries.length).toBe(2);\n expect(entries[0][0]).toBe(\"a\");\n expect(entries[0][1]).toBe(1);\n expect(entries[1][0]).toBe(\"b\");\n expect(typeof entries[1][1]).toBe(\"function\");\n});\n\nexport function typedFromEntries<K extends PropertyKey, V>(entries: (readonly [K, V])[]): Record<K, V> {\n return Object.fromEntries(entries) as any;\n}\nimport.meta.vitest?.test(\"typedFromEntries\", ({ expect }) => {\n expect(typedFromEntries([])).toEqual({});\n expect(typedFromEntries([[\"a\", 1], [\"b\", 2]])).toEqual({ a: 1, b: 2 });\n\n // Test with mixed types (using type assertion)\n const mixedEntries = [[\"a\", \"hello\"], [\"b\", true], [\"c\", null]] as [string, string | boolean | null][];\n const mixedObj = typedFromEntries(mixedEntries);\n expect(mixedObj).toEqual({ a: \"hello\", b: true, c: null });\n\n // Test with function values\n const fn = () => \"test\";\n type MixedValue = number | (() => string);\n const fnEntries: [string, MixedValue][] = [[\"a\", 1], [\"b\", fn]];\n const obj = typedFromEntries(fnEntries);\n expect(obj.a).toBe(1);\n expect(typeof obj.b).toBe(\"function\");\n // Type assertion needed for the function call\n expect((obj.b as () => string)()).toBe(\"test\");\n});\n\nexport function typedKeys<T extends {}>(obj: T): (Exclude<keyof T, number>)[] {\n return Object.keys(obj) as any;\n}\nimport.meta.vitest?.test(\"typedKeys\", ({ expect }) => {\n expect(typedKeys({})).toEqual([]);\n expect(typedKeys({ a: 1, b: 2 })).toEqual([\"a\", \"b\"]);\n expect(typedKeys({ a: \"hello\", b: true, c: null })).toEqual([\"a\", \"b\", \"c\"]);\n\n // Test with object containing methods\n const objWithMethod = { a: 1, b: () => \"test\" };\n expect(typedKeys(objWithMethod)).toEqual([\"a\", \"b\"]);\n});\n\nexport function typedValues<T extends {}>(obj: T): T[keyof T][] {\n return Object.values(obj) as any;\n}\nimport.meta.vitest?.test(\"typedValues\", ({ expect }) => {\n expect(typedValues({})).toEqual([]);\n expect(typedValues({ a: 1, b: 2 })).toEqual([1, 2]);\n\n // Test with mixed types\n type MixedObj = { a: string, b: boolean, c: null };\n const mixedObj: MixedObj = { a: \"hello\", b: true, c: null };\n expect(typedValues(mixedObj)).toEqual([\"hello\", true, null]);\n\n // Test with object containing methods\n type ObjWithFn = { a: number, b: () => string };\n const fn = () => \"test\";\n const objWithMethod: ObjWithFn = { a: 1, b: fn };\n const values = typedValues(objWithMethod);\n expect(values.length).toBe(2);\n expect(values[0]).toBe(1);\n expect(typeof values[1]).toBe(\"function\");\n // Need to cast to the correct type\n const fnValue = values[1] as () => string;\n expect(fnValue()).toBe(\"test\");\n});\n\nexport function typedAssign<T extends {}, U extends {}>(target: T, source: U): T & U {\n return Object.assign(target, source);\n}\nimport.meta.vitest?.test(\"typedAssign\", ({ expect }) => {\n // Test with empty objects\n const emptyTarget = {};\n const emptyResult = typedAssign(emptyTarget, { a: 1 });\n expect(emptyResult).toEqual({ a: 1 });\n expect(emptyResult).toBe(emptyTarget); // Same reference\n\n // Test with non-empty target\n const target = { a: 1, b: 2 };\n const result = typedAssign(target, { c: 3, d: 4 });\n expect(result).toEqual({ a: 1, b: 2, c: 3, d: 4 });\n expect(result).toBe(target); // Same reference\n\n // Test with overlapping properties\n const targetWithOverlap = { a: 1, b: 2 };\n const resultWithOverlap = typedAssign(targetWithOverlap, { b: 3, c: 4 });\n expect(resultWithOverlap).toEqual({ a: 1, b: 3, c: 4 });\n expect(resultWithOverlap).toBe(targetWithOverlap); // Same reference\n});\n\nexport type FilterUndefined<T> =\n & { [k in keyof T as (undefined extends T[k] ? (T[k] extends undefined | void ? never : k) : never)]+?: T[k] & ({} | null) }\n & { [k in keyof T as (undefined extends T[k] ? never : k)]: T[k] & ({} | null) }\n\n/**\n * Returns a new object with all undefined values removed. Useful when spreading optional parameters on an object, as\n * TypeScript's `Partial<XYZ>` type allows `undefined` values.\n */\nexport function filterUndefined<T extends object>(obj: T): FilterUndefined<T> {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined)) as any;\n}\nimport.meta.vitest?.test(\"filterUndefined\", ({ expect }) => {\n expect(filterUndefined({})).toEqual({});\n expect(filterUndefined({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });\n expect(filterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });\n expect(filterUndefined({ a: undefined, b: undefined })).toEqual({});\n expect(filterUndefined({ a: null, b: undefined })).toEqual({ a: null });\n expect(filterUndefined({ a: 0, b: \"\", c: false, d: undefined })).toEqual({ a: 0, b: \"\", c: false });\n});\n\nexport type FilterUndefinedOrNull<T> = FilterUndefined<{ [k in keyof T]: null extends T[k] ? NonNullable<T[k]> | undefined : T[k] }>;\n\n/**\n * Returns a new object with all undefined and null values removed. Useful when spreading optional parameters on an object, as\n * TypeScript's `Partial<XYZ>` type allows `undefined` values.\n */\nexport function filterUndefinedOrNull<T extends object>(obj: T): FilterUndefinedOrNull<T> {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined && v !== null)) as any;\n}\nimport.meta.vitest?.test(\"filterUndefinedOrNull\", ({ expect }) => {\n expect(filterUndefinedOrNull({})).toEqual({});\n expect(filterUndefinedOrNull({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });\n});\n\nexport type DeepFilterUndefined<T> = T extends object ? FilterUndefined<{ [K in keyof T]: DeepFilterUndefined<T[K]> }> : T;\ntypeAssertIs<DeepFilterUndefined<{ a: { b: { c?: undefined, d?: 123 } } }>, { a: { b: { d?: 123 } } }>()();\n\nexport function deepFilterUndefined<T extends object>(obj: T): DeepFilterUndefined<T> {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined).map(([k, v]) => [k, isObjectLike(v) ? deepFilterUndefined(v) : v])) as any;\n}\nimport.meta.vitest?.test(\"deepFilterUndefined\", ({ expect }) => {\n expect(deepFilterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });\n});\n\nexport function pick<T extends {}, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\n return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k as K))) as any;\n}\nimport.meta.vitest?.test(\"pick\", ({ expect }) => {\n const obj = { a: 1, b: 2, c: 3, d: 4 };\n expect(pick(obj, [\"a\", \"c\"])).toEqual({ a: 1, c: 3 });\n expect(pick(obj, [])).toEqual({});\n expect(pick(obj, [\"a\", \"e\" as keyof typeof obj])).toEqual({ a: 1 });\n // Use type assertion for empty object to avoid TypeScript error\n expect(pick({} as Record<string, unknown>, [\"a\"])).toEqual({});\n});\n\nexport function omit<T extends {}, K extends keyof T>(obj: T, keys: K[]): Omit<T, K> {\n if (!Array.isArray(keys)) throw new HexclaveAssertionError(\"omit: keys must be an array\", { obj, keys });\n return Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k as K))) as any;\n}\nimport.meta.vitest?.test(\"omit\", ({ expect }) => {\n const obj = { a: 1, b: 2, c: 3, d: 4 };\n expect(omit(obj, [\"a\", \"c\"])).toEqual({ b: 2, d: 4 });\n expect(omit(obj, [])).toEqual(obj);\n expect(omit(obj, [\"a\", \"e\" as keyof typeof obj])).toEqual({ b: 2, c: 3, d: 4 });\n // Use type assertion for empty object to avoid TypeScript error\n expect(omit({} as Record<string, unknown>, [\"a\"])).toEqual({});\n});\n\nexport function split<T extends {}, K extends keyof T>(obj: T, keys: K[]): [Pick<T, K>, Omit<T, K>] {\n return [pick(obj, keys), omit(obj, keys)];\n}\nimport.meta.vitest?.test(\"split\", ({ expect }) => {\n const obj = { a: 1, b: 2, c: 3, d: 4 };\n expect(split(obj, [\"a\", \"c\"])).toEqual([{ a: 1, c: 3 }, { b: 2, d: 4 }]);\n expect(split(obj, [])).toEqual([{}, obj]);\n expect(split(obj, [\"a\", \"e\" as keyof typeof obj])).toEqual([{ a: 1 }, { b: 2, c: 3, d: 4 }]);\n // Use type assertion for empty object to avoid TypeScript error\n expect(split({} as Record<string, unknown>, [\"a\"])).toEqual([{}, {}]);\n});\n\nexport function mapValues<T extends object, U>(obj: T, fn: (value: T extends (infer E)[] ? E : T[keyof T], key: keyof T) => U): Record<keyof T, U> {\n if (Array.isArray(obj)) {\n return obj.map((v, i) => fn(v, i as keyof T)) as any;\n }\n return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, fn(v, k as keyof T)])) as any;\n}\nimport.meta.vitest?.test(\"mapValues\", ({ expect }) => {\n expect(mapValues({ a: 1, b: 2 }, v => v * 2)).toEqual({ a: 2, b: 4 });\n expect(mapValues([1, 2, 3], v => v * 2)).toEqual([2, 4, 6]);\n});\n\nexport function sortKeys<T extends object>(obj: T): T {\n if (Array.isArray(obj)) {\n return [...obj] as any;\n }\n return Object.fromEntries(Object.entries(obj).sort(([a], [b]) => stringCompare(a, b))) as any;\n}\nimport.meta.vitest?.test(\"sortKeys\", ({ expect }) => {\n const obj = {\n \"1\": 0,\n \"10\": 1,\n b: 2,\n \"2\": 3,\n a: 4,\n \"-3.33\": 5,\n \"-4\": 6,\n \"-3\": 7,\n abc: 8,\n \"a-b\": 9,\n ab: 10,\n ac: 11,\n aa: 12,\n aab: 13,\n };\n expect(Object.entries(sortKeys(obj))).toEqual([\n [\"1\", 0],\n [\"2\", 3],\n [\"10\", 1],\n [\"-3\", 7],\n [\"-3.33\", 5],\n [\"-4\", 6],\n [\"a\", 4],\n [\"a-b\", 9],\n [\"aa\", 12],\n [\"aab\", 13],\n [\"ab\", 10],\n [\"abc\", 8],\n [\"ac\", 11],\n [\"b\", 2],\n ]);\n});\n\nexport function deepSortKeys<T extends object>(obj: T): T {\n return sortKeys(mapValues(obj, v => isObjectLike(v) ? deepSortKeys(v) : v)) as any;\n}\nimport.meta.vitest?.test(\"deepSortKeys\", ({ expect }) => {\n const obj = {\n h: { i: { k: 9, j: 8 }, l: 10 },\n b: { d: 3, c: 2 },\n a: 1,\n e: [4, 5, { g: 7, f: 6 }],\n };\n const sorted = deepSortKeys(obj);\n expect(Object.entries(sorted)).toEqual([\n [\"a\", 1],\n [\"b\", { c: 2, d: 3 }],\n [\"e\", [4, 5, { f: 6, g: 7 }]],\n [\"h\", { i: { j: 8, k: 9 }, l: 10 }],\n ]);\n expect(Object.entries(sorted.b)).toEqual([\n [\"c\", 2],\n [\"d\", 3],\n ]);\n expect(Object.entries(sorted.e[2])).toEqual([\n [\"f\", 6],\n [\"g\", 7],\n ]);\n expect(Object.entries(sorted.h)).toEqual([\n [\"i\", { j: 8, k: 9 }],\n [\"l\", 10],\n ]);\n expect(Object.entries(sorted.h.i)).toEqual([\n [\"j\", 8],\n [\"k\", 9],\n ]);\n});\n\nexport function set<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K, value: T[K & keyof T]) {\n if (!isObjectLike(obj)) throw new HexclaveAssertionError(`set: obj is not an object (found: ${(obj as any) === null ? \"null\" : typeof obj})`, { obj, key, value });\n Object.defineProperty(obj, key, { value, writable: true, configurable: true, enumerable: true });\n}\n\nexport function get<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K): T[K & keyof T] {\n if ((obj as any) == null) throw new HexclaveAssertionError(\"get: obj is null or undefined\", { obj, key });\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (!descriptor) throw new HexclaveAssertionError(`get: key ${String(key)} does not exist`, { obj, key });\n return descriptor.value;\n}\n\nexport function getOrUndefined<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K): T[K & keyof T] | undefined {\n if ((obj as any) == null) throw new HexclaveAssertionError(\"getOrUndefined: obj is null or undefined\", { obj, key });\n return has(obj, key) ? get(obj, key) : undefined;\n}\n\nexport function has<T extends object, K extends PropertyKey = keyof T>(obj: T, key: K): obj is T & { [k in K & keyof T]: unknown } {\n if ((obj as any) == null) throw new HexclaveAssertionError(\"has: obj is null or undefined\", { obj, key });\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nimport.meta.vitest?.test(\"has\", ({ expect }) => {\n const obj = { a: 1, b: undefined, c: null };\n expect(has(obj, \"a\")).toBe(true);\n expect(has(obj, \"b\")).toBe(true);\n expect(has(obj, \"c\")).toBe(true);\n expect(has(obj, \"d\" as keyof typeof obj)).toBe(false);\n});\n\n\nexport function hasAndNotUndefined<T extends object, K extends keyof T>(obj: T, key: K): obj is T & { [k in K]: Exclude<T[K], undefined> } {\n return has(obj, key) && get(obj, key) !== undefined;\n}\n\nexport function deleteKey<T extends object, K extends keyof T>(obj: T, key: K) {\n if (has(obj, key)) {\n Reflect.deleteProperty(obj, key);\n } else {\n throw new HexclaveAssertionError(`deleteKey: key ${String(key)} does not exist`, { obj, key });\n }\n}\n\n/**\n * Returns true iff the value is an object or a function, but not null.\n */\nexport function isObjectLike(value: unknown): value is object | Function {\n return (typeof value === 'object' || typeof value === 'function') && value !== null;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"paginated-lists.d.ts","names":[],"sources":["../../../src/utils/paginated-lists.tsx"],"mappings":"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"}
1
+ {"version":3,"file":"paginated-lists.d.ts","names":[],"sources":["../../../src/utils/paginated-lists.tsx"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { HexclaveAssertionError } from "./errors.js";
2
-
3
2
  //#region src/utils/paginated-lists.tsx
4
3
  /**
5
4
  * Abstract base class for cursor-based pagination over any ordered data source.
@@ -405,7 +404,7 @@ var ArrayPaginatedList = class extends PaginatedList {
405
404
  };
406
405
  }
407
406
  };
408
-
409
407
  //#endregion
410
408
  export { ArrayPaginatedList, PaginatedList };
409
+
411
410
  //# sourceMappingURL=paginated-lists.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paginated-lists.js","names":[],"sources":["../../../src/utils/paginated-lists.tsx"],"sourcesContent":["import { HexclaveAssertionError } from \"./errors\";\n\ntype QueryOptions<Type extends 'next' | 'prev', Cursor, Filter, OrderBy> =\n & {\n filter: Filter,\n orderBy: OrderBy,\n limit: number,\n /**\n * Whether the limit should be treated as an exact value, or an approximate value.\n *\n * If set to 'exact', less items will only be returned if the list item is the first or last item.\n *\n * If set to 'at-least' or 'approximate', the implementation may decide to return more items than the limit requested if doing so comes at no (or negligible) extra cost.\n *\n * If set to 'at-most' or 'approximate', the implementation may decide to return less items than the limit requested if requesting more items would come at a non-negligible extra cost. In this case, if limit > 0, the implementation must still make progress towards the end of the list and the returned cursor must be different from the one passed in.\n *\n * Defaults to 'exact'.\n */\n limitPrecision: 'exact' | 'at-least' | 'at-most' | 'approximate',\n }\n & ([Type] extends [never] ? unknown\n : [Type] extends ['next'] ? { after: Cursor }\n : [Type] extends ['prev'] ? { before: Cursor }\n : { cursor: Cursor });\n\ntype ImplQueryOptions<Type extends 'next' | 'prev', Cursor, Filter, OrderBy> = QueryOptions<Type, Cursor, Filter, OrderBy> & { limitPrecision: 'approximate' }\n\ntype QueryResult<Item, Cursor> = { items: { item: Item, prevCursor: Cursor, nextCursor: Cursor }[], isFirst: boolean, isLast: boolean, cursor: Cursor }\n\ntype ImplQueryResult<Item, Cursor> = { items: { item: Item, prevCursor: Cursor, nextCursor: Cursor }[], isFirst: boolean, isLast: boolean, cursor: Cursor }\n\n/**\n * Abstract base class for cursor-based pagination over any ordered data source.\n *\n * Subclasses implement `_nextOrPrev` to fetch items in one direction. This class handles\n * limit enforcement, sorting validation, and provides `map`, `filter`, `flatMap`, and `merge` utilities.\n *\n * @template Item - The type of items in the list\n * @template Cursor - A string-based cursor type for position tracking. Cursors are always between two items in the list. Note that cursors may not be stable if the filter or orderBy changes.\n * @template Filter - Query filter type\n * @template OrderBy - Sort order specification type\n *\n * @example\n * ```ts\n * // Basic usage: paginate through users\n * const users = new MyUserList();\n * const first10 = await users.next({ after: users.getFirstCursor(), limit: 10, filter: {}, orderBy: 'name', limitPrecision: 'exact' });\n * // first10 = { items: [...], isFirst: true, isLast: false, cursor: \"cursor-after-item-10\" }\n *\n * const next10 = await users.next({ after: first10.cursor, limit: 10, filter: {}, orderBy: 'name', limitPrecision: 'exact' });\n * // Continues from where we left off\n * ```\n */\nexport abstract class PaginatedList<\n Item,\n Cursor extends string,\n Filter extends unknown,\n OrderBy extends unknown,\n> {\n // Abstract methods\n\n protected abstract _getFirstCursor(): Cursor;\n protected abstract _getLastCursor(): Cursor;\n protected abstract _compare(orderBy: OrderBy, a: Item, b: Item): number;\n protected abstract _nextOrPrev(type: 'next' | 'prev', options: ImplQueryOptions<'next' | 'prev', Cursor, Filter, OrderBy>): Promise<ImplQueryResult<Item, Cursor>>;\n\n // Implementations\n\n /** Returns the cursor pointing to the start of the list (before any items). */\n public getFirstCursor(): Cursor { return this._getFirstCursor(); }\n\n /** Returns the cursor pointing to the end of the list (after all items). */\n public getLastCursor(): Cursor { return this._getLastCursor(); }\n\n /** Compares two items according to the given orderBy. Returns negative if a < b, 0 if equal, positive if a > b. */\n public compare(orderBy: OrderBy, a: Item, b: Item): number { return this._compare(orderBy, a, b); }\n\n /**\n * Fetches items moving forward ('next') or backward ('prev') from the given cursor.\n *\n * Respects `limitPrecision`: 'exact' guarantees the exact limit, 'at-least'/'at-most'/'approximate'\n * allow flexibility for performance. Returns items, boundary flags, and a new cursor.\n *\n * @example\n * ```ts\n * // Get 5 items after the start\n * const result = await list.nextOrPrev('next', { cursor: list.getFirstCursor(), limit: 5, filter: {}, orderBy: 'asc', limitPrecision: 'exact' });\n * // result.items.length === 5 (or less if list has fewer items)\n * // result.isFirst === true (started at first cursor)\n * // result.isLast === true if we got all remaining items\n *\n * // Continue from where we left off\n * const more = await list.nextOrPrev('next', { cursor: result.cursor, limit: 5, ... });\n * ```\n */\n async nextOrPrev(type: 'next' | 'prev', options: QueryOptions<'next' | 'prev', Cursor, Filter, OrderBy>): Promise<QueryResult<Item, Cursor>> {\n let result: { item: Item, prevCursor: Cursor, nextCursor: Cursor }[] = [];\n let includesFirst = false;\n let includesLast = false;\n let cursor = options.cursor;\n let limitRemaining = options.limit;\n while (limitRemaining > 0 && (type !== \"next\" || !includesLast) && (type !== \"prev\" || !includesFirst)) {\n const iterationRes = await this._nextOrPrev(type, {\n cursor,\n limit: options.limit,\n limitPrecision: \"approximate\",\n filter: options.filter,\n orderBy: options.orderBy,\n });\n result[type === \"next\" ? \"push\" : \"unshift\"](...iterationRes.items);\n limitRemaining -= iterationRes.items.length;\n includesFirst ||= iterationRes.isFirst;\n includesLast ||= iterationRes.isLast;\n cursor = iterationRes.cursor;\n if ([\"approximate\", \"at-most\"].includes(options.limitPrecision)) break;\n }\n\n // Assert that the result is sorted\n for (let i = 1; i < result.length; i++) {\n if (this._compare(options.orderBy, result[i].item, result[i - 1].item) < 0) {\n throw new HexclaveAssertionError(\"Paginated list result is not sorted; something is wrong with the implementation\", {\n i,\n options,\n result,\n });\n }\n }\n\n if ([\"exact\", \"at-most\"].includes(options.limitPrecision) && result.length > options.limit) {\n if (type === \"next\") {\n result = result.slice(0, options.limit);\n includesLast = false;\n if (options.limit > 0) cursor = result[result.length - 1].nextCursor;\n } else {\n result = result.slice(result.length - options.limit);\n includesFirst = false;\n if (options.limit > 0) cursor = result[0].prevCursor;\n }\n }\n return { items: result, isFirst: includesFirst, isLast: includesLast, cursor };\n }\n /** Fetches items after the given cursor (forward pagination). */\n public async next({ after, ...rest }: QueryOptions<'next', Cursor, Filter, OrderBy>): Promise<QueryResult<Item, Cursor>> {\n return await this.nextOrPrev(\"next\", {\n ...rest,\n cursor: after,\n });\n }\n\n /** Fetches items before the given cursor (backward pagination). */\n public async prev({ before, ...rest }: QueryOptions<'prev', Cursor, Filter, OrderBy>): Promise<QueryResult<Item, Cursor>> {\n return await this.nextOrPrev(\"prev\", {\n ...rest,\n cursor: before,\n });\n }\n\n // Utility methods below\n\n /**\n * Transforms this list by mapping each item to zero or more new items.\n *\n * Note that the sort order must be preserved after the operation; the flat-mapped list will not be sorted automatically.\n *\n * @param itemMapper - Maps each item (with its cursor) to an array of new items\n * @param compare - Comparison function for the new item type\n * @param newCursorFromOldCursor/oldCursorFromNewCursor - Cursor conversion functions\n * @param estimateItemsToFetch - Estimates how many source items to fetch for a given limit\n *\n * @example\n * ```ts\n * // Expand orders into line items (1 order -> N line items)\n * const lineItems = ordersList.flatMap({\n * itemMapper: ({ item: order }) => order.lineItems.map((li, i) => ({ item: li, prevCursor: `${order.id}-${i}`, nextCursor: `${order.id}-${i + 1}` })),\n * compare: (_, a, b) => a.createdAt - b.createdAt,\n * estimateItemsToFetch: ({ limit }) => Math.ceil(limit / 3), // avg 3 items per order\n * // ... cursor converters\n * });\n * ```\n */\n flatMap<Item2, Cursor2 extends string, Filter2 extends unknown, OrderBy2 extends unknown>(options: {\n itemMapper: (itemEntry: { item: Item, prevCursor: Cursor, nextCursor: Cursor }, filter: Filter2, orderBy: OrderBy2) => { item: Item2, prevCursor: Cursor2, nextCursor: Cursor2 }[],\n compare: (orderBy: OrderBy2, a: Item2, b: Item2) => number,\n newCursorFromOldCursor: (cursor: Cursor) => Cursor2,\n oldCursorFromNewCursor: (cursor: Cursor2) => Cursor,\n oldFilterFromNewFilter: (filter: Filter2) => Filter,\n oldOrderByFromNewOrderBy: (orderBy: OrderBy2) => OrderBy,\n estimateItemsToFetch: (options: { filter: Filter2, orderBy: OrderBy2, limit: number }) => number,\n }): PaginatedList<Item2, Cursor2, Filter2, OrderBy2> {\n const that = this;\n class FlatMapPaginatedList extends PaginatedList<Item2, Cursor2, Filter2, OrderBy2> {\n override _getFirstCursor(): Cursor2 { return options.newCursorFromOldCursor(that.getFirstCursor()); }\n override _getLastCursor(): Cursor2 { return options.newCursorFromOldCursor(that.getLastCursor()); }\n\n override _compare(orderBy: OrderBy2, a: Item2, b: Item2): number {\n return options.compare(orderBy, a, b);\n }\n\n override async _nextOrPrev(type: 'next' | 'prev', { limit, filter, orderBy, cursor }: ImplQueryOptions<'next' | 'prev', Cursor2, Filter2, OrderBy2>) {\n const estimatedItems = options.estimateItemsToFetch({ limit, filter, orderBy });\n const original = await that.nextOrPrev(type, {\n limit: estimatedItems,\n limitPrecision: \"approximate\",\n cursor: options.oldCursorFromNewCursor(cursor),\n filter: options.oldFilterFromNewFilter(filter),\n orderBy: options.oldOrderByFromNewOrderBy(orderBy),\n });\n const mapped = original.items.flatMap(itemEntry => options.itemMapper(\n itemEntry,\n filter,\n orderBy,\n ));\n return {\n items: mapped,\n isFirst: original.isFirst,\n isLast: original.isLast,\n cursor: options.newCursorFromOldCursor(original.cursor),\n };\n }\n }\n return new FlatMapPaginatedList();\n }\n\n /**\n * Transforms each item in the list. Requires a reverse mapper for comparison delegation.\n *\n * @param itemMapper - Transforms each item\n * @param oldItemFromNewItem - Reverse-maps new items back to old items (for comparison)\n *\n * @example\n * ```ts\n * // Convert User objects to UserDTO\n * const userDtos = usersList.map({\n * itemMapper: (user) => ({ id: user.id, displayName: user.name }),\n * oldItemFromNewItem: (dto) => fullUsers.get(dto.id)!, // for comparison\n * oldFilterFromNewFilter: (f) => f,\n * oldOrderByFromNewOrderBy: (o) => o,\n * });\n * ```\n */\n map<Item2, Filter2 extends unknown, OrderBy2 extends unknown>(options: {\n itemMapper: (item: Item) => Item2,\n oldItemFromNewItem: (item: Item2) => Item,\n oldFilterFromNewFilter: (filter: Filter2) => Filter,\n oldOrderByFromNewOrderBy: (orderBy: OrderBy2) => OrderBy,\n }): PaginatedList<Item2, Cursor, Filter2, OrderBy2> {\n return this.flatMap({\n itemMapper: (itemEntry, filter, orderBy) => {\n return [{ item: options.itemMapper(itemEntry.item), prevCursor: itemEntry.prevCursor, nextCursor: itemEntry.nextCursor }];\n },\n compare: (orderBy, a, b) => this.compare(options.oldOrderByFromNewOrderBy(orderBy), options.oldItemFromNewItem(a), options.oldItemFromNewItem(b)),\n newCursorFromOldCursor: (cursor) => cursor,\n oldCursorFromNewCursor: (cursor) => cursor,\n oldFilterFromNewFilter: (filter) => options.oldFilterFromNewFilter(filter),\n oldOrderByFromNewOrderBy: (orderBy) => options.oldOrderByFromNewOrderBy(orderBy),\n estimateItemsToFetch: (options) => options.limit,\n });\n }\n\n /**\n * Filters items in the list. Requires an estimate function since filtering may reduce output.\n *\n * @param filter - Predicate to include/exclude items\n * @param estimateItemsToFetch - Estimates how many source items to fetch (accounts for filter selectivity)\n *\n * @example\n * ```ts\n * // Filter to only active users\n * const activeUsers = usersList.filter({\n * filter: (user, filterOpts) => user.isActive && user.role === filterOpts.role,\n * oldFilterFromNewFilter: (f) => ({}), // original list has no filter\n * estimateItemsToFetch: ({ limit }) => limit * 2, // expect ~50% active\n * });\n * ```\n */\n filter<Filter2 extends unknown>(options: {\n filter: (item: Item, filter: Filter2) => boolean,\n oldFilterFromNewFilter: (filter: Filter2) => Filter,\n estimateItemsToFetch: (options: { filter: Filter2, orderBy: OrderBy, limit: number }) => number,\n }): PaginatedList<Item, Cursor, Filter2, OrderBy> {\n return this.flatMap({\n itemMapper: (itemEntry, filter, orderBy) => (options.filter(itemEntry.item, filter) ? [itemEntry] : []),\n compare: (orderBy, a, b) => this.compare(orderBy, a, b),\n newCursorFromOldCursor: (cursor) => cursor,\n oldCursorFromNewCursor: (cursor) => cursor,\n oldFilterFromNewFilter: (filter) => options.oldFilterFromNewFilter(filter),\n oldOrderByFromNewOrderBy: (orderBy) => orderBy,\n estimateItemsToFetch: (o) => options.estimateItemsToFetch(o),\n });\n }\n\n /**\n * Adds an additional filter constraint while preserving the original filter type.\n * Shorthand for `filter()` that intersects Filter with AddedFilter.\n *\n * @example\n * ```ts\n * // Add a \"verified\" filter on top of existing filters\n * const verifiedUsers = usersList.addFilter({\n * filter: (user, f) => user.emailVerified,\n * estimateItemsToFetch: ({ limit }) => limit * 2, // ~50% are verified\n * });\n * // verifiedUsers filter type is Filter\n * ```\n */\n addFilter<AddedFilter extends unknown>(options: {\n filter: (item: Item, filter: Filter & AddedFilter) => boolean,\n estimateItemsToFetch: (options: { filter: Filter & AddedFilter, orderBy: OrderBy, limit: number }) => number,\n }): PaginatedList<Item, Cursor, Filter & AddedFilter, OrderBy> {\n return this.filter({\n filter: (item, filter) => options.filter(item, filter),\n oldFilterFromNewFilter: (filter) => filter,\n estimateItemsToFetch: (o) => options.estimateItemsToFetch(o),\n });\n }\n\n /**\n * Merges multiple paginated lists into one, interleaving items by sort order.\n * All lists must use the same compare function.\n *\n * The merged cursor is a JSON-encoded array of individual list cursors.\n *\n * @example\n * ```ts\n * // Merge users from multiple sources into a unified feed\n * const allUsers = PaginatedList.merge(internalUsers, externalUsers, partnerUsers);\n * const page = await allUsers.next({ after: allUsers.getFirstCursor(), limit: 20, ... });\n * // page.items contains interleaved items from all sources, sorted by orderBy\n * ```\n */\n static merge<\n Item,\n Filter extends unknown,\n OrderBy extends unknown,\n >(\n ...lists: PaginatedList<Item, any, Filter, OrderBy>[]\n ): PaginatedList<Item, string, Filter, OrderBy> {\n class MergePaginatedList extends PaginatedList<Item, string, Filter, OrderBy> {\n override _getFirstCursor() { return JSON.stringify(lists.map(list => list.getFirstCursor())); }\n override _getLastCursor() { return JSON.stringify(lists.map(list => list.getLastCursor())); }\n override _compare(orderBy: OrderBy, a: Item, b: Item): number {\n const listsResults = lists.map(list => list.compare(orderBy, a, b));\n if (!listsResults.every(result => result === listsResults[0])) {\n throw new HexclaveAssertionError(\"Lists have different compare results; make sure that they use the same compare function\", { lists, listsResults, orderBy, a, b });\n }\n return listsResults[0];\n }\n\n override async _nextOrPrev(type: 'next' | 'prev', { limit, filter, orderBy, cursor }: ImplQueryOptions<'next' | 'prev', \"first\" | \"last\" | `[${string}]`, Filter, OrderBy>) {\n const cursors = JSON.parse(cursor);\n const fetchedLists = await Promise.all(lists.map(async (list, i) => {\n return await list.nextOrPrev(type, {\n limit,\n filter,\n orderBy,\n cursor: cursors[i],\n limitPrecision: \"at-least\",\n });\n }));\n const combinedItems = fetchedLists.flatMap((list, i) => list.items.map((itemEntry) => ({ itemEntry, listIndex: i })));\n const sortedItems = [...combinedItems].sort((a, b) => this._compare(orderBy, a.itemEntry.item, b.itemEntry.item));\n\n const sortedItemsWithMergedCursors: { item: Item, prevCursor: string, nextCursor: string }[] = [];\n const curCursors = [...cursors];\n // When going backward, we iterate in reverse order to correctly build cursors,\n // but we need to return items in ascending order\n for (const item of (type === 'next' ? sortedItems : sortedItems.reverse())) {\n const lastCursors = [...curCursors];\n curCursors[item.listIndex] = type === 'next' ? item.itemEntry.nextCursor : item.itemEntry.prevCursor;\n sortedItemsWithMergedCursors.push({\n item: item.itemEntry.item,\n prevCursor: type === 'next' ? JSON.stringify(lastCursors) : JSON.stringify(curCursors),\n nextCursor: type === 'next' ? JSON.stringify(curCursors) : JSON.stringify(lastCursors),\n });\n }\n\n // When going backward, reverse the result to maintain ascending order\n if (type === 'prev') {\n sortedItemsWithMergedCursors.reverse();\n }\n\n return {\n items: sortedItemsWithMergedCursors,\n isFirst: fetchedLists.every((list) => list.isFirst),\n isLast: fetchedLists.every((list) => list.isLast),\n cursor: JSON.stringify(curCursors),\n };\n }\n }\n return new MergePaginatedList();\n }\n\n /**\n * Returns an empty paginated list that always returns no items.\n *\n * @example\n * ```ts\n * const empty = PaginatedList.empty();\n * const result = await empty.next({ after: empty.getFirstCursor(), limit: 10, ... });\n * // result = { items: [], isFirst: true, isLast: true, cursor: \"first\" }\n * ```\n */\n static empty() {\n class EmptyPaginatedList extends PaginatedList<never, \"first\" | \"last\", any, any> {\n override _getFirstCursor() { return \"first\" as const; }\n override _getLastCursor() { return \"last\" as const; }\n override _compare(orderBy: any, a: any, b: any): number {\n return 0;\n }\n override async _nextOrPrev(type: 'next' | 'prev', options: ImplQueryOptions<'next' | 'prev', string, any, any>) {\n return { items: [], isFirst: true, isLast: true, cursor: \"first\" as const };\n }\n }\n return new EmptyPaginatedList();\n }\n}\n\n/**\n * A simple in-memory paginated list backed by an array.\n *\n * Filter is a predicate function, OrderBy is a comparator function.\n * Cursors are in the format \"before-{index}\" representing the position before that index.\n *\n * Note: This implementation re-filters and re-sorts the entire array on each query,\n * so it's only suitable for small datasets.\n *\n * @example\n * ```ts\n * const numbers = new ArrayPaginatedList([5, 2, 8, 1, 9, 3]);\n * const page = await numbers.next({\n * after: \"before-0\",\n * limit: 3,\n * filter: (n) => n > 2,\n * orderBy: (a, b) => a - b,\n * limitPrecision: 'exact',\n * });\n * // page.items = [{ item: 3, prevCursor: \"before-0\", nextCursor: \"before-1\" }, { item: 5, prevCursor: \"before-1\", nextCursor: \"before-2\" }, ...]\n * ```\n */\nexport class ArrayPaginatedList<Item> extends PaginatedList<Item, `before-${number}`, (item: Item) => boolean, (a: Item, b: Item) => number> {\n constructor(private readonly array: Item[]) {\n super();\n }\n\n override _getFirstCursor() { return \"before-0\" as const; }\n override _getLastCursor() { return `before-${this.array.length}` as const; }\n override _compare(orderBy: (a: Item, b: Item) => number, a: Item, b: Item): number {\n return orderBy(a, b);\n }\n\n override async _nextOrPrev(type: 'next' | 'prev', options: ImplQueryOptions<'next' | 'prev', `before-${number}`, (item: Item) => boolean, (a: Item, b: Item) => number>) {\n // First filter and sort the entire array, THEN slice and assign cursors\n // This ensures pagination happens in the sorted/filtered result space\n const filteredArray = this.array.filter(options.filter);\n const sortedArray = [...filteredArray].sort((a, b) => this._compare(options.orderBy, a, b));\n\n // Assign cursors based on position in sorted/filtered result\n const itemEntriesArray = sortedArray.map((item, index) => ({\n item,\n prevCursor: `before-${index}` as `before-${number}`,\n nextCursor: `before-${index + 1}` as `before-${number}`,\n }));\n\n // Calculate slice boundaries based on cursor position in the sorted result\n const oldCursor = Number(options.cursor.replace(\"before-\", \"\"));\n const clampedOldCursor = Math.max(0, Math.min(sortedArray.length, oldCursor));\n const newCursor = Math.max(0, Math.min(sortedArray.length, clampedOldCursor + (type === \"next\" ? 1 : -1) * options.limit));\n\n const slicedItemEntriesArray = itemEntriesArray.slice(Math.min(clampedOldCursor, newCursor), Math.max(clampedOldCursor, newCursor));\n\n return {\n items: slicedItemEntriesArray,\n isFirst: clampedOldCursor === 0 || newCursor === 0,\n isLast: clampedOldCursor === sortedArray.length || newCursor === sortedArray.length,\n cursor: `before-${newCursor}` as const,\n };\n }\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"paginated-lists.js","names":[],"sources":["../../../src/utils/paginated-lists.tsx"],"sourcesContent":["import { HexclaveAssertionError } from \"./errors\";\n\ntype QueryOptions<Type extends 'next' | 'prev', Cursor, Filter, OrderBy> =\n & {\n filter: Filter,\n orderBy: OrderBy,\n limit: number,\n /**\n * Whether the limit should be treated as an exact value, or an approximate value.\n *\n * If set to 'exact', less items will only be returned if the list item is the first or last item.\n *\n * If set to 'at-least' or 'approximate', the implementation may decide to return more items than the limit requested if doing so comes at no (or negligible) extra cost.\n *\n * If set to 'at-most' or 'approximate', the implementation may decide to return less items than the limit requested if requesting more items would come at a non-negligible extra cost. In this case, if limit > 0, the implementation must still make progress towards the end of the list and the returned cursor must be different from the one passed in.\n *\n * Defaults to 'exact'.\n */\n limitPrecision: 'exact' | 'at-least' | 'at-most' | 'approximate',\n }\n & ([Type] extends [never] ? unknown\n : [Type] extends ['next'] ? { after: Cursor }\n : [Type] extends ['prev'] ? { before: Cursor }\n : { cursor: Cursor });\n\ntype ImplQueryOptions<Type extends 'next' | 'prev', Cursor, Filter, OrderBy> = QueryOptions<Type, Cursor, Filter, OrderBy> & { limitPrecision: 'approximate' }\n\ntype QueryResult<Item, Cursor> = { items: { item: Item, prevCursor: Cursor, nextCursor: Cursor }[], isFirst: boolean, isLast: boolean, cursor: Cursor }\n\ntype ImplQueryResult<Item, Cursor> = { items: { item: Item, prevCursor: Cursor, nextCursor: Cursor }[], isFirst: boolean, isLast: boolean, cursor: Cursor }\n\n/**\n * Abstract base class for cursor-based pagination over any ordered data source.\n *\n * Subclasses implement `_nextOrPrev` to fetch items in one direction. This class handles\n * limit enforcement, sorting validation, and provides `map`, `filter`, `flatMap`, and `merge` utilities.\n *\n * @template Item - The type of items in the list\n * @template Cursor - A string-based cursor type for position tracking. Cursors are always between two items in the list. Note that cursors may not be stable if the filter or orderBy changes.\n * @template Filter - Query filter type\n * @template OrderBy - Sort order specification type\n *\n * @example\n * ```ts\n * // Basic usage: paginate through users\n * const users = new MyUserList();\n * const first10 = await users.next({ after: users.getFirstCursor(), limit: 10, filter: {}, orderBy: 'name', limitPrecision: 'exact' });\n * // first10 = { items: [...], isFirst: true, isLast: false, cursor: \"cursor-after-item-10\" }\n *\n * const next10 = await users.next({ after: first10.cursor, limit: 10, filter: {}, orderBy: 'name', limitPrecision: 'exact' });\n * // Continues from where we left off\n * ```\n */\nexport abstract class PaginatedList<\n Item,\n Cursor extends string,\n Filter extends unknown,\n OrderBy extends unknown,\n> {\n // Abstract methods\n\n protected abstract _getFirstCursor(): Cursor;\n protected abstract _getLastCursor(): Cursor;\n protected abstract _compare(orderBy: OrderBy, a: Item, b: Item): number;\n protected abstract _nextOrPrev(type: 'next' | 'prev', options: ImplQueryOptions<'next' | 'prev', Cursor, Filter, OrderBy>): Promise<ImplQueryResult<Item, Cursor>>;\n\n // Implementations\n\n /** Returns the cursor pointing to the start of the list (before any items). */\n public getFirstCursor(): Cursor { return this._getFirstCursor(); }\n\n /** Returns the cursor pointing to the end of the list (after all items). */\n public getLastCursor(): Cursor { return this._getLastCursor(); }\n\n /** Compares two items according to the given orderBy. Returns negative if a < b, 0 if equal, positive if a > b. */\n public compare(orderBy: OrderBy, a: Item, b: Item): number { return this._compare(orderBy, a, b); }\n\n /**\n * Fetches items moving forward ('next') or backward ('prev') from the given cursor.\n *\n * Respects `limitPrecision`: 'exact' guarantees the exact limit, 'at-least'/'at-most'/'approximate'\n * allow flexibility for performance. Returns items, boundary flags, and a new cursor.\n *\n * @example\n * ```ts\n * // Get 5 items after the start\n * const result = await list.nextOrPrev('next', { cursor: list.getFirstCursor(), limit: 5, filter: {}, orderBy: 'asc', limitPrecision: 'exact' });\n * // result.items.length === 5 (or less if list has fewer items)\n * // result.isFirst === true (started at first cursor)\n * // result.isLast === true if we got all remaining items\n *\n * // Continue from where we left off\n * const more = await list.nextOrPrev('next', { cursor: result.cursor, limit: 5, ... });\n * ```\n */\n async nextOrPrev(type: 'next' | 'prev', options: QueryOptions<'next' | 'prev', Cursor, Filter, OrderBy>): Promise<QueryResult<Item, Cursor>> {\n let result: { item: Item, prevCursor: Cursor, nextCursor: Cursor }[] = [];\n let includesFirst = false;\n let includesLast = false;\n let cursor = options.cursor;\n let limitRemaining = options.limit;\n while (limitRemaining > 0 && (type !== \"next\" || !includesLast) && (type !== \"prev\" || !includesFirst)) {\n const iterationRes = await this._nextOrPrev(type, {\n cursor,\n limit: options.limit,\n limitPrecision: \"approximate\",\n filter: options.filter,\n orderBy: options.orderBy,\n });\n result[type === \"next\" ? \"push\" : \"unshift\"](...iterationRes.items);\n limitRemaining -= iterationRes.items.length;\n includesFirst ||= iterationRes.isFirst;\n includesLast ||= iterationRes.isLast;\n cursor = iterationRes.cursor;\n if ([\"approximate\", \"at-most\"].includes(options.limitPrecision)) break;\n }\n\n // Assert that the result is sorted\n for (let i = 1; i < result.length; i++) {\n if (this._compare(options.orderBy, result[i].item, result[i - 1].item) < 0) {\n throw new HexclaveAssertionError(\"Paginated list result is not sorted; something is wrong with the implementation\", {\n i,\n options,\n result,\n });\n }\n }\n\n if ([\"exact\", \"at-most\"].includes(options.limitPrecision) && result.length > options.limit) {\n if (type === \"next\") {\n result = result.slice(0, options.limit);\n includesLast = false;\n if (options.limit > 0) cursor = result[result.length - 1].nextCursor;\n } else {\n result = result.slice(result.length - options.limit);\n includesFirst = false;\n if (options.limit > 0) cursor = result[0].prevCursor;\n }\n }\n return { items: result, isFirst: includesFirst, isLast: includesLast, cursor };\n }\n /** Fetches items after the given cursor (forward pagination). */\n public async next({ after, ...rest }: QueryOptions<'next', Cursor, Filter, OrderBy>): Promise<QueryResult<Item, Cursor>> {\n return await this.nextOrPrev(\"next\", {\n ...rest,\n cursor: after,\n });\n }\n\n /** Fetches items before the given cursor (backward pagination). */\n public async prev({ before, ...rest }: QueryOptions<'prev', Cursor, Filter, OrderBy>): Promise<QueryResult<Item, Cursor>> {\n return await this.nextOrPrev(\"prev\", {\n ...rest,\n cursor: before,\n });\n }\n\n // Utility methods below\n\n /**\n * Transforms this list by mapping each item to zero or more new items.\n *\n * Note that the sort order must be preserved after the operation; the flat-mapped list will not be sorted automatically.\n *\n * @param itemMapper - Maps each item (with its cursor) to an array of new items\n * @param compare - Comparison function for the new item type\n * @param newCursorFromOldCursor/oldCursorFromNewCursor - Cursor conversion functions\n * @param estimateItemsToFetch - Estimates how many source items to fetch for a given limit\n *\n * @example\n * ```ts\n * // Expand orders into line items (1 order -> N line items)\n * const lineItems = ordersList.flatMap({\n * itemMapper: ({ item: order }) => order.lineItems.map((li, i) => ({ item: li, prevCursor: `${order.id}-${i}`, nextCursor: `${order.id}-${i + 1}` })),\n * compare: (_, a, b) => a.createdAt - b.createdAt,\n * estimateItemsToFetch: ({ limit }) => Math.ceil(limit / 3), // avg 3 items per order\n * // ... cursor converters\n * });\n * ```\n */\n flatMap<Item2, Cursor2 extends string, Filter2 extends unknown, OrderBy2 extends unknown>(options: {\n itemMapper: (itemEntry: { item: Item, prevCursor: Cursor, nextCursor: Cursor }, filter: Filter2, orderBy: OrderBy2) => { item: Item2, prevCursor: Cursor2, nextCursor: Cursor2 }[],\n compare: (orderBy: OrderBy2, a: Item2, b: Item2) => number,\n newCursorFromOldCursor: (cursor: Cursor) => Cursor2,\n oldCursorFromNewCursor: (cursor: Cursor2) => Cursor,\n oldFilterFromNewFilter: (filter: Filter2) => Filter,\n oldOrderByFromNewOrderBy: (orderBy: OrderBy2) => OrderBy,\n estimateItemsToFetch: (options: { filter: Filter2, orderBy: OrderBy2, limit: number }) => number,\n }): PaginatedList<Item2, Cursor2, Filter2, OrderBy2> {\n const that = this;\n class FlatMapPaginatedList extends PaginatedList<Item2, Cursor2, Filter2, OrderBy2> {\n override _getFirstCursor(): Cursor2 { return options.newCursorFromOldCursor(that.getFirstCursor()); }\n override _getLastCursor(): Cursor2 { return options.newCursorFromOldCursor(that.getLastCursor()); }\n\n override _compare(orderBy: OrderBy2, a: Item2, b: Item2): number {\n return options.compare(orderBy, a, b);\n }\n\n override async _nextOrPrev(type: 'next' | 'prev', { limit, filter, orderBy, cursor }: ImplQueryOptions<'next' | 'prev', Cursor2, Filter2, OrderBy2>) {\n const estimatedItems = options.estimateItemsToFetch({ limit, filter, orderBy });\n const original = await that.nextOrPrev(type, {\n limit: estimatedItems,\n limitPrecision: \"approximate\",\n cursor: options.oldCursorFromNewCursor(cursor),\n filter: options.oldFilterFromNewFilter(filter),\n orderBy: options.oldOrderByFromNewOrderBy(orderBy),\n });\n const mapped = original.items.flatMap(itemEntry => options.itemMapper(\n itemEntry,\n filter,\n orderBy,\n ));\n return {\n items: mapped,\n isFirst: original.isFirst,\n isLast: original.isLast,\n cursor: options.newCursorFromOldCursor(original.cursor),\n };\n }\n }\n return new FlatMapPaginatedList();\n }\n\n /**\n * Transforms each item in the list. Requires a reverse mapper for comparison delegation.\n *\n * @param itemMapper - Transforms each item\n * @param oldItemFromNewItem - Reverse-maps new items back to old items (for comparison)\n *\n * @example\n * ```ts\n * // Convert User objects to UserDTO\n * const userDtos = usersList.map({\n * itemMapper: (user) => ({ id: user.id, displayName: user.name }),\n * oldItemFromNewItem: (dto) => fullUsers.get(dto.id)!, // for comparison\n * oldFilterFromNewFilter: (f) => f,\n * oldOrderByFromNewOrderBy: (o) => o,\n * });\n * ```\n */\n map<Item2, Filter2 extends unknown, OrderBy2 extends unknown>(options: {\n itemMapper: (item: Item) => Item2,\n oldItemFromNewItem: (item: Item2) => Item,\n oldFilterFromNewFilter: (filter: Filter2) => Filter,\n oldOrderByFromNewOrderBy: (orderBy: OrderBy2) => OrderBy,\n }): PaginatedList<Item2, Cursor, Filter2, OrderBy2> {\n return this.flatMap({\n itemMapper: (itemEntry, filter, orderBy) => {\n return [{ item: options.itemMapper(itemEntry.item), prevCursor: itemEntry.prevCursor, nextCursor: itemEntry.nextCursor }];\n },\n compare: (orderBy, a, b) => this.compare(options.oldOrderByFromNewOrderBy(orderBy), options.oldItemFromNewItem(a), options.oldItemFromNewItem(b)),\n newCursorFromOldCursor: (cursor) => cursor,\n oldCursorFromNewCursor: (cursor) => cursor,\n oldFilterFromNewFilter: (filter) => options.oldFilterFromNewFilter(filter),\n oldOrderByFromNewOrderBy: (orderBy) => options.oldOrderByFromNewOrderBy(orderBy),\n estimateItemsToFetch: (options) => options.limit,\n });\n }\n\n /**\n * Filters items in the list. Requires an estimate function since filtering may reduce output.\n *\n * @param filter - Predicate to include/exclude items\n * @param estimateItemsToFetch - Estimates how many source items to fetch (accounts for filter selectivity)\n *\n * @example\n * ```ts\n * // Filter to only active users\n * const activeUsers = usersList.filter({\n * filter: (user, filterOpts) => user.isActive && user.role === filterOpts.role,\n * oldFilterFromNewFilter: (f) => ({}), // original list has no filter\n * estimateItemsToFetch: ({ limit }) => limit * 2, // expect ~50% active\n * });\n * ```\n */\n filter<Filter2 extends unknown>(options: {\n filter: (item: Item, filter: Filter2) => boolean,\n oldFilterFromNewFilter: (filter: Filter2) => Filter,\n estimateItemsToFetch: (options: { filter: Filter2, orderBy: OrderBy, limit: number }) => number,\n }): PaginatedList<Item, Cursor, Filter2, OrderBy> {\n return this.flatMap({\n itemMapper: (itemEntry, filter, orderBy) => (options.filter(itemEntry.item, filter) ? [itemEntry] : []),\n compare: (orderBy, a, b) => this.compare(orderBy, a, b),\n newCursorFromOldCursor: (cursor) => cursor,\n oldCursorFromNewCursor: (cursor) => cursor,\n oldFilterFromNewFilter: (filter) => options.oldFilterFromNewFilter(filter),\n oldOrderByFromNewOrderBy: (orderBy) => orderBy,\n estimateItemsToFetch: (o) => options.estimateItemsToFetch(o),\n });\n }\n\n /**\n * Adds an additional filter constraint while preserving the original filter type.\n * Shorthand for `filter()` that intersects Filter with AddedFilter.\n *\n * @example\n * ```ts\n * // Add a \"verified\" filter on top of existing filters\n * const verifiedUsers = usersList.addFilter({\n * filter: (user, f) => user.emailVerified,\n * estimateItemsToFetch: ({ limit }) => limit * 2, // ~50% are verified\n * });\n * // verifiedUsers filter type is Filter\n * ```\n */\n addFilter<AddedFilter extends unknown>(options: {\n filter: (item: Item, filter: Filter & AddedFilter) => boolean,\n estimateItemsToFetch: (options: { filter: Filter & AddedFilter, orderBy: OrderBy, limit: number }) => number,\n }): PaginatedList<Item, Cursor, Filter & AddedFilter, OrderBy> {\n return this.filter({\n filter: (item, filter) => options.filter(item, filter),\n oldFilterFromNewFilter: (filter) => filter,\n estimateItemsToFetch: (o) => options.estimateItemsToFetch(o),\n });\n }\n\n /**\n * Merges multiple paginated lists into one, interleaving items by sort order.\n * All lists must use the same compare function.\n *\n * The merged cursor is a JSON-encoded array of individual list cursors.\n *\n * @example\n * ```ts\n * // Merge users from multiple sources into a unified feed\n * const allUsers = PaginatedList.merge(internalUsers, externalUsers, partnerUsers);\n * const page = await allUsers.next({ after: allUsers.getFirstCursor(), limit: 20, ... });\n * // page.items contains interleaved items from all sources, sorted by orderBy\n * ```\n */\n static merge<\n Item,\n Filter extends unknown,\n OrderBy extends unknown,\n >(\n ...lists: PaginatedList<Item, any, Filter, OrderBy>[]\n ): PaginatedList<Item, string, Filter, OrderBy> {\n class MergePaginatedList extends PaginatedList<Item, string, Filter, OrderBy> {\n override _getFirstCursor() { return JSON.stringify(lists.map(list => list.getFirstCursor())); }\n override _getLastCursor() { return JSON.stringify(lists.map(list => list.getLastCursor())); }\n override _compare(orderBy: OrderBy, a: Item, b: Item): number {\n const listsResults = lists.map(list => list.compare(orderBy, a, b));\n if (!listsResults.every(result => result === listsResults[0])) {\n throw new HexclaveAssertionError(\"Lists have different compare results; make sure that they use the same compare function\", { lists, listsResults, orderBy, a, b });\n }\n return listsResults[0];\n }\n\n override async _nextOrPrev(type: 'next' | 'prev', { limit, filter, orderBy, cursor }: ImplQueryOptions<'next' | 'prev', \"first\" | \"last\" | `[${string}]`, Filter, OrderBy>) {\n const cursors = JSON.parse(cursor);\n const fetchedLists = await Promise.all(lists.map(async (list, i) => {\n return await list.nextOrPrev(type, {\n limit,\n filter,\n orderBy,\n cursor: cursors[i],\n limitPrecision: \"at-least\",\n });\n }));\n const combinedItems = fetchedLists.flatMap((list, i) => list.items.map((itemEntry) => ({ itemEntry, listIndex: i })));\n const sortedItems = [...combinedItems].sort((a, b) => this._compare(orderBy, a.itemEntry.item, b.itemEntry.item));\n\n const sortedItemsWithMergedCursors: { item: Item, prevCursor: string, nextCursor: string }[] = [];\n const curCursors = [...cursors];\n // When going backward, we iterate in reverse order to correctly build cursors,\n // but we need to return items in ascending order\n for (const item of (type === 'next' ? sortedItems : sortedItems.reverse())) {\n const lastCursors = [...curCursors];\n curCursors[item.listIndex] = type === 'next' ? item.itemEntry.nextCursor : item.itemEntry.prevCursor;\n sortedItemsWithMergedCursors.push({\n item: item.itemEntry.item,\n prevCursor: type === 'next' ? JSON.stringify(lastCursors) : JSON.stringify(curCursors),\n nextCursor: type === 'next' ? JSON.stringify(curCursors) : JSON.stringify(lastCursors),\n });\n }\n\n // When going backward, reverse the result to maintain ascending order\n if (type === 'prev') {\n sortedItemsWithMergedCursors.reverse();\n }\n\n return {\n items: sortedItemsWithMergedCursors,\n isFirst: fetchedLists.every((list) => list.isFirst),\n isLast: fetchedLists.every((list) => list.isLast),\n cursor: JSON.stringify(curCursors),\n };\n }\n }\n return new MergePaginatedList();\n }\n\n /**\n * Returns an empty paginated list that always returns no items.\n *\n * @example\n * ```ts\n * const empty = PaginatedList.empty();\n * const result = await empty.next({ after: empty.getFirstCursor(), limit: 10, ... });\n * // result = { items: [], isFirst: true, isLast: true, cursor: \"first\" }\n * ```\n */\n static empty() {\n class EmptyPaginatedList extends PaginatedList<never, \"first\" | \"last\", any, any> {\n override _getFirstCursor() { return \"first\" as const; }\n override _getLastCursor() { return \"last\" as const; }\n override _compare(orderBy: any, a: any, b: any): number {\n return 0;\n }\n override async _nextOrPrev(type: 'next' | 'prev', options: ImplQueryOptions<'next' | 'prev', string, any, any>) {\n return { items: [], isFirst: true, isLast: true, cursor: \"first\" as const };\n }\n }\n return new EmptyPaginatedList();\n }\n}\n\n/**\n * A simple in-memory paginated list backed by an array.\n *\n * Filter is a predicate function, OrderBy is a comparator function.\n * Cursors are in the format \"before-{index}\" representing the position before that index.\n *\n * Note: This implementation re-filters and re-sorts the entire array on each query,\n * so it's only suitable for small datasets.\n *\n * @example\n * ```ts\n * const numbers = new ArrayPaginatedList([5, 2, 8, 1, 9, 3]);\n * const page = await numbers.next({\n * after: \"before-0\",\n * limit: 3,\n * filter: (n) => n > 2,\n * orderBy: (a, b) => a - b,\n * limitPrecision: 'exact',\n * });\n * // page.items = [{ item: 3, prevCursor: \"before-0\", nextCursor: \"before-1\" }, { item: 5, prevCursor: \"before-1\", nextCursor: \"before-2\" }, ...]\n * ```\n */\nexport class ArrayPaginatedList<Item> extends PaginatedList<Item, `before-${number}`, (item: Item) => boolean, (a: Item, b: Item) => number> {\n constructor(private readonly array: Item[]) {\n super();\n }\n\n override _getFirstCursor() { return \"before-0\" as const; }\n override _getLastCursor() { return `before-${this.array.length}` as const; }\n override _compare(orderBy: (a: Item, b: Item) => number, a: Item, b: Item): number {\n return orderBy(a, b);\n }\n\n override async _nextOrPrev(type: 'next' | 'prev', options: ImplQueryOptions<'next' | 'prev', `before-${number}`, (item: Item) => boolean, (a: Item, b: Item) => number>) {\n // First filter and sort the entire array, THEN slice and assign cursors\n // This ensures pagination happens in the sorted/filtered result space\n const filteredArray = this.array.filter(options.filter);\n const sortedArray = [...filteredArray].sort((a, b) => this._compare(options.orderBy, a, b));\n\n // Assign cursors based on position in sorted/filtered result\n const itemEntriesArray = sortedArray.map((item, index) => ({\n item,\n prevCursor: `before-${index}` as `before-${number}`,\n nextCursor: `before-${index + 1}` as `before-${number}`,\n }));\n\n // Calculate slice boundaries based on cursor position in the sorted result\n const oldCursor = Number(options.cursor.replace(\"before-\", \"\"));\n const clampedOldCursor = Math.max(0, Math.min(sortedArray.length, oldCursor));\n const newCursor = Math.max(0, Math.min(sortedArray.length, clampedOldCursor + (type === \"next\" ? 1 : -1) * options.limit));\n\n const slicedItemEntriesArray = itemEntriesArray.slice(Math.min(clampedOldCursor, newCursor), Math.max(clampedOldCursor, newCursor));\n\n return {\n items: slicedItemEntriesArray,\n isFirst: clampedOldCursor === 0 || newCursor === 0,\n isLast: clampedOldCursor === sortedArray.length || newCursor === sortedArray.length,\n cursor: `before-${newCursor}` as const,\n };\n }\n}\n\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { stringCompare } from "./strings.js";
3
3
  import { ArrayPaginatedList, PaginatedList } from "./paginated-lists.js";
4
-
5
4
  //#region src/utils/paginated-lists.test.ts
6
5
  const items = (result) => result.items.map((i) => i.item);
7
6
  describe("ArrayPaginatedList", () => {
@@ -1298,7 +1297,7 @@ describe("unsorted array pagination", () => {
1298
1297
  }))).toEqual([2]);
1299
1298
  });
1300
1299
  });
1301
-
1302
1300
  //#endregion
1303
- export { };
1301
+ export {};
1302
+
1304
1303
  //# sourceMappingURL=paginated-lists.test.js.map