@revealui/auth 0.0.1-pre.0

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 (413) hide show
  1. package/LICENSE +202 -0
  2. package/dist/better-auth/adapter/__tests__/transform.test.js +213 -0
  3. package/dist/better-auth/adapter/__tests__/transform.test.js.map +1 -0
  4. package/dist/better-auth/adapter/generate-schema/biome.d.js +2 -0
  5. package/dist/better-auth/adapter/generate-schema/biome.d.js.map +1 -0
  6. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +5 -0
  7. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +482 -0
  8. package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +1 -0
  9. package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +1 -0
  10. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +42 -0
  11. package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +1 -0
  12. package/dist/better-auth/adapter/generate-schema/index.d.ts +4 -0
  13. package/dist/better-auth/adapter/generate-schema/index.js +19 -0
  14. package/dist/better-auth/adapter/generate-schema/index.js.map +1 -0
  15. package/dist/better-auth/adapter/generate-schema/utils.d.ts +2 -0
  16. package/dist/better-auth/adapter/generate-schema/utils.js +20 -0
  17. package/dist/better-auth/adapter/generate-schema/utils.js.map +1 -0
  18. package/dist/better-auth/adapter/index.d.ts +15 -0
  19. package/dist/better-auth/adapter/index.js +731 -0
  20. package/dist/better-auth/adapter/index.js.map +1 -0
  21. package/dist/better-auth/adapter/tests/adapter.test.js +174 -0
  22. package/dist/better-auth/adapter/tests/adapter.test.js.map +1 -0
  23. package/dist/better-auth/adapter/tests/base-collections-tests.js +575 -0
  24. package/dist/better-auth/adapter/tests/base-collections-tests.js.map +1 -0
  25. package/dist/better-auth/adapter/tests/dev/index.js +117 -0
  26. package/dist/better-auth/adapter/tests/dev/index.js.map +1 -0
  27. package/dist/better-auth/adapter/tests/dev/migrate.js +26 -0
  28. package/dist/better-auth/adapter/tests/dev/migrate.js.map +1 -0
  29. package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js +218 -0
  30. package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js.map +1 -0
  31. package/dist/better-auth/adapter/tests/dev/schema.js +160 -0
  32. package/dist/better-auth/adapter/tests/dev/schema.js.map +1 -0
  33. package/dist/better-auth/adapter/tests/plugins-tests.js +2 -0
  34. package/dist/better-auth/adapter/tests/plugins-tests.js.map +1 -0
  35. package/dist/better-auth/adapter/transform/index.d.ts +27 -0
  36. package/dist/better-auth/adapter/transform/index.js +664 -0
  37. package/dist/better-auth/adapter/transform/index.js.map +1 -0
  38. package/dist/better-auth/adapter/types.d.ts +10 -0
  39. package/dist/better-auth/adapter/types.js +3 -0
  40. package/dist/better-auth/adapter/types.js.map +1 -0
  41. package/dist/better-auth/generated-types.d.ts +285 -0
  42. package/dist/better-auth/index.d.ts +3 -0
  43. package/dist/better-auth/index.js +5 -0
  44. package/dist/better-auth/index.js.map +1 -0
  45. package/dist/better-auth/plugin/__tests__/plugin.test.js +162 -0
  46. package/dist/better-auth/plugin/__tests__/plugin.test.js.map +1 -0
  47. package/dist/better-auth/plugin/constants.d.ts +220 -0
  48. package/dist/better-auth/plugin/constants.js +249 -0
  49. package/dist/better-auth/plugin/constants.js.map +1 -0
  50. package/dist/better-auth/plugin/helpers/check-plugin-exists.d.ts +12 -0
  51. package/dist/better-auth/plugin/helpers/check-plugin-exists.js +14 -0
  52. package/dist/better-auth/plugin/helpers/check-plugin-exists.js.map +1 -0
  53. package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +29 -0
  54. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +46 -0
  55. package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +1 -0
  56. package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +7 -0
  57. package/dist/better-auth/plugin/helpers/get-admin-access.js +22 -0
  58. package/dist/better-auth/plugin/helpers/get-admin-access.js.map +1 -0
  59. package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +5 -0
  60. package/dist/better-auth/plugin/helpers/get-all-roles.js +20 -0
  61. package/dist/better-auth/plugin/helpers/get-all-roles.js.map +1 -0
  62. package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +18 -0
  63. package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +70 -0
  64. package/dist/better-auth/plugin/helpers/get-better-auth-schema.js.map +1 -0
  65. package/dist/better-auth/plugin/helpers/get-collection-slug.d.ts +5 -0
  66. package/dist/better-auth/plugin/helpers/get-collection-slug.js +20 -0
  67. package/dist/better-auth/plugin/helpers/get-collection-slug.js.map +1 -0
  68. package/dist/better-auth/plugin/helpers/get-collection.d.ts +15 -0
  69. package/dist/better-auth/plugin/helpers/get-collection.js +29 -0
  70. package/dist/better-auth/plugin/helpers/get-collection.js.map +1 -0
  71. package/dist/better-auth/plugin/helpers/get-ip.d.ts +2 -0
  72. package/dist/better-auth/plugin/helpers/get-ip.js +31 -0
  73. package/dist/better-auth/plugin/helpers/get-ip.js.map +1 -0
  74. package/dist/better-auth/plugin/helpers/get-signed-cookie.d.ts +2 -0
  75. package/dist/better-auth/plugin/helpers/get-signed-cookie.js +65 -0
  76. package/dist/better-auth/plugin/helpers/get-signed-cookie.js.map +1 -0
  77. package/dist/better-auth/plugin/helpers/index.d.ts +1 -0
  78. package/dist/better-auth/plugin/helpers/index.js +3 -0
  79. package/dist/better-auth/plugin/helpers/index.js.map +1 -0
  80. package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts +59 -0
  81. package/dist/better-auth/plugin/helpers/prepare-session-data.js +49 -0
  82. package/dist/better-auth/plugin/helpers/prepare-session-data.js.map +1 -0
  83. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +20 -0
  84. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +67 -0
  85. package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js.map +1 -0
  86. package/dist/better-auth/plugin/index.d.ts +11 -0
  87. package/dist/better-auth/plugin/index.js +125 -0
  88. package/dist/better-auth/plugin/index.js.map +1 -0
  89. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +12 -0
  90. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +87 -0
  91. package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js.map +1 -0
  92. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +3 -0
  93. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +60 -0
  94. package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js.map +1 -0
  95. package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +3 -0
  96. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +154 -0
  97. package/dist/better-auth/plugin/lib/build-collections/accounts/index.js.map +1 -0
  98. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +5 -0
  99. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +11 -0
  100. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js.map +1 -0
  101. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +2 -0
  102. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +8 -0
  103. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js.map +1 -0
  104. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +6 -0
  105. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +119 -0
  106. package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js.map +1 -0
  107. package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +3 -0
  108. package/dist/better-auth/plugin/lib/build-collections/api-keys.js +177 -0
  109. package/dist/better-auth/plugin/lib/build-collections/api-keys.js.map +1 -0
  110. package/dist/better-auth/plugin/lib/build-collections/device-code.d.ts +3 -0
  111. package/dist/better-auth/plugin/lib/build-collections/device-code.js +50 -0
  112. package/dist/better-auth/plugin/lib/build-collections/device-code.js.map +1 -0
  113. package/dist/better-auth/plugin/lib/build-collections/index.d.ts +10 -0
  114. package/dist/better-auth/plugin/lib/build-collections/index.js +73 -0
  115. package/dist/better-auth/plugin/lib/build-collections/index.js.map +1 -0
  116. package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +3 -0
  117. package/dist/better-auth/plugin/lib/build-collections/invitations.js +94 -0
  118. package/dist/better-auth/plugin/lib/build-collections/invitations.js.map +1 -0
  119. package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +3 -0
  120. package/dist/better-auth/plugin/lib/build-collections/jwks.js +59 -0
  121. package/dist/better-auth/plugin/lib/build-collections/jwks.js.map +1 -0
  122. package/dist/better-auth/plugin/lib/build-collections/members.d.ts +3 -0
  123. package/dist/better-auth/plugin/lib/build-collections/members.js +73 -0
  124. package/dist/better-auth/plugin/lib/build-collections/members.js.map +1 -0
  125. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +3 -0
  126. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +107 -0
  127. package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js.map +1 -0
  128. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +3 -0
  129. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +118 -0
  130. package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js.map +1 -0
  131. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +3 -0
  132. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +89 -0
  133. package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js.map +1 -0
  134. package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +3 -0
  135. package/dist/better-auth/plugin/lib/build-collections/organizations.js +70 -0
  136. package/dist/better-auth/plugin/lib/build-collections/organizations.js.map +1 -0
  137. package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +3 -0
  138. package/dist/better-auth/plugin/lib/build-collections/passkeys.js +115 -0
  139. package/dist/better-auth/plugin/lib/build-collections/passkeys.js.map +1 -0
  140. package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +3 -0
  141. package/dist/better-auth/plugin/lib/build-collections/sessions.js +170 -0
  142. package/dist/better-auth/plugin/lib/build-collections/sessions.js.map +1 -0
  143. package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +3 -0
  144. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +81 -0
  145. package/dist/better-auth/plugin/lib/build-collections/sso-providers.js.map +1 -0
  146. package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +3 -0
  147. package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +111 -0
  148. package/dist/better-auth/plugin/lib/build-collections/subscriptions.js.map +1 -0
  149. package/dist/better-auth/plugin/lib/build-collections/team-members.d.ts +3 -0
  150. package/dist/better-auth/plugin/lib/build-collections/team-members.js +57 -0
  151. package/dist/better-auth/plugin/lib/build-collections/team-members.js.map +1 -0
  152. package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +3 -0
  153. package/dist/better-auth/plugin/lib/build-collections/teams.js +76 -0
  154. package/dist/better-auth/plugin/lib/build-collections/teams.js.map +1 -0
  155. package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +3 -0
  156. package/dist/better-auth/plugin/lib/build-collections/two-factors.js +67 -0
  157. package/dist/better-auth/plugin/lib/build-collections/two-factors.js.map +1 -0
  158. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +7 -0
  159. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +53 -0
  160. package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js.map +1 -0
  161. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +11 -0
  162. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +75 -0
  163. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js.map +1 -0
  164. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts +4 -0
  165. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js +6 -0
  166. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js.map +1 -0
  167. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +2 -0
  168. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +115 -0
  169. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js.map +1 -0
  170. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +3 -0
  171. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +64 -0
  172. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js.map +1 -0
  173. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +3 -0
  174. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +80 -0
  175. package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js.map +1 -0
  176. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts +6 -0
  177. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +79 -0
  178. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js.map +1 -0
  179. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts +2 -0
  180. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +82 -0
  181. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js.map +1 -0
  182. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +2 -0
  183. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +54 -0
  184. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js.map +1 -0
  185. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts +6 -0
  186. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +15 -0
  187. package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js.map +1 -0
  188. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.d.ts +6 -0
  189. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js +8 -0
  190. package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js.map +1 -0
  191. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +2 -0
  192. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +17 -0
  193. package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js.map +1 -0
  194. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts +2 -0
  195. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +91 -0
  196. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js.map +1 -0
  197. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +3 -0
  198. package/dist/better-auth/plugin/lib/build-collections/users/index.js +341 -0
  199. package/dist/better-auth/plugin/lib/build-collections/users/index.js.map +1 -0
  200. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +15 -0
  201. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +24 -0
  202. package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js.map +1 -0
  203. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.d.ts +10 -0
  204. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js +67 -0
  205. package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js.map +1 -0
  206. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.d.ts +9 -0
  207. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js +94 -0
  208. package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js.map +1 -0
  209. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +7 -0
  210. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +35 -0
  211. package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js.map +1 -0
  212. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.d.ts +12 -0
  213. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js +25 -0
  214. package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js.map +1 -0
  215. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts +14 -0
  216. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +67 -0
  217. package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js.map +1 -0
  218. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +20 -0
  219. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +98 -0
  220. package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js.map +1 -0
  221. package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +3 -0
  222. package/dist/better-auth/plugin/lib/build-collections/verifications.js +87 -0
  223. package/dist/better-auth/plugin/lib/build-collections/verifications.js.map +1 -0
  224. package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +5 -0
  225. package/dist/better-auth/plugin/lib/get-payload-auth.js +9 -0
  226. package/dist/better-auth/plugin/lib/get-payload-auth.js.map +1 -0
  227. package/dist/better-auth/plugin/lib/init-better-auth.d.ts +7 -0
  228. package/dist/better-auth/plugin/lib/init-better-auth.js +46 -0
  229. package/dist/better-auth/plugin/lib/init-better-auth.js.map +1 -0
  230. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +2 -0
  231. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +9 -0
  232. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js.map +1 -0
  233. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -0
  234. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +10 -0
  235. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js.map +1 -0
  236. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.d.ts +2 -0
  237. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js +8 -0
  238. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js.map +1 -0
  239. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +10 -0
  240. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +156 -0
  241. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js.map +1 -0
  242. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -0
  243. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +18 -0
  244. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js.map +1 -0
  245. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -0
  246. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +34 -0
  247. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js.map +1 -0
  248. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -0
  249. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +11 -0
  250. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js.map +1 -0
  251. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -0
  252. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +10 -0
  253. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js.map +1 -0
  254. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +2 -0
  255. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +11 -0
  256. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js.map +1 -0
  257. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts +7 -0
  258. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +23 -0
  259. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js.map +1 -0
  260. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts +25 -0
  261. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +62 -0
  262. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js.map +1 -0
  263. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.d.ts +9 -0
  264. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js +47 -0
  265. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js.map +1 -0
  266. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +15 -0
  267. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +42 -0
  268. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js.map +1 -0
  269. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts +9 -0
  270. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js +63 -0
  271. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js.map +1 -0
  272. package/dist/better-auth/plugin/lib/set-login-methods.d.ts +4 -0
  273. package/dist/better-auth/plugin/lib/set-login-methods.js +14 -0
  274. package/dist/better-auth/plugin/lib/set-login-methods.js.map +1 -0
  275. package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +9 -0
  276. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +143 -0
  277. package/dist/better-auth/plugin/payload/components/admin-buttons/index.js.map +1 -0
  278. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +10 -0
  279. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +219 -0
  280. package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js.map +1 -0
  281. package/dist/better-auth/plugin/payload/components/logout-button.d.ts +4 -0
  282. package/dist/better-auth/plugin/payload/components/logout-button.js +24 -0
  283. package/dist/better-auth/plugin/payload/components/logout-button.js.map +1 -0
  284. package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +8 -0
  285. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +117 -0
  286. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js.map +1 -0
  287. package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +3 -0
  288. package/dist/better-auth/plugin/payload/components/passkeys/client.js +66 -0
  289. package/dist/better-auth/plugin/payload/components/passkeys/client.js.map +1 -0
  290. package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +4 -0
  291. package/dist/better-auth/plugin/payload/components/passkeys/index.js +52 -0
  292. package/dist/better-auth/plugin/payload/components/passkeys/index.js.map +1 -0
  293. package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +8 -0
  294. package/dist/better-auth/plugin/payload/components/passkeys/list.js +57 -0
  295. package/dist/better-auth/plugin/payload/components/passkeys/list.js.map +1 -0
  296. package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +22 -0
  297. package/dist/better-auth/plugin/payload/components/passkeys/types.js +3 -0
  298. package/dist/better-auth/plugin/payload/components/passkeys/types.js.map +1 -0
  299. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +6 -0
  300. package/dist/better-auth/plugin/payload/components/rsc-redirect.js +7 -0
  301. package/dist/better-auth/plugin/payload/components/rsc-redirect.js.map +1 -0
  302. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +15 -0
  303. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +157 -0
  304. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js.map +1 -0
  305. package/dist/better-auth/plugin/payload/components/token-field.d.ts +4 -0
  306. package/dist/better-auth/plugin/payload/components/token-field.js +31 -0
  307. package/dist/better-auth/plugin/payload/components/token-field.js.map +1 -0
  308. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts +8 -0
  309. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js +300 -0
  310. package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js.map +1 -0
  311. package/dist/better-auth/plugin/payload/exports/client.d.ts +6 -0
  312. package/dist/better-auth/plugin/payload/exports/client.js +8 -0
  313. package/dist/better-auth/plugin/payload/exports/client.js.map +1 -0
  314. package/dist/better-auth/plugin/payload/exports/rsc.d.ts +8 -0
  315. package/dist/better-auth/plugin/payload/exports/rsc.js +10 -0
  316. package/dist/better-auth/plugin/payload/exports/rsc.js.map +1 -0
  317. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +2 -0
  318. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +9 -0
  319. package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js.map +1 -0
  320. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +1 -0
  321. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +22 -0
  322. package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js.map +1 -0
  323. package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +19 -0
  324. package/dist/better-auth/plugin/payload/views/admin-login/client.js +226 -0
  325. package/dist/better-auth/plugin/payload/views/admin-login/client.js.map +1 -0
  326. package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts +10 -0
  327. package/dist/better-auth/plugin/payload/views/admin-login/index.js +150 -0
  328. package/dist/better-auth/plugin/payload/views/admin-login/index.js.map +1 -0
  329. package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +16 -0
  330. package/dist/better-auth/plugin/payload/views/admin-signup/client.js +299 -0
  331. package/dist/better-auth/plugin/payload/views/admin-signup/client.js.map +1 -0
  332. package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts +9 -0
  333. package/dist/better-auth/plugin/payload/views/admin-signup/index.js +104 -0
  334. package/dist/better-auth/plugin/payload/views/admin-signup/index.js.map +1 -0
  335. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +7 -0
  336. package/dist/better-auth/plugin/payload/views/forgot-password/client.js +119 -0
  337. package/dist/better-auth/plugin/payload/views/forgot-password/client.js.map +1 -0
  338. package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +8 -0
  339. package/dist/better-auth/plugin/payload/views/forgot-password/index.js +78 -0
  340. package/dist/better-auth/plugin/payload/views/forgot-password/index.js.map +1 -0
  341. package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +10 -0
  342. package/dist/better-auth/plugin/payload/views/reset-password/client.js +144 -0
  343. package/dist/better-auth/plugin/payload/views/reset-password/client.js.map +1 -0
  344. package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +8 -0
  345. package/dist/better-auth/plugin/payload/views/reset-password/index.js +96 -0
  346. package/dist/better-auth/plugin/payload/views/reset-password/index.js.map +1 -0
  347. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts +6 -0
  348. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js +96 -0
  349. package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js.map +1 -0
  350. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts +9 -0
  351. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js +56 -0
  352. package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js.map +1 -0
  353. package/dist/better-auth/plugin/types.d.ts +429 -0
  354. package/dist/better-auth/plugin/types.js +3 -0
  355. package/dist/better-auth/plugin/types.js.map +1 -0
  356. package/dist/better-auth/plugin/utils/set.d.ts +39 -0
  357. package/dist/better-auth/plugin/utils/set.js +103 -0
  358. package/dist/better-auth/plugin/utils/set.js.map +1 -0
  359. package/dist/better-auth/scripts/generate-types.d.ts +1 -0
  360. package/dist/better-auth/scripts/generate-types.js +234 -0
  361. package/dist/better-auth/scripts/generate-types.js.map +1 -0
  362. package/dist/better-auth/types.d.ts +2 -0
  363. package/dist/better-auth/types.js +4 -0
  364. package/dist/better-auth/types.js.map +1 -0
  365. package/dist/index.d.ts +1 -0
  366. package/dist/index.js +4 -0
  367. package/dist/index.js.map +1 -0
  368. package/dist/shared/components/icons.d.ts +7 -0
  369. package/dist/shared/components/icons.js +442 -0
  370. package/dist/shared/components/icons.js.map +1 -0
  371. package/dist/shared/components/logo.d.ts +3 -0
  372. package/dist/shared/components/logo.js +24 -0
  373. package/dist/shared/components/logo.js.map +1 -0
  374. package/dist/shared/form/components/submit.d.ts +7 -0
  375. package/dist/shared/form/components/submit.js +16 -0
  376. package/dist/shared/form/components/submit.js.map +1 -0
  377. package/dist/shared/form/fields/text-field.d.ts +8 -0
  378. package/dist/shared/form/fields/text-field.js +37 -0
  379. package/dist/shared/form/fields/text-field.js.map +1 -0
  380. package/dist/shared/form/index.d.ts +4 -0
  381. package/dist/shared/form/index.js +8 -0
  382. package/dist/shared/form/index.js.map +1 -0
  383. package/dist/shared/form/ui/header/index.d.ts +8 -0
  384. package/dist/shared/form/ui/header/index.js +24 -0
  385. package/dist/shared/form/ui/header/index.js.map +1 -0
  386. package/dist/shared/form/ui/index.d.ts +31 -0
  387. package/dist/shared/form/ui/index.js +57 -0
  388. package/dist/shared/form/ui/index.js.map +1 -0
  389. package/dist/shared/form/validation.d.ts +51 -0
  390. package/dist/shared/form/validation.js +127 -0
  391. package/dist/shared/form/validation.js.map +1 -0
  392. package/dist/shared/index.d.ts +2 -0
  393. package/dist/shared/index.js +4 -0
  394. package/dist/shared/index.js.map +1 -0
  395. package/dist/shared/payload/fields/field-copy-button/index.d.ts +3 -0
  396. package/dist/shared/payload/fields/field-copy-button/index.js +38 -0
  397. package/dist/shared/payload/fields/field-copy-button/index.js.map +1 -0
  398. package/dist/shared/payload/fields/generate-uuid-button/index.d.ts +3 -0
  399. package/dist/shared/payload/fields/generate-uuid-button/index.js +26 -0
  400. package/dist/shared/payload/fields/generate-uuid-button/index.js.map +1 -0
  401. package/dist/shared/payload/fields/index.d.ts +2 -0
  402. package/dist/shared/payload/fields/index.js +4 -0
  403. package/dist/shared/payload/fields/index.js.map +1 -0
  404. package/dist/shared/utils/regex.d.ts +2 -0
  405. package/dist/shared/utils/regex.js +4 -0
  406. package/dist/shared/utils/regex.js.map +1 -0
  407. package/dist/shared/utils/try-catch.d.ts +11 -0
  408. package/dist/shared/utils/try-catch.js +17 -0
  409. package/dist/shared/utils/try-catch.js.map +1 -0
  410. package/dist/shared/utils/value-or-default.d.ts +9 -0
  411. package/dist/shared/utils/value-or-default.js +12 -0
  412. package/dist/shared/utils/value-or-default.js.map +1 -0
  413. package/package.json +122 -0
@@ -0,0 +1,575 @@
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
@@ -0,0 +1 @@
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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"}