@stackframe/stack-shared 2.8.8 → 2.8.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/config/format.d.cts +39 -0
  3. package/dist/config/format.d.ts +14 -13
  4. package/dist/config/format.js +147 -206
  5. package/dist/config/format.js.map +1 -0
  6. package/dist/config/schema.d.cts +729 -0
  7. package/dist/config/schema.d.ts +59 -51
  8. package/dist/config/schema.js +232 -172
  9. package/dist/config/schema.js.map +1 -0
  10. package/dist/crud.d.cts +102 -0
  11. package/dist/crud.d.ts +15 -13
  12. package/dist/crud.js +83 -128
  13. package/dist/crud.js.map +1 -0
  14. package/dist/esm/config/format.js +135 -0
  15. package/dist/esm/config/format.js.map +1 -0
  16. package/dist/esm/config/schema.js +201 -0
  17. package/dist/esm/config/schema.js.map +1 -0
  18. package/dist/esm/crud.js +60 -0
  19. package/dist/esm/crud.js.map +1 -0
  20. package/dist/esm/global.d.js +1 -0
  21. package/dist/esm/global.d.js.map +1 -0
  22. package/dist/esm/helpers/password.js +17 -0
  23. package/dist/esm/helpers/password.js.map +1 -0
  24. package/dist/esm/helpers/production-mode.js +50 -0
  25. package/dist/esm/helpers/production-mode.js.map +1 -0
  26. package/dist/esm/hooks/use-async-callback.js +38 -0
  27. package/dist/esm/hooks/use-async-callback.js.map +1 -0
  28. package/dist/esm/hooks/use-async-external-store.js +23 -0
  29. package/dist/esm/hooks/use-async-external-store.js.map +1 -0
  30. package/dist/esm/hooks/use-hash.js +17 -0
  31. package/dist/esm/hooks/use-hash.js.map +1 -0
  32. package/dist/esm/hooks/use-strict-memo.js +61 -0
  33. package/dist/esm/hooks/use-strict-memo.js.map +1 -0
  34. package/dist/esm/index.js +22 -0
  35. package/dist/esm/index.js.map +1 -0
  36. package/dist/esm/interface/adminInterface.js +244 -0
  37. package/dist/esm/interface/adminInterface.js.map +1 -0
  38. package/dist/esm/interface/clientInterface.js +2041 -0
  39. package/dist/esm/interface/clientInterface.js.map +1 -0
  40. package/dist/esm/interface/crud/contact-channels.js +77 -0
  41. package/dist/esm/interface/crud/contact-channels.js.map +1 -0
  42. package/dist/esm/interface/crud/current-user.js +65 -0
  43. package/dist/esm/interface/crud/current-user.js.map +1 -0
  44. package/dist/esm/interface/crud/email-templates.js +52 -0
  45. package/dist/esm/interface/crud/email-templates.js.map +1 -0
  46. package/dist/esm/interface/crud/emails.js +20 -0
  47. package/dist/esm/interface/crud/emails.js.map +1 -0
  48. package/dist/esm/interface/crud/internal-api-keys.js +69 -0
  49. package/dist/esm/interface/crud/internal-api-keys.js.map +1 -0
  50. package/dist/esm/interface/crud/oauth.js +24 -0
  51. package/dist/esm/interface/crud/oauth.js.map +1 -0
  52. package/dist/esm/interface/crud/project-api-keys.js +93 -0
  53. package/dist/esm/interface/crud/project-api-keys.js.map +1 -0
  54. package/dist/esm/interface/crud/project-permissions.js +113 -0
  55. package/dist/esm/interface/crud/project-permissions.js.map +1 -0
  56. package/dist/esm/interface/crud/projects.js +180 -0
  57. package/dist/esm/interface/crud/projects.js.map +1 -0
  58. package/dist/esm/interface/crud/sessions.js +62 -0
  59. package/dist/esm/interface/crud/sessions.js.map +1 -0
  60. package/dist/esm/interface/crud/svix-token.js +22 -0
  61. package/dist/esm/interface/crud/svix-token.js.map +1 -0
  62. package/dist/esm/interface/crud/team-invitation-details.js +23 -0
  63. package/dist/esm/interface/crud/team-invitation-details.js.map +1 -0
  64. package/dist/esm/interface/crud/team-invitation.js +36 -0
  65. package/dist/esm/interface/crud/team-invitation.js.map +1 -0
  66. package/dist/esm/interface/crud/team-member-profiles.js +62 -0
  67. package/dist/esm/interface/crud/team-member-profiles.js.map +1 -0
  68. package/dist/esm/interface/crud/team-memberships.js +60 -0
  69. package/dist/esm/interface/crud/team-memberships.js.map +1 -0
  70. package/dist/esm/interface/crud/team-permissions.js +114 -0
  71. package/dist/esm/interface/crud/team-permissions.js.map +1 -0
  72. package/dist/esm/interface/crud/teams.js +143 -0
  73. package/dist/esm/interface/crud/teams.js.map +1 -0
  74. package/dist/esm/interface/crud/users.js +139 -0
  75. package/dist/esm/interface/crud/users.js.map +1 -0
  76. package/dist/esm/interface/serverInterface.js +485 -0
  77. package/dist/esm/interface/serverInterface.js.map +1 -0
  78. package/dist/esm/interface/webhooks.js +21 -0
  79. package/dist/esm/interface/webhooks.js.map +1 -0
  80. package/dist/esm/known-errors.js +1238 -0
  81. package/dist/esm/known-errors.js.map +1 -0
  82. package/dist/esm/schema-fields.js +484 -0
  83. package/dist/esm/schema-fields.js.map +1 -0
  84. package/dist/esm/sessions.js +168 -0
  85. package/dist/esm/sessions.js.map +1 -0
  86. package/dist/esm/utils/api-keys.js +79 -0
  87. package/dist/esm/utils/api-keys.js.map +1 -0
  88. package/dist/esm/utils/arrays.js +78 -0
  89. package/dist/esm/utils/arrays.js.map +1 -0
  90. package/dist/esm/utils/base64.js +18 -0
  91. package/dist/esm/utils/base64.js.map +1 -0
  92. package/dist/esm/utils/booleans.js +12 -0
  93. package/dist/esm/utils/booleans.js.map +1 -0
  94. package/dist/esm/utils/browser-compat.js +21 -0
  95. package/dist/esm/utils/browser-compat.js.map +1 -0
  96. package/dist/esm/utils/bytes.js +160 -0
  97. package/dist/esm/utils/bytes.js.map +1 -0
  98. package/dist/esm/utils/caches.js +167 -0
  99. package/dist/esm/utils/caches.js.map +1 -0
  100. package/dist/esm/utils/compile-time.js +11 -0
  101. package/dist/esm/utils/compile-time.js.map +1 -0
  102. package/dist/esm/utils/crypto.js +25 -0
  103. package/dist/esm/utils/crypto.js.map +1 -0
  104. package/dist/esm/utils/dates.js +64 -0
  105. package/dist/esm/utils/dates.js.map +1 -0
  106. package/dist/esm/utils/dom.js +11 -0
  107. package/dist/esm/utils/dom.js.map +1 -0
  108. package/dist/esm/utils/env.js +58 -0
  109. package/dist/esm/utils/env.js.map +1 -0
  110. package/dist/esm/utils/errors.js +174 -0
  111. package/dist/esm/utils/errors.js.map +1 -0
  112. package/dist/esm/utils/fs.js +37 -0
  113. package/dist/esm/utils/fs.js.map +1 -0
  114. package/dist/esm/utils/functions.js +12 -0
  115. package/dist/esm/utils/functions.js.map +1 -0
  116. package/dist/esm/utils/geo.js +15 -0
  117. package/dist/esm/utils/geo.js.map +1 -0
  118. package/dist/esm/utils/globals.js +18 -0
  119. package/dist/esm/utils/globals.js.map +1 -0
  120. package/dist/esm/utils/hashes.js +55 -0
  121. package/dist/esm/utils/hashes.js.map +1 -0
  122. package/dist/esm/utils/html.js +13 -0
  123. package/dist/esm/utils/html.js.map +1 -0
  124. package/dist/esm/utils/http.js +60 -0
  125. package/dist/esm/utils/http.js.map +1 -0
  126. package/dist/esm/utils/ips.js +15 -0
  127. package/dist/esm/utils/ips.js.map +1 -0
  128. package/dist/esm/utils/json.js +31 -0
  129. package/dist/esm/utils/json.js.map +1 -0
  130. package/dist/esm/utils/jwt.js +87 -0
  131. package/dist/esm/utils/jwt.js.map +1 -0
  132. package/dist/esm/utils/locks.js +57 -0
  133. package/dist/esm/utils/locks.js.map +1 -0
  134. package/dist/esm/utils/maps.js +181 -0
  135. package/dist/esm/utils/maps.js.map +1 -0
  136. package/dist/esm/utils/math.js +8 -0
  137. package/dist/esm/utils/math.js.map +1 -0
  138. package/dist/esm/utils/node-http.js +42 -0
  139. package/dist/esm/utils/node-http.js.map +1 -0
  140. package/dist/esm/utils/numbers.js +32 -0
  141. package/dist/esm/utils/numbers.js.map +1 -0
  142. package/dist/esm/utils/oauth.js +10 -0
  143. package/dist/esm/utils/oauth.js.map +1 -0
  144. package/dist/esm/utils/objects.js +177 -0
  145. package/dist/esm/utils/objects.js.map +1 -0
  146. package/dist/esm/utils/passkey.js +1 -0
  147. package/dist/esm/utils/passkey.js.map +1 -0
  148. package/dist/esm/utils/promises.js +233 -0
  149. package/dist/esm/utils/promises.js.map +1 -0
  150. package/dist/esm/utils/proxies.js +128 -0
  151. package/dist/esm/utils/proxies.js.map +1 -0
  152. package/dist/esm/utils/react.js +78 -0
  153. package/dist/esm/utils/react.js.map +1 -0
  154. package/dist/esm/utils/results.js +141 -0
  155. package/dist/esm/utils/results.js.map +1 -0
  156. package/dist/esm/utils/sentry.js +20 -0
  157. package/dist/esm/utils/sentry.js.map +1 -0
  158. package/dist/esm/utils/stores.js +195 -0
  159. package/dist/esm/utils/stores.js.map +1 -0
  160. package/dist/esm/utils/strings.js +295 -0
  161. package/dist/esm/utils/strings.js.map +1 -0
  162. package/dist/esm/utils/strings.nicify.test.js +222 -0
  163. package/dist/esm/utils/strings.nicify.test.js.map +1 -0
  164. package/dist/esm/utils/types.js +1 -0
  165. package/dist/esm/utils/types.js.map +1 -0
  166. package/dist/esm/utils/unicode.js +11 -0
  167. package/dist/esm/utils/unicode.js.map +1 -0
  168. package/dist/esm/utils/urls.js +53 -0
  169. package/dist/esm/utils/urls.js.map +1 -0
  170. package/dist/esm/utils/uuids.js +16 -0
  171. package/dist/esm/utils/uuids.js.map +1 -0
  172. package/dist/global.d.d.cts +1 -0
  173. package/dist/global.d.d.ts +1 -0
  174. package/dist/global.d.js +2 -0
  175. package/dist/global.d.js.map +1 -0
  176. package/dist/helpers/password.d.cts +11 -0
  177. package/dist/helpers/password.d.ts +11 -2
  178. package/dist/helpers/password.js +41 -11
  179. package/dist/helpers/password.js.map +1 -0
  180. package/dist/helpers/production-mode.d.cts +12 -0
  181. package/dist/helpers/production-mode.d.ts +9 -3
  182. package/dist/helpers/production-mode.js +72 -45
  183. package/dist/helpers/production-mode.js.map +1 -0
  184. package/dist/hooks/use-async-callback.d.cts +6 -0
  185. package/dist/hooks/use-async-callback.d.ts +6 -3
  186. package/dist/hooks/use-async-callback.js +72 -30
  187. package/dist/hooks/use-async-callback.js.map +1 -0
  188. package/dist/hooks/use-async-external-store.d.cts +7 -0
  189. package/dist/hooks/use-async-external-store.d.ts +5 -2
  190. package/dist/hooks/use-async-external-store.js +47 -19
  191. package/dist/hooks/use-async-external-store.js.map +1 -0
  192. package/dist/hooks/use-hash.d.cts +3 -0
  193. package/dist/hooks/use-hash.d.ts +3 -1
  194. package/dist/hooks/use-hash.js +41 -8
  195. package/dist/hooks/use-hash.js.map +1 -0
  196. package/dist/hooks/use-strict-memo.d.cts +8 -0
  197. package/dist/hooks/use-strict-memo.d.ts +3 -1
  198. package/dist/hooks/use-strict-memo.js +78 -131
  199. package/dist/hooks/use-strict-memo.js.map +1 -0
  200. package/dist/index.d.cts +30 -0
  201. package/dist/index.d.ts +30 -4
  202. package/dist/index.js +42 -4
  203. package/dist/index.js.map +1 -0
  204. package/dist/interface/adminInterface.d.cts +94 -0
  205. package/dist/interface/adminInterface.d.ts +38 -15
  206. package/dist/interface/adminInterface.js +269 -174
  207. package/dist/interface/adminInterface.js.map +1 -0
  208. package/dist/interface/clientInterface.d.cts +260 -0
  209. package/dist/interface/clientInterface.d.ts +25 -18
  210. package/dist/interface/clientInterface.js +2054 -995
  211. package/dist/interface/clientInterface.js.map +1 -0
  212. package/dist/interface/crud/contact-channels.d.cts +180 -0
  213. package/dist/interface/crud/contact-channels.d.ts +30 -25
  214. package/dist/interface/crud/contact-channels.js +101 -59
  215. package/dist/interface/crud/contact-channels.js.map +1 -0
  216. package/dist/interface/crud/current-user.d.cts +205 -0
  217. package/dist/interface/crud/current-user.d.ts +17 -12
  218. package/dist/interface/crud/current-user.js +86 -56
  219. package/dist/interface/crud/current-user.js.map +1 -0
  220. package/dist/interface/crud/email-templates.d.cts +84 -0
  221. package/dist/interface/crud/email-templates.d.ts +24 -19
  222. package/dist/interface/crud/email-templates.js +77 -37
  223. package/dist/interface/crud/email-templates.js.map +1 -0
  224. package/dist/interface/crud/emails.d.cts +69 -0
  225. package/dist/interface/crud/emails.d.ts +12 -7
  226. package/dist/interface/crud/emails.js +54 -12
  227. package/dist/interface/crud/emails.js.map +1 -0
  228. package/dist/interface/crud/internal-api-keys.d.cts +139 -0
  229. package/dist/interface/crud/internal-api-keys.d.ts +22 -17
  230. package/dist/interface/crud/internal-api-keys.js +92 -54
  231. package/dist/interface/crud/internal-api-keys.js.map +1 -0
  232. package/dist/interface/crud/oauth.d.cts +34 -0
  233. package/dist/interface/crud/oauth.d.ts +16 -11
  234. package/dist/interface/crud/oauth.js +48 -14
  235. package/dist/interface/crud/oauth.js.map +1 -0
  236. package/dist/interface/crud/project-api-keys.d.cts +196 -0
  237. package/dist/interface/crud/project-api-keys.d.ts +20 -12
  238. package/dist/interface/crud/project-api-keys.js +121 -74
  239. package/dist/interface/crud/project-api-keys.js.map +1 -0
  240. package/dist/interface/crud/project-permissions.d.cts +160 -0
  241. package/dist/interface/crud/project-permissions.d.ts +38 -33
  242. package/dist/interface/crud/project-permissions.js +148 -90
  243. package/dist/interface/crud/project-permissions.js.map +1 -0
  244. package/dist/interface/crud/projects.d.cts +627 -0
  245. package/dist/interface/crud/projects.d.ts +43 -51
  246. package/dist/interface/crud/projects.js +210 -156
  247. package/dist/interface/crud/projects.js.map +1 -0
  248. package/dist/interface/crud/sessions.d.cts +149 -0
  249. package/dist/interface/crud/sessions.d.ts +21 -16
  250. package/dist/interface/crud/sessions.js +86 -50
  251. package/dist/interface/crud/sessions.js.map +1 -0
  252. package/dist/interface/crud/svix-token.d.cts +26 -0
  253. package/dist/interface/crud/svix-token.d.ts +14 -9
  254. package/dist/interface/crud/svix-token.js +46 -12
  255. package/dist/interface/crud/svix-token.js.map +1 -0
  256. package/dist/interface/crud/team-invitation-details.d.cts +30 -0
  257. package/dist/interface/crud/team-invitation-details.d.ts +12 -7
  258. package/dist/interface/crud/team-invitation-details.js +57 -15
  259. package/dist/interface/crud/team-invitation-details.js.map +1 -0
  260. package/dist/interface/crud/team-invitation.d.cts +49 -0
  261. package/dist/interface/crud/team-invitation.d.ts +13 -8
  262. package/dist/interface/crud/team-invitation.js +69 -27
  263. package/dist/interface/crud/team-invitation.js.map +1 -0
  264. package/dist/interface/crud/team-member-profiles.d.cts +229 -0
  265. package/dist/interface/crud/team-member-profiles.d.ts +20 -15
  266. package/dist/interface/crud/team-member-profiles.js +95 -49
  267. package/dist/interface/crud/team-member-profiles.js.map +1 -0
  268. package/dist/interface/crud/team-memberships.d.cts +74 -0
  269. package/dist/interface/crud/team-memberships.d.ts +22 -17
  270. package/dist/interface/crud/team-memberships.js +85 -45
  271. package/dist/interface/crud/team-memberships.js.map +1 -0
  272. package/dist/interface/crud/team-permissions.d.cts +168 -0
  273. package/dist/interface/crud/team-permissions.d.ts +38 -33
  274. package/dist/interface/crud/team-permissions.js +149 -91
  275. package/dist/interface/crud/team-permissions.js.map +1 -0
  276. package/dist/interface/crud/teams.d.cts +298 -0
  277. package/dist/interface/crud/teams.d.ts +45 -40
  278. package/dist/interface/crud/teams.js +177 -119
  279. package/dist/interface/crud/teams.js.map +1 -0
  280. package/dist/interface/crud/users.d.cts +469 -0
  281. package/dist/interface/crud/users.d.ts +31 -26
  282. package/dist/interface/crud/users.js +172 -118
  283. package/dist/interface/crud/users.js.map +1 -0
  284. package/dist/interface/serverInterface.d.cts +128 -0
  285. package/dist/interface/serverInterface.d.ts +29 -17
  286. package/dist/interface/serverInterface.js +506 -339
  287. package/dist/interface/serverInterface.js.map +1 -0
  288. package/dist/interface/webhooks.d.cts +292 -0
  289. package/dist/interface/webhooks.d.ts +6 -3
  290. package/dist/interface/webhooks.js +45 -15
  291. package/dist/interface/webhooks.js.map +1 -0
  292. package/dist/known-errors.d.cts +447 -0
  293. package/dist/known-errors.d.ts +15 -9
  294. package/dist/known-errors.js +1104 -562
  295. package/dist/known-errors.js.map +1 -0
  296. package/dist/schema-fields.d.cts +163 -0
  297. package/dist/schema-fields.d.ts +116 -114
  298. package/dist/schema-fields.js +593 -427
  299. package/dist/schema-fields.js.map +1 -0
  300. package/dist/sessions.d.cts +109 -0
  301. package/dist/sessions.d.ts +6 -3
  302. package/dist/sessions.js +201 -172
  303. package/dist/sessions.js.map +1 -0
  304. package/dist/utils/api-keys.d.cts +24 -0
  305. package/dist/utils/api-keys.d.ts +5 -4
  306. package/dist/utils/api-keys.js +106 -66
  307. package/dist/utils/api-keys.js.map +1 -0
  308. package/dist/utils/arrays.d.cts +18 -0
  309. package/dist/utils/arrays.d.ts +15 -13
  310. package/dist/utils/arrays.js +101 -168
  311. package/dist/utils/arrays.js.map +1 -0
  312. package/dist/utils/base64.d.cts +4 -0
  313. package/dist/utils/base64.d.ts +4 -2
  314. package/dist/utils/base64.js +41 -20
  315. package/dist/utils/base64.js.map +1 -0
  316. package/dist/utils/booleans.d.cts +6 -0
  317. package/dist/utils/booleans.d.ts +6 -4
  318. package/dist/utils/booleans.js +35 -27
  319. package/dist/utils/booleans.js.map +1 -0
  320. package/dist/utils/browser-compat.d.cts +8 -0
  321. package/dist/utils/browser-compat.d.ts +3 -1
  322. package/dist/utils/browser-compat.js +45 -16
  323. package/dist/utils/browser-compat.js.map +1 -0
  324. package/dist/utils/bytes.d.cts +15 -0
  325. package/dist/utils/bytes.d.ts +15 -13
  326. package/dist/utils/bytes.js +182 -270
  327. package/dist/utils/bytes.js.map +1 -0
  328. package/dist/utils/caches.d.cts +98 -0
  329. package/dist/utils/caches.d.ts +17 -14
  330. package/dist/utils/caches.js +188 -193
  331. package/dist/utils/caches.js.map +1 -0
  332. package/dist/utils/compile-time.d.cts +8 -0
  333. package/dist/utils/compile-time.d.ts +3 -1
  334. package/dist/utils/compile-time.js +35 -10
  335. package/dist/utils/compile-time.js.map +1 -0
  336. package/dist/utils/crypto.d.cts +8 -0
  337. package/dist/utils/crypto.d.ts +4 -2
  338. package/dist/utils/crypto.js +49 -21
  339. package/dist/utils/crypto.js.map +1 -0
  340. package/dist/utils/dates.d.cts +15 -0
  341. package/dist/utils/dates.d.ts +6 -4
  342. package/dist/utils/dates.js +83 -105
  343. package/dist/utils/dates.js.map +1 -0
  344. package/dist/utils/dom.d.cts +3 -0
  345. package/dist/utils/dom.d.ts +3 -1
  346. package/dist/utils/dom.js +35 -7
  347. package/dist/utils/dom.js.map +1 -0
  348. package/dist/utils/env.d.cts +9 -0
  349. package/dist/utils/env.d.ts +6 -4
  350. package/dist/utils/env.js +70 -43
  351. package/dist/utils/env.js.map +1 -0
  352. package/dist/utils/errors.d.cts +223 -0
  353. package/dist/utils/errors.d.ts +14 -11
  354. package/dist/utils/errors.js +148 -126
  355. package/dist/utils/errors.js.map +1 -0
  356. package/dist/utils/fs.d.cts +7 -0
  357. package/dist/utils/fs.d.ts +5 -3
  358. package/dist/utils/fs.js +70 -27
  359. package/dist/utils/fs.js.map +1 -0
  360. package/dist/utils/functions.d.cts +4 -0
  361. package/dist/utils/functions.d.ts +4 -2
  362. package/dist/utils/functions.js +35 -18
  363. package/dist/utils/functions.js.map +1 -0
  364. package/dist/utils/geo.d.cts +22 -0
  365. package/dist/utils/geo.d.ts +6 -3
  366. package/dist/utils/geo.js +39 -9
  367. package/dist/utils/geo.js.map +1 -0
  368. package/dist/utils/globals.d.cts +5 -0
  369. package/dist/utils/globals.d.ts +4 -2
  370. package/dist/utils/globals.js +41 -14
  371. package/dist/utils/globals.js.map +1 -0
  372. package/dist/utils/hashes.d.cts +7 -0
  373. package/dist/utils/hashes.d.ts +7 -5
  374. package/dist/utils/hashes.js +87 -41
  375. package/dist/utils/hashes.js.map +1 -0
  376. package/dist/utils/html.d.cts +4 -0
  377. package/dist/utils/html.d.ts +4 -2
  378. package/dist/utils/html.js +36 -37
  379. package/dist/utils/html.js.map +1 -0
  380. package/dist/utils/http.d.cts +43 -0
  381. package/dist/utils/http.d.ts +6 -4
  382. package/dist/utils/http.js +83 -83
  383. package/dist/utils/http.js.map +1 -0
  384. package/dist/utils/ips.d.cts +6 -0
  385. package/dist/utils/ips.d.ts +6 -4
  386. package/dist/utils/ips.js +48 -35
  387. package/dist/utils/ips.js.map +1 -0
  388. package/dist/utils/json.d.cts +13 -0
  389. package/dist/utils/json.d.ts +9 -6
  390. package/dist/utils/json.js +54 -157
  391. package/dist/utils/json.js.map +1 -0
  392. package/dist/utils/jwt.d.cts +44 -0
  393. package/dist/utils/jwt.d.ts +14 -11
  394. package/dist/utils/jwt.js +119 -84
  395. package/dist/utils/jwt.js.map +1 -0
  396. package/dist/utils/locks.d.cts +15 -0
  397. package/dist/utils/locks.d.ts +3 -2
  398. package/dist/utils/locks.js +76 -56
  399. package/dist/utils/locks.js.map +1 -0
  400. package/dist/utils/maps.d.cts +59 -0
  401. package/dist/utils/maps.d.ts +6 -4
  402. package/dist/utils/maps.js +207 -343
  403. package/dist/utils/maps.js.map +1 -0
  404. package/dist/utils/math.d.cts +6 -0
  405. package/dist/utils/math.d.ts +3 -1
  406. package/dist/utils/math.js +31 -16
  407. package/dist/utils/math.js.map +1 -0
  408. package/dist/utils/node-http.d.cts +15 -0
  409. package/dist/utils/node-http.d.ts +5 -5
  410. package/dist/utils/node-http.js +65 -36
  411. package/dist/utils/node-http.js.map +1 -0
  412. package/dist/utils/numbers.d.cts +5 -0
  413. package/dist/utils/numbers.d.ts +5 -3
  414. package/dist/utils/numbers.js +53 -66
  415. package/dist/utils/numbers.js.map +1 -0
  416. package/dist/utils/oauth.d.cts +8 -0
  417. package/dist/utils/oauth.d.ts +8 -6
  418. package/dist/utils/oauth.js +37 -4
  419. package/dist/utils/oauth.js.map +1 -0
  420. package/dist/utils/objects.d.cts +69 -0
  421. package/dist/utils/objects.d.ts +37 -32
  422. package/dist/utils/objects.js +224 -374
  423. package/dist/utils/objects.js.map +1 -0
  424. package/dist/utils/passkey.d.cts +1 -0
  425. package/dist/utils/passkey.d.ts +1 -1
  426. package/dist/utils/passkey.js +19 -1
  427. package/dist/utils/passkey.js.map +1 -0
  428. package/dist/utils/promises.d.cts +74 -0
  429. package/dist/utils/promises.d.ts +20 -18
  430. package/dist/utils/promises.js +252 -393
  431. package/dist/utils/promises.js.map +1 -0
  432. package/dist/utils/proxies.d.cts +4 -0
  433. package/dist/utils/proxies.d.ts +4 -2
  434. package/dist/utils/proxies.js +150 -161
  435. package/dist/utils/proxies.js.map +1 -0
  436. package/dist/utils/react.d.cts +25 -0
  437. package/dist/utils/react.d.ts +9 -6
  438. package/dist/utils/react.js +88 -134
  439. package/dist/utils/react.js.map +1 -0
  440. package/dist/utils/results.d.cts +78 -0
  441. package/dist/utils/results.d.ts +10 -9
  442. package/dist/utils/results.js +143 -324
  443. package/dist/utils/results.js.map +1 -0
  444. package/dist/utils/sentry.d.cts +5 -0
  445. package/dist/utils/sentry.d.ts +5 -2
  446. package/dist/utils/sentry.js +44 -14
  447. package/dist/utils/sentry.js.map +1 -0
  448. package/dist/utils/stores.d.cts +102 -0
  449. package/dist/utils/stores.d.ts +12 -9
  450. package/dist/utils/stores.js +219 -189
  451. package/dist/utils/stores.js.map +1 -0
  452. package/dist/utils/strings.d.cts +72 -0
  453. package/dist/utils/strings.d.ts +22 -20
  454. package/dist/utils/strings.js +300 -580
  455. package/dist/utils/strings.js.map +1 -0
  456. package/dist/utils/strings.nicify.test.d.cts +2 -0
  457. package/dist/utils/strings.nicify.test.d.ts +2 -1
  458. package/dist/utils/strings.nicify.test.js +168 -158
  459. package/dist/utils/strings.nicify.test.js.map +1 -0
  460. package/dist/utils/types.d.cts +23 -0
  461. package/dist/utils/types.d.ts +8 -6
  462. package/dist/utils/types.js +19 -1
  463. package/dist/utils/types.js.map +1 -0
  464. package/dist/utils/unicode.d.cts +3 -0
  465. package/dist/utils/unicode.d.ts +3 -1
  466. package/dist/utils/unicode.js +34 -21
  467. package/dist/utils/unicode.js.map +1 -0
  468. package/dist/utils/urls.d.cts +20 -0
  469. package/dist/utils/urls.d.ts +10 -8
  470. package/dist/utils/urls.js +76 -165
  471. package/dist/utils/urls.js.map +1 -0
  472. package/dist/utils/uuids.d.cts +4 -0
  473. package/dist/utils/uuids.d.ts +4 -2
  474. package/dist/utils/uuids.js +39 -35
  475. package/dist/utils/uuids.js.map +1 -0
  476. package/package.json +5 -5
@@ -1,378 +1,228 @@
1
- import { StackAssertionError } from "./errors";
2
- import { identity } from "./functions";
3
- export function isNotNull(value) {
4
- return value !== null && value !== undefined;
5
- }
6
- import.meta.vitest?.test("isNotNull", ({ expect }) => {
7
- expect(isNotNull(null)).toBe(false);
8
- expect(isNotNull(undefined)).toBe(false);
9
- expect(isNotNull(0)).toBe(true);
10
- expect(isNotNull("")).toBe(true);
11
- expect(isNotNull(false)).toBe(true);
12
- expect(isNotNull({})).toBe(true);
13
- expect(isNotNull([])).toBe(true);
14
- });
15
- /**
16
- * Assumes both objects are primitives, arrays, or non-function plain objects, and compares them deeply.
17
- *
18
- * Note that since they are assumed to be plain objects, this function does not compare prototypes.
19
- */
20
- export function deepPlainEquals(obj1, obj2, options = {}) {
21
- if (typeof obj1 !== typeof obj2)
22
- return false;
23
- if (obj1 === obj2)
24
- return true;
25
- switch (typeof obj1) {
26
- case 'object': {
27
- if (!obj1 || !obj2)
28
- return false;
29
- if (Array.isArray(obj1) || Array.isArray(obj2)) {
30
- if (!Array.isArray(obj1) || !Array.isArray(obj2))
31
- return false;
32
- if (obj1.length !== obj2.length)
33
- return false;
34
- return obj1.every((v, i) => deepPlainEquals(v, obj2[i], options));
35
- }
36
- const entries1 = Object.entries(obj1).filter(([k, v]) => !options.ignoreUndefinedValues || v !== undefined);
37
- const entries2 = Object.entries(obj2).filter(([k, v]) => !options.ignoreUndefinedValues || v !== undefined);
38
- if (entries1.length !== entries2.length)
39
- return false;
40
- return entries1.every(([k, v1]) => {
41
- const e2 = entries2.find(([k2]) => k === k2);
42
- if (!e2)
43
- return false;
44
- return deepPlainEquals(v1, e2[1], options);
45
- });
46
- }
47
- case 'undefined':
48
- case 'string':
49
- case 'number':
50
- case 'boolean':
51
- case 'bigint':
52
- case 'symbol':
53
- case 'function': {
54
- return false;
55
- }
56
- default: {
57
- throw new Error("Unexpected typeof " + typeof obj1);
58
- }
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/utils/objects.tsx
21
+ var objects_exports = {};
22
+ __export(objects_exports, {
23
+ deepFilterUndefined: () => deepFilterUndefined,
24
+ deepMerge: () => deepMerge,
25
+ deepPlainClone: () => deepPlainClone,
26
+ deepPlainEquals: () => deepPlainEquals,
27
+ deepSortKeys: () => deepSortKeys,
28
+ deleteKey: () => deleteKey,
29
+ filterUndefined: () => filterUndefined,
30
+ filterUndefinedOrNull: () => filterUndefinedOrNull,
31
+ get: () => get,
32
+ getOrUndefined: () => getOrUndefined,
33
+ has: () => has,
34
+ hasAndNotUndefined: () => hasAndNotUndefined,
35
+ isCloneable: () => isCloneable,
36
+ isNotNull: () => isNotNull,
37
+ isObjectLike: () => isObjectLike,
38
+ mapValues: () => mapValues,
39
+ omit: () => omit,
40
+ pick: () => pick,
41
+ set: () => set,
42
+ shallowClone: () => shallowClone,
43
+ sortKeys: () => sortKeys,
44
+ split: () => split,
45
+ typedAssign: () => typedAssign,
46
+ typedEntries: () => typedEntries,
47
+ typedFromEntries: () => typedFromEntries,
48
+ typedKeys: () => typedKeys,
49
+ typedValues: () => typedValues
50
+ });
51
+ module.exports = __toCommonJS(objects_exports);
52
+ var import_errors = require("./errors");
53
+ var import_functions = require("./functions");
54
+ var import_strings = require("./strings");
55
+ function isNotNull(value) {
56
+ return value !== null && value !== void 0;
57
+ }
58
+ function deepPlainEquals(obj1, obj2, options = {}) {
59
+ if (typeof obj1 !== typeof obj2) return false;
60
+ if (obj1 === obj2) return true;
61
+ switch (typeof obj1) {
62
+ case "object": {
63
+ if (!obj1 || !obj2) return false;
64
+ if (Array.isArray(obj1) || Array.isArray(obj2)) {
65
+ if (!Array.isArray(obj1) || !Array.isArray(obj2)) return false;
66
+ if (obj1.length !== obj2.length) return false;
67
+ return obj1.every((v, i) => deepPlainEquals(v, obj2[i], options));
68
+ }
69
+ const entries1 = Object.entries(obj1).filter(([k, v]) => !options.ignoreUndefinedValues || v !== void 0);
70
+ const entries2 = Object.entries(obj2).filter(([k, v]) => !options.ignoreUndefinedValues || v !== void 0);
71
+ if (entries1.length !== entries2.length) return false;
72
+ return entries1.every(([k, v1]) => {
73
+ const e2 = entries2.find(([k2]) => k === k2);
74
+ if (!e2) return false;
75
+ return deepPlainEquals(v1, e2[1], options);
76
+ });
59
77
  }
60
- }
61
- import.meta.vitest?.test("deepPlainEquals", ({ expect }) => {
62
- // Simple values
63
- expect(deepPlainEquals(1, 1)).toBe(true);
64
- expect(deepPlainEquals("test", "test")).toBe(true);
65
- expect(deepPlainEquals(1, 2)).toBe(false);
66
- expect(deepPlainEquals("test", "other")).toBe(false);
67
- // Arrays
68
- expect(deepPlainEquals([1, 2, 3], [1, 2, 3])).toBe(true);
69
- expect(deepPlainEquals([1, 2, 3], [1, 2, 4])).toBe(false);
70
- expect(deepPlainEquals([1, 2, 3], [1, 2])).toBe(false);
71
- // Objects
72
- expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 2 })).toBe(true);
73
- expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 3 })).toBe(false);
74
- expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1 })).toBe(false);
75
- // Nested structures
76
- expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 3 }] })).toBe(true);
77
- expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 4 }] })).toBe(false);
78
- // With options
79
- expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 }, { ignoreUndefinedValues: true })).toBe(true);
80
- expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 })).toBe(false);
81
- });
82
- export function isCloneable(obj) {
83
- return typeof obj !== 'symbol' && typeof obj !== 'function';
84
- }
85
- export function shallowClone(obj) {
86
- if (!isCloneable(obj))
87
- throw new StackAssertionError("shallowClone does not support symbols or functions", { obj });
88
- if (Array.isArray(obj))
89
- return obj.map(identity);
90
- return { ...obj };
91
- }
92
- import.meta.vitest?.test("shallowClone", ({ expect }) => {
93
- expect(shallowClone({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });
94
- expect(shallowClone([1, 2, 3])).toEqual([1, 2, 3]);
95
- expect(() => shallowClone(() => { })).toThrow();
96
- });
97
- export function deepPlainClone(obj) {
98
- if (typeof obj === 'function')
99
- throw new StackAssertionError("deepPlainClone does not support functions");
100
- if (typeof obj === 'symbol')
101
- throw new StackAssertionError("deepPlainClone does not support symbols");
102
- if (typeof obj !== 'object' || !obj)
103
- return obj;
104
- if (Array.isArray(obj))
105
- return obj.map(deepPlainClone);
106
- return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, deepPlainClone(v)]));
107
- }
108
- import.meta.vitest?.test("deepPlainClone", ({ expect }) => {
109
- // Primitive values
110
- expect(deepPlainClone(1)).toBe(1);
111
- expect(deepPlainClone("test")).toBe("test");
112
- expect(deepPlainClone(null)).toBe(null);
113
- expect(deepPlainClone(undefined)).toBe(undefined);
114
- // Arrays
115
- const arr = [1, 2, 3];
116
- const clonedArr = deepPlainClone(arr);
117
- expect(clonedArr).toEqual(arr);
118
- expect(clonedArr).not.toBe(arr); // Different reference
119
- // Objects
120
- const obj = { a: 1, b: 2 };
121
- const clonedObj = deepPlainClone(obj);
122
- expect(clonedObj).toEqual(obj);
123
- expect(clonedObj).not.toBe(obj); // Different reference
124
- // Nested structures
125
- const nested = { a: 1, b: [1, 2, { c: 3 }] };
126
- const clonedNested = deepPlainClone(nested);
127
- expect(clonedNested).toEqual(nested);
128
- expect(clonedNested).not.toBe(nested); // Different reference
129
- expect(clonedNested.b).not.toBe(nested.b); // Different reference for nested array
130
- expect(clonedNested.b[2]).not.toBe(nested.b[2]); // Different reference for nested object
131
- // Error cases
132
- expect(() => deepPlainClone(() => { })).toThrow();
133
- expect(() => deepPlainClone(Symbol())).toThrow();
134
- });
135
- export function deepMerge(baseObj, mergeObj) {
136
- if ([baseObj, mergeObj, ...Object.values(baseObj), ...Object.values(mergeObj)].some(o => !isCloneable(o)))
137
- throw new StackAssertionError("deepMerge does not support functions or symbols", { baseObj, mergeObj });
138
- const res = shallowClone(baseObj);
139
- for (const [key, mergeValue] of Object.entries(mergeObj)) {
140
- if (has(res, key)) {
141
- const baseValue = get(res, key);
142
- if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {
143
- set(res, key, deepMerge(baseValue, mergeValue));
144
- continue;
145
- }
146
- }
147
- set(res, key, mergeValue);
78
+ case "undefined":
79
+ case "string":
80
+ case "number":
81
+ case "boolean":
82
+ case "bigint":
83
+ case "symbol":
84
+ case "function": {
85
+ return false;
148
86
  }
149
- return res;
150
- }
151
- import.meta.vitest?.test("deepMerge", ({ expect }) => {
152
- // Test merging flat objects
153
- expect(deepMerge({ a: 1 }, { b: 2 })).toEqual({ a: 1, b: 2 });
154
- expect(deepMerge({ a: 1 }, { a: 2 })).toEqual({ a: 2 });
155
- expect(deepMerge({ a: 1, b: 2 }, { b: 3, c: 4 })).toEqual({ a: 1, b: 3, c: 4 });
156
- // Test with nested objects
157
- expect(deepMerge({ a: { x: 1, y: 2 }, b: 3 }, { a: { y: 3, z: 4 }, c: 5 })).toEqual({ a: { x: 1, y: 3, z: 4 }, b: 3, c: 5 });
158
- // Test with arrays
159
- expect(deepMerge({ a: [1, 2], b: 3 }, { a: [3, 4], c: 5 })).toEqual({ a: [3, 4], b: 3, c: 5 });
160
- // Test with null values
161
- expect(deepMerge({ a: { x: 1 }, b: null }, { a: { y: 2 }, b: { z: 3 } })).toEqual({ a: { x: 1, y: 2 }, b: { z: 3 } });
162
- // Test with undefined values
163
- expect(deepMerge({ a: 1, b: undefined }, { b: 2, c: 3 })).toEqual({ a: 1, b: 2, c: 3 });
164
- // Test deeply nested structures
165
- expect(deepMerge({
166
- a: {
167
- x: { deep: 1 },
168
- y: [1, 2]
169
- },
170
- b: 2
171
- }, {
172
- a: {
173
- x: { deeper: 3 },
174
- y: [3, 4]
175
- },
176
- c: 3
177
- })).toEqual({
178
- a: {
179
- x: { deep: 1, deeper: 3 },
180
- y: [3, 4]
181
- },
182
- b: 2,
183
- c: 3
184
- });
185
- // Test with empty objects
186
- expect(deepMerge({}, { a: 1 })).toEqual({ a: 1 });
187
- expect(deepMerge({ a: 1 }, {})).toEqual({ a: 1 });
188
- expect(deepMerge({}, {})).toEqual({});
189
- // Test that original objects are not modified
190
- const base = { a: { x: 1 }, b: 2 };
191
- const merge = { a: { y: 2 }, c: 3 };
192
- const baseClone = deepPlainClone(base);
193
- const mergeClone = deepPlainClone(merge);
194
- const result = deepMerge(base, merge);
195
- expect(base).toEqual(baseClone);
196
- expect(merge).toEqual(mergeClone);
197
- expect(result).toEqual({ a: { x: 1, y: 2 }, b: 2, c: 3 });
198
- // Test error cases
199
- expect(() => deepMerge({ a: () => { } }, { b: 2 })).toThrow();
200
- expect(() => deepMerge({ a: 1 }, { b: () => { } })).toThrow();
201
- expect(() => deepMerge({ a: Symbol() }, { b: 2 })).toThrow();
202
- expect(() => deepMerge({ a: 1 }, { b: Symbol() })).toThrow();
203
- });
204
- export function typedEntries(obj) {
205
- return Object.entries(obj);
206
- }
207
- import.meta.vitest?.test("typedEntries", ({ expect }) => {
208
- expect(typedEntries({})).toEqual([]);
209
- expect(typedEntries({ a: 1, b: 2 })).toEqual([["a", 1], ["b", 2]]);
210
- expect(typedEntries({ a: "hello", b: true, c: null })).toEqual([["a", "hello"], ["b", true], ["c", null]]);
211
- // Test with object containing methods
212
- const objWithMethod = { a: 1, b: () => "test" };
213
- const entries = typedEntries(objWithMethod);
214
- expect(entries.length).toBe(2);
215
- expect(entries[0][0]).toBe("a");
216
- expect(entries[0][1]).toBe(1);
217
- expect(entries[1][0]).toBe("b");
218
- expect(typeof entries[1][1]).toBe("function");
219
- });
220
- export function typedFromEntries(entries) {
221
- return Object.fromEntries(entries);
222
- }
223
- import.meta.vitest?.test("typedFromEntries", ({ expect }) => {
224
- expect(typedFromEntries([])).toEqual({});
225
- expect(typedFromEntries([["a", 1], ["b", 2]])).toEqual({ a: 1, b: 2 });
226
- // Test with mixed types (using type assertion)
227
- const mixedEntries = [["a", "hello"], ["b", true], ["c", null]];
228
- const mixedObj = typedFromEntries(mixedEntries);
229
- expect(mixedObj).toEqual({ a: "hello", b: true, c: null });
230
- // Test with function values
231
- const fn = () => "test";
232
- const fnEntries = [["a", 1], ["b", fn]];
233
- const obj = typedFromEntries(fnEntries);
234
- expect(obj.a).toBe(1);
235
- expect(typeof obj.b).toBe("function");
236
- // Type assertion needed for the function call
237
- expect(obj.b()).toBe("test");
238
- });
239
- export function typedKeys(obj) {
240
- return Object.keys(obj);
241
- }
242
- import.meta.vitest?.test("typedKeys", ({ expect }) => {
243
- expect(typedKeys({})).toEqual([]);
244
- expect(typedKeys({ a: 1, b: 2 })).toEqual(["a", "b"]);
245
- expect(typedKeys({ a: "hello", b: true, c: null })).toEqual(["a", "b", "c"]);
246
- // Test with object containing methods
247
- const objWithMethod = { a: 1, b: () => "test" };
248
- expect(typedKeys(objWithMethod)).toEqual(["a", "b"]);
249
- });
250
- export function typedValues(obj) {
251
- return Object.values(obj);
252
- }
253
- import.meta.vitest?.test("typedValues", ({ expect }) => {
254
- expect(typedValues({})).toEqual([]);
255
- expect(typedValues({ a: 1, b: 2 })).toEqual([1, 2]);
256
- const mixedObj = { a: "hello", b: true, c: null };
257
- expect(typedValues(mixedObj)).toEqual(["hello", true, null]);
258
- const fn = () => "test";
259
- const objWithMethod = { a: 1, b: fn };
260
- const values = typedValues(objWithMethod);
261
- expect(values.length).toBe(2);
262
- expect(values[0]).toBe(1);
263
- expect(typeof values[1]).toBe("function");
264
- // Need to cast to the correct type
265
- const fnValue = values[1];
266
- expect(fnValue()).toBe("test");
267
- });
268
- export function typedAssign(target, source) {
269
- return Object.assign(target, source);
270
- }
271
- import.meta.vitest?.test("typedAssign", ({ expect }) => {
272
- // Test with empty objects
273
- const emptyTarget = {};
274
- const emptyResult = typedAssign(emptyTarget, { a: 1 });
275
- expect(emptyResult).toEqual({ a: 1 });
276
- expect(emptyResult).toBe(emptyTarget); // Same reference
277
- // Test with non-empty target
278
- const target = { a: 1, b: 2 };
279
- const result = typedAssign(target, { c: 3, d: 4 });
280
- expect(result).toEqual({ a: 1, b: 2, c: 3, d: 4 });
281
- expect(result).toBe(target); // Same reference
282
- // Test with overlapping properties
283
- const targetWithOverlap = { a: 1, b: 2 };
284
- const resultWithOverlap = typedAssign(targetWithOverlap, { b: 3, c: 4 });
285
- expect(resultWithOverlap).toEqual({ a: 1, b: 3, c: 4 });
286
- expect(resultWithOverlap).toBe(targetWithOverlap); // Same reference
287
- });
288
- /**
289
- * Returns a new object with all undefined values removed. Useful when spreading optional parameters on an object, as
290
- * TypeScript's `Partial<XYZ>` type allows `undefined` values.
291
- */
292
- export function filterUndefined(obj) {
293
- return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
294
- }
295
- import.meta.vitest?.test("filterUndefined", ({ expect }) => {
296
- expect(filterUndefined({})).toEqual({});
297
- expect(filterUndefined({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });
298
- expect(filterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });
299
- expect(filterUndefined({ a: undefined, b: undefined })).toEqual({});
300
- expect(filterUndefined({ a: null, b: undefined })).toEqual({ a: null });
301
- expect(filterUndefined({ a: 0, b: "", c: false, d: undefined })).toEqual({ a: 0, b: "", c: false });
302
- });
303
- /**
304
- * Returns a new object with all undefined and null values removed. Useful when spreading optional parameters on an object, as
305
- * TypeScript's `Partial<XYZ>` type allows `undefined` values.
306
- */
307
- export function filterUndefinedOrNull(obj) {
308
- return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined && v !== null));
309
- }
310
- import.meta.vitest?.test("filterUndefinedOrNull", ({ expect }) => {
311
- expect(filterUndefinedOrNull({})).toEqual({});
312
- expect(filterUndefinedOrNull({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });
313
- });
314
- export function deepFilterUndefined(obj) {
315
- return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined).map(([k, v]) => [k, isObjectLike(v) ? deepFilterUndefined(v) : v]));
316
- }
317
- import.meta.vitest?.test("deepFilterUndefined", ({ expect }) => {
318
- expect(deepFilterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });
319
- });
320
- export function pick(obj, keys) {
321
- return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k)));
322
- }
323
- import.meta.vitest?.test("pick", ({ expect }) => {
324
- const obj = { a: 1, b: 2, c: 3, d: 4 };
325
- expect(pick(obj, ["a", "c"])).toEqual({ a: 1, c: 3 });
326
- expect(pick(obj, [])).toEqual({});
327
- expect(pick(obj, ["a", "e"])).toEqual({ a: 1 });
328
- // Use type assertion for empty object to avoid TypeScript error
329
- expect(pick({}, ["a"])).toEqual({});
330
- });
331
- export function omit(obj, keys) {
332
- return Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k)));
333
- }
334
- import.meta.vitest?.test("omit", ({ expect }) => {
335
- const obj = { a: 1, b: 2, c: 3, d: 4 };
336
- expect(omit(obj, ["a", "c"])).toEqual({ b: 2, d: 4 });
337
- expect(omit(obj, [])).toEqual(obj);
338
- expect(omit(obj, ["a", "e"])).toEqual({ b: 2, c: 3, d: 4 });
339
- // Use type assertion for empty object to avoid TypeScript error
340
- expect(omit({}, ["a"])).toEqual({});
341
- });
342
- export function split(obj, keys) {
343
- return [pick(obj, keys), omit(obj, keys)];
344
- }
345
- import.meta.vitest?.test("split", ({ expect }) => {
346
- const obj = { a: 1, b: 2, c: 3, d: 4 };
347
- expect(split(obj, ["a", "c"])).toEqual([{ a: 1, c: 3 }, { b: 2, d: 4 }]);
348
- expect(split(obj, [])).toEqual([{}, obj]);
349
- expect(split(obj, ["a", "e"])).toEqual([{ a: 1 }, { b: 2, c: 3, d: 4 }]);
350
- // Use type assertion for empty object to avoid TypeScript error
351
- expect(split({}, ["a"])).toEqual([{}, {}]);
352
- });
353
- export function set(obj, key, value) {
354
- Object.defineProperty(obj, key, { value, writable: true, configurable: true, enumerable: true });
355
- }
356
- export function get(obj, key) {
357
- const descriptor = Object.getOwnPropertyDescriptor(obj, key);
358
- if (!descriptor)
359
- throw new StackAssertionError(`get: key ${String(key)} does not exist`, { obj, key });
360
- return descriptor.value;
361
- }
362
- export function has(obj, key) {
363
- return Object.prototype.hasOwnProperty.call(obj, key);
364
- }
365
- export function hasAndNotUndefined(obj, key) {
366
- return has(obj, key) && get(obj, key) !== undefined;
367
- }
368
- export function deleteKey(obj, key) {
369
- if (has(obj, key)) {
370
- Reflect.deleteProperty(obj, key);
87
+ default: {
88
+ throw new Error("Unexpected typeof " + typeof obj1);
371
89
  }
372
- else {
373
- throw new StackAssertionError(`deleteKey: key ${String(key)} does not exist`, { obj, key });
90
+ }
91
+ }
92
+ function isCloneable(obj) {
93
+ return typeof obj !== "symbol" && typeof obj !== "function";
94
+ }
95
+ function shallowClone(obj) {
96
+ if (!isCloneable(obj)) throw new import_errors.StackAssertionError("shallowClone does not support symbols or functions", { obj });
97
+ if (Array.isArray(obj)) return obj.map(import_functions.identity);
98
+ return { ...obj };
99
+ }
100
+ function deepPlainClone(obj) {
101
+ if (typeof obj === "function") throw new import_errors.StackAssertionError("deepPlainClone does not support functions");
102
+ if (typeof obj === "symbol") throw new import_errors.StackAssertionError("deepPlainClone does not support symbols");
103
+ if (typeof obj !== "object" || !obj) return obj;
104
+ if (Array.isArray(obj)) return obj.map(deepPlainClone);
105
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, deepPlainClone(v)]));
106
+ }
107
+ function deepMerge(baseObj, mergeObj) {
108
+ if ([baseObj, mergeObj, ...Object.values(baseObj), ...Object.values(mergeObj)].some((o) => !isCloneable(o))) throw new import_errors.StackAssertionError("deepMerge does not support functions or symbols", { baseObj, mergeObj });
109
+ const res = shallowClone(baseObj);
110
+ for (const [key, mergeValue] of Object.entries(mergeObj)) {
111
+ if (has(res, key)) {
112
+ const baseValue = get(res, key);
113
+ if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {
114
+ set(res, key, deepMerge(baseValue, mergeValue));
115
+ continue;
116
+ }
374
117
  }
375
- }
376
- export function isObjectLike(value) {
377
- return (typeof value === 'object' || typeof value === 'function') && value !== null;
378
- }
118
+ set(res, key, mergeValue);
119
+ }
120
+ return res;
121
+ }
122
+ function typedEntries(obj) {
123
+ return Object.entries(obj);
124
+ }
125
+ function typedFromEntries(entries) {
126
+ return Object.fromEntries(entries);
127
+ }
128
+ function typedKeys(obj) {
129
+ return Object.keys(obj);
130
+ }
131
+ function typedValues(obj) {
132
+ return Object.values(obj);
133
+ }
134
+ function typedAssign(target, source) {
135
+ return Object.assign(target, source);
136
+ }
137
+ function filterUndefined(obj) {
138
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== void 0));
139
+ }
140
+ function filterUndefinedOrNull(obj) {
141
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== void 0 && v !== null));
142
+ }
143
+ function deepFilterUndefined(obj) {
144
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== void 0).map(([k, v]) => [k, isObjectLike(v) ? deepFilterUndefined(v) : v]));
145
+ }
146
+ function pick(obj, keys) {
147
+ return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k)));
148
+ }
149
+ function omit(obj, keys) {
150
+ if (!Array.isArray(keys)) throw new import_errors.StackAssertionError("omit: keys must be an array", { obj, keys });
151
+ return Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k)));
152
+ }
153
+ function split(obj, keys) {
154
+ return [pick(obj, keys), omit(obj, keys)];
155
+ }
156
+ function mapValues(obj, fn) {
157
+ if (Array.isArray(obj)) {
158
+ return obj.map((v) => fn(v));
159
+ }
160
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, fn(v)]));
161
+ }
162
+ function sortKeys(obj) {
163
+ if (Array.isArray(obj)) {
164
+ return [...obj];
165
+ }
166
+ return Object.fromEntries(Object.entries(obj).sort(([a], [b]) => (0, import_strings.stringCompare)(a, b)));
167
+ }
168
+ function deepSortKeys(obj) {
169
+ return sortKeys(mapValues(obj, (v) => isObjectLike(v) ? deepSortKeys(v) : v));
170
+ }
171
+ function set(obj, key, value) {
172
+ Object.defineProperty(obj, key, { value, writable: true, configurable: true, enumerable: true });
173
+ }
174
+ function get(obj, key) {
175
+ const descriptor = Object.getOwnPropertyDescriptor(obj, key);
176
+ if (!descriptor) throw new import_errors.StackAssertionError(`get: key ${String(key)} does not exist`, { obj, key });
177
+ return descriptor.value;
178
+ }
179
+ function getOrUndefined(obj, key) {
180
+ return has(obj, key) ? get(obj, key) : void 0;
181
+ }
182
+ function has(obj, key) {
183
+ return Object.prototype.hasOwnProperty.call(obj, key);
184
+ }
185
+ function hasAndNotUndefined(obj, key) {
186
+ return has(obj, key) && get(obj, key) !== void 0;
187
+ }
188
+ function deleteKey(obj, key) {
189
+ if (has(obj, key)) {
190
+ Reflect.deleteProperty(obj, key);
191
+ } else {
192
+ throw new import_errors.StackAssertionError(`deleteKey: key ${String(key)} does not exist`, { obj, key });
193
+ }
194
+ }
195
+ function isObjectLike(value) {
196
+ return (typeof value === "object" || typeof value === "function") && value !== null;
197
+ }
198
+ // Annotate the CommonJS export names for ESM import in node:
199
+ 0 && (module.exports = {
200
+ deepFilterUndefined,
201
+ deepMerge,
202
+ deepPlainClone,
203
+ deepPlainEquals,
204
+ deepSortKeys,
205
+ deleteKey,
206
+ filterUndefined,
207
+ filterUndefinedOrNull,
208
+ get,
209
+ getOrUndefined,
210
+ has,
211
+ hasAndNotUndefined,
212
+ isCloneable,
213
+ isNotNull,
214
+ isObjectLike,
215
+ mapValues,
216
+ omit,
217
+ pick,
218
+ set,
219
+ shallowClone,
220
+ sortKeys,
221
+ split,
222
+ typedAssign,
223
+ typedEntries,
224
+ typedFromEntries,
225
+ typedKeys,
226
+ typedValues
227
+ });
228
+ //# sourceMappingURL=objects.js.map