@revealui/auth 0.0.1-pre.0 → 0.2.1

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 (487) hide show
  1. package/LICENSE +22 -202
  2. package/README.md +101 -0
  3. package/dist/index.d.ts +10 -1
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +10 -4
  6. package/dist/react/index.d.ts +15 -0
  7. package/dist/react/index.d.ts.map +1 -0
  8. package/dist/react/index.js +10 -0
  9. package/dist/react/useSession.d.ts +32 -0
  10. package/dist/react/useSession.d.ts.map +1 -0
  11. package/dist/react/useSession.js +98 -0
  12. package/dist/react/useSignIn.d.ts +41 -0
  13. package/dist/react/useSignIn.d.ts.map +1 -0
  14. package/dist/react/useSignIn.js +99 -0
  15. package/dist/react/useSignOut.d.ts +30 -0
  16. package/dist/react/useSignOut.d.ts.map +1 -0
  17. package/dist/react/useSignOut.js +57 -0
  18. package/dist/react/useSignUp.d.ts +43 -0
  19. package/dist/react/useSignUp.d.ts.map +1 -0
  20. package/dist/react/useSignUp.js +90 -0
  21. package/dist/server/auth.d.ts +46 -0
  22. package/dist/server/auth.d.ts.map +1 -0
  23. package/dist/server/auth.js +314 -0
  24. package/dist/server/brute-force.d.ts +44 -0
  25. package/dist/server/brute-force.d.ts.map +1 -0
  26. package/dist/server/brute-force.js +149 -0
  27. package/dist/server/errors.d.ts +28 -0
  28. package/dist/server/errors.d.ts.map +1 -0
  29. package/dist/server/errors.js +51 -0
  30. package/dist/server/index.d.ts +17 -0
  31. package/dist/server/index.d.ts.map +1 -0
  32. package/dist/server/index.js +14 -0
  33. package/dist/server/oauth.d.ts +49 -0
  34. package/dist/server/oauth.d.ts.map +1 -0
  35. package/dist/server/oauth.js +223 -0
  36. package/dist/server/password-reset.d.ts +55 -0
  37. package/dist/server/password-reset.d.ts.map +1 -0
  38. package/dist/server/password-reset.js +232 -0
  39. package/dist/server/password-validation.d.ts +25 -0
  40. package/dist/server/password-validation.d.ts.map +1 -0
  41. package/dist/server/password-validation.js +47 -0
  42. package/dist/server/providers/github.d.ts +14 -0
  43. package/dist/server/providers/github.d.ts.map +1 -0
  44. package/dist/server/providers/github.js +73 -0
  45. package/dist/server/providers/google.d.ts +11 -0
  46. package/dist/server/providers/google.d.ts.map +1 -0
  47. package/dist/server/providers/google.js +53 -0
  48. package/dist/server/providers/vercel.d.ts +11 -0
  49. package/dist/server/providers/vercel.d.ts.map +1 -0
  50. package/dist/server/providers/vercel.js +47 -0
  51. package/dist/server/rate-limit.d.ts +45 -0
  52. package/dist/server/rate-limit.d.ts.map +1 -0
  53. package/dist/server/rate-limit.js +130 -0
  54. package/dist/server/session.d.ts +47 -0
  55. package/dist/server/session.d.ts.map +1 -0
  56. package/dist/server/session.js +248 -0
  57. package/dist/server/storage/database.d.ts +26 -0
  58. package/dist/server/storage/database.d.ts.map +1 -0
  59. package/dist/server/storage/database.js +102 -0
  60. package/dist/server/storage/in-memory.d.ts +28 -0
  61. package/dist/server/storage/in-memory.d.ts.map +1 -0
  62. package/dist/server/storage/in-memory.js +80 -0
  63. package/dist/server/storage/index.d.ts +26 -0
  64. package/dist/server/storage/index.d.ts.map +1 -0
  65. package/dist/server/storage/index.js +80 -0
  66. package/dist/server/storage/interface.d.ts +46 -0
  67. package/dist/server/storage/interface.d.ts.map +1 -0
  68. package/dist/server/storage/interface.js +6 -0
  69. package/dist/types.d.ts +66 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +8 -0
  72. package/dist/utils/database.d.ts +53 -0
  73. package/dist/utils/database.d.ts.map +1 -0
  74. package/dist/utils/database.js +144 -0
  75. package/dist/utils/token.d.ts +30 -0
  76. package/dist/utils/token.d.ts.map +1 -0
  77. package/dist/utils/token.js +39 -0
  78. package/package.json +50 -106
  79. package/dist/better-auth/adapter/__tests__/transform.test.js +0 -213
  80. package/dist/better-auth/adapter/__tests__/transform.test.js.map +0 -1
  81. package/dist/better-auth/adapter/generate-schema/biome.d.js +0 -2
  82. package/dist/better-auth/adapter/generate-schema/biome.d.js.map +0 -1
  83. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +0 -5
  84. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +0 -482
  85. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +0 -1
  86. package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +0 -1
  87. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +0 -42
  88. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +0 -1
  89. package/dist/better-auth/adapter/generate-schema/index.d.ts +0 -4
  90. package/dist/better-auth/adapter/generate-schema/index.js +0 -19
  91. package/dist/better-auth/adapter/generate-schema/index.js.map +0 -1
  92. package/dist/better-auth/adapter/generate-schema/utils.d.ts +0 -2
  93. package/dist/better-auth/adapter/generate-schema/utils.js +0 -20
  94. package/dist/better-auth/adapter/generate-schema/utils.js.map +0 -1
  95. package/dist/better-auth/adapter/index.d.ts +0 -15
  96. package/dist/better-auth/adapter/index.js +0 -731
  97. package/dist/better-auth/adapter/index.js.map +0 -1
  98. package/dist/better-auth/adapter/tests/adapter.test.js +0 -174
  99. package/dist/better-auth/adapter/tests/adapter.test.js.map +0 -1
  100. package/dist/better-auth/adapter/tests/base-collections-tests.js +0 -575
  101. package/dist/better-auth/adapter/tests/base-collections-tests.js.map +0 -1
  102. package/dist/better-auth/adapter/tests/dev/index.js +0 -117
  103. package/dist/better-auth/adapter/tests/dev/index.js.map +0 -1
  104. package/dist/better-auth/adapter/tests/dev/migrate.js +0 -26
  105. package/dist/better-auth/adapter/tests/dev/migrate.js.map +0 -1
  106. package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js +0 -218
  107. package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js.map +0 -1
  108. package/dist/better-auth/adapter/tests/dev/schema.js +0 -160
  109. package/dist/better-auth/adapter/tests/dev/schema.js.map +0 -1
  110. package/dist/better-auth/adapter/tests/plugins-tests.js +0 -2
  111. package/dist/better-auth/adapter/tests/plugins-tests.js.map +0 -1
  112. package/dist/better-auth/adapter/transform/index.d.ts +0 -27
  113. package/dist/better-auth/adapter/transform/index.js +0 -664
  114. package/dist/better-auth/adapter/transform/index.js.map +0 -1
  115. package/dist/better-auth/adapter/types.d.ts +0 -10
  116. package/dist/better-auth/adapter/types.js +0 -3
  117. package/dist/better-auth/adapter/types.js.map +0 -1
  118. package/dist/better-auth/generated-types.d.ts +0 -285
  119. package/dist/better-auth/index.d.ts +0 -3
  120. package/dist/better-auth/index.js +0 -5
  121. package/dist/better-auth/index.js.map +0 -1
  122. package/dist/better-auth/plugin/__tests__/plugin.test.js +0 -162
  123. package/dist/better-auth/plugin/__tests__/plugin.test.js.map +0 -1
  124. package/dist/better-auth/plugin/constants.d.ts +0 -220
  125. package/dist/better-auth/plugin/constants.js +0 -249
  126. package/dist/better-auth/plugin/constants.js.map +0 -1
  127. package/dist/better-auth/plugin/helpers/check-plugin-exists.d.ts +0 -12
  128. package/dist/better-auth/plugin/helpers/check-plugin-exists.js +0 -14
  129. package/dist/better-auth/plugin/helpers/check-plugin-exists.js.map +0 -1
  130. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +0 -29
  131. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +0 -46
  132. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +0 -1
  133. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +0 -7
  134. package/dist/better-auth/plugin/helpers/get-admin-access.js +0 -22
  135. package/dist/better-auth/plugin/helpers/get-admin-access.js.map +0 -1
  136. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +0 -5
  137. package/dist/better-auth/plugin/helpers/get-all-roles.js +0 -20
  138. package/dist/better-auth/plugin/helpers/get-all-roles.js.map +0 -1
  139. package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +0 -18
  140. package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +0 -70
  141. package/dist/better-auth/plugin/helpers/get-better-auth-schema.js.map +0 -1
  142. package/dist/better-auth/plugin/helpers/get-collection-slug.d.ts +0 -5
  143. package/dist/better-auth/plugin/helpers/get-collection-slug.js +0 -20
  144. package/dist/better-auth/plugin/helpers/get-collection-slug.js.map +0 -1
  145. package/dist/better-auth/plugin/helpers/get-collection.d.ts +0 -15
  146. package/dist/better-auth/plugin/helpers/get-collection.js +0 -29
  147. package/dist/better-auth/plugin/helpers/get-collection.js.map +0 -1
  148. package/dist/better-auth/plugin/helpers/get-ip.d.ts +0 -2
  149. package/dist/better-auth/plugin/helpers/get-ip.js +0 -31
  150. package/dist/better-auth/plugin/helpers/get-ip.js.map +0 -1
  151. package/dist/better-auth/plugin/helpers/get-signed-cookie.d.ts +0 -2
  152. package/dist/better-auth/plugin/helpers/get-signed-cookie.js +0 -65
  153. package/dist/better-auth/plugin/helpers/get-signed-cookie.js.map +0 -1
  154. package/dist/better-auth/plugin/helpers/index.d.ts +0 -1
  155. package/dist/better-auth/plugin/helpers/index.js +0 -3
  156. package/dist/better-auth/plugin/helpers/index.js.map +0 -1
  157. package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts +0 -59
  158. package/dist/better-auth/plugin/helpers/prepare-session-data.js +0 -49
  159. package/dist/better-auth/plugin/helpers/prepare-session-data.js.map +0 -1
  160. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +0 -20
  161. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +0 -67
  162. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js.map +0 -1
  163. package/dist/better-auth/plugin/index.d.ts +0 -11
  164. package/dist/better-auth/plugin/index.js +0 -125
  165. package/dist/better-auth/plugin/index.js.map +0 -1
  166. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +0 -12
  167. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +0 -87
  168. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js.map +0 -1
  169. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +0 -3
  170. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +0 -60
  171. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js.map +0 -1
  172. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +0 -3
  173. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +0 -154
  174. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js.map +0 -1
  175. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +0 -5
  176. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +0 -11
  177. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js.map +0 -1
  178. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +0 -2
  179. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +0 -8
  180. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js.map +0 -1
  181. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +0 -6
  182. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +0 -119
  183. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js.map +0 -1
  184. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +0 -3
  185. package/dist/better-auth/plugin/lib/build-collections/api-keys.js +0 -177
  186. package/dist/better-auth/plugin/lib/build-collections/api-keys.js.map +0 -1
  187. package/dist/better-auth/plugin/lib/build-collections/device-code.d.ts +0 -3
  188. package/dist/better-auth/plugin/lib/build-collections/device-code.js +0 -50
  189. package/dist/better-auth/plugin/lib/build-collections/device-code.js.map +0 -1
  190. package/dist/better-auth/plugin/lib/build-collections/index.d.ts +0 -10
  191. package/dist/better-auth/plugin/lib/build-collections/index.js +0 -73
  192. package/dist/better-auth/plugin/lib/build-collections/index.js.map +0 -1
  193. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +0 -3
  194. package/dist/better-auth/plugin/lib/build-collections/invitations.js +0 -94
  195. package/dist/better-auth/plugin/lib/build-collections/invitations.js.map +0 -1
  196. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +0 -3
  197. package/dist/better-auth/plugin/lib/build-collections/jwks.js +0 -59
  198. package/dist/better-auth/plugin/lib/build-collections/jwks.js.map +0 -1
  199. package/dist/better-auth/plugin/lib/build-collections/members.d.ts +0 -3
  200. package/dist/better-auth/plugin/lib/build-collections/members.js +0 -73
  201. package/dist/better-auth/plugin/lib/build-collections/members.js.map +0 -1
  202. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +0 -3
  203. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +0 -107
  204. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js.map +0 -1
  205. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +0 -3
  206. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +0 -118
  207. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js.map +0 -1
  208. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +0 -3
  209. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +0 -89
  210. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js.map +0 -1
  211. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +0 -3
  212. package/dist/better-auth/plugin/lib/build-collections/organizations.js +0 -70
  213. package/dist/better-auth/plugin/lib/build-collections/organizations.js.map +0 -1
  214. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +0 -3
  215. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +0 -115
  216. package/dist/better-auth/plugin/lib/build-collections/passkeys.js.map +0 -1
  217. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +0 -3
  218. package/dist/better-auth/plugin/lib/build-collections/sessions.js +0 -170
  219. package/dist/better-auth/plugin/lib/build-collections/sessions.js.map +0 -1
  220. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +0 -3
  221. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +0 -81
  222. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js.map +0 -1
  223. package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +0 -3
  224. package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +0 -111
  225. package/dist/better-auth/plugin/lib/build-collections/subscriptions.js.map +0 -1
  226. package/dist/better-auth/plugin/lib/build-collections/team-members.d.ts +0 -3
  227. package/dist/better-auth/plugin/lib/build-collections/team-members.js +0 -57
  228. package/dist/better-auth/plugin/lib/build-collections/team-members.js.map +0 -1
  229. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +0 -3
  230. package/dist/better-auth/plugin/lib/build-collections/teams.js +0 -76
  231. package/dist/better-auth/plugin/lib/build-collections/teams.js.map +0 -1
  232. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +0 -3
  233. package/dist/better-auth/plugin/lib/build-collections/two-factors.js +0 -67
  234. package/dist/better-auth/plugin/lib/build-collections/two-factors.js.map +0 -1
  235. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +0 -7
  236. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +0 -53
  237. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js.map +0 -1
  238. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +0 -11
  239. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +0 -75
  240. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js.map +0 -1
  241. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts +0 -4
  242. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js +0 -6
  243. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js.map +0 -1
  244. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +0 -2
  245. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +0 -115
  246. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js.map +0 -1
  247. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +0 -3
  248. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +0 -64
  249. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js.map +0 -1
  250. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +0 -3
  251. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +0 -80
  252. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js.map +0 -1
  253. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts +0 -6
  254. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +0 -79
  255. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js.map +0 -1
  256. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts +0 -2
  257. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +0 -82
  258. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js.map +0 -1
  259. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +0 -2
  260. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +0 -54
  261. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js.map +0 -1
  262. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts +0 -6
  263. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +0 -15
  264. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js.map +0 -1
  265. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.d.ts +0 -6
  266. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js +0 -8
  267. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js.map +0 -1
  268. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +0 -2
  269. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +0 -17
  270. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js.map +0 -1
  271. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts +0 -2
  272. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +0 -91
  273. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js.map +0 -1
  274. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +0 -3
  275. package/dist/better-auth/plugin/lib/build-collections/users/index.js +0 -341
  276. package/dist/better-auth/plugin/lib/build-collections/users/index.js.map +0 -1
  277. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +0 -15
  278. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +0 -24
  279. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js.map +0 -1
  280. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.d.ts +0 -10
  281. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js +0 -67
  282. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js.map +0 -1
  283. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.d.ts +0 -9
  284. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js +0 -94
  285. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js.map +0 -1
  286. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +0 -7
  287. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +0 -35
  288. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js.map +0 -1
  289. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.d.ts +0 -12
  290. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js +0 -25
  291. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js.map +0 -1
  292. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts +0 -14
  293. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +0 -67
  294. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js.map +0 -1
  295. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +0 -20
  296. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +0 -98
  297. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js.map +0 -1
  298. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +0 -3
  299. package/dist/better-auth/plugin/lib/build-collections/verifications.js +0 -87
  300. package/dist/better-auth/plugin/lib/build-collections/verifications.js.map +0 -1
  301. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +0 -5
  302. package/dist/better-auth/plugin/lib/get-payload-auth.js +0 -9
  303. package/dist/better-auth/plugin/lib/get-payload-auth.js.map +0 -1
  304. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +0 -7
  305. package/dist/better-auth/plugin/lib/init-better-auth.js +0 -46
  306. package/dist/better-auth/plugin/lib/init-better-auth.js.map +0 -1
  307. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +0 -2
  308. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +0 -9
  309. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js.map +0 -1
  310. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +0 -2
  311. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +0 -10
  312. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js.map +0 -1
  313. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.d.ts +0 -2
  314. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js +0 -8
  315. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js.map +0 -1
  316. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +0 -10
  317. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +0 -156
  318. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js.map +0 -1
  319. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +0 -2
  320. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +0 -18
  321. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js.map +0 -1
  322. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +0 -2
  323. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +0 -34
  324. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js.map +0 -1
  325. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +0 -2
  326. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +0 -11
  327. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js.map +0 -1
  328. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +0 -2
  329. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +0 -10
  330. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js.map +0 -1
  331. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +0 -2
  332. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +0 -11
  333. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js.map +0 -1
  334. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts +0 -7
  335. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +0 -23
  336. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js.map +0 -1
  337. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts +0 -25
  338. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +0 -62
  339. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js.map +0 -1
  340. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.d.ts +0 -9
  341. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js +0 -47
  342. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js.map +0 -1
  343. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +0 -15
  344. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +0 -42
  345. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js.map +0 -1
  346. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts +0 -9
  347. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js +0 -63
  348. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js.map +0 -1
  349. package/dist/better-auth/plugin/lib/set-login-methods.d.ts +0 -4
  350. package/dist/better-auth/plugin/lib/set-login-methods.js +0 -14
  351. package/dist/better-auth/plugin/lib/set-login-methods.js.map +0 -1
  352. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +0 -9
  353. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +0 -143
  354. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js.map +0 -1
  355. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +0 -10
  356. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +0 -219
  357. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js.map +0 -1
  358. package/dist/better-auth/plugin/payload/components/logout-button.d.ts +0 -4
  359. package/dist/better-auth/plugin/payload/components/logout-button.js +0 -24
  360. package/dist/better-auth/plugin/payload/components/logout-button.js.map +0 -1
  361. package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +0 -8
  362. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +0 -117
  363. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js.map +0 -1
  364. package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +0 -3
  365. package/dist/better-auth/plugin/payload/components/passkeys/client.js +0 -66
  366. package/dist/better-auth/plugin/payload/components/passkeys/client.js.map +0 -1
  367. package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +0 -4
  368. package/dist/better-auth/plugin/payload/components/passkeys/index.js +0 -52
  369. package/dist/better-auth/plugin/payload/components/passkeys/index.js.map +0 -1
  370. package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +0 -8
  371. package/dist/better-auth/plugin/payload/components/passkeys/list.js +0 -57
  372. package/dist/better-auth/plugin/payload/components/passkeys/list.js.map +0 -1
  373. package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +0 -22
  374. package/dist/better-auth/plugin/payload/components/passkeys/types.js +0 -3
  375. package/dist/better-auth/plugin/payload/components/passkeys/types.js.map +0 -1
  376. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +0 -6
  377. package/dist/better-auth/plugin/payload/components/rsc-redirect.js +0 -7
  378. package/dist/better-auth/plugin/payload/components/rsc-redirect.js.map +0 -1
  379. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +0 -15
  380. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +0 -157
  381. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js.map +0 -1
  382. package/dist/better-auth/plugin/payload/components/token-field.d.ts +0 -4
  383. package/dist/better-auth/plugin/payload/components/token-field.js +0 -31
  384. package/dist/better-auth/plugin/payload/components/token-field.js.map +0 -1
  385. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts +0 -8
  386. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js +0 -300
  387. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js.map +0 -1
  388. package/dist/better-auth/plugin/payload/exports/client.d.ts +0 -6
  389. package/dist/better-auth/plugin/payload/exports/client.js +0 -8
  390. package/dist/better-auth/plugin/payload/exports/client.js.map +0 -1
  391. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +0 -8
  392. package/dist/better-auth/plugin/payload/exports/rsc.js +0 -10
  393. package/dist/better-auth/plugin/payload/exports/rsc.js.map +0 -1
  394. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +0 -2
  395. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +0 -9
  396. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js.map +0 -1
  397. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +0 -1
  398. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +0 -22
  399. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js.map +0 -1
  400. package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +0 -19
  401. package/dist/better-auth/plugin/payload/views/admin-login/client.js +0 -226
  402. package/dist/better-auth/plugin/payload/views/admin-login/client.js.map +0 -1
  403. package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts +0 -10
  404. package/dist/better-auth/plugin/payload/views/admin-login/index.js +0 -150
  405. package/dist/better-auth/plugin/payload/views/admin-login/index.js.map +0 -1
  406. package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +0 -16
  407. package/dist/better-auth/plugin/payload/views/admin-signup/client.js +0 -299
  408. package/dist/better-auth/plugin/payload/views/admin-signup/client.js.map +0 -1
  409. package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts +0 -9
  410. package/dist/better-auth/plugin/payload/views/admin-signup/index.js +0 -104
  411. package/dist/better-auth/plugin/payload/views/admin-signup/index.js.map +0 -1
  412. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +0 -7
  413. package/dist/better-auth/plugin/payload/views/forgot-password/client.js +0 -119
  414. package/dist/better-auth/plugin/payload/views/forgot-password/client.js.map +0 -1
  415. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +0 -8
  416. package/dist/better-auth/plugin/payload/views/forgot-password/index.js +0 -78
  417. package/dist/better-auth/plugin/payload/views/forgot-password/index.js.map +0 -1
  418. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +0 -10
  419. package/dist/better-auth/plugin/payload/views/reset-password/client.js +0 -144
  420. package/dist/better-auth/plugin/payload/views/reset-password/client.js.map +0 -1
  421. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +0 -8
  422. package/dist/better-auth/plugin/payload/views/reset-password/index.js +0 -96
  423. package/dist/better-auth/plugin/payload/views/reset-password/index.js.map +0 -1
  424. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts +0 -6
  425. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js +0 -96
  426. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js.map +0 -1
  427. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts +0 -9
  428. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js +0 -56
  429. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js.map +0 -1
  430. package/dist/better-auth/plugin/types.d.ts +0 -429
  431. package/dist/better-auth/plugin/types.js +0 -3
  432. package/dist/better-auth/plugin/types.js.map +0 -1
  433. package/dist/better-auth/plugin/utils/set.d.ts +0 -39
  434. package/dist/better-auth/plugin/utils/set.js +0 -103
  435. package/dist/better-auth/plugin/utils/set.js.map +0 -1
  436. package/dist/better-auth/scripts/generate-types.d.ts +0 -1
  437. package/dist/better-auth/scripts/generate-types.js +0 -234
  438. package/dist/better-auth/scripts/generate-types.js.map +0 -1
  439. package/dist/better-auth/types.d.ts +0 -2
  440. package/dist/better-auth/types.js +0 -4
  441. package/dist/better-auth/types.js.map +0 -1
  442. package/dist/index.js.map +0 -1
  443. package/dist/shared/components/icons.d.ts +0 -7
  444. package/dist/shared/components/icons.js +0 -442
  445. package/dist/shared/components/icons.js.map +0 -1
  446. package/dist/shared/components/logo.d.ts +0 -3
  447. package/dist/shared/components/logo.js +0 -24
  448. package/dist/shared/components/logo.js.map +0 -1
  449. package/dist/shared/form/components/submit.d.ts +0 -7
  450. package/dist/shared/form/components/submit.js +0 -16
  451. package/dist/shared/form/components/submit.js.map +0 -1
  452. package/dist/shared/form/fields/text-field.d.ts +0 -8
  453. package/dist/shared/form/fields/text-field.js +0 -37
  454. package/dist/shared/form/fields/text-field.js.map +0 -1
  455. package/dist/shared/form/index.d.ts +0 -4
  456. package/dist/shared/form/index.js +0 -8
  457. package/dist/shared/form/index.js.map +0 -1
  458. package/dist/shared/form/ui/header/index.d.ts +0 -8
  459. package/dist/shared/form/ui/header/index.js +0 -24
  460. package/dist/shared/form/ui/header/index.js.map +0 -1
  461. package/dist/shared/form/ui/index.d.ts +0 -31
  462. package/dist/shared/form/ui/index.js +0 -57
  463. package/dist/shared/form/ui/index.js.map +0 -1
  464. package/dist/shared/form/validation.d.ts +0 -51
  465. package/dist/shared/form/validation.js +0 -127
  466. package/dist/shared/form/validation.js.map +0 -1
  467. package/dist/shared/index.d.ts +0 -2
  468. package/dist/shared/index.js +0 -4
  469. package/dist/shared/index.js.map +0 -1
  470. package/dist/shared/payload/fields/field-copy-button/index.d.ts +0 -3
  471. package/dist/shared/payload/fields/field-copy-button/index.js +0 -38
  472. package/dist/shared/payload/fields/field-copy-button/index.js.map +0 -1
  473. package/dist/shared/payload/fields/generate-uuid-button/index.d.ts +0 -3
  474. package/dist/shared/payload/fields/generate-uuid-button/index.js +0 -26
  475. package/dist/shared/payload/fields/generate-uuid-button/index.js.map +0 -1
  476. package/dist/shared/payload/fields/index.d.ts +0 -2
  477. package/dist/shared/payload/fields/index.js +0 -4
  478. package/dist/shared/payload/fields/index.js.map +0 -1
  479. package/dist/shared/utils/regex.d.ts +0 -2
  480. package/dist/shared/utils/regex.js +0 -4
  481. package/dist/shared/utils/regex.js.map +0 -1
  482. package/dist/shared/utils/try-catch.d.ts +0 -11
  483. package/dist/shared/utils/try-catch.js +0 -17
  484. package/dist/shared/utils/try-catch.js.map +0 -1
  485. package/dist/shared/utils/value-or-default.d.ts +0 -9
  486. package/dist/shared/utils/value-or-default.js +0 -12
  487. package/dist/shared/utils/value-or-default.js.map +0 -1
@@ -1,575 +0,0 @@
1
- import { generateId } from "../..";
2
- import { beforeAll, describe, expect, test } from "vitest";
3
- const models = {
4
- user: 'user',
5
- session: 'session',
6
- account: 'account',
7
- verification: 'verification'
8
- };
9
- const adapterTests = {
10
- CREATE_MODEL: 'create model',
11
- CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID: 'create model should always return an id',
12
- FIND_MODEL: 'find model',
13
- FIND_MODEL_WITHOUT_ID: 'find model without id',
14
- FIND_MODEL_WITH_SELECT: 'find model with select',
15
- FIND_MODEL_WITH_MODIFIED_FIELD_NAME: 'find model with modified field name',
16
- UPDATE_MODEL: 'update model',
17
- SHOULD_FIND_MANY: 'should find many',
18
- SHOULD_FIND_MANY_WITH_WHERE: 'should find many with where',
19
- SHOULD_FIND_MANY_WITH_OPERATORS: 'should find many with operators',
20
- SHOULD_WORK_WITH_REFERENCE_FIELDS: 'should work with reference fields',
21
- SHOULD_FIND_MANY_WITH_SORT_BY: 'should find many with sortBy',
22
- SHOULD_FIND_MANY_WITH_LIMIT: 'should find many with limit',
23
- SHOULD_FIND_MANY_WITH_OFFSET: 'should find many with offset',
24
- SHOULD_UPDATE_WITH_MULTIPLE_WHERE: 'should update with multiple where',
25
- DELETE_MODEL: 'delete model',
26
- SHOULD_DELETE_MANY: 'should delete many',
27
- SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND: "shouldn't throw on delete record not found",
28
- SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND: "shouldn't throw on record not found",
29
- SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR: 'should find many with contains operator',
30
- SHOULD_SEARCH_USERS_WITH_STARTS_WITH: 'should search users with startsWith',
31
- SHOULD_SEARCH_USERS_WITH_ENDS_WITH: 'should search users with endsWith',
32
- SHOULD_PREFER_GENERATE_ID_IF_PROVIDED: 'should prefer generateId if provided'
33
- };
34
- const { ...numberIdAdapterTestsCopy } = adapterTests;
35
- const numberIdAdapterTests = {
36
- ...numberIdAdapterTestsCopy,
37
- SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT: 'Should return a number id as a result',
38
- SHOULD_INCREMENT_THE_ID_BY_1: 'Should increment the id by 1'
39
- };
40
- export async function runBaseCollectionsTests({ getAdapter, disableTests: disabledTests, testPrefix }, internalOptions) {
41
- const adapter = async ()=>await getAdapter(internalOptions?.predefinedOptions);
42
- //@ts-expect-error - intentionally omitting id
43
- const user = {
44
- name: 'user',
45
- email: 'user@email.com',
46
- emailVerified: true,
47
- createdAt: new Date(),
48
- updatedAt: new Date()
49
- };
50
- test.skipIf(disabledTests?.CREATE_MODEL)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.CREATE_MODEL}`, async ()=>{
51
- const res = await (await adapter()).create({
52
- model: models.user,
53
- data: user
54
- });
55
- user.id = res.id;
56
- expect({
57
- name: res.name,
58
- email: res.email
59
- }).toEqual({
60
- name: user.name,
61
- email: user.email
62
- });
63
- });
64
- test.skipIf(disabledTests?.CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID}`, async ()=>{
65
- const res = await (await adapter()).create({
66
- model: models.user,
67
- data: {
68
- name: 'test-name-without-id',
69
- email: 'test-email-without-id@email.com'
70
- }
71
- });
72
- expect(res).toHaveProperty('id');
73
- // @ts-expect-error - res.id may not be in type definition but exists at runtime
74
- expect(typeof res?.id).toEqual('string');
75
- });
76
- test.skipIf(disabledTests?.FIND_MODEL)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL}`, async ()=>{
77
- const res = await (await adapter()).findOne({
78
- model: models.user,
79
- where: [
80
- {
81
- field: 'id',
82
- value: user.id
83
- }
84
- ]
85
- });
86
- expect({
87
- name: res?.name,
88
- email: res?.email
89
- }).toEqual({
90
- name: user.name,
91
- email: user.email
92
- });
93
- });
94
- test.skipIf(disabledTests?.FIND_MODEL_WITHOUT_ID)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL_WITHOUT_ID}`, async ()=>{
95
- const res = await (await adapter()).findOne({
96
- model: models.user,
97
- where: [
98
- {
99
- field: 'email',
100
- value: user.email
101
- }
102
- ]
103
- });
104
- expect({
105
- name: res?.name,
106
- email: res?.email
107
- }).toEqual({
108
- name: user.name,
109
- email: user.email
110
- });
111
- });
112
- test.skipIf(disabledTests?.FIND_MODEL_WITH_MODIFIED_FIELD_NAME)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL_WITH_MODIFIED_FIELD_NAME}`, async ()=>{
113
- const email = 'test-email-with-modified-field@email.com';
114
- const adapter = await getAdapter(Object.assign({
115
- user: {
116
- modelName: 'users'
117
- }
118
- }, internalOptions?.predefinedOptions));
119
- const user = await adapter.create({
120
- model: models.user,
121
- data: {
122
- email,
123
- name: 'test-name-with-modified-field',
124
- emailVerified: true,
125
- createdAt: new Date(),
126
- updatedAt: new Date()
127
- }
128
- });
129
- expect(user.email).toEqual(email);
130
- const res = await adapter.findOne({
131
- model: models.user,
132
- where: [
133
- {
134
- field: 'email',
135
- value: email
136
- }
137
- ]
138
- });
139
- expect(res).not.toBeNull();
140
- expect(res?.email).toEqual(email);
141
- });
142
- test.skipIf(disabledTests?.FIND_MODEL_WITH_SELECT)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL_WITH_SELECT}`, async ()=>{
143
- const res = await (await adapter()).findOne({
144
- model: models.user,
145
- where: [
146
- {
147
- field: 'id',
148
- value: user.id
149
- }
150
- ],
151
- select: [
152
- 'email'
153
- ]
154
- });
155
- expect(res).toEqual({
156
- id: user.id,
157
- email: user.email
158
- });
159
- });
160
- test.skipIf(disabledTests?.UPDATE_MODEL)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.UPDATE_MODEL}`, async ()=>{
161
- const newEmail = 'updated@email.com';
162
- const res = await (await adapter()).update({
163
- model: models.user,
164
- where: [
165
- {
166
- field: 'id',
167
- value: user.id
168
- }
169
- ],
170
- update: {
171
- email: newEmail
172
- }
173
- });
174
- expect(res).toMatchObject({
175
- email: newEmail,
176
- name: user.name
177
- });
178
- });
179
- test.skipIf(disabledTests?.SHOULD_FIND_MANY)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY}`, async ()=>{
180
- const res = await (await adapter()).findMany({
181
- model: models.user
182
- });
183
- expect(res.length).toBe(3);
184
- });
185
- test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_WHERE)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_WHERE}`, async ()=>{
186
- const user = await (await adapter()).create({
187
- model: models.user,
188
- data: {
189
- name: 'user2',
190
- email: 'test@email.com',
191
- emailVerified: true,
192
- createdAt: new Date(),
193
- updatedAt: new Date()
194
- }
195
- });
196
- const res = await (await adapter()).findMany({
197
- model: models.user,
198
- where: [
199
- {
200
- field: 'id',
201
- value: user.id
202
- }
203
- ]
204
- });
205
- expect(res.length).toBe(1);
206
- });
207
- test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_OPERATORS)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_OPERATORS}`, async ()=>{
208
- const newUser = await (await adapter()).create({
209
- model: models.user,
210
- data: {
211
- name: 'user',
212
- email: 'test-email2@email.com',
213
- emailVerified: true,
214
- createdAt: new Date(),
215
- updatedAt: new Date()
216
- }
217
- });
218
- const res = await (await adapter()).findMany({
219
- model: models.user,
220
- where: [
221
- {
222
- field: 'id',
223
- operator: 'in',
224
- value: [
225
- user.id,
226
- newUser.id
227
- ]
228
- }
229
- ]
230
- });
231
- expect(res.length).toBe(2);
232
- });
233
- test.skipIf(disabledTests?.SHOULD_WORK_WITH_REFERENCE_FIELDS)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_WORK_WITH_REFERENCE_FIELDS}`, async ()=>{
234
- let token = null;
235
- // Using Record<string, unknown> because adapter create return type varies by model and cannot be strictly typed
236
- const user = await (await adapter()).create({
237
- model: models.user,
238
- data: {
239
- name: 'user',
240
- email: 'my-email@email.com',
241
- emailVerified: true,
242
- createdAt: new Date(),
243
- updatedAt: new Date()
244
- }
245
- });
246
- const session = await (await adapter()).create({
247
- model: models.session,
248
- data: {
249
- token: generateId(),
250
- createdAt: new Date(),
251
- updatedAt: new Date(),
252
- userId: user.id,
253
- expiresAt: new Date()
254
- }
255
- });
256
- token = session.token;
257
- const res = await (await adapter()).findOne({
258
- model: models.session,
259
- where: [
260
- {
261
- field: 'userId',
262
- value: user.id
263
- }
264
- ]
265
- });
266
- const resToken = await (await adapter()).findOne({
267
- model: models.session,
268
- where: [
269
- {
270
- field: 'token',
271
- value: token
272
- }
273
- ]
274
- });
275
- expect(res).toMatchObject({
276
- userId: user.id
277
- });
278
- expect(resToken).toMatchObject({
279
- userId: user.id
280
- });
281
- });
282
- test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_SORT_BY)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_SORT_BY}`, async ()=>{
283
- await (await adapter()).create({
284
- model: models.user,
285
- data: {
286
- name: 'a',
287
- email: 'a@email.com',
288
- emailVerified: true,
289
- createdAt: new Date(),
290
- updatedAt: new Date()
291
- }
292
- });
293
- const res = await (await adapter()).findMany({
294
- model: models.user,
295
- sortBy: {
296
- field: 'name',
297
- direction: 'asc'
298
- }
299
- });
300
- expect(res[0].name).toBe('a');
301
- const res2 = await (await adapter()).findMany({
302
- model: models.user,
303
- sortBy: {
304
- field: 'name',
305
- direction: 'desc'
306
- }
307
- });
308
- expect(res2[res2.length - 1].name).toBe('a');
309
- });
310
- test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_LIMIT)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_LIMIT}`, async ()=>{
311
- const res = await (await adapter()).findMany({
312
- model: models.user,
313
- limit: 1
314
- });
315
- expect(res.length).toBe(1);
316
- });
317
- test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_OFFSET)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_OFFSET}`, async ()=>{
318
- const res = await (await adapter()).findMany({
319
- model: models.user,
320
- offset: 2
321
- });
322
- expect(res.length).toBe(5);
323
- });
324
- test.skipIf(disabledTests?.SHOULD_UPDATE_WITH_MULTIPLE_WHERE)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_UPDATE_WITH_MULTIPLE_WHERE}`, async ()=>{
325
- await (await adapter()).updateMany({
326
- model: models.user,
327
- where: [
328
- {
329
- field: 'name',
330
- value: user.name
331
- },
332
- {
333
- field: 'email',
334
- value: user.email
335
- }
336
- ],
337
- update: {
338
- email: 'updated@email.com'
339
- }
340
- });
341
- const updatedUser = await (await adapter()).findOne({
342
- model: models.user,
343
- where: [
344
- {
345
- field: 'email',
346
- value: 'updated@email.com'
347
- }
348
- ]
349
- });
350
- expect(updatedUser).toMatchObject({
351
- name: user.name,
352
- email: 'updated@email.com'
353
- });
354
- });
355
- test.skipIf(disabledTests?.DELETE_MODEL)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.DELETE_MODEL}`, async ()=>{
356
- await (await adapter()).delete({
357
- model: models.user,
358
- where: [
359
- {
360
- field: 'id',
361
- value: user.id
362
- }
363
- ]
364
- });
365
- const findRes = await (await adapter()).findOne({
366
- model: models.user,
367
- where: [
368
- {
369
- field: 'id',
370
- value: user.id
371
- }
372
- ]
373
- });
374
- expect(findRes).toBeNull();
375
- });
376
- test.skipIf(disabledTests?.SHOULD_DELETE_MANY)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_DELETE_MANY}`, async ()=>{
377
- for (const i of [
378
- 'to-be-delete-1',
379
- 'to-be-delete-2',
380
- 'to-be-delete-3'
381
- ]){
382
- await (await adapter()).create({
383
- model: models.user,
384
- data: {
385
- name: 'to-be-deleted',
386
- email: `email@test-${i}.com`,
387
- emailVerified: true,
388
- createdAt: new Date(),
389
- updatedAt: new Date()
390
- }
391
- });
392
- }
393
- const findResFirst = await (await adapter()).findMany({
394
- model: models.user,
395
- where: [
396
- {
397
- field: 'name',
398
- value: 'to-be-deleted'
399
- }
400
- ]
401
- });
402
- expect(findResFirst.length).toBe(3);
403
- await (await adapter()).deleteMany({
404
- model: models.user,
405
- where: [
406
- {
407
- field: 'name',
408
- value: 'to-be-deleted'
409
- }
410
- ]
411
- });
412
- const findRes = await (await adapter()).findMany({
413
- model: models.user,
414
- where: [
415
- {
416
- field: 'name',
417
- value: 'to-be-deleted'
418
- }
419
- ]
420
- });
421
- expect(findRes.length).toBe(0);
422
- });
423
- test.skipIf(disabledTests?.SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND}`, async ()=>{
424
- await (await adapter()).delete({
425
- model: models.user,
426
- where: [
427
- {
428
- field: 'id',
429
- value: '100000'
430
- }
431
- ]
432
- });
433
- });
434
- test.skipIf(disabledTests?.SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND}`, async ()=>{
435
- const res = await (await adapter()).findOne({
436
- model: models.user,
437
- where: [
438
- {
439
- field: 'id',
440
- value: '100000'
441
- }
442
- ]
443
- });
444
- expect(res).toBeNull();
445
- });
446
- test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR}`, async ()=>{
447
- const res = await (await adapter()).findMany({
448
- model: models.user,
449
- where: [
450
- {
451
- field: 'name',
452
- operator: 'contains',
453
- value: 'user2'
454
- }
455
- ]
456
- });
457
- expect(res.length).toBe(1);
458
- });
459
- test.skipIf(disabledTests?.SHOULD_SEARCH_USERS_WITH_STARTS_WITH)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_SEARCH_USERS_WITH_STARTS_WITH}`, async ()=>{
460
- const res = await (await adapter()).findMany({
461
- model: models.user,
462
- where: [
463
- {
464
- field: 'name',
465
- operator: 'starts_with',
466
- value: 'us'
467
- }
468
- ]
469
- });
470
- expect(res.length).toBe(3);
471
- });
472
- test.skipIf(disabledTests?.SHOULD_SEARCH_USERS_WITH_ENDS_WITH)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_SEARCH_USERS_WITH_ENDS_WITH}`, async ()=>{
473
- const res = await (await adapter()).findMany({
474
- model: models.user,
475
- where: [
476
- {
477
- field: 'name',
478
- operator: 'ends_with',
479
- value: 'er2'
480
- }
481
- ]
482
- });
483
- expect(res.length).toBe(1);
484
- });
485
- test.skipIf(disabledTests?.SHOULD_PREFER_GENERATE_ID_IF_PROVIDED)(`${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_PREFER_GENERATE_ID_IF_PROVIDED}`, async ()=>{
486
- const customAdapter = await getAdapter(Object.assign({
487
- advanced: {
488
- database: {
489
- generateId: ()=>'mocked-id'
490
- }
491
- }
492
- }, internalOptions?.predefinedOptions));
493
- const res = await customAdapter.create({
494
- model: 'user',
495
- data: {
496
- name: 'user4',
497
- email: 'user4@email.com',
498
- emailVerified: true,
499
- createdAt: new Date(),
500
- updatedAt: new Date()
501
- }
502
- });
503
- expect(res.id).toBe('mocked-id');
504
- });
505
- }
506
- export async function runBaseCollectionsNumberIdTests(opts, internalOptions) {
507
- const cleanup = [];
508
- const adapter = async ()=>await opts.getAdapter(internalOptions?.predefinedOptions);
509
- describe('Should run number id specific tests', async ()=>{
510
- let idNumber = -1;
511
- test.skipIf(opts.disableTests?.SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT)(`${opts.testPrefix ? `${opts.testPrefix} - ` : ''}${numberIdAdapterTests.SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT}`, async ({ onTestFailed })=>{
512
- onTestFailed(()=>{
513
- console.log(`ID number from last create: ${idNumber}`);
514
- });
515
- const res = await (await adapter()).create({
516
- model: models.user,
517
- data: {
518
- name: 'user',
519
- email: 'user@email.com'
520
- }
521
- });
522
- cleanup.push({
523
- modelName: models.user,
524
- id: res.id
525
- });
526
- expect(typeof res.id).toBe('string'); // we forcefully return all `id`s as strings. this is intentional.
527
- expect(parseInt(res.id)).toBeGreaterThan(0);
528
- idNumber = parseInt(res.id);
529
- });
530
- test.skipIf(opts.disableTests?.SHOULD_INCREMENT_THE_ID_BY_1)(`${opts.testPrefix ? `${opts.testPrefix} - ` : ''}${numberIdAdapterTests.SHOULD_INCREMENT_THE_ID_BY_1}`, async ({ onTestFailed })=>{
531
- onTestFailed(()=>{
532
- console.log(`ID number from last create: ${idNumber}`);
533
- });
534
- const res = await (await adapter()).create({
535
- model: models.user,
536
- data: {
537
- name: 'user2',
538
- email: 'user2@email.com'
539
- }
540
- });
541
- cleanup.push({
542
- modelName: models.user,
543
- id: res.id
544
- });
545
- expect(parseInt(res.id)).toBe(idNumber + 1);
546
- });
547
- });
548
- describe('Should run normal adapter tests with number id enabled', async ()=>{
549
- beforeAll(async ()=>{
550
- for (const { modelName, id } of cleanup){
551
- await (await adapter()).delete({
552
- model: modelName,
553
- where: [
554
- {
555
- field: 'id',
556
- value: id
557
- }
558
- ]
559
- });
560
- }
561
- });
562
- await runBaseCollectionsTests({
563
- getAdapter: async ()=>await adapter(),
564
- disableTests: {
565
- SHOULD_PREFER_GENERATE_ID_IF_PROVIDED: true
566
- }
567
- }, {
568
- predefinedOptions: {
569
- ...internalOptions?.predefinedOptions
570
- }
571
- });
572
- });
573
- }
574
-
575
- //# sourceMappingURL=base-collections-tests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/better-auth/adapter/tests/base-collections-tests.ts"],"sourcesContent":["import type { Adapter, BetterAuthOptions, User } from 'better-auth';\nimport { generateId } from 'better-auth';\nimport { beforeAll, describe, expect, test } from 'vitest';\n\nconst models = {\n user: 'user',\n session: 'session',\n account: 'account',\n verification: 'verification',\n};\n\nconst adapterTests = {\n CREATE_MODEL: 'create model',\n CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID: 'create model should always return an id',\n FIND_MODEL: 'find model',\n FIND_MODEL_WITHOUT_ID: 'find model without id',\n FIND_MODEL_WITH_SELECT: 'find model with select',\n FIND_MODEL_WITH_MODIFIED_FIELD_NAME: 'find model with modified field name',\n UPDATE_MODEL: 'update model',\n SHOULD_FIND_MANY: 'should find many',\n SHOULD_FIND_MANY_WITH_WHERE: 'should find many with where',\n SHOULD_FIND_MANY_WITH_OPERATORS: 'should find many with operators',\n SHOULD_WORK_WITH_REFERENCE_FIELDS: 'should work with reference fields',\n SHOULD_FIND_MANY_WITH_SORT_BY: 'should find many with sortBy',\n SHOULD_FIND_MANY_WITH_LIMIT: 'should find many with limit',\n SHOULD_FIND_MANY_WITH_OFFSET: 'should find many with offset',\n SHOULD_UPDATE_WITH_MULTIPLE_WHERE: 'should update with multiple where',\n DELETE_MODEL: 'delete model',\n SHOULD_DELETE_MANY: 'should delete many',\n SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND: \"shouldn't throw on delete record not found\",\n SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND: \"shouldn't throw on record not found\",\n SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR: 'should find many with contains operator',\n SHOULD_SEARCH_USERS_WITH_STARTS_WITH: 'should search users with startsWith',\n SHOULD_SEARCH_USERS_WITH_ENDS_WITH: 'should search users with endsWith',\n SHOULD_PREFER_GENERATE_ID_IF_PROVIDED: 'should prefer generateId if provided',\n} as const;\n\nconst { ...numberIdAdapterTestsCopy } = adapterTests;\n\nconst numberIdAdapterTests = {\n ...numberIdAdapterTestsCopy,\n SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT: 'Should return a number id as a result',\n SHOULD_INCREMENT_THE_ID_BY_1: 'Should increment the id by 1',\n} as const;\n\ninterface AdapterTestOptions {\n getAdapter: (customOptions?: Omit<BetterAuthOptions, 'database'>) => Promise<Adapter>;\n disableTests?: Partial<Record<keyof typeof adapterTests, boolean>>;\n testPrefix?: string;\n}\n\ninterface NumberIdAdapterTestOptions {\n getAdapter: (customOptions?: Omit<BetterAuthOptions, 'database'>) => Promise<Adapter>;\n disableTests?: Partial<Record<keyof typeof numberIdAdapterTests, boolean>>;\n testPrefix?: string;\n}\n\nexport async function runBaseCollectionsTests(\n { getAdapter, disableTests: disabledTests, testPrefix }: AdapterTestOptions,\n internalOptions?: {\n predefinedOptions: Omit<BetterAuthOptions, 'database'>;\n }\n) {\n const adapter = async () => await getAdapter(internalOptions?.predefinedOptions);\n\n //@ts-expect-error - intentionally omitting id\n const user: {\n name: string;\n email: string;\n emailVerified: boolean;\n createdAt: Date;\n updatedAt: Date;\n id: string;\n } = {\n name: 'user',\n email: 'user@email.com',\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n\n test.skipIf(disabledTests?.CREATE_MODEL)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.CREATE_MODEL}`,\n async () => {\n const res = await (await adapter()).create({\n model: models.user,\n data: user,\n });\n user.id = (res as { id: string }).id;\n expect({\n name: (res as { name: string }).name,\n email: (res as { email: string }).email,\n }).toEqual({\n name: user.name,\n email: user.email,\n });\n }\n );\n\n test.skipIf(disabledTests?.CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID}`,\n async () => {\n const res = await (await adapter()).create({\n model: models.user,\n data: {\n name: 'test-name-without-id',\n email: 'test-email-without-id@email.com',\n },\n });\n expect(res).toHaveProperty('id');\n // @ts-expect-error - res.id may not be in type definition but exists at runtime\n expect(typeof res?.id).toEqual('string');\n }\n );\n\n test.skipIf(disabledTests?.FIND_MODEL)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL}`,\n async () => {\n const res = await (await adapter()).findOne<User>({\n model: models.user,\n where: [\n {\n field: 'id',\n value: user.id,\n },\n ],\n });\n expect({\n name: res?.name,\n email: res?.email,\n }).toEqual({\n name: user.name,\n email: user.email,\n });\n }\n );\n\n test.skipIf(disabledTests?.FIND_MODEL_WITHOUT_ID)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL_WITHOUT_ID}`,\n async () => {\n const res = await (await adapter()).findOne<User>({\n model: models.user,\n where: [\n {\n field: 'email',\n value: user.email,\n },\n ],\n });\n expect({\n name: res?.name,\n email: res?.email,\n }).toEqual({\n name: user.name,\n email: user.email,\n });\n }\n );\n\n test.skipIf(disabledTests?.FIND_MODEL_WITH_MODIFIED_FIELD_NAME)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL_WITH_MODIFIED_FIELD_NAME}`,\n async () => {\n const email = 'test-email-with-modified-field@email.com';\n const adapter = await getAdapter(\n Object.assign(\n {\n user: {\n modelName: 'users',\n // fields: {\n // email: 'email_address'\n // }\n },\n },\n internalOptions?.predefinedOptions\n )\n );\n const user = await adapter.create({\n model: models.user,\n data: {\n email,\n name: 'test-name-with-modified-field',\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n expect(user.email).toEqual(email);\n const res = await adapter.findOne<User>({\n model: models.user,\n where: [\n {\n field: 'email',\n value: email,\n },\n ],\n });\n expect(res).not.toBeNull();\n expect(res?.email).toEqual(email);\n }\n );\n\n test.skipIf(disabledTests?.FIND_MODEL_WITH_SELECT)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.FIND_MODEL_WITH_SELECT}`,\n async () => {\n const res = await (await adapter()).findOne({\n model: models.user,\n where: [\n {\n field: 'id',\n value: user.id,\n },\n ],\n select: ['email'],\n });\n expect(res).toEqual({ id: user.id, email: user.email });\n }\n );\n\n test.skipIf(disabledTests?.UPDATE_MODEL)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.UPDATE_MODEL}`,\n async () => {\n const newEmail = 'updated@email.com';\n\n const res = await (await adapter()).update<User>({\n model: models.user,\n where: [\n {\n field: 'id',\n value: user.id,\n },\n ],\n update: {\n email: newEmail,\n },\n });\n expect(res).toMatchObject({\n email: newEmail,\n name: user.name,\n });\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_FIND_MANY)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY}`,\n async () => {\n const res = await (await adapter()).findMany({\n model: models.user,\n });\n expect(res.length).toBe(3);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_WHERE)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_WHERE}`,\n async () => {\n const user = await (await adapter()).create<User>({\n model: models.user,\n data: {\n name: 'user2',\n email: 'test@email.com',\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n const res = await (await adapter()).findMany({\n model: models.user,\n where: [\n {\n field: 'id',\n value: user.id,\n },\n ],\n });\n expect(res.length).toBe(1);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_OPERATORS)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_OPERATORS}`,\n async () => {\n const newUser = await (await adapter()).create<User>({\n model: models.user,\n data: {\n name: 'user',\n email: 'test-email2@email.com',\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n const res = await (await adapter()).findMany({\n model: models.user,\n where: [\n {\n field: 'id',\n operator: 'in',\n value: [user.id, newUser.id],\n },\n ],\n });\n expect(res.length).toBe(2);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_WORK_WITH_REFERENCE_FIELDS)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_WORK_WITH_REFERENCE_FIELDS}`,\n async () => {\n let token = null;\n // Using Record<string, unknown> because adapter create return type varies by model and cannot be strictly typed\n const user = await (await adapter()).create<\n /* Using Record<string, unknown> because adapter create return type varies by model and cannot be strictly typed */ Record<\n string,\n unknown\n >\n >({\n model: models.user,\n data: {\n name: 'user',\n email: 'my-email@email.com',\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n const session = await (await adapter()).create({\n model: models.session,\n data: {\n token: generateId(),\n createdAt: new Date(),\n updatedAt: new Date(),\n userId: user.id,\n expiresAt: new Date(),\n },\n });\n token = session.token;\n const res = await (await adapter()).findOne({\n model: models.session,\n where: [\n {\n field: 'userId',\n value: user.id,\n },\n ],\n });\n const resToken = await (await adapter()).findOne({\n model: models.session,\n where: [\n {\n field: 'token',\n value: token,\n },\n ],\n });\n expect(res).toMatchObject({\n userId: user.id,\n });\n expect(resToken).toMatchObject({\n userId: user.id,\n });\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_SORT_BY)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_SORT_BY}`,\n async () => {\n await (await adapter()).create({\n model: models.user,\n data: {\n name: 'a',\n email: 'a@email.com',\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n const res = await (await adapter()).findMany<User>({\n model: models.user,\n sortBy: {\n field: 'name',\n direction: 'asc',\n },\n });\n expect(res[0].name).toBe('a');\n\n const res2 = await (await adapter()).findMany<User>({\n model: models.user,\n sortBy: {\n field: 'name',\n direction: 'desc',\n },\n });\n\n expect(res2[res2.length - 1].name).toBe('a');\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_LIMIT)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_LIMIT}`,\n async () => {\n const res = await (await adapter()).findMany({\n model: models.user,\n limit: 1,\n });\n expect(res.length).toBe(1);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_OFFSET)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_OFFSET}`,\n async () => {\n const res = await (await adapter()).findMany({\n model: models.user,\n offset: 2,\n });\n expect(res.length).toBe(5);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_UPDATE_WITH_MULTIPLE_WHERE)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_UPDATE_WITH_MULTIPLE_WHERE}`,\n async () => {\n await (await adapter()).updateMany({\n model: models.user,\n where: [\n {\n field: 'name',\n value: user.name,\n },\n {\n field: 'email',\n value: user.email,\n },\n ],\n update: {\n email: 'updated@email.com',\n },\n });\n const updatedUser = await (await adapter()).findOne<User>({\n model: models.user,\n where: [\n {\n field: 'email',\n value: 'updated@email.com',\n },\n ],\n });\n expect(updatedUser).toMatchObject({\n name: user.name,\n email: 'updated@email.com',\n });\n }\n );\n\n test.skipIf(disabledTests?.DELETE_MODEL)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.DELETE_MODEL}`,\n async () => {\n await (await adapter()).delete({\n model: models.user,\n where: [\n {\n field: 'id',\n value: user.id,\n },\n ],\n });\n const findRes = await (await adapter()).findOne({\n model: models.user,\n where: [\n {\n field: 'id',\n value: user.id,\n },\n ],\n });\n expect(findRes).toBeNull();\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_DELETE_MANY)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_DELETE_MANY}`,\n async () => {\n for (const i of ['to-be-delete-1', 'to-be-delete-2', 'to-be-delete-3']) {\n await (await adapter()).create({\n model: models.user,\n data: {\n name: 'to-be-deleted',\n email: `email@test-${i}.com`,\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n }\n const findResFirst = await (await adapter()).findMany({\n model: models.user,\n where: [\n {\n field: 'name',\n value: 'to-be-deleted',\n },\n ],\n });\n expect(findResFirst.length).toBe(3);\n await (await adapter()).deleteMany({\n model: models.user,\n where: [\n {\n field: 'name',\n value: 'to-be-deleted',\n },\n ],\n });\n const findRes = await (await adapter()).findMany({\n model: models.user,\n where: [\n {\n field: 'name',\n value: 'to-be-deleted',\n },\n ],\n });\n expect(findRes.length).toBe(0);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND}`,\n async () => {\n await (await adapter()).delete({\n model: models.user,\n where: [\n {\n field: 'id',\n value: '100000',\n },\n ],\n });\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND}`,\n async () => {\n const res = await (await adapter()).findOne({\n model: models.user,\n where: [\n {\n field: 'id',\n value: '100000',\n },\n ],\n });\n expect(res).toBeNull();\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR}`,\n async () => {\n const res = await (await adapter()).findMany({\n model: models.user,\n where: [\n {\n field: 'name',\n operator: 'contains',\n value: 'user2',\n },\n ],\n });\n expect(res.length).toBe(1);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_SEARCH_USERS_WITH_STARTS_WITH)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_SEARCH_USERS_WITH_STARTS_WITH}`,\n async () => {\n const res = await (await adapter()).findMany({\n model: models.user,\n where: [\n {\n field: 'name',\n operator: 'starts_with',\n value: 'us',\n },\n ],\n });\n expect(res.length).toBe(3);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_SEARCH_USERS_WITH_ENDS_WITH)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_SEARCH_USERS_WITH_ENDS_WITH}`,\n async () => {\n const res = await (await adapter()).findMany({\n model: models.user,\n where: [\n {\n field: 'name',\n operator: 'ends_with',\n value: 'er2',\n },\n ],\n });\n expect(res.length).toBe(1);\n }\n );\n\n test.skipIf(disabledTests?.SHOULD_PREFER_GENERATE_ID_IF_PROVIDED)(\n `${testPrefix ? `${testPrefix} - ` : ''}${adapterTests.SHOULD_PREFER_GENERATE_ID_IF_PROVIDED}`,\n async () => {\n const customAdapter = await getAdapter(\n Object.assign(\n {\n advanced: {\n database: {\n generateId: () => 'mocked-id',\n },\n },\n } satisfies BetterAuthOptions,\n internalOptions?.predefinedOptions\n )\n );\n\n const res = await customAdapter.create({\n model: 'user',\n data: {\n name: 'user4',\n email: 'user4@email.com',\n emailVerified: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n\n expect(res.id).toBe('mocked-id');\n }\n );\n}\n\nexport async function runBaseCollectionsNumberIdTests(\n opts: NumberIdAdapterTestOptions,\n internalOptions?: { predefinedOptions: Omit<BetterAuthOptions, 'database'> }\n) {\n const cleanup: { modelName: string; id: string }[] = [];\n const adapter = async () => await opts.getAdapter(internalOptions?.predefinedOptions);\n\n describe('Should run number id specific tests', async () => {\n let idNumber = -1;\n\n test.skipIf(opts.disableTests?.SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT)(\n `${opts.testPrefix ? `${opts.testPrefix} - ` : ''}${numberIdAdapterTests.SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT}`,\n async ({ onTestFailed }) => {\n onTestFailed(() => {\n console.log(`ID number from last create: ${idNumber}`);\n });\n const res = await (await adapter()).create({\n model: models.user,\n data: {\n name: 'user',\n email: 'user@email.com',\n },\n });\n cleanup.push({ modelName: models.user, id: res.id });\n expect(typeof res.id).toBe('string'); // we forcefully return all `id`s as strings. this is intentional.\n expect(parseInt(res.id)).toBeGreaterThan(0);\n idNumber = parseInt(res.id);\n }\n );\n test.skipIf(opts.disableTests?.SHOULD_INCREMENT_THE_ID_BY_1)(\n `${opts.testPrefix ? `${opts.testPrefix} - ` : ''}${numberIdAdapterTests.SHOULD_INCREMENT_THE_ID_BY_1}`,\n async ({ onTestFailed }) => {\n onTestFailed(() => {\n console.log(`ID number from last create: ${idNumber}`);\n });\n const res = await (await adapter()).create({\n model: models.user,\n data: {\n name: 'user2',\n email: 'user2@email.com',\n },\n });\n cleanup.push({ modelName: models.user, id: res.id });\n expect(parseInt(res.id)).toBe(idNumber + 1);\n }\n );\n });\n\n describe('Should run normal adapter tests with number id enabled', async () => {\n beforeAll(async () => {\n for (const { modelName, id } of cleanup) {\n await (await adapter()).delete({\n model: modelName,\n where: [{ field: 'id', value: id }],\n });\n }\n });\n await runBaseCollectionsTests(\n {\n getAdapter: async () => await adapter(),\n disableTests: {\n SHOULD_PREFER_GENERATE_ID_IF_PROVIDED: true,\n },\n },\n {\n predefinedOptions: {\n ...internalOptions?.predefinedOptions,\n },\n }\n );\n });\n}\n"],"names":["generateId","beforeAll","describe","expect","test","models","user","session","account","verification","adapterTests","CREATE_MODEL","CREATE_MODEL_SHOULD_ALWAYS_RETURN_AN_ID","FIND_MODEL","FIND_MODEL_WITHOUT_ID","FIND_MODEL_WITH_SELECT","FIND_MODEL_WITH_MODIFIED_FIELD_NAME","UPDATE_MODEL","SHOULD_FIND_MANY","SHOULD_FIND_MANY_WITH_WHERE","SHOULD_FIND_MANY_WITH_OPERATORS","SHOULD_WORK_WITH_REFERENCE_FIELDS","SHOULD_FIND_MANY_WITH_SORT_BY","SHOULD_FIND_MANY_WITH_LIMIT","SHOULD_FIND_MANY_WITH_OFFSET","SHOULD_UPDATE_WITH_MULTIPLE_WHERE","DELETE_MODEL","SHOULD_DELETE_MANY","SHOULD_NOT_THROW_ON_DELETE_RECORD_NOT_FOUND","SHOULD_NOT_THROW_ON_RECORD_NOT_FOUND","SHOULD_FIND_MANY_WITH_CONTAINS_OPERATOR","SHOULD_SEARCH_USERS_WITH_STARTS_WITH","SHOULD_SEARCH_USERS_WITH_ENDS_WITH","SHOULD_PREFER_GENERATE_ID_IF_PROVIDED","numberIdAdapterTestsCopy","numberIdAdapterTests","SHOULD_RETURN_A_NUMBER_ID_AS_A_RESULT","SHOULD_INCREMENT_THE_ID_BY_1","runBaseCollectionsTests","getAdapter","disableTests","disabledTests","testPrefix","internalOptions","adapter","predefinedOptions","name","email","emailVerified","createdAt","Date","updatedAt","skipIf","res","create","model","data","id","toEqual","toHaveProperty","findOne","where","field","value","Object","assign","modelName","not","toBeNull","select","newEmail","update","toMatchObject","findMany","length","toBe","newUser","operator","token","userId","expiresAt","resToken","sortBy","direction","res2","limit","offset","updateMany","updatedUser","delete","findRes","i","findResFirst","deleteMany","customAdapter","advanced","database","runBaseCollectionsNumberIdTests","opts","cleanup","idNumber","onTestFailed","console","log","push","parseInt","toBeGreaterThan"],"mappings":"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"}