@better-auth/drizzle-adapter 1.7.3 → 1.7.4

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/dist/index.mjs CHANGED
@@ -1,38 +1,9 @@
1
- import { a as insensitiveNe, c as getOneToOneRelationKey, i as insensitiveInArray, n as insensitiveEq, o as insensitiveNotInArray, r as insensitiveIlike, s as buildRelationKeysByModel } from "./query-builders-CBLMSM7v.mjs";
1
+ import { a as insensitiveInArray, c as buildRelationKeysByModel, i as insensitiveIlike, l as getOneToOneRelationKey, o as insensitiveNe, r as insensitiveEq, s as insensitiveNotInArray, t as findDrizzleSchemaProblems } from "./schema-check-_Aj1MGau.mjs";
2
2
  import { createAdapterFactory } from "@better-auth/core/db/adapter";
3
- import { checksSchema, createSchemaCheck, diffSchema, getExpectedSchema, registerSchemaCheck } from "@better-auth/core/db/internal";
3
+ import { checksSchema, createSchemaCheck, registerSchemaCheck } from "@better-auth/core/db/internal";
4
4
  import { logger } from "@better-auth/core/env";
5
5
  import { BetterAuthError } from "@better-auth/core/error";
6
- import { Column, Table, and, asc, count, desc, eq, getTableColumns, gt, gte, inArray, is, isNotNull, isNull, like, lt, lte, ne, notInArray, or, sql } from "drizzle-orm";
7
- //#region src/schema-check.ts
8
- /**
9
- * Reads a Drizzle schema object the way the adapter addresses it: each table
10
- * by the key it is exported under, each column by its property name. Values
11
- * that are not tables, such as relations, are skipped.
12
- */
13
- function introspectDrizzleSchema(schema) {
14
- const tables = [];
15
- for (const [name, table] of Object.entries(schema)) {
16
- if (!is(table, Table)) continue;
17
- const columns = Object.entries(getTableColumns(table)).map(([key, column]) => ({
18
- name: key,
19
- nullable: !column.notNull,
20
- hasDefault: column.hasDefault || column.generated !== void 0 || column.generatedIdentity !== void 0
21
- }));
22
- tables.push({
23
- name,
24
- columns
25
- });
26
- }
27
- return tables;
28
- }
29
- /**
30
- * Compares a Drizzle schema object with the tables this configuration writes.
31
- */
32
- function findDrizzleSchemaProblems(schema, options, usePlural) {
33
- return diffSchema(getExpectedSchema(options, { usePlural }), introspectDrizzleSchema(schema));
34
- }
35
- //#endregion
6
+ import { Column, and, asc, count, desc, eq, gt, gte, inArray, is, isNotNull, isNull, like, lt, lte, ne, notInArray, or, sql } from "drizzle-orm";
36
7
  //#region src/drizzle-adapter.ts
37
8
  /**
38
9
  * Derive the number of affected rows from a Drizzle write result.
@@ -1,5 +1,6 @@
1
- import { a as insensitiveNe, c as getOneToOneRelationKey, i as insensitiveInArray, n as insensitiveEq, o as insensitiveNotInArray, s as buildRelationKeysByModel, t as escapedLike } from "../query-builders-CBLMSM7v.mjs";
1
+ import { a as insensitiveInArray, c as buildRelationKeysByModel, l as getOneToOneRelationKey, n as escapedLike, o as insensitiveNe, r as insensitiveEq, s as insensitiveNotInArray, t as findDrizzleSchemaProblems } from "../schema-check-_Aj1MGau.mjs";
2
2
  import { createAdapterFactory } from "@better-auth/core/db/adapter";
3
+ import { checksSchema, createSchemaCheck, registerSchemaCheck } from "@better-auth/core/db/internal";
3
4
  import { logger } from "@better-auth/core/env";
4
5
  import { BetterAuthError } from "@better-auth/core/error";
5
6
  import { and, asc, count, desc, eq, gt, gte, inArray, isNotNull, isNull, lt, lte, ne, notInArray, or, sql } from "drizzle-orm";
@@ -273,7 +274,7 @@ const drizzleAdapter = (db, config) => {
273
274
  }
274
275
  function checkMissingFields(schema, model, values) {
275
276
  if (!schema) throw new BetterAuthError("Drizzle adapter failed to initialize. Drizzle Schema not found. Please provide a schema object in the adapter options object.");
276
- for (const key in values) if (!schema[key]) throw new BetterAuthError(`The field "${key}" does not exist in the "${model}" Drizzle schema. Please update your drizzle schema or re-generate using "npx @better-auth/cli@latest generate".`);
277
+ for (const key in values) if (!schema[key]) throw new BetterAuthError(`The field "${key}" does not exist in the "${model}" Drizzle schema. Please update your drizzle schema or re-generate using "npx auth@latest generate".`);
277
278
  }
278
279
  return {
279
280
  async create({ model, data: values }) {
@@ -287,7 +288,7 @@ const drizzleAdapter = (db, config) => {
287
288
  if (join) {
288
289
  const queryModel = getQueryModel(model);
289
290
  if (!db.query || !queryModel) {
290
- logger.error(`[# Drizzle Adapter]: The model "${model}" was not found in the query object. Please update your Drizzle schema to include relations or re-generate using "npx @better-auth/cli@latest generate".`);
291
+ logger.error(`[# Drizzle Adapter]: The model "${model}" was not found in the query object. Please update your Drizzle schema to include relations or re-generate using "npx auth@latest generate".`);
291
292
  logger.info("Falling back to regular query");
292
293
  } else {
293
294
  let includes;
@@ -344,7 +345,7 @@ const drizzleAdapter = (db, config) => {
344
345
  if (join) {
345
346
  const queryModel = getQueryModel(model);
346
347
  if (!db.query || !queryModel) {
347
- logger.error(`[# Drizzle Adapter]: The model "${model}" was not found in the query object. Please update your Drizzle schema to include relations or re-generate using "npx @better-auth/cli@latest generate".`);
348
+ logger.error(`[# Drizzle Adapter]: The model "${model}" was not found in the query object. Please update your Drizzle schema to include relations or re-generate using "npx auth@latest generate".`);
348
349
  logger.info("Falling back to regular query");
349
350
  } else {
350
351
  let includes;
@@ -544,7 +545,16 @@ const drizzleAdapter = (db, config) => {
544
545
  const adapter = createAdapterFactory(adapterOptions);
545
546
  return (options) => {
546
547
  lazyOptions = options;
547
- return adapter(options);
548
+ const instance = adapter(options);
549
+ if (checksSchema(options)) registerSchemaCheck(instance, createSchemaCheck(async () => {
550
+ const relations = db._?.relations ?? {};
551
+ return findDrizzleSchemaProblems({
552
+ ...db._?.fullSchema,
553
+ ...Object.fromEntries(Object.entries(relations).map(([name, relation]) => [name, relation.table])),
554
+ ...config.schema
555
+ }, options, config.usePlural);
556
+ }, "drizzle"));
557
+ return instance;
548
558
  };
549
559
  };
550
560
  //#endregion
@@ -1,4 +1,5 @@
1
- import { ilike, sql } from "drizzle-orm";
1
+ import { diffSchema, getExpectedSchema } from "@better-auth/core/db/internal";
2
+ import { Table, getTableColumns, ilike, is, sql } from "drizzle-orm";
2
3
  //#region src/join-relation-key.ts
3
4
  /**
4
5
  * Reads the relation registry used to build Drizzle relational queries.
@@ -75,4 +76,33 @@ function insensitiveNe(column, value) {
75
76
  return sql`LOWER(${column}) <> LOWER(${value})`;
76
77
  }
77
78
  //#endregion
78
- export { insensitiveNe as a, getOneToOneRelationKey as c, insensitiveInArray as i, insensitiveEq as n, insensitiveNotInArray as o, insensitiveIlike as r, buildRelationKeysByModel as s, escapedLike as t };
79
+ //#region src/schema-check.ts
80
+ /**
81
+ * Reads a Drizzle schema object the way the adapter addresses it: each table
82
+ * by the key it is exported under, each column by its property name. Values
83
+ * that are not tables, such as relations, are skipped.
84
+ */
85
+ function introspectDrizzleSchema(schema) {
86
+ const tables = [];
87
+ for (const [name, table] of Object.entries(schema)) {
88
+ if (!is(table, Table)) continue;
89
+ const columns = Object.entries(getTableColumns(table)).map(([key, column]) => ({
90
+ name: key,
91
+ nullable: !column.notNull,
92
+ hasDefault: column.hasDefault || column.generated !== void 0 || column.generatedIdentity !== void 0
93
+ }));
94
+ tables.push({
95
+ name,
96
+ columns
97
+ });
98
+ }
99
+ return tables;
100
+ }
101
+ /**
102
+ * Compares a Drizzle schema object with the tables this configuration writes.
103
+ */
104
+ function findDrizzleSchemaProblems(schema, options, usePlural) {
105
+ return diffSchema(getExpectedSchema(options, { usePlural }), introspectDrizzleSchema(schema));
106
+ }
107
+ //#endregion
108
+ export { insensitiveInArray as a, buildRelationKeysByModel as c, insensitiveIlike as i, getOneToOneRelationKey as l, escapedLike as n, insensitiveNe as o, insensitiveEq as r, insensitiveNotInArray as s, findDrizzleSchemaProblems as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-auth/drizzle-adapter",
3
- "version": "1.7.3",
3
+ "version": "1.7.4",
4
4
  "bugs": {
5
5
  "url": "https://github.com/better-auth/better-auth/issues"
6
6
  },
@@ -45,7 +45,7 @@
45
45
  "peerDependencies": {
46
46
  "@better-auth/utils": "0.4.2",
47
47
  "drizzle-orm": "^0.45.2 || >=1.0.0-rc.1 <2.0.0",
48
- "@better-auth/core": "^1.7.3"
48
+ "@better-auth/core": "^1.7.4"
49
49
  },
50
50
  "peerDependenciesMeta": {
51
51
  "drizzle-orm": {
@@ -57,7 +57,7 @@
57
57
  "drizzle-orm": "^0.45.2",
58
58
  "tsdown": "0.21.10",
59
59
  "typescript": "^6.0.3",
60
- "@better-auth/core": "1.7.3"
60
+ "@better-auth/core": "1.7.4"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "tsdown",