@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.
- package/LICENSE +22 -202
- package/README.md +101 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -4
- package/dist/react/index.d.ts +15 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +10 -0
- package/dist/react/useSession.d.ts +32 -0
- package/dist/react/useSession.d.ts.map +1 -0
- package/dist/react/useSession.js +98 -0
- package/dist/react/useSignIn.d.ts +41 -0
- package/dist/react/useSignIn.d.ts.map +1 -0
- package/dist/react/useSignIn.js +99 -0
- package/dist/react/useSignOut.d.ts +30 -0
- package/dist/react/useSignOut.d.ts.map +1 -0
- package/dist/react/useSignOut.js +57 -0
- package/dist/react/useSignUp.d.ts +43 -0
- package/dist/react/useSignUp.d.ts.map +1 -0
- package/dist/react/useSignUp.js +90 -0
- package/dist/server/auth.d.ts +46 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +314 -0
- package/dist/server/brute-force.d.ts +44 -0
- package/dist/server/brute-force.d.ts.map +1 -0
- package/dist/server/brute-force.js +149 -0
- package/dist/server/errors.d.ts +28 -0
- package/dist/server/errors.d.ts.map +1 -0
- package/dist/server/errors.js +51 -0
- package/dist/server/index.d.ts +17 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +14 -0
- package/dist/server/oauth.d.ts +49 -0
- package/dist/server/oauth.d.ts.map +1 -0
- package/dist/server/oauth.js +223 -0
- package/dist/server/password-reset.d.ts +55 -0
- package/dist/server/password-reset.d.ts.map +1 -0
- package/dist/server/password-reset.js +232 -0
- package/dist/server/password-validation.d.ts +25 -0
- package/dist/server/password-validation.d.ts.map +1 -0
- package/dist/server/password-validation.js +47 -0
- package/dist/server/providers/github.d.ts +14 -0
- package/dist/server/providers/github.d.ts.map +1 -0
- package/dist/server/providers/github.js +73 -0
- package/dist/server/providers/google.d.ts +11 -0
- package/dist/server/providers/google.d.ts.map +1 -0
- package/dist/server/providers/google.js +53 -0
- package/dist/server/providers/vercel.d.ts +11 -0
- package/dist/server/providers/vercel.d.ts.map +1 -0
- package/dist/server/providers/vercel.js +47 -0
- package/dist/server/rate-limit.d.ts +45 -0
- package/dist/server/rate-limit.d.ts.map +1 -0
- package/dist/server/rate-limit.js +130 -0
- package/dist/server/session.d.ts +47 -0
- package/dist/server/session.d.ts.map +1 -0
- package/dist/server/session.js +248 -0
- package/dist/server/storage/database.d.ts +26 -0
- package/dist/server/storage/database.d.ts.map +1 -0
- package/dist/server/storage/database.js +102 -0
- package/dist/server/storage/in-memory.d.ts +28 -0
- package/dist/server/storage/in-memory.d.ts.map +1 -0
- package/dist/server/storage/in-memory.js +80 -0
- package/dist/server/storage/index.d.ts +26 -0
- package/dist/server/storage/index.d.ts.map +1 -0
- package/dist/server/storage/index.js +80 -0
- package/dist/server/storage/interface.d.ts +46 -0
- package/dist/server/storage/interface.d.ts.map +1 -0
- package/dist/server/storage/interface.js +6 -0
- package/dist/types.d.ts +66 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/utils/database.d.ts +53 -0
- package/dist/utils/database.d.ts.map +1 -0
- package/dist/utils/database.js +144 -0
- package/dist/utils/token.d.ts +30 -0
- package/dist/utils/token.d.ts.map +1 -0
- package/dist/utils/token.js +39 -0
- package/package.json +50 -106
- package/dist/better-auth/adapter/__tests__/transform.test.js +0 -213
- package/dist/better-auth/adapter/__tests__/transform.test.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/biome.d.js +0 -2
- package/dist/better-auth/adapter/generate-schema/biome.d.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.d.ts +0 -5
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js +0 -482
- package/dist/better-auth/adapter/generate-schema/generate-schema-builder.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.d.ts +0 -1
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js +0 -42
- package/dist/better-auth/adapter/generate-schema/get-payload-schema.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/index.d.ts +0 -4
- package/dist/better-auth/adapter/generate-schema/index.js +0 -19
- package/dist/better-auth/adapter/generate-schema/index.js.map +0 -1
- package/dist/better-auth/adapter/generate-schema/utils.d.ts +0 -2
- package/dist/better-auth/adapter/generate-schema/utils.js +0 -20
- package/dist/better-auth/adapter/generate-schema/utils.js.map +0 -1
- package/dist/better-auth/adapter/index.d.ts +0 -15
- package/dist/better-auth/adapter/index.js +0 -731
- package/dist/better-auth/adapter/index.js.map +0 -1
- package/dist/better-auth/adapter/tests/adapter.test.js +0 -174
- package/dist/better-auth/adapter/tests/adapter.test.js.map +0 -1
- package/dist/better-auth/adapter/tests/base-collections-tests.js +0 -575
- package/dist/better-auth/adapter/tests/base-collections-tests.js.map +0 -1
- package/dist/better-auth/adapter/tests/dev/index.js +0 -117
- package/dist/better-auth/adapter/tests/dev/index.js.map +0 -1
- package/dist/better-auth/adapter/tests/dev/migrate.js +0 -26
- package/dist/better-auth/adapter/tests/dev/migrate.js.map +0 -1
- package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js +0 -218
- package/dist/better-auth/adapter/tests/dev/migrations/20250423_232936_init.js.map +0 -1
- package/dist/better-auth/adapter/tests/dev/schema.js +0 -160
- package/dist/better-auth/adapter/tests/dev/schema.js.map +0 -1
- package/dist/better-auth/adapter/tests/plugins-tests.js +0 -2
- package/dist/better-auth/adapter/tests/plugins-tests.js.map +0 -1
- package/dist/better-auth/adapter/transform/index.d.ts +0 -27
- package/dist/better-auth/adapter/transform/index.js +0 -664
- package/dist/better-auth/adapter/transform/index.js.map +0 -1
- package/dist/better-auth/adapter/types.d.ts +0 -10
- package/dist/better-auth/adapter/types.js +0 -3
- package/dist/better-auth/adapter/types.js.map +0 -1
- package/dist/better-auth/generated-types.d.ts +0 -285
- package/dist/better-auth/index.d.ts +0 -3
- package/dist/better-auth/index.js +0 -5
- package/dist/better-auth/index.js.map +0 -1
- package/dist/better-auth/plugin/__tests__/plugin.test.js +0 -162
- package/dist/better-auth/plugin/__tests__/plugin.test.js.map +0 -1
- package/dist/better-auth/plugin/constants.d.ts +0 -220
- package/dist/better-auth/plugin/constants.js +0 -249
- package/dist/better-auth/plugin/constants.js.map +0 -1
- package/dist/better-auth/plugin/helpers/check-plugin-exists.d.ts +0 -12
- package/dist/better-auth/plugin/helpers/check-plugin-exists.js +0 -14
- package/dist/better-auth/plugin/helpers/check-plugin-exists.js.map +0 -1
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.d.ts +0 -29
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js +0 -46
- package/dist/better-auth/plugin/helpers/generate-verify-email-url.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-admin-access.d.ts +0 -7
- package/dist/better-auth/plugin/helpers/get-admin-access.js +0 -22
- package/dist/better-auth/plugin/helpers/get-admin-access.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-all-roles.d.ts +0 -5
- package/dist/better-auth/plugin/helpers/get-all-roles.js +0 -20
- package/dist/better-auth/plugin/helpers/get-all-roles.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +0 -18
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +0 -70
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-collection-slug.d.ts +0 -5
- package/dist/better-auth/plugin/helpers/get-collection-slug.js +0 -20
- package/dist/better-auth/plugin/helpers/get-collection-slug.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-collection.d.ts +0 -15
- package/dist/better-auth/plugin/helpers/get-collection.js +0 -29
- package/dist/better-auth/plugin/helpers/get-collection.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-ip.d.ts +0 -2
- package/dist/better-auth/plugin/helpers/get-ip.js +0 -31
- package/dist/better-auth/plugin/helpers/get-ip.js.map +0 -1
- package/dist/better-auth/plugin/helpers/get-signed-cookie.d.ts +0 -2
- package/dist/better-auth/plugin/helpers/get-signed-cookie.js +0 -65
- package/dist/better-auth/plugin/helpers/get-signed-cookie.js.map +0 -1
- package/dist/better-auth/plugin/helpers/index.d.ts +0 -1
- package/dist/better-auth/plugin/helpers/index.js +0 -3
- package/dist/better-auth/plugin/helpers/index.js.map +0 -1
- package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts +0 -59
- package/dist/better-auth/plugin/helpers/prepare-session-data.js +0 -49
- package/dist/better-auth/plugin/helpers/prepare-session-data.js.map +0 -1
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +0 -20
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +0 -67
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js.map +0 -1
- package/dist/better-auth/plugin/index.d.ts +0 -11
- package/dist/better-auth/plugin/index.js +0 -125
- package/dist/better-auth/plugin/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +0 -12
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +0 -87
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +0 -60
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +0 -154
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.d.ts +0 -5
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js +0 -11
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-after-read.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.d.ts +0 -2
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js +0 -8
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/hooks/get-url-before-change.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.d.ts +0 -6
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js +0 -119
- package/dist/better-auth/plugin/lib/build-collections/admin-invitations/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js +0 -177
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/device-code.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/device-code.js +0 -50
- package/dist/better-auth/plugin/lib/build-collections/device-code.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts +0 -10
- package/dist/better-auth/plugin/lib/build-collections/index.js +0 -73
- package/dist/better-auth/plugin/lib/build-collections/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/invitations.js +0 -94
- package/dist/better-auth/plugin/lib/build-collections/invitations.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/jwks.js +0 -59
- package/dist/better-auth/plugin/lib/build-collections/jwks.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/members.js +0 -73
- package/dist/better-auth/plugin/lib/build-collections/members.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +0 -107
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +0 -118
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +0 -89
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/organizations.js +0 -70
- package/dist/better-auth/plugin/lib/build-collections/organizations.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js +0 -115
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/sessions.js +0 -170
- package/dist/better-auth/plugin/lib/build-collections/sessions.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +0 -81
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +0 -111
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/team-members.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/team-members.js +0 -57
- package/dist/better-auth/plugin/lib/build-collections/team-members.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/teams.js +0 -76
- package/dist/better-auth/plugin/lib/build-collections/teams.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js +0 -67
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.d.ts +0 -7
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js +0 -53
- package/dist/better-auth/plugin/lib/build-collections/users/better-auth-strategy.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.d.ts +0 -11
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js +0 -75
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/generate-invite-url.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.d.ts +0 -4
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js +0 -6
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.d.ts +0 -2
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js +0 -115
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/refresh-token.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js +0 -64
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/send-invite-url.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js +0 -80
- package/dist/better-auth/plugin/lib/build-collections/users/endpoints/set-admin-role.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts +0 -6
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +0 -79
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts +0 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +0 -82
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts +0 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +0 -54
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.d.ts +0 -6
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js +0 -15
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-login.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.d.ts +0 -6
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js +0 -8
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.d.ts +0 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js +0 -17
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/on-verified-change.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts +0 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +0 -91
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +0 -341
- package/dist/better-auth/plugin/lib/build-collections/users/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +0 -15
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +0 -24
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.d.ts +0 -10
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js +0 -67
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-duplicate-fields.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.d.ts +0 -9
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js +0 -94
- package/dist/better-auth/plugin/lib/build-collections/utils/filter-properties.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.d.ts +0 -7
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js +0 -35
- package/dist/better-auth/plugin/lib/build-collections/utils/get-timestamp-fields.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.d.ts +0 -12
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js +0 -25
- package/dist/better-auth/plugin/lib/build-collections/utils/model-field-transformations.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.d.ts +0 -14
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js +0 -67
- package/dist/better-auth/plugin/lib/build-collections/utils/payload-access.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +0 -20
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +0 -98
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js.map +0 -1
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +0 -3
- package/dist/better-auth/plugin/lib/build-collections/verifications.js +0 -87
- package/dist/better-auth/plugin/lib/build-collections/verifications.js.map +0 -1
- package/dist/better-auth/plugin/lib/get-payload-auth.d.ts +0 -5
- package/dist/better-auth/plugin/lib/get-payload-auth.js +0 -9
- package/dist/better-auth/plugin/lib/get-payload-auth.js.map +0 -1
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts +0 -7
- package/dist/better-auth/plugin/lib/init-better-auth.js +0 -46
- package/dist/better-auth/plugin/lib/init-better-auth.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js +0 -9
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/admin-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +0 -10
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js +0 -8
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/device-authorization-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +0 -10
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +0 -156
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +0 -18
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +0 -34
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +0 -11
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +0 -10
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +0 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +0 -11
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.d.ts +0 -7
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js +0 -23
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/ensure-password-set-before-create.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.d.ts +0 -25
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js +0 -62
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/password.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.d.ts +0 -9
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js +0 -47
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/require-admin-invite-for-sign-up-middleware.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +0 -15
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +0 -42
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.d.ts +0 -9
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js +0 -63
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/use-admin-invite-after-email-sign-up-middleware.js.map +0 -1
- package/dist/better-auth/plugin/lib/set-login-methods.d.ts +0 -4
- package/dist/better-auth/plugin/lib/set-login-methods.js +0 -14
- package/dist/better-auth/plugin/lib/set-login-methods.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.d.ts +0 -9
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.js +0 -143
- package/dist/better-auth/plugin/payload/components/admin-buttons/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.d.ts +0 -10
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js +0 -219
- package/dist/better-auth/plugin/payload/components/admin-invite-button/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/logout-button.d.ts +0 -4
- package/dist/better-auth/plugin/payload/components/logout-button.js +0 -24
- package/dist/better-auth/plugin/payload/components/logout-button.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.d.ts +0 -8
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +0 -117
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/passkeys/client.d.ts +0 -3
- package/dist/better-auth/plugin/payload/components/passkeys/client.js +0 -66
- package/dist/better-auth/plugin/payload/components/passkeys/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/passkeys/index.d.ts +0 -4
- package/dist/better-auth/plugin/payload/components/passkeys/index.js +0 -52
- package/dist/better-auth/plugin/payload/components/passkeys/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/passkeys/list.d.ts +0 -8
- package/dist/better-auth/plugin/payload/components/passkeys/list.js +0 -57
- package/dist/better-auth/plugin/payload/components/passkeys/list.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +0 -22
- package/dist/better-auth/plugin/payload/components/passkeys/types.js +0 -3
- package/dist/better-auth/plugin/payload/components/passkeys/types.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +0 -6
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js +0 -7
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +0 -15
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +0 -157
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/token-field.d.ts +0 -4
- package/dist/better-auth/plugin/payload/components/token-field.js +0 -31
- package/dist/better-auth/plugin/payload/components/token-field.js.map +0 -1
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.d.ts +0 -8
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js +0 -300
- package/dist/better-auth/plugin/payload/components/two-factor-auth/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/exports/client.d.ts +0 -6
- package/dist/better-auth/plugin/payload/exports/client.js +0 -8
- package/dist/better-auth/plugin/payload/exports/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/exports/rsc.d.ts +0 -8
- package/dist/better-auth/plugin/payload/exports/rsc.js +0 -10
- package/dist/better-auth/plugin/payload/exports/rsc.js.map +0 -1
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.d.ts +0 -2
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js +0 -9
- package/dist/better-auth/plugin/payload/utils/generate-admin-invite-url.js.map +0 -1
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.d.ts +0 -1
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js +0 -22
- package/dist/better-auth/plugin/payload/utils/get-safe-redirect.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +0 -19
- package/dist/better-auth/plugin/payload/views/admin-login/client.js +0 -226
- package/dist/better-auth/plugin/payload/views/admin-login/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts +0 -10
- package/dist/better-auth/plugin/payload/views/admin-login/index.js +0 -150
- package/dist/better-auth/plugin/payload/views/admin-login/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +0 -16
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js +0 -299
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts +0 -9
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js +0 -104
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts +0 -7
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js +0 -119
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/forgot-password/index.d.ts +0 -8
- package/dist/better-auth/plugin/payload/views/forgot-password/index.js +0 -78
- package/dist/better-auth/plugin/payload/views/forgot-password/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/reset-password/client.d.ts +0 -10
- package/dist/better-auth/plugin/payload/views/reset-password/client.js +0 -144
- package/dist/better-auth/plugin/payload/views/reset-password/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/reset-password/index.d.ts +0 -8
- package/dist/better-auth/plugin/payload/views/reset-password/index.js +0 -96
- package/dist/better-auth/plugin/payload/views/reset-password/index.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.d.ts +0 -6
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js +0 -96
- package/dist/better-auth/plugin/payload/views/two-factor-verify/client.js.map +0 -1
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.d.ts +0 -9
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js +0 -56
- package/dist/better-auth/plugin/payload/views/two-factor-verify/index.js.map +0 -1
- package/dist/better-auth/plugin/types.d.ts +0 -429
- package/dist/better-auth/plugin/types.js +0 -3
- package/dist/better-auth/plugin/types.js.map +0 -1
- package/dist/better-auth/plugin/utils/set.d.ts +0 -39
- package/dist/better-auth/plugin/utils/set.js +0 -103
- package/dist/better-auth/plugin/utils/set.js.map +0 -1
- package/dist/better-auth/scripts/generate-types.d.ts +0 -1
- package/dist/better-auth/scripts/generate-types.js +0 -234
- package/dist/better-auth/scripts/generate-types.js.map +0 -1
- package/dist/better-auth/types.d.ts +0 -2
- package/dist/better-auth/types.js +0 -4
- package/dist/better-auth/types.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/shared/components/icons.d.ts +0 -7
- package/dist/shared/components/icons.js +0 -442
- package/dist/shared/components/icons.js.map +0 -1
- package/dist/shared/components/logo.d.ts +0 -3
- package/dist/shared/components/logo.js +0 -24
- package/dist/shared/components/logo.js.map +0 -1
- package/dist/shared/form/components/submit.d.ts +0 -7
- package/dist/shared/form/components/submit.js +0 -16
- package/dist/shared/form/components/submit.js.map +0 -1
- package/dist/shared/form/fields/text-field.d.ts +0 -8
- package/dist/shared/form/fields/text-field.js +0 -37
- package/dist/shared/form/fields/text-field.js.map +0 -1
- package/dist/shared/form/index.d.ts +0 -4
- package/dist/shared/form/index.js +0 -8
- package/dist/shared/form/index.js.map +0 -1
- package/dist/shared/form/ui/header/index.d.ts +0 -8
- package/dist/shared/form/ui/header/index.js +0 -24
- package/dist/shared/form/ui/header/index.js.map +0 -1
- package/dist/shared/form/ui/index.d.ts +0 -31
- package/dist/shared/form/ui/index.js +0 -57
- package/dist/shared/form/ui/index.js.map +0 -1
- package/dist/shared/form/validation.d.ts +0 -51
- package/dist/shared/form/validation.js +0 -127
- package/dist/shared/form/validation.js.map +0 -1
- package/dist/shared/index.d.ts +0 -2
- package/dist/shared/index.js +0 -4
- package/dist/shared/index.js.map +0 -1
- package/dist/shared/payload/fields/field-copy-button/index.d.ts +0 -3
- package/dist/shared/payload/fields/field-copy-button/index.js +0 -38
- package/dist/shared/payload/fields/field-copy-button/index.js.map +0 -1
- package/dist/shared/payload/fields/generate-uuid-button/index.d.ts +0 -3
- package/dist/shared/payload/fields/generate-uuid-button/index.js +0 -26
- package/dist/shared/payload/fields/generate-uuid-button/index.js.map +0 -1
- package/dist/shared/payload/fields/index.d.ts +0 -2
- package/dist/shared/payload/fields/index.js +0 -4
- package/dist/shared/payload/fields/index.js.map +0 -1
- package/dist/shared/utils/regex.d.ts +0 -2
- package/dist/shared/utils/regex.js +0 -4
- package/dist/shared/utils/regex.js.map +0 -1
- package/dist/shared/utils/try-catch.d.ts +0 -11
- package/dist/shared/utils/try-catch.js +0 -17
- package/dist/shared/utils/try-catch.js.map +0 -1
- package/dist/shared/utils/value-or-default.d.ts +0 -9
- package/dist/shared/utils/value-or-default.js +0 -12
- 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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"}
|