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