driver.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { sql } from "@vercel/postgres";
  2. import { entityKind } from "../entity.js";
  3. import { DefaultLogger } from "../logger.js";
  4. import { PgDatabase } from "../pg-core/db.js";
  5. import { PgDialect } from "../pg-core/index.js";
  6. import {
  7. createTableRelationsHelpers,
  8. extractTablesRelationalConfig
  9. } from "../relations.js";
  10. import { isConfig } from "../utils.js";
  11. import { VercelPgSession } from "./session.js";
  12. class VercelPgDriver {
  13. constructor(client, dialect, options = {}) {
  14. this.client = client;
  15. this.dialect = dialect;
  16. this.options = options;
  17. }
  18. static [entityKind] = "VercelPgDriver";
  19. createSession(schema) {
  20. return new VercelPgSession(this.client, this.dialect, schema, {
  21. logger: this.options.logger,
  22. cache: this.options.cache
  23. });
  24. }
  25. }
  26. class VercelPgDatabase extends PgDatabase {
  27. static [entityKind] = "VercelPgDatabase";
  28. }
  29. function construct(client, config = {}) {
  30. const dialect = new PgDialect({ casing: config.casing });
  31. let logger;
  32. if (config.logger === true) {
  33. logger = new DefaultLogger();
  34. } else if (config.logger !== false) {
  35. logger = config.logger;
  36. }
  37. let schema;
  38. if (config.schema) {
  39. const tablesConfig = extractTablesRelationalConfig(
  40. config.schema,
  41. createTableRelationsHelpers
  42. );
  43. schema = {
  44. fullSchema: config.schema,
  45. schema: tablesConfig.tables,
  46. tableNamesMap: tablesConfig.tableNamesMap
  47. };
  48. }
  49. const driver = new VercelPgDriver(client, dialect, { logger, cache: config.cache });
  50. const session = driver.createSession(schema);
  51. const db = new VercelPgDatabase(dialect, session, schema);
  52. db.$client = client;
  53. db.$cache = config.cache;
  54. if (db.$cache) {
  55. db.$cache["invalidate"] = config.cache?.onMutate;
  56. }
  57. return db;
  58. }
  59. function drizzle(...params) {
  60. if (isConfig(params[0])) {
  61. const { client, ...drizzleConfig } = params[0];
  62. return construct(client ?? sql, drizzleConfig);
  63. }
  64. return construct(params[0] ?? sql, params[1]);
  65. }
  66. ((drizzle2) => {
  67. function mock(config) {
  68. return construct({}, config);
  69. }
  70. drizzle2.mock = mock;
  71. })(drizzle || (drizzle = {}));
  72. export {
  73. VercelPgDatabase,
  74. VercelPgDriver,
  75. drizzle
  76. };
  77. //# sourceMappingURL=driver.js.map